第 10 章 Data Grid Transactions


Data Grid 可以配置为使用和参与 JTA 兼容事务。

或者,如果事务支持被禁用,则等同于在 JDBC 调用中使用 autocommit,其中每次更改后可能会复制修改(如果启用了复制)。

在每个缓存操作 Data Grid 中执行以下操作:

  1. 检索与线程关联的当前 事务
  2. 如果还没有完成,请将 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。可用的选项有:

  • 通知 - 在缓存监听程序中启用/禁用触发事务事件。默认为 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)以及如何获取锁定的更多详细信息,请参见以下部分。有关配置设置的更多详细信息,请参阅配置 参考

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.