【发布时间】:2014-10-06 16:38:39
【问题描述】:
我正在尝试在由 tomee+ (v 1.7) 容器管理的 EBJ 中使用 JMS (activemq v 5.10)。 我也想使用JMS Transaction,这就是我遇到麻烦的地方...... 这是我的 EJB:
@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) {
...
}
}
当调用“commit”时,此 EJB 会导致非法状态异常:
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论坛找到答案:tomee-openejb.979440.n4.nabble.com/…
标签: transactions jms ejb-3.1 apache-tomee