Java EE 中的 JMS 和 JTA 事务

标签 jms ejb jta message-driven-bean

我认为我在 JMS 和 JTA 方面没有得到正确的结果。我正在具有所有 CMT 的 Java EE 容器中运行。这是我正在做的事情:

  1. 在 SLSB 中,向数据库写入一些内容
  2. 使用与 SLSB 相同的方法,将消息发布到 JMS 队列
  3. 同一容器中的 MDB 监听 JMS 队列并获取消息
  4. MDB读取数据库

问题是,MDB 看不到看到步骤 1 中对数据库所做的更改。

我验证了步骤 1 和 2 发生在单个 XA 事务内,正如预期的那样。我的期望是,在第一个 XA 提交后,第二个 XA 事务将在步骤 3 开始。但 MDB 似乎是在提交消息的 XA 事务提交之前接收到消息的。

我的期望是否错误,而我所看到的却是正常的?

我在 JBoss 6 下运行。SLSB 是本地的。 SLSB 和 MDB 都在同一个应用程序中。

最佳答案

我发现问题了!我的 JMS 连接工厂不支持 XA。我在/XAConnectionFactory 中查找了我的 JMS 连接工厂。尽管有这个名称,但在 JBoss 中查找常规应用程序的资源是错误的。还有一个 java:/XAConnectionFactory ,它也不起作用。正确的资源名称是java:/JmsXA。我使用了它,一切都按预期工作。

感谢@strmqm将我推向正确的方向。

关于Java EE 中的 JMS 和 JTA 事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7062242/

相关文章:

jms - 从 Camel Route 向 Weblogic JMS 队列发送消息

Java EJB 接口(interface)

jakarta-ee - 如果有异步方法仍在运行,无状态 session 是否会被另一个线程使用?

jakarta-ee - 单个 JTA 事务中的多个 XA 数据源

hibernate - javax.persistence.PersistenceException - JPA+ hibernate

java - 如何使用 Java 验证 JMS 队列是否存在?

java - 是否有更有效的方法来为 JMS 创建大量消息使用者列表?

java - 设置HornetQ Embedded-Remote示例

interface - 用于远程客户端的 Intellij Idea EJB 库

java - 如何确定WebSphere应用程序是否真的在进行XA事务?