Transactions Hazelcast地图存储和事务

Transactions Hazelcast地图存储和事务,transactions,hazelcast,Transactions,Hazelcast,Hazelcast的文档说明MapStore/QueueStore不参与事务。 我在想,你通常是如何处理这个问题的?您是否承认在提交阶段保留值期间可能会发生一些潜在的不好情况,并决定忽略它,或者您是否为该特定问题实施了解决方案 我理解问题本身背后的风险,只是试图了解有哪些选项可以缓解它 另外,如果有人真的认为它是一个重要的优先事项,那么如果您可以共享一些代码,这将是一个完美的例子 谢谢, 康拉德根据 如果需要跨越Hazelcast操作和一个或多个其他XAResources(如数据库)的XATra

Hazelcast的文档说明MapStore/QueueStore不参与事务。 我在想,你通常是如何处理这个问题的?您是否承认在提交阶段保留值期间可能会发生一些潜在的不好情况,并决定忽略它,或者您是否为该特定问题实施了解决方案

我理解问题本身背后的风险,只是试图了解有哪些选项可以缓解它

另外,如果有人真的认为它是一个重要的优先事项,那么如果您可以共享一些代码,这将是一个完美的例子

谢谢,
康拉德

根据

如果需要跨越Hazelcast操作和一个或多个其他XAResources(如数据库)的XATransaction,则不应使用MapStore。相反,在事务中登记这两种资源

这是来自javaDoc的一个示例片段,可以为您提供一些实现所需解决方案的想法

HazelcastInstanceclient=HazelcastClient.newHazelcastClient();

UserTransactionManagertm=newUserTransactionManager();
tm.setTransactionTimeout(60);
tm.begin();


HazelcastXAResourcexaResource=client.getXAResource();
Transactiontransaction=tm.getTransaction();
transaction.enlistResource(xaResource);

//you can enlist more resources here like a database XAResource
try{
TransactionContextcontext=xaResource.getTransactionContext()
TransactionalMapmap=context.getMap("map");
map.put("key","value");
final TransactionalQueue queue=context.getQueue("queue");
queue.offer("item");

//you can do other resource operations like store/delete to a database

transaction.delistResource(xaResource,XAResource.TMSUCCESS);
tm.commit();
}catch(Throwablet){
t.printStackTrace();
transaction.delistResource(xaResource,XAResource.TMFAIL);
tm.rollback();
}