我有一些transactional code在旧版本的Apache Karaf中运行得非常好。现在在Apache Karaf 4.0.4中我看到很多例外。
和
答案 0 :(得分:9)
我找到答案并在此发布,以便让其他人更快地解决同样的问题。我花了很长时间和Guillaume的一些帮助来解决这个问题。
Aries事务管理器包内的Apache Karaf中使用的geronimo事务管理器可以恢复事务。默认情况下,此功能在较旧的karaf版本中关闭。在Apache Karaf 4.0.4中,这已经发生了变化。
config etc / org.apache.aries.transaction.cfg包含此设置
aries.transaction.recoverable = true
它激活恢复支持。这样做的缺点是所有jdbc和jms Connections必须实现NamedXAResource。这超出了标准,因此大多数jdbc和jms提供程序都不支持此功能。
ActiveMQ的解决方案是使用JCAPoolingConnectionFactory。对于jdbc,您可以使用aries事务jdbc包装XADataSource。它提供了一个支持恢复的池化支持。
如果您对应用程序的工作方式感到满意,只需将上述开关设置为false即可。然后,交易将像旧的Apache Karaf版本一样工作。