java - unable to receive messages from queue in jms -
i beginner jms , trying simple web app running produces , consumes messages. on welcome page have form text box , submit button. on submit text in text box wrapped in message , sent queue on server via messageproducer. understand, message should remain on queue until call receive method messageconsumer consumer linked queue. unfortunately on second jsp page click "get messages" button , received message turns null. pretty sure being sent (at least there no errors saying otherwise) there way check though? ideas on whats going wrong? in advance. heres producer/consumer code.
public class producer { private static final string connection_factory = "connectionfactory"; private static final string connection_queue = "jms/myqueue"; private static final string connection_topic = "jms/mytopic"; public producer(string message) { connectionfactory connectionfactory = null; connection connection = null; //get jndi context try { context jndicontext = new initialcontext(); //create connection factory , connection connectionfactory = (connectionfactory) jndicontext.lookup(producer.connection_factory); connection = connectionfactory.createconnection(); //create session session session = connection.createsession(false, session.auto_acknowledge); publishtoqueue(jndicontext, session, message); session.commit(); } catch (namingexception e) { } catch (jmsexception e) { }finally{ //close connection } } private void publishtoqueue(context jndicontext, session session, string message) throws namingexception, jmsexception{ //create queue queue queue = (queue) jndicontext.lookup(producer.connection_queue); //create message producer messageproducer producer = session.createproducer(queue); //send textmessage producer.setdeliverymode(deliverymode.persistent); textmessage textmessage = session.createtextmessage(); textmessage.settext(message); producer.send(textmessage); producer.close(); } } public class consumer { private static final string connection_factory = "connectionfactory"; private static final string connection_queue = "jms/myqueue"; private static final string connection_topic = "jms/mytopic"; private message message; public consumer() { connectionfactory connectionfactory = null; connection connection = null; //get jndi context try { context jndicontext = new initialcontext(); //create connection factory connectionfactory = (connectionfactory) jndicontext.lookup(consumer.connection_factory); connection = connectionfactory.createconnection(); //create session session session = connection.createsession(false, session.auto_acknowledge); //call methods retrieve message message = getfromqueue(jndicontext, session); session.commit(); if(message!=null){ system.out.println("message received"); } } catch (namingexception e) { // todo auto-generated catch block e.printstacktrace(); } catch (jmsexception e) { // todo auto-generated catch block e.printstacktrace(); }finally{ try { if(connection != null){ connection.close(); } } catch (jmsexception e) { e.printstacktrace(); } } } private message getfromqueue(context jndicontext, session session) throws namingexception, jmsexception{ //create new queue queue queue = (queue)jndicontext.lookup(consumer.connection_queue); //create message consumer messageconsumer consumer = session.createconsumer(queue); return consumer.receive(10000); } public message getmessage(){ return message; } }
sorry, found answer in question.. messageconsumer not consuming messages .. needed call connection.start() before getfromqueue method
public consumer() { connectionfactory connectionfactory = null; connection connection = null; //get jndi context try { context jndicontext = new initialcontext(); //create connection factory connectionfactory = (connectionfactory) jndicontext.lookup(consumer.connection_factory); connection = connectionfactory.createconnection(); //create session session session = connection.createsession(false, session.auto_acknowledge); //call methods retrieve message --> connection.start(); <-- message = getfromqueue(jndicontext, session); session.commit(); if(message!=null){ system.out.println("message received"); }
Comments
Post a Comment