第 8 章 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 应用服务器中查找事务管理器。如果没有找到事务管理器,则在 嵌入式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 is org.infinispan.transaction.lookup.GenericTransactionManagerLookup.

有关如何在 Data Grid 中实施 Two-Phase-Commit (2PC)的更多详细信息,以及如何获取锁。有关配置 参考 中提供了有关配置设置的更多详细信息。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.