我正在使用 glassfish 服务器并使用该 glassfish 服务器的 JMS 功能。
继续收到此错误消息:
MQJMSRA_DS4001:commit():非事务会话非法:sessionId
我收到此错误消息的原因是什么?
您收到该错误的原因是您的 Session is not transacted 。这意味着提交/回滚方法毫无意义。尝试在创建会话时将会话设置为已处理(例如 connection.createSession( true , Session.AUTO_ACKNOWLEDGE))。如果你不希望你的会话被处理,你应该从代码中删除提交/回滚,或者在执行之前检查一个全局变量。
您可以使用 TransactionAwareConnectionFactoryProxy。
配置不使用原始供应商提供的 ConnectionFactory,而是将 ConnectionFactory 包装在处理事务同步的装饰器中。这发生在 jms-context.xml 中,如下所示:-
<bean id="connectionFactory" class="org.springframework.jms.connection.TransactionAwareConnectionFactoryProxy">
<property name="targetConnectionFactory" ref="myCamelConnectionFactory"/>
</bean>
<jee:jndi-lookup id="myconnectionFactory" jndi-name="SoDConflictConnFactory"/>
这将删除警告消息:- MQJMSRA_DS4001