【问题标题】:Hazelcast XATransaction with Bitronix Transaction ManagerHazelcast XATransaction 与 Bitronix 事务管理器
【发布时间】:2016-01-26 19:00:15
【问题描述】:

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

我已关注 Hazelcast 官方文档:

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

Libs 版本:

Hazelcast: 3.5.4

Bitronix Transaction Manager: 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

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

【问题讨论】:

    标签: java transactions hazelcast xa bitronix


    【解决方案1】:

    显然,Bitronix 需要在使用 XAResources 之前对其进行注册。 我在获得HazelcastXAResource 后添加了下面的行,它起作用了。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-17
      • 1970-01-01
      • 1970-01-01
      • 2015-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多