为什么我在 Apache Karaf 4.0.4 中得到 "is not a NamedXAResource"?
Why am I getting "is not a NamedXAResource" in Apache Karaf 4.0.4?
我有一些 transactional code 在旧版本的 Apache Karaf 中运行良好。现在在 Apache Karaf 4.0.4 中我看到了很多异常。
和
我找到了答案,post 把它放在这里是为了让其他人更快地解决同样的问题。我花了很长时间,在 Guillaume 的帮助下才弄明白。
在 Aries 事务管理器包内的 Apache Karaf 中使用的 geronimo 事务管理器可以恢复事务。默认情况下,此功能在较旧的 karaf 版本中处于关闭状态。在 Apache Karaf 4.0.4 中,这已经改变。
配置 etc/org.apache.aries.transaction.cfg 包含此设置
aries.transaction.recoverable = true
激活恢复支持。这样做的缺点是所有 jdbc 和 jms 连接都必须实现 NamedXAResource。这超出了标准,因此大多数 jdbc 和 jms 提供商不支持这一点。
ActiveMQ 的解决方案是使用 JCAPoolingConnectionFactory。对于 jdbc,您可以使用 aries 事务 jdbc 包装 XADataSource。它提供了也支持恢复的池化支持。
如果您对应用程序的工作方式感到满意,则可以简单地将上述开关设置回 false。然后事务将像在旧的 Apache Karaf 版本中一样工作。
我有一些 transactional code 在旧版本的 Apache Karaf 中运行良好。现在在 Apache Karaf 4.0.4 中我看到了很多异常。
和
我找到了答案,post 把它放在这里是为了让其他人更快地解决同样的问题。我花了很长时间,在 Guillaume 的帮助下才弄明白。
在 Aries 事务管理器包内的 Apache Karaf 中使用的 geronimo 事务管理器可以恢复事务。默认情况下,此功能在较旧的 karaf 版本中处于关闭状态。在 Apache Karaf 4.0.4 中,这已经改变。
配置 etc/org.apache.aries.transaction.cfg 包含此设置
aries.transaction.recoverable = true
激活恢复支持。这样做的缺点是所有 jdbc 和 jms 连接都必须实现 NamedXAResource。这超出了标准,因此大多数 jdbc 和 jms 提供商不支持这一点。
ActiveMQ 的解决方案是使用 JCAPoolingConnectionFactory。对于 jdbc,您可以使用 aries 事务 jdbc 包装 XADataSource。它提供了也支持恢复的池化支持。
如果您对应用程序的工作方式感到满意,则可以简单地将上述开关设置回 false。然后事务将像在旧的 Apache Karaf 版本中一样工作。