getting JMS running wasn’t as easy as I thought, but after some research I found out how to get as7 with included hornetq up and running. First copy the messaging part from standalone-preview.xml to standalone.xml. Then look for ejb3 configuration and set lite=”false” instead of true (default) as in light mode MDBs are not supported and don’t consume messages. Also copy messaging and messaging-throuput socket-bindings from the socket-binding-group part of the standalone-preview.xml.
Here you have a simple sender that can be invoced from a jsf-page and a consumer for the messages:
package at.coffeebeans.shop.controller; import javax.annotation.Resource; import javax.ejb.Stateless; import javax.inject.Inject; import javax.inject.Named; import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.JMSException; import javax.jms.MessageProducer; import javax.jms.Queue; import javax.jms.Session; import javax.jms.TextMessage; import org.jboss.solder.logging.Logger; /** * @author manuel * */ @Stateless @Named public class TestSender { // @Resource(lookup = "java:/ConnectionFactory") @Resource(lookup = "java:/JmsXA") private ConnectionFactory connectionFactory; @Resource(lookup = "java:/queue/test") private Queue testQueue; @Inject private Logger log; public String sendMessage() { Connection connection = null; Session session = null; try { log.debug("sending message"); connection = connectionFactory.createConnection(); session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); final MessageProducer publisher = session.createProducer(testQueue); final TextMessage message = session.createTextMessage("Hello"); publisher.send(message); log.debug("message sent"); } catch (final JMSException exc) { log.error(exc); } finally { try { if (null != session) { session.close(); } } catch (JMSException exc) { log.warn(exc); } try { if (null != connection) { connection.close(); } } catch (JMSException exc) { log.warn(exc); } } return "test"; } }
package at.coffeebeans.shop.mdb; import javax.ejb.ActivationConfigProperty; import javax.ejb.MessageDriven; import javax.inject.Inject; import javax.jms.JMSException; import javax.jms.Message; import javax.jms.MessageListener; import javax.jms.TextMessage; import org.jboss.solder.logging.Logger; /** * @author manuel */ @MessageDriven(name = "TestMessageConsumer", activationConfig = { @ActivationConfigProperty(propertyName = "destination", propertyValue = "java:/queue/test"), @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"), @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "AUTO_ACKNOWLEDGE") }) public class TestMessageConsumer implements MessageListener { @Inject private Logger log; @Override public void onMessage(final Message msg) { if (msg instanceof TextMessage) { final TextMessage tmp = (TextMessage) msg; try { log.debugf("received textmessage: %s", tmp.getText()); } catch (JMSException exc) { log.error(exc); } } else { log.warn("got unknown messagetype"); } } }