2016-01-26 8 views
1

Я делаю некоторые тесты с транзакциями Hazelcast XA, и у меня возникают проблемы при использовании Bitronix в качестве Менеджера транзакций.Hazelcast XATransaction с Менеджером транзакций 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).

Полный StackTrace:

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

Кто-то сталкивались с этой проблемой? Какие-нибудь подсказки по этому поводу?

ответ

1

По-видимому, для использования их необходимо зарегистрировать XAResources. Я добавил ниже строки после получения HazelcastXAResource, и это сработало.

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