点燃工厂<TransactionManager> 被忽略

Ignite Factory<TransactionManager> is ignored

我正在尝试为 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() returning null ,而 transactionManager.getTransaction() return TransactionImpl{xid=Xid{formatId=1, globalTransactionId=8EA3F99497B60948C0E22AEBA1F54C460000000000000002,branchQualifier= 8EA3F99497B60948C0E22AEBA1F54C460000000000000002},状态=活动}

并且无论何时回滚事务,写入的项目都会保留在缓存中。 另外TransactionManagerFactory.create不会随时执行。

如何将外部事务管理器与 ignite 缓存正确集成?

BR 尤连奥法

我认为您需要将 ignite-jta 模块添加到您的项目中,以便 Ignite 使用事务管理器执行任何操作。否则,使用 NoOp 实现。

我不确定你想用你的瞬态 IgniteCache 逻辑做什么。反序列化后为null,会出现NPE。