This docs is for v0.2+
// 1
jms{ //require static import of groovy.jms.JMS.jms
// your jms code
}
// 2
def jms = new JMS(){
// your jms code
}
// and for further execution
jms.run{
// more jms code
}
// 3
def jms = new JMS()
jms.xxx ; // this is for using the Groovy Messaging Service API
jms.close() //must be closed manually if JMS code are not executed in the JMS Context♠
|
new JMS(){
// inside the execution context, where magics occur
}
import static groovy.jms.JMS.jms;
jms{
// inside the execution context, where magics occur
}
|
new JMS(){
println connection; // by default: ActiveMQConnection {id=ID:hostname-1212-1223775533432-2:0,clientId=ID:hostname-1212-1223775533432-3:0,started=false}
println session; // by default: ActiveMQSession {id=ID:hostname-1212-1223775533432-2:0:1,started=false}
}
|
def factory; //injected JMS ConnectionFactory
new JMS(){
def conn0 = factory.connect(), conn1 = connection
def session0 = factory.session(), session1 = connection.session()
}
|
def factory; //injected JMS ConnectionFactory
new JMS(){
def topic0 = factory.topic(), topic1 = connection.topic(), topic2 = session.topic()
def queue0 = factory.queue(), topic1 = connection.queue(), topic2 = session.queue()
}
|
topic.subscribe( subscriptionName:'x', messageSelector:'y', noLocal:true, durable:false) ; //by default, durable is true, subscriptionName is generated unique name, messageSelector is null, noLocal is false, durable is true |
"Hello world".publishTo "topics/test" [hello:'world'].publishTo "topics/test" "Hello world".sendTo "queue/test" [hello:'world'].sendTo "queue/test" Ideas: "abc".send() // send to the last used queue/topic ? allow user to configure a boolean to reverse the use of send() ? |
"topics/test".publish "Hello world"
"topics/test".publish [hello:'world']
"queue/test".send "Hello world"
"queue/test".send [hello:'world']
"queue/test".send( "Hello world", [replyTo:'queue/replyQueue'])
"topic/test".subscribe(){ println it.text }
"topic/test".subscribe(
//"topics/test".subscribe().with{ println it.text } // "topic".subscribe() [w/o closure] is a synonym of connection.topic()
"queue/test".receive() //to be implemented
"queue/test".receiveAll() //to be implemented
"queue/test".receiveAll( within:200.ms) //to be implemented
Message receivedMessage = "queue/test".recieve()
receivedMessage.reply "this is my answer"
|
subscribe("topics/test"){ println it.text }
//subscribe("topics/test").with{ println it.text } //synonym
def message = receive("queue/test")
def messages = receiveAll("queue/text")
//subscribeTo("topics/test").with{ println it.text } //subscribeTo is a synonym of connection.topic()
//receive("queue/test").with{} //receiveFrom is a synonym of connection.queue() , with is the default with{} in Groovy, it is optional
//def messages = receiveAllFrom("queue/test").with{ it } //receiveFrom is a synonym of connection.queue().receiveAll()
//receiveAllFrom("queue/test").each{ } //directly use the iterator
//other Ideas, using map
send 'toTopic':'topic/test', 'message',[key:'value'], 'from':'fromclient'
|
Groovy SQL |
Possible JMS Usage |
Remarks/Comment |
|---|---|---|
Sql.newInstance() |
JMS.newInstance(jmsConnectionFactory) |
or just use new JMS() |
sql.eachRow |
jms.eachMessage("myQueue"){m-> } |
jms.reply() could be used inside the closure |
sql.firstRow |
jms.firstMessage("myQueue") { println it.text |
jms.onMessage(topic:"mytopic"){ m -> } |
sql.execute() |
def result = jms.receive( fromQueue:'myQueue', within:1000) |
fromTopic and fromQueue could be used together |
sql.executeUpdate() |
jms.send( toTopic:'myTopic', message:[key:value], replyTo:'') |
toTopic and toQueue could be used together |
To use GroovyJMS, you need to decide which JMS implementation you'll use. There are several options:
new JMS(){
// your jms code
}
|
JMS.provider = { return new ActiveMQConnectionFactory("vm://localhost") } as JMSProvider
|
def myConnection; //injected
new JMS( myConnection ){
// your jms code
}
// OR
def myConnectionFactory; //injected
new JMS( myConnectionFactory){
// your jms code
}
|
def jms = JMS.newInstance() jms.setAutoClose(false) JMS.close() |
def jms = new JMS(){
jms.setAutoClose(false)
// your jms code
}
|
use(JMSCategory){
jms.session() ; // notice that you need to establish a session before doing anything with JMSCategory
"queue".send("message")
assertNotNull("queue".receive(waitTime:100))
}
|
def connFactory, conn
new JMS(conn){
// outer JMS code
new JMS(conn){
// inner JMS code
}
//exception may be thrown at the end as the connection is closed
}
|