Java 我可以在WebSphere中设置非事务性JMS连接工厂吗?
工厂将基于默认的消息传递提供程序 这样做的原因是我有一个模拟MDB来代替外部系统,通常通过WebSphereMQ连接。模拟和测试的应用程序安装在同一台服务器上,因此我需要确保Java 我可以在WebSphere中设置非事务性JMS连接工厂吗?,java,jms,websphere,Java,Jms,Websphere,工厂将基于默认的消息传递提供程序 这样做的原因是我有一个模拟MDB来代替外部系统,通常通过WebSphereMQ连接。模拟和测试的应用程序安装在同一台服务器上,因此我需要确保 request -> mock listener -> mock reply -> response 请求和回复是两个独立的事务 我在控制台中看不到任何将工厂从事务管理器的监督中删除的选项。您不能从ejb-jar.xml中执行此操作吗 <enterprise-beans> <m
request -> mock listener -> mock reply -> response
请求
和回复
是两个独立的事务
我在控制台中看不到任何将工厂从事务管理器的监督中删除的选项。您不能从ejb-jar.xml中执行此操作吗
<enterprise-beans>
<message-driven id="MDB">
<ejb-name>MDB</ejb-name>
<ejb-class>com.myapp.listener.MDB</ejb-class>
<messaging-type>javax.jms.MessageListener</messaging-type>
<transaction-type>Container</transaction-type>
<message-destination-type>javax.jms.Queue</message-destination-type>
</message-driven>
</enterprise-beans>
<assembly-descriptor>
<container-transaction>
<method>
<ejb-name>MDB</ejb-name>
<method-name>onMessage</method-name>
<method-params>
<method-param>javax.jms.Message</method-param>
</method-params>
</method>
<trans-attribute>Never</trans-attribute>
</container-transaction>
</assembly-descriptor>
MDB
com.myapp.listener.MDB
javax.jms.MessageListener
容器
javax.jms.Queue
MDB
onMessage
javax.jms.Message
从未
您的观察是正确的,JMS连接工厂无法配置为不登记到当前事务中。我有点不确定您在这里想要实现什么,但我将做出以下假设:
另一个解决方案是使用RequiresNew在一个EJB方法中发送,使用RequiresNew在另一个EJB方法中接收。然后,客户端调用发送EJB方法,然后调用接收EJB方法,每个方法都有自己的事务。这甚至不接近连接工厂-它定义了一个MDB并给它一个事务属性。在应用服务器中创建ConnectionFactory资源是另一回事。谢谢。您的假设非常接近,只是没有EJB,而是Spring的DefaultMessageListenerContainers,所以接近MDB。我已经尝试了您的解决方案,不幸的是,我仍然无法摆脱封闭的事务。过几天我会再打给你。我决定问另一个问题: