- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想实现前事务管理器之一。但是,由于我仍处于概念阶段,我想尝试所有这些事务管理器。我最终选择的标准是易用性、Tomcat 的使用、适应性以及对嵌套事务和 MVCC 的大部分支持。
我找不到任何关于 Bitronix 和 Atomikos 可能支持后一个标准的信息。
我知道 JBossTS 支持 MVCC 和 NT - 但我不确定 JBoss 是否是一个很好的选择,考虑到使用 JBoss 带来的巨大开销......特别是对于 Spring 和 hibernate 的用户。
您知道 Atomikos 和/或 Bitronix 是否符合我的标准 - 或者实现我自己的 TM 会更好吗?
最佳答案
您需要更清楚地定义您的要求。 “嵌套事务”含糊不清。这可能意味着简单地暂停一个事务以运行另一个事务,然后恢复第一个事务:
transactionManager.begin();
// now in tx A
transaction txA = transactionManager.suspend();
// no tx active here
transactionManager.begin();
// now in tx B
transactionManager.commit(); // tx B ends
// no tx active here
transactionManager.resume(txA);
// now in tx A again
transactionManager.commit(); // tx A ends
这在您需要执行某些操作时很常见,例如审计日志更新,在逻辑上与外部事务分开。任何事务管理器都会这样做,尽管很少会编写如此直接驱动 TM 的代码。请改用 EJB 容器。
然后你会遇到这样的情况,你只是想要伪嵌套来简化逻辑的结构:
// no tx active at start
transactionManager.begin();
// tx A now active, nesting count = 1
transactionManager.begin();
// tx A still active, nesting count = 2
transactionManager.commit();
// nullop, tx A still active, nesting count = 1
transactionManager.commit();
// tx A really committed, no tx active, count = 0.
乍一看这很吸引人,但当发生嵌套回滚时,会带来更多麻烦。没有得到广泛支持,尽管一些数据库允许这样做使存储过程处理更容易。
最后,您拥有真正的嵌套事务,其中子事务从其父事务继承锁,并在完成时将自己的锁传递给该父事务
transactionManager.begin();
// now in tx A1
transactionManager.begin();
// now in tx A1.1
// can see uncommitted changes made by A1
transactionManager.commit(); // validate ability to make A1.1 changes permanent, but do not actually do so yet
// now in tx A1, still holding locks from A1.1 also
transactionManager.commit(); // commit A1 and A1.1 changes atomically.
这主要用于故障隔离 - 可以回滚子事务并执行其他操作而不会对外部事务造成任何影响。这是一个非常强大的事务模型。实现起来也很棘手——目前只有 JBossTS 支持它。并不是说它在大多数 Java EE 用例中对您有很大帮助,因为没有资源管理器(即数据库或消息队列)支持它。
至于MVCC,那跟事务管理器一点关系都没有。您的业务数据保存在资源管理器中,通常是关系数据库。 RM 用于提供 tx 隔离和并发控制的模型与事务驱动方式正交。 Oracle 和 postgres 支持 MVCC,而其他一些数据库支持表、页或行级锁定。事务管理器不知道也不关心。
关于java - Atomikos vs. Bitronix vs. JBossTS - MVCC 和嵌套事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7668358/
如果我设置 com.atomikos.icatch.enable_logging=false ,我想了解分布式事务功能是否适用于我的应用程序 我是否理解正确,事务恢复与发生崩溃的情况相关,我们希望完全
我们的项目依靠 Atomikos 提供轻量级的交易管理。但是,我们发现它在初始化过程中以明文形式记录了数据库用户名和密码。 例如 2015-10-15 16:43:01,106 [http-bio-8
我正在试验 Atomikos 提供的独立 JPA 和 JTA/XA 事务管理。 我的简单单元测试保留了 3 条记录,包装在 JTA UserTransaction 中。 当使用H2作为后备数据库时,测
我继承了一个应用程序,该应用程序使用 Atomikos 在 Oracle 数据库之上的 Spring 中进行事务处理。在生产部署中,始终通过设置 com.atomikos.icatch.enable_
除了我们遵循文档并将日志记录目录和基本名称指定为 -D 参数外,我们看到的与 Strange Atomikos exception - Error in init(): Log already in
Atomikos 在使用时非常冗长。事务管理器向控制台写入了很多 INFO 消息(大部分与我无关)。 transaction.properties 中的设置应该控制消息级别 com.atomikos.
当通过 Spring 配置 Atomikos 时,不需要 jta.properties 或 transactions.properties 文件。尽管如此,Atomikos 启动时会将以下消息打印到
正如线程标题中所述,我们使用 Spring 框架、带有 hibernate 提供程序的 JPA 和 Atomikos 作为事务提供程序。 大多数情况下,此设置都有效,但在 Tomcat 启动过程中出现
当通过 Spring 配置 Atomikos 时,不需要 jta.properties 或 transactions.properties 文件。尽管如此,Atomikos 启动时会将以下消息打印到
我有一个问题,我必须在 Spring-Boot 中使用 Atomikos 和 Axon 框架(没有 Axon 服务器)。我正在使用 Oracle DB,并且使用多个线程 (10) 发送大量命令,在此之
我正在尝试将 EHCache 的事务处理能力与 Atomikos 和 Apache Tomcat 一起使用(与 JMS 和 Hibernate 一起使用,但这只是为了向怀疑论者保证我真的需要 JTA)
我的应用程序(在 Tomcat 服务器上运行)使用 atomikos 连接池连接 mysql 数据库。一切正常,除了连接会如果离开应用程序服务器几个小时不使用,将被关闭。下面是发生这种情况后再次运行应
我们有一个应用程序在 Java 7 上运行良好几年,但在升级到 Java 8 时遇到问题。数据库连接似乎是问题所在。 情况是这样的:该应用程序访问 200 多个数据库。或者,从技术上讲,一个数据库安装
我在使用 Atomikos 时遇到了一个奇怪的问题。 我有一个小型测试应用程序(Spring + Hibernate)。它使用两个不同的数据源,我需要在非 Java EE 容器(在我的例子中是 Tom
我们想使用 Atomikos JTA 事务管理器。我们有一个单元测试,我们希望在它完成后回滚,从而使表保持干净以备下次运行。 @RunWith(SpringJUnit4ClassRunner.clas
我正在开发一个具有多个 JDBC 数据源和 JTA 的项目。我使用 Maven 作为构建工具,并且我想使用 Jetty 插件 (6.1.20) 在开发过程中运行应用程序。 我正在尝试将 Jetty 配
我有一个监听 ActiveMQ 的 Camel 路由。我添加了 10 秒的延迟,因为在开始之前需要确定另一个进程已完成。这是通过添加延迟器属性来实现的:- ....extra st
我正在创建一个示例应用程序来测试两阶段提交 (2PC)。我从互联网上获取了此处使用的代码位。我使用 Spring、Hibernate 和 Atomikos,并以 MySQL 作为后端。我正在使用两个数
我尝试在不使用 spring 的情况下配置 Atomikos Transaction。首先,我尝试在不使用 spring 的情况下设置 EntityManagerFactory,以下是我尝试过的代码
我想将 atomikos 日志级别设置为高于 INFO。 Tomcat 的 catalina.out 日志文件写入许多 INFO 消息,导致事务需要很长时间才能完成。 在启动期间,catalina.o
我是一名优秀的程序员,十分优秀!