有没有办法,我可以获得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中理解它......!
答案 0 :(得分:2)
创建缓存不会向事务管理器注册任何内容。偏离主题,您的代码仅创建缓存管理器,默认缓存仅在您调用getCache()
时启动,而配置中的任何其他缓存也是如此。
每次调用缓存操作时,事务缓存都会注册一个新的XAResource
实例,并检测到正在运行的JTA事务。如果它检测到TransactionManager
(通过GenericTransactionManagerLookup
)但没有正在运行的事务,则首先创建一个JTA事务,运行该操作,然后提交JTA事务。 (读操作除外。)
您无法从Infinispan获取XAResource
来手动使用JTA事务进行登记。您可以使用XAResource
获得cache.getAdvancedCache().getXAResource()
,但仅可以将其用于恢复。