Jboss messaging

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 🙂

Leave a Reply