Simple JMS Queue Question
sanjewad Aug 19, 2003 12:09 AMHi
I am using Jboss 3.2 and I have deployed a Basic JMS example.
I have noticed both my QueueConnection Factory and Queue lokk up work fine.
But When I run the Cleint I don't get a response from MDB. Can anybody say why?
---------------------------
Here is the complete code.
Client code
-------------------
QueueConnection connection = null;
QueueSession session = null;
try
{
Context ctx =new InitialContext();
log.info("Looking up connection");
QueueConnectionFactory conFactory = (QueueConnectionFactory) ctx.lookup("ConnectionFactory");
connection = (QueueConnection) conFactory.createQueueConnection();
log.info("Looking up queue");
Queue queue = (Queue) ctx.lookup("queue/testQueue");
log.info("Creating session");
session = connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
log.info("Creating message");
TextMessage message = session.createTextMessage(msg);
log.info("Creating sender");
QueueSender sender = session.createSender(queue);
log.info("Sending message");
sender.send(queue, message);
log.info("Closing sender");
// connection.start();
/* sender.close();
connection.start();
QueueReceiver receiver = session.createReceiver(queue);
System.out.print("Received Message is :" + receiver.receive());
log.info("Done");
connection.close();
*/
}
catch(JMSException je){}
catch(NamingException ne){}
finally
{
try {if (session!= null)
session.close();
if (connection != null)
connection.close();
}
catch(JMSException je){}
}
Message Driven Bean Code
-------------------------------------
public class TestMDBBean implements javax.ejb.MessageDrivenBean, javax.jms.MessageListener {
MessageDrivenContext ctx;
public void onMessage(Message message)
{
TextMessage msg =null;
try {
if (message instanceof TextMessage){
msg =(TextMessage)message;
System.out.println("MESSAGE BEAN:Message "+"received:"+msg.getText());
}else
{
System.out.println("Message of wrong type:"+ message.getClass().getName());
}
}catch (JMSException e){
System.err.println("MessageBean.onMessage:"+"JMSException:"+e.toString());
ctx.setRollbackOnly();
}catch (Throwable te){
System.err.println("MessageBean.onMessage:"+"Exception:"+te.toString());
}
/*
System.out.println("This is MDB:"+message);
try{
InitialContext ctx = new InitialContext();
LocalCartHome cartHome = (LocalCartHome)ctx.lookup("Cart");
LocalCart cart = cartHome.create();
cart.setMessage(message.toString());
}catch (Exception e) {
throw new EJBException(e);
}
*/
}
public void ejbCreate()
{
}
public void ejbRemove()
{
}
public void setMessageDrivenContext(MessageDrivenContext ctx)
{
this.ctx = ctx;
// this.onMessage(msg);
}
}
----------------------------------
ejb-jar.xml code
-------------
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "http://java.sun.com/dtd/ejb-jar_2_0.dtd">
<ejb-jar>
<display-name>EJBModule_TestMDB</display-name>
<enterprise-beans>
<message-driven>
<display-name>TestMDB</display-name>
<ejb-name>TestMDB</ejb-name>
<ejb-class>first.TestMDBBean</ejb-class>
<transaction-type>Container</transaction-type>
<message-driven-destination>
<destination-type>javax.jms.Queue</destination-type>
</message-driven-destination>
</message-driven>
</enterprise-beans>
<assembly-descriptor>
<container-transaction>
This value was set as a default by Sun ONE Studio.
<ejb-name>TestMDB</ejb-name>
<method-name>*</method-name>
<trans-attribute>NotSupported</trans-attribute>
</container-transaction>
</assembly-descriptor>
</ejb-jar>
------------------------------
jboss.xml
---------------------
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE jboss PUBLIC "-//JBoss//DTD JBOSS//EN" "http://www.jboss.org/j2ee/dtd/jboss.dtd">
<enterprise-beans>
<message-driven>
<ejb-name>TestMDB</ejb-name>
<destination-jndi-name>queue/testQueue</destination-jndi-name>
</message-driven>
</enterprise-beans>
-----------------------------
Output from the Application Server
--------------------------
12:01:41,531 INFO [STDOUT] Looking up connection
12:01:41,609 INFO [STDOUT] Looking up queue
12:01:41,625 INFO [STDOUT] Creating session
12:01:41,625 INFO [STDOUT] Creating message
12:01:41,625 INFO [STDOUT] Creating sender
12:01:41,625 INFO [STDOUT] Sending message
12:01:41,640 INFO [STDOUT] Closing sender
------------------------------
This is only the client output.
How do I know it is delivered to my MDB because I don't get any response from Message Driven Bean.
Am I making a silly mistake?