I had to give jboss messaging a go to. Hmm doesn’t look that difficult either. Now a simple MessageDrivenBean and I’m in business.
The Sender:
import java.util.Properties; import javax.jms.Queue; import javax.jms.QueueConnection; import javax.jms.QueueConnectionFactory; import javax.jms.QueueSender; import javax.jms.QueueSession; import javax.jms.Session; import javax.jms.TextMessage; import javax.naming.Context; import javax.naming.InitialContext; public class JbossJmsTest { public static void main(String[] args) throws Exception { log.info("Creating jndi context - alternatively use a jndi.properties"); Properties properties = new Properties(); properties.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory"); properties.put(Context.URL_PKG_PREFIXES, "org.jnp.interfaces"); properties.put(Context.PROVIDER_URL, "localhost"); InitialContext ctx = new InitialContext(properties); log.info("Looking up queue"); Queue queue = (Queue) ctx.lookup("queue/testQueue"); log.info("Looking up connection factory"); QueueConnectionFactory qcf = (QueueConnectionFactory) ctx.lookup("UIL2ConnectionFactory"); log.info("Creating connection"); QueueConnection qc = qcf.createQueueConnection(); try { log.info("Creating session"); QueueSession qs = qc.createQueueSession(false, Session.AUTO_ACKNOWLEDGE); log.info("Creating sender"); QueueSender sender = qs.createSender(queue); log.info("Creating message"); TextMessage message = qs.createTextMessage("hello"); log.info("Sending message"); sender.send(message); } finally { qc.close(); } } public static class log { public static void info(String message) { System.out.println(message); } public static void error(String message, Throwable t) { System.err.println(message); t.printStackTrace(); } } }
The receiver
import java.util.Properties; import javax.jms.Message; import javax.jms.Queue; import javax.jms.QueueConnection; import javax.jms.QueueConnectionFactory; import javax.jms.QueueReceiver; import javax.jms.QueueSender; import javax.jms.QueueSession; import javax.jms.Session; import javax.jms.TextMessage; import javax.naming.Context; import javax.naming.InitialContext; public class JbossJmsReceiver { public static void main(String[] args) throws Exception { log.info("Creating jndi context - alternatively use a jndi.properties"); Properties properties = new Properties(); properties.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory"); properties.put(Context.URL_PKG_PREFIXES, "org.jnp.interfaces"); properties.put(Context.PROVIDER_URL, "localhost"); InitialContext ctx = new InitialContext(properties); log.info("Looking up queue"); Queue queue = (Queue) ctx.lookup("queue/testQueue"); log.info("Looking up connection factory"); QueueConnectionFactory qcf = (QueueConnectionFactory) ctx.lookup("UIL2ConnectionFactory"); log.info("Creating connection"); QueueConnection qc = qcf.createQueueConnection(); try { log.info("Creating session"); QueueSession qs = qc.createQueueSession(false, Session.DUPS_OK_ACKNOWLEDGE); log.info("Creating receiver"); QueueReceiver receiver = qs.createReceiver(queue); log.info("Try to receive message, it will not work"); while(true){ Message received = receiver.receiveNoWait(); /*if (received != null) throw new RuntimeException("Should not get a message if the connection is not started!");*/ //log.info("You have to start the connection before receiving messages"); qc.start(); //log.info("This receive will work"); received = receiver.receiveNoWait(); if(received!=null){ log.info("Got message: " + received); } } } finally { qc.close(); } } public static class log { public static void info(String message) { System.out.println(message); } public static void error(String message, Throwable t) { System.err.println(message); t.printStackTrace(); } } }
this is almost the identic code of the jboss site only problem is finding it. It seems jboss has changed the jms server. I’m using jboss-4.0.3SP1 and somewhere they have changed JbossMQ to JBossMessaging or something. I still have to get the details but first things first getting some code working 🙂