【发布时间】:2015-01-20 23:16:42
【问题描述】:
我将 WebSphere 8.5 与 EJB 3.1 和 JMS 通用提供程序一起使用。
我需要使用无状态会话 bean 作为生产者在队列中写入消息。 EJB 使用TransactionAttributeType.REQUIRED 进行注释,因为我需要在将消息发送到队列并使用这些消息读取生产者写入的记录之前执行一些“数据库插入”。
问题是,如果我定义了一个 JDBC 非 XA 数据源,生产者将消息写入队列,但服务器抱怨本地资源的第 2 阶段提交失败(我认为是数据源本身)并且不调用onMessage MDB 的方法。如果我定义 JDBC XA 一切正常。
我的问题:
- JMS 会话是否需要成为默认 XA 资源?为什么?
- 如果我将 JMS 连接工厂配置为在 JTA 事务中创建非 XA JMS 会话,会发生什么情况?这是一种不好的做法吗?
- 如果消费者开始消费消息,而生产者仍在完成对数据库的操作,会发生什么情况?消费者会因为它们在同一个事务中而看到数据库的变化吗?
提前致谢,问候
【问题讨论】:
标签: ejb jms jta websphere-8 xa