gpt4 book ai didi

java - Hazelcast XATransaction 与 Bitronix 事务管理器

转载 作者:行者123 更新时间:2023-11-30 07:38:33 24 4
gpt4 key购买 nike

我正在使用 Hazelcast XA Transactions 进行一些测试,但在使用 Bitronix 作为事务管理器时遇到了问题。

我遵循了 Hazelcast 官方文档:

http://docs.hazelcast.org/docs/3.5/manual/html/xatransactions.html

库版本:

Hazelcast:3.5.4

Bitronix 事务管理器:2.1.4

Java:1.7

代码:

测试方法:

@Test
public void hazelcastBitronixXATransactionTest() throws Exception{
try{
doHazelcastXATransactionTest(createInstance("myCluster"));
}catch(Exception e){
Assert.fail();
System.out.println("Other Exception:" + e.getMessage());
}
}

Hazelcast实例创建方法:

private HazelcastInstance createInstance(String clusterName){
System.setProperty("hazelcast.logging.type", "slf4j");

Config config = new Config();
config.getGroupConfig().setName(clusterName);
config.getNetworkConfig().getJoin().getMulticastConfig().setEnabled(true);

TcpIpConfig tcpIpConfig = config.getNetworkConfig().getJoin().getTcpIpConfig();
tcpIpConfig.setEnabled(false);

return Hazelcast.newHazelcastInstance(config);
}

执行方法:

private void doHazelcastXATransactionTest(HazelcastInstance hazelcastInstance) throws Exception{
BitronixTransactionManager btm = TransactionManagerServices.getTransactionManager();
btm.setTransactionTimeout(60);
btm.begin();

HazelcastXAResource xaResource = hazelcastInstance.getXAResource();

Transaction transaction = btm.getTransaction();
transaction.enlistResource(xaResource);

try {
TransactionContext context = xaResource.getTransactionContext();
TransactionalMap map = context.getMap("m");
map.put("key", "value");

transaction.delistResource(xaResource, XAResource.TMSUCCESS);

btm.commit();
} catch (Exception e) {
System.out.println("Exception do rollback:" + e.getMessage());
btm.rollback();
}
}

我收到一个 BitronixSystemException,是在尝试登记 XA 资源 transaction.enlistResource(xaResource) 时引发的。

完整的堆栈跟踪:

bitronix.tm.internal.BitronixSystemException: unknown XAResource HazelcastXaResource {myCluster}, it does not belong to a registered resource

有人遇到过这个问题吗?有什么线索吗?

最佳答案

显然 Bitronix 需要在使用 XAResources 之前注册它们。在获取 HazelcastXAResource 后,我添加了以下行并且它起作用了。

EhCacheXAResourceProducer.registerXAResource(xaResource.getName(), xaResource);

关于java - Hazelcast XATransaction 与 Bitronix 事务管理器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35021718/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com