Code
import java.rmi.RemoteException; import java.util.Enumeration; import java.util.Date; import javax.ejb.EJBException; import javax.ejb.SessionBean; import javax.ejb.SessionContext; import javax.ejb.CreateException; import javax.jms.JMSException; import javax.jms.Queue; import javax.jms.QueueBrowser; import javax.jms.QueueConnection; import javax.jms.QueueConnectionFactory; import javax.jms.QueueSession; import javax.jms.Connection; import javax.jms.Session; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; /** * Helper sessionbean to view the contents of a JMS queue. * * @ejb.bean name="JmsBrowser" * type="Stateless" * display-name="Jms Browser helpers" * jndi-name="ejb/JmsBrowser" * local-jndi-name="ejb/JmsBrowserLocal" * view-type="both" * * @ejb.transaction type = "Required" * * @ejb.util generate = "physical" * * @ejb.resource-ref res-ref-name = "jms/QueueConnectionFactory" * res-type = "javax.jms.QueueConnectionFactory" * res-auth = "Container" * @jboss.resource-ref res-ref-name = "jms/QueueConnectionFactory" * jndi-name = "java:/JmsXA" * */ public class JmsBrowserBean implements SessionBean { private static org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger(JmsBrowserBean.class.getName()); private transient QueueConnectionFactory queueConnectionFactory; /** * Creates a new queue browser. * @throws CreateException * * @ejb.create-method */ public void ejbCreate() throws CreateException { try { init(); } catch (NamingException e) { throw new CreateException("Could not create queue browser: "+e.getMessage()); } } /** * Returns an <code>Enumeration</code> that is used to scan the queue's messages. * * @param queue the queue to browse * @return Enumeration containing the messages on the queue. * @throws JMSException if an error occurs while establishing the connection with the JMS provider. * * @ejb.interface-method */ public Enumeration browseQueue(Queue queue) throws JMSException { return browseQueue(queue, null); } /** * Returns an <code>Enumeration</code> that is used to scan the queue's messages. * * @param queue the queue to browse * @param messageSelector the message selector to use * @return Enumeration containing the messages on the queue. * @throws JMSException if an error occurs while establishing the connection with the JMS provider. * * @ejb.interface-method */ public Enumeration browseQueue(Queue queue, String messageSelector) throws JMSException { QueueConnection connection = null; QueueSession session = null; QueueBrowser browser = null; Enumeration queueContents = null; try { connection = getConnection(); session = connection.createQueueSession(false, QueueSession.AUTO_ACKNOWLEDGE); if (messageSelector != null) { browser = session.createBrowser(queue, messageSelector); } else { browser = session.createBrowser(queue); } queueContents = browser.getEnumeration(); } finally { closeQueueBrowser(browser); closeSession(session); closeConnection(connection); } return queueContents; } /** * Returns a messages using the specified start date and end date. * @param queue the queue to browse * @param startDate the beginning date. If null no constraint is set on the start date * @param endDate the end date. If null, no constraint is set on the end date * @return an <code>Enumaration</code> of messages posted between <tt>startDate</tt> and <tt>endDate</tt> * @throws JMSException if an error occurs while establishing the connection with the JMS provider. * * @ejb.interface-method */ public Enumeration browseQueue(Queue queue, Date startDate, Date endDate) throws JMSException { // Let's build the selector String selector = null; if (startDate != null && endDate != null) { selector = "JMSTimestamp >= " + startDate.getTime() + " AND JMSTimestamp <=" + endDate.getTime(); } else if (startDate != null) { selector = "JMSTimestamp >= " + startDate.getTime(); } else if (endDate != null) { selector = "JMSTimestamp <=" + endDate.getTime(); } else { // no date is set selector = null; } return browseQueue(queue, selector); } /** * Closes the JMS connection. */ private void closeConnection(Connection connection) { try { if (connection != null) connection.close(); } catch (JMSException e) { logger.warn("Could not close JMS connection", e); } } /** * Closes the JMS session. */ private void closeSession(Session session) { try { if (session != null) session.close(); } catch (JMSException e) { logger.warn("Could not close JMS session", e); } } /** * Closes the JMS session. */ private void closeQueueBrowser(QueueBrowser queueBrowser) { try { if (queueBrowser!= null) queueBrowser.close(); } catch (JMSException e) { logger.warn("Could not close queue browser", e); } } protected QueueConnection getConnection() throws JMSException { return queueConnectionFactory.createQueueConnection(); } public void ejbActivate() throws EJBException, RemoteException { try { init(); } catch (NamingException e) { throw new EJBException("Could not activate queue browser: "+e.getMessage()); } } public void ejbPassivate() throws EJBException, RemoteException { } public void ejbRemove() throws EJBException, RemoteException { } public void setSessionContext(SessionContext arg0) throws EJBException, RemoteException { } private void init() throws NamingException { Context jndiContext = new InitialContext(); Context envContext = (Context) jndiContext.lookup("java:/comp/env"); queueConnectionFactory = (QueueConnectionFactory) envContext.lookup("jms/QueueConnectionFactory"); } }
Comments