点燃工厂<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。
我正在尝试为 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。