0
我试图在EBJ内部使用JMS(activemq v 5.10),由tomee +(v 1.7)容器管理。 我也想使用JMS事务,而这也正是我有麻烦...... 这是我的EJB:EJB 3 + JMS和事务
@Singleton
@Remote(value = JmsSender.class)
public class EJBJmsSender implements JmsSender, ExceptionListener {
@Resource
private ConnectionFactory connectionFactory;
private QueueConnection connection;
public void sendMessage(String Queue, String contenuMessage)
throws ExceptionTechniqueApiJms {
InitialContext ctx = null;
Queue queueduService = null;
Connection queueConn = null;
try {
// get the initial context
ctx = new InitialContext();
// lookup the queue object
queueduService = (Queue) ctx.lookup(Queue);
} catch (NamingException e) {
...
}
Session queueSession = null;
try {
// create a queue connections
queueConn = connectionFactory.createConnection();
queueConn.start();
queueConn.setExceptionListener(this);
// create a transacted queue session
queueSession = queueConn.createSession(true,0);
// create a queue sender
MessageProducer queueSender = queueSession
.createProducer(queueduService);
queueSender.setDeliveryMode(DeliveryMode.PERSISTENT);
TextMessage message = queueSession
.createTextMessage(contenuMessage);
queueSender.send(message);
queueSession.commit();
} catch (Exception e) {
...
} finally {
try {
if (queueConn != null) {
queueConn.close();
}
} catch (JMSException e) {
...
}
}
这个EJB原因一个IllegalStateException当“提交”被称为:
javax.jms.IllegalStateException: Not a transacted session
at org.apache.activemq.ActiveMQSession.commit(ActiveMQSession.java:569)
at org.apache.activemq.ra.ManagedSessionProxy.commit(ManagedSessionProxy.java:108)
...
如何在我的EJB中使用JMS“事务会话”?
什么奇怪的是,JMS消息被提前发和可以食用...
感谢
克莱门特
你可以在tomee论坛找到答案:http://tomee-openejb.979440.n4.nabble.com/Activemq-embedded-createSession-unable-to-make-it-work-td4672172.html – 2014-11-25 09:05:20