package com.googlecode.mycontainer.jms; import static org.junit.Assert.assertEquals; import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.Destination; import javax.jms.JMSException; import javax.jms.Message; import javax.jms.MessageConsumer; import javax.jms.MessageListener; import javax.jms.MessageProducer; import javax.jms.Queue; import javax.jms.QueueConnectionFactory; import javax.jms.Session; import javax.jms.TextMessage; import javax.jms.Topic; import javax.naming.InitialContext; import javax.naming.NamingException; import org.junit.After; import org.junit.Before; import org.junit.Test; import com.googlecode.mycontainer.ejb.SessionInterceptorDeployer; import com.googlecode.mycontainer.ejb.StatelessDeployer; import com.googlecode.mycontainer.jta.MyTransactionManagerDeployer; import com.googlecode.mycontainer.kernel.ShutdownCommand; import com.googlecode.mycontainer.kernel.boot.ContainerBuilder; import com.googlecode.mycontainer.kernel.naming.MyNameParser; public class JMSDeployerTest { private static final org.slf4j.Logger LOG = org.slf4j.LoggerFactory.getLogger(JMSDeployerTest.class); private class MyListener implements MessageListener { private String msg = null; public void onMessage(Message message) { TextMessage text = (TextMessage) message; try { this.msg = text.getText(); Destination replyTo = text.getJMSReplyTo(); MessageProducer producer = session.createProducer(replyTo); producer.send(session.createMessage()); } catch (JMSException e) { throw new RuntimeException(e); } } public String getMsg() { return msg; } }; private InitialContext ctx; private Connection conn; private Session session; private Queue queue; private Topic topic; private ConnectionFactory connectionFactory; private TesterService service; @Before public void bootMycontainer() throws Exception { ContainerBuilder builder = new ContainerBuilder(); SessionInterceptorDeployer sessionInterceptorDeployer = builder.createDeployer(SessionInterceptorDeployer.class); sessionInterceptorDeployer.deploy(); builder.createDeployer(MyTransactionManagerDeployer.class).setName("TransactionManager").deploy(); JMSDeployer jmsDeployer = builder.createDeployer(JMSDeployer.class); jmsDeployer.createQueue("queueRaoni"); jmsDeployer.createTopic("topicRaoni"); jmsDeployer.deploy(); StatelessDeployer statelessDeployer = builder.createDeployer(StatelessDeployer.class); statelessDeployer.deploy(TesterServiceBean.class); ctx = builder.getContext(); connectionFactory = (QueueConnectionFactory) ctx.lookup(MyNameParser.parseClassName("resource", ConnectionFactory.class)); queue = (Queue) ctx.lookup("queue/queueRaoni"); topic = (Topic) ctx.lookup("topic/topicRaoni"); conn = connectionFactory.createConnection(); session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE); service = (TesterService) ctx.lookup(MyNameParser.parseClassName("ejb", TesterService.class)); } @Test public void testCreateProducer() throws NamingException, JMSException { String msg = "Test"; MyListener listener = new MyListener(); MessageConsumer consumer = session.createConsumer(queue); consumer.setMessageListener(listener); conn.start(); service.sendMsg(msg); assertEquals(msg, listener.getMsg()); } @Test public void testCreateTopicProducer() throws NamingException, JMSException { String msg = "Test"; MyListener listener = new MyListener(); MessageConsumer consumer = session.createConsumer(topic); consumer.setMessageListener(listener); conn.start(); service.sendMsgToTopic(msg); assertEquals(msg, listener.getMsg()); } private void close(Connection conn) { try { if (conn != null) { conn.close(); } } catch (JMSException e) { LOG.error("Error closing jms connection", e); } } private void close(Session session) { try { if (session != null) { session.close(); } } catch (JMSException e) { LOG.error("Error closing jms session", e); } } @After public void shutdown() { close(session); close(conn); try { ShutdownCommand shutdown = new ShutdownCommand(); shutdown.setContext(new InitialContext()); shutdown.shutdown(); } catch (Exception e) { LOG.error("Error shutdown", e); } } }