自:http://blog.sina.com.cn/s/blog_661a3fce0100msjb.html
记得EJB的部署文件的事务属性<trans-attribute>RequiresNew</trans-attribute>的情况,在调用该EJB函数时如果已经存在一个事务进行中,那么要求容器挂起该事务,启动新的事务进行函数调用,直到函数结束后,再恢复原来的事务继续进行。
也许你会想到用以下的方式进行:
UserTransaction tx = (UserTransaction)ctx.lookup("javax.transaction.UserTransaction");
UserTransaction tx2 = (UserTransaction)ctx.lookup("javax.transaction.UserTransaction");
tx.begin();
tx2.begin();
tx2.commit();
tx.commit();
以上代码会抛出如下异常:
javax.transaction.NotSupportedException: Another transaction is associated with this thread.
查找了sun的 JTA specification 说明如下:
The UserTransaction.begin method starts a global transaction and associates the transaction with the calling thread. The transaction-to-thread association is managed transparently by the Transaction Manager. Support for nested tranactions is not required. The UserTransaction.begin method throws the NotSupportedException when the calling thread is already associated with a transaction and the transaction manager implementation does not support nested transactions.
看来weblogic的Transaction没有实现嵌套功能,那么容器如何RequiresNew的ejb事务情况呢,就得借助于TransactionManager类了
tm = (TransactionManager)ctx.lookup("javax.transaction.TransactionManager");
tx = (UserTransaction)ctx.lookup("javax.transaction.UserTransaction");
tx.begin();
...
transaction = tm.suspend();
doNestedTransaction();
tm.resume(transaction);
...
tx.commit();
其实以上问题的顺利解决都归功于sun完整的官方资料,想想从事Java快两年了我的大部分知识都是来源于“东拼西凑”:书籍、论坛、项目...看来是该花点时间好好读读sun网站的各种specification了。
http://java.sun.com/products/jta/index.html
分享到:
相关推荐
JTA事务通常与JNDI(Java Naming and Directory Interface)和XAResource接口一起工作,使得应用程序可以透明地访问和管理分布式事务。使用JTA事务时,开发者不再直接控制Connection的事务,而是由事务管理器(如...
- **概述**:JOTM是Jakarta Object Transaction Manager的缩写,是一个开源的JTA事务管理器,能够在脱离J2EE容器的情况下实现分布式事务管理。 - **用途**:为不使用J2EE容器的应用程序提供事务管理服务。 #### ...
同时,还需要考虑与JTA事务管理器(如Atomikos、Bitronix等)的集成,以实现完整的分布式事务处理。 总结来说,XAPool是JTA分布式事务处理的重要组件,提供了一种高效的数据库连接池解决方案,对于构建大规模、高...
Spring的PlatformTransactionManager接口定义了事务管理的基础方法,而AtomikosTransactionManager就是实现这个接口的一个实例,用于处理JTA事务。 MyBatis本身不支持JTA,但可以通过集成Spring来实现。在Spring...
在提供的XML配置示例中,我们可以看到Spring框架是如何配置两个不同的数据源,并为它们设置JTA事务管理器的。 ##### 数据源配置 首先,我们来看数据源的配置部分: ```xml <value>200 <value>70...
2. JTA事务提供了一种更高级别的、与实现和协议无关的API,允许应用程序执行分布式事务,涉及多个网络资源和数据库。JTA支持通过实现`javax.sql.XADataSource`、`javax.sql.XAConnection`和`javax.sql.XAResource`...
**标题与描述解析** ...总结,JTA和JBarcode分别代表了Java环境中处理分布式事务和生成条形码的两个重要工具。在开发企业级Java应用,特别是涉及数据库操作和跨系统数据交换时,理解和使用这些技术是非常关键的。
如果是在非Spring环境中,可能需要手动配置JTA事务管理器。 总结来说,解决"最新的jta包用于quartz缺少jar"的问题,你需要做以下几步: 1. 将`jta-1.3.1(1)`解压并添加到项目类路径。 2. 检查并更新Quartz的配置...
#### 二、JTA 1.2 规范概述 JTA 1.2 规范由 Oracle America, Inc. 发布,并于 2013 年 5 月 15 日作为最终版本发布。此版本对 JTA 的功能进行了全面升级,以便更好地支持现代分布式应用程序的需求。 #### 三、JTA ...
根据应用场景的不同,可以选择使用JDBC事务、JTA事务或容器事务等不同的事务处理方式。每种方式都有其特定的应用场景和优势,开发者应根据具体需求选择最合适的事务处理机制。通过合理利用这些事务管理技术,可以...
总结来说,集成Spring、JTA、JOTM或Atomikos进行分布式事务处理,是提高系统扩展性和可靠性的重要手段。通过上述步骤,开发者能够在Tomcat应用服务器上实现跨数据库的事务一致性,从而构建更健壮的分布式应用。
### Java事务总结 #### 事务的基本概念与属性 在计算机科学中,特别是在数据库管理系统中,**事务**是一种机制,用于确保一系列操作作为一个整体被执行。事务包含三个基本的行为:开始事务、提交事务以及回滚事务...
JTA事务管理 JTA(Java Transaction API)是Java平台标准的事务API,它提供了一个更为高级的事务管理模型,适用于分布式事务场景。JTA支持多数据源、消息队列等多种资源的事务协调。JTA的核心接口包括: - `...
Hibernate作为流行的Java持久层框架,提供了对JTA事务的支持。在Java EE环境中,结合Geronimo JTA,可以实现全局的事务管理。以下是如何在Hibernate中配置和使用Geronimo JTA 1.1的步骤: 1. 配置Hibernate:在...
Java分布式开发是一个复杂而关键的领域,特别是在大型企业级...`DefaultJtaPlatform`指定了JOTM作为事务管理器,而`JtaTransactionManager`是Spring中处理JTA事务的核心类。在XML配置中,这可能看起来像这样: ```xml ...
- **JTA事务管理**:更高级的一种事务管理模式,用于分布式环境中多个资源管理器之间的事务协调。这种方式通常与EJB容器一起使用。通过配置`hibernate.transaction.factory_class`为`...
在Java中,我们可以使用JDBC的Connection对象的commit()和rollback()方法来手动管理事务,或者利用Java Transaction API (JTA)的UserTransaction接口进行声明式事务管理。在Spring框架中,可以使用@Transactional...
总结来说,集成`jta-atomikos`实现在SpringBoot中的分布式事务管理是一项复杂但至关重要的任务。通过添加Atomikos的依赖、配置事务管理器以及在服务层使用`@Transactional`注解,我们可以确保在分布式环境下的操作...
在Hibernate中配置JTA事务,需要在`hibernate.cfg.xml`中设置`transaction.factory_class`为`org.hibernate.transaction.JTATransactionFactory`,并确保应用服务器提供JTA支持。使用JTA事务的代码通常涉及与应用...
在JTA事务中,`XAResource`接口定义了事务管理器如何与数据源交互。`XADataSource`和`XAConnection`用于创建支持JTA事务的连接。这些接口允许事务跨越多个资源(如多个数据库)进行。 **异常处理**: 在Java中,...