【发布时间】:2016-03-04 01:56:30
【问题描述】:
我正在尝试从一个简单的无状态 EJB 发送/生成 JMS 消息。为此,我使用 CDI 生成和注入 JMS 资源(ConnectionFactory、Connection 和 Session)。与Weld doc - JavaEE integration, JMS enpoints 中的描述完全相同。
关键是如果我将 JMS 会话生成为trasacted,则我的 EJB 不会发送(或提交)消息。不会发生错误。
CDI 资源生产者:
@Produces
@ItemQualifier
public Session createJMSSession(@ItemQualifier Connection connection) throws JMSException {
return connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
}
EJB JMS 生产者方法:
public void pushItem(Item newItem) throws Exception {
log.info("Sending " + newItem.getDescricao());
log.info("Session Transacted? " + mineracaoSession.getTransacted());
ObjectMessage message = session.createObjectMessage();
message.setObject(newItem);
producer.send(message);
log.info("Message sent!");
}
如果我更改 Producer 方法以创建非事务 JMS 会话,则消息将正常发送(提交)。
我想了解当 JMS 会话为 transacted 时,为什么我的 EJB 不发送/提交消息。默认情况下,所有 EJB 方法都是事务处理的,对吗?
【问题讨论】:
-
只是好奇,你用的是什么EE版本?如果您使用的是 EE 7,则可能需要使用新的简化 JMS 接口。
-
我在 JBossAS 7 上使用 JavaEE 6
标签: jakarta-ee jms cdi