Session EJB JMS Listener Example

package test.jms;

import java.util.Date;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.Queue;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
import javax.jms.QueueReceiver;
import javax.jms.QueueSession;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

/**
 * Bean implementation class for Enterprise Bean: JMSReceiver
 */
public class JMSReceiverBean implements javax.ejb.SessionBean
{

  private final String queueName = "jms/Q1";
  private Context jndiContext = null;
  private QueueConnectionFactory queueConnectionFactory = null;
  private QueueConnection queueConnection = null;
  private QueueSession queueSession = null;
  private Queue queue = null;
  private QueueReceiver queueReceiver = null;

  private javax.ejb.SessionContext mySessionCtx;
  /**
   * getSessionContext
   */
  public javax.ejb.SessionContext getSessionContext()
  {
    return mySessionCtx;
  }
  /**
   * setSessionContext
   */
  public void setSessionContext(javax.ejb.SessionContext ctx)
  {
    mySessionCtx = ctx;
  }
  /**
   * ejbActivate
   */
  public void ejbActivate()
  {}
  /**
   * ejbCreate
   */
  public void ejbCreate() throws javax.ejb.CreateException
  {
    System.out.println("JMSReceiver ejbCreate");
    try
    {
      jndiContext = new InitialContext();
      queueConnectionFactory = (QueueConnectionFactory) jndiContext.lookup("jms/QCF");
      queue = (Queue) jndiContext.lookup(queueName);
      queueConnection = queueConnectionFactory.createQueueConnection();
      queueSession = queueConnection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
      queueReceiver = queueSession.createReceiver(queue);
      queueConnection.start();
    }
    catch (NamingException e)
    {
      System.out.println(e.toString());
    }
    catch (JMSException e)
    {
      System.out.println(e.toString());
    }
    catch (Throwable e)
    {
      System.out.println(e.toString());
    }
  }
  /**
   * ejbPassivate
   */
  public void ejbPassivate()
  {}
  /**
   * ejbRemove
   */
  public void ejbRemove()
  {
    System.out.println("JMSReceiver ejbRemove");
    if (queueConnection != null)
    {
      try
      {
        queueConnection.close();
      }
      catch (JMSException e)
      {}
    }
  }

  public void receiveMessages()
  {

    boolean bReceive = true;
    System.out.println("Receiver ready (send ! to stop)...");
          
    try
    {
      while( bReceive)
      {
        Message m = queueReceiver.receive();
        if (m != null)
        {
          if (m instanceof TextMessage)
          {
            TextMessage message = message = (TextMessage) m;
            Date timeStamp = new Date(message.getJMSTimestamp());
            System.out.println("Received message: [" + timeStamp + "][" + message.getText() + "]");
            bReceive = !message.getText().equals("!"); 
          }
          else
          {
            System.out.println("received null message");
          }
        }
      }
      System.out.println("Receiver stopped...");
           
    }
    catch (JMSException e)
    {
      System.out.println(e.toString());
    }
    catch (Throwable e)
    {
      System.out.println(e.toString());
    }
  }
}