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");
}
}
}