第 8 章 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 应用服务器中查找事务管理器。如果没有找到事务管理器,则在
嵌入式TransactionManager
上默认设置。
警告: DummyTransactionManagerLookup
已在 9.0 中弃用,并将在以后的版本中删除。改为使用 EmbeddedTransactionManagerLookup
。
初始化后,TransactionManager
也可以从 Cache
本身获取:
//the cache must have a transactionManagerLookupClass defined Cache cache = cacheManager.getCache(); //equivalent with calling TransactionManagerLookup.getTransactionManager(); TransactionManager tm = cache.getAdvancedCache().getTransactionManager();
8.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__");
-
isolated
- 配置隔离级别。检查部分 隔离级别 以了解更多详细信息。默认为REPEATABLE_READ
。 -
locking
- 配置缓存是否使用 optimistic 或 pessimistic 锁定。检查 事务锁定 部分以了解更多详细信息。默认为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 - 清理事务完成信息的线程的间隔(以毫秒为单位)。默认值为30000
。 -
recovery-cache
- 配置缓存名称以存储恢复信息。检查部分 事务恢复 以了解更多有关恢复的详细信息。默认为recoveryInfoCacheName
。 -
stop-timeout
- 缓存停止时等待持续事务的时间(毫秒)。默认为30000
。 -
transaction-manager-lookup
- 配置查找对javax.transaction.TransactionManager
的引用的类的完全限定域名。Default isorg.infinispan.transaction.lookup.GenericTransactionManagerLookup
.
有关如何在 Data Grid 中实施 Two-Phase-Commit (2PC)的更多详细信息,以及如何获取锁。有关配置 参考 中提供了有关配置设置的更多详细信息。