与实例级别的Jta无关

时间:2016-07-05 10:00:38

标签: java caching jta spring-transactions infinispan

有没有办法,我可以获得infinispan的单例实例,从而从实例级别(不是从缓存级别)获取XA资源,并登记到正在进行的JTA事务..!

ConfigurationBuilder builder = new ConfigurationBuilder();
                  builder.transaction().transactionMode(TransactionMode.TRANSACTIONAL);
                  builder.jmxStatistics().enable();
                  //builder.jmxStatistics()
                  // Construct a local cache manager using the configuration we have defined
                  DefaultCacheManager cacheManager = new DefaultCacheManager(builder.build());

在jta中自动尝试上面的假设?!!

或者我必须使用,

GenericTransactionLookup.init() ...!? 有人请帮助我在Infinispan中理解它......!

1 个答案:

答案 0 :(得分:2)

创建缓存不会向事务管理器注册任何内容。偏离主题,您的代码仅创建缓存管理器,默认缓存仅在您调用getCache()时启动,而配置中的任何其他缓存也是如此。

每次调用缓存操作时,事务缓存都会注册一个新的XAResource实例,并检测到正在运行的JTA事务。如果它检测到TransactionManager(通过GenericTransactionManagerLookup)但没有正在运行的事务,则首先创建一个JTA事务,运行该操作,然后提交JTA事务。 (读操作除外。)

您无法从Infinispan获取XAResource来手动使用JTA事务进行登记。您可以使用XAResource获得cache.getAdvancedCache().getXAResource(),但可以将其用于恢复。