我正在尝试为Ignite Cache设置外部事务管理器,但是它发现Factory被忽略,create也没有被调用...工厂实现是:
public class TransactionManagerFactory implements Factory<TransactionManager> {
private static final long serialVersionUID = 1L;
private transient IgniteCache igniteCache;
public TransactionManagerFactory(IgniteCache igniteCache) {
this.igniteCache=igniteCache;
}
@Override
public TransactionManager create() {
return this.igniteCache.getTransactionManager();
}
}设置的Ignite事务客户端配置如下:
TransactionConfiguration txConfiguration=new TransactionConfiguration();
txConfiguration.setDeadlockTimeout(acquireTimeout);
txConfiguration.setDefaultTxIsolation(TransactionIsolation.READ_COMMITTED);
txConfiguration.setDefaultTxConcurrency(TransactionConcurrency.PESSIMISTIC);
TransactionManagerFactory txFactory=new TransactionManagerFactory(this);
txConfiguration.setTxManagerFactory(txFactory);
this.clientConfig.setTransactionConfiguration(txConfiguration); 缓存的创建方式为:
CacheConfiguration<Object, Object> cacheCfg = new CacheConfiguration<Object, Object>(this.name);
cacheCfg.setWriteSynchronizationMode(CacheWriteSynchronizationMode.FULL_SYNC);
cacheCfg.setAtomicityMode(CacheAtomicityMode.TRANSACTIONAL);
this.cache = this.instance.getOrCreateCache(cacheCfg);但是,当在测试中创建缓存并连接到远程节点,并且通过调用transactionManager.begin()创建事务时,instance.transactions().tx()返回null,而transactionManager.getTransaction()返回TransactionImpl{xid=Xid{formatId=1,transactionManager.getTransaction status=ACTIVE}
无论何时回滚事务,写入的项都会保存在缓存中。此外,TransactionManagerFactory.create在任何时候都不会执行。
如何正确地将外部事务管理器与ignite缓存集成?
BR玉莲Oifa
发布于 2021-02-05 23:31:49
我认为你需要将ignite-jta模块添加到你的项目中,这样Ignite才能使用事务管理器做任何事情。否则,将使用NoOp实现。
我不知道你想用你的瞬态IgniteCache逻辑做什么。反序列化后,它将为空,并且将发生NPE。
https://stackoverflow.com/questions/66065287
复制相似问题