我正在使用WebSphere 8.5与EJB 3.1和JMS通用提供程序。与XA的JMS会话和JPA事务
我需要使用无状态会话bean作为生产者在队列中编写消息。 EJB由TransactionAttributeType.REQUIRED
注解,因为在我发送队列中的消息之前需要执行一些“DB插入”,并使用这些消息读取由制作者编写的记录。
问题是如果我定义一个JDBC非XA数据源,生产者将消息写入队列,但服务器抱怨本地资源(数据源本身我认为)失败的2阶段提交,并且没有调用MDB的onMessage
方法。如果我定义一个JDBC XA,一切正常。
我的问题:
- 是一个默认的XA资源所需的JMS会话?为什么?
- 如果我将JMS连接工厂配置为在JTA事务中创建非XA JMS会话,会发生什么情况?这是一种不好的做法吗?
- 如果消费者开始消费消息,而生产者仍在数据库上完成操作,会发生什么?消费者是否会看到数据库上的更改,因为它们处于同一事务中?
在此先感谢,认为