第 10 章 Data Grid Transactions
Data Grid 可以配置为使用和参与 JTA 兼容事务。
或者,如果事务支持被禁用,则等同于在 JDBC 调用中使用 autocommit,其中每次更改后可能会复制修改(如果启用了复制)。
在每个缓存操作 Data Grid 中执行以下操作:
- 检索与线程关联的当前 事务
- 如果还没有完成,请将 XAResource 注册到事务管理器,以便在事务提交或回滚时获得通知。
为此,必须提供对环境的 TransactionManager 的引用缓存。这通常是通过使用 TransactionManagerLookup 接口实现的类名称配置缓存来实现的。当缓存启动时,它将创建此类实例并调用其 getTransactionManager ()
方法,这将返回对 TransactionManager
的引用。
Data Grid 附带几个事务管理器查找类:
事务管理器查找实现
- EmbeddedTransactionManagerLookup :这提供了基本的事务管理器,它仅在没有其他实施时用于嵌入式模式。这种实现存在一些严重限制,用于进行并发事务和恢复。
-
JBossStandaloneJTAManagerLookup: 如果您在独立环境中运行 Data Grid,或者在 JBoss AS 7 及更早版本中,以及 WildFly 8、9 和 10,这是您的事务管理器的默认选择。它是一个基于 JBoss 交易 的全面事务管理器,它解决了
嵌入式TransactionManager
的所有缺陷。 - WildflyTransactionManagerLookup :如果您在 WildFly 11 或更高版本中运行 Data Grid,则这应该是您的事务管理器的默认选择。
-
GenericTransactionManagerLookup :这是一个查找类,可在最流行的 Java EE 应用服务器中找到事务管理器。如果没有找到事务管理器,则默认为
EmbeddedTransactionManager
。
警告: DummyTransactionManagerLookup
在 9.0 中弃用,它将在以后的版本中删除。使用 EmbeddedTransactionManagerLookup
替代。
初始化后,TransactionManager
也可以从 缓存
本身获取:
//the cache must have a transactionManagerLookupClass defined Cache cache = cacheManager.getCache(); //equivalent with calling TransactionManagerLookup.getTransactionManager(); TransactionManager tm = cache.getAdvancedCache().getTransactionManager();
10.1. 配置事务
事务在缓存级别配置。以下是影响事务配置以及每个配置属性的小描述。
<locking isolation="READ_COMMITTED"/> <transaction locking="OPTIMISTIC" auto-commit="true" complete-timeout="60000" mode="NONE" notifications="true" reaper-interval="30000" recovery-cache="__recoveryInfoCacheName__" stop-timeout="30000" transaction-manager-lookup="org.infinispan.transaction.lookup.GenericTransactionManagerLookup"/>
或以编程方式:
ConfigurationBuilder builder = new ConfigurationBuilder(); builder.locking() .isolationLevel(IsolationLevel.READ_COMMITTED); builder.transaction() .lockingMode(LockingMode.OPTIMISTIC) .autoCommit(true) .completedTxTimeout(60000) .transactionMode(TransactionMode.NON_TRANSACTIONAL) .useSynchronization(false) .notifications(true) .reaperWakeUpInterval(30000) .cacheStopTimeout(30000) .transactionManagerLookup(new GenericTransactionManagerLookup()) .recovery() .enabled(false) .recoveryInfoCacheName("__recoveryInfoCacheName__");
-
isolation
- 配置隔离级别。如需更多详细信息,请参阅 隔离级别。默认为REPEATABLE_READ
。 -
locking
- 配置缓存是否使用最佳功能或 pessimistic locking。检查 Transaction Locking 部分以了解更多详细信息。默认为OPTIMISTIC
。 -
auto-commit
- 如果启用,用户不需要为单个操作手动启动事务。事务会自动启动并提交。默认为true
。 -
complete-timeout
- 以毫秒为单位保存关于完成事务的信息。默认值为60000
。 Mode
- 配置缓存是否事务。默认值为NONE
。可用的选项有:-
NONE
- 非事务缓存 -
FULL_XA
- 启用恢复的 XA 事务缓存。有关 恢复的详情,请查看部分事务 恢复。 -
NON_DURABLE_XA
- 禁用恢复的 XA 事务缓存。 -
NON_XA
- 通过 同步 而不是 XA 集成的事务缓存。详情请参阅 Enlisting Synchronizations 部分。 -
BATCH
- 使用批处理对操作进行分组的事务缓存。详情请参阅 Batching 部分。
-
-
通知
- 在缓存监听程序中启用/禁用触发事务事件。默认为true
。 -
Reaper-
interval - 清理事务完成信息的线程以 millisecond 为单位的时间间隔。默认值为30000
。 -
recovery-cache
- 配置缓存名称以存储恢复信息。有关 恢复的详情,请查看部分事务 恢复。默认为recoveryInfoCacheName
。 -
stop-timeout
- 缓存停止后等待持续事务的时间。默认值为30000
。 -
transaction-manager-lookup
- 配置类的完全限定类名称,该类查找对javax.transaction.TransactionManager
的引用。默认为org.infinispan.transaction.lookup.GenericTransactionManagerLookup
。
有关如何在 Data Grid 中实施 Two-Phase-Commit (2PC)以及如何获取锁定的更多详细信息,请参见以下部分。有关配置设置的更多详细信息,请参阅配置 参考。