附录:
<%@page contentType="text/html;charset=GB2312" %>
<%@page import="java.sql.*" %>
<%@page import="javax.sql.*" %>
<%@page import="javax.naming.*" %>
<%@page import="javax.transaction.UserTransaction" %>
<%@ page import="com.eway.framework.basecomponent.Framework" %>
<%@ page import="com.eway.framework.basecomponent.services.calendar.BusinessDayService" %>
<%@ page import="com.eway.framework.basecomponent.services.calendar.Overtime" %>
<%@ page import="com.eway.workflow.client.services.DraftBoxService" %>
<%@ page import="com.eway.workflow.client.po.DraftItem" %>
<%
ResultSet rs = null;
Statement stmt = null;
UserTransaction ut = null;
Connection conn = null;
try {
Context initCtx = new InitialContext();
ut = (UserTransaction) initCtx.lookup("java:comp/UserTransaction");
Context envCtx = (Context) initCtx.lookup("java:comp/env");
DataSource ds = (DataSource) envCtx.lookup("jdbc/wfmsDataSource");
out.println("<<< before lookup(\"java:comp/UserTransaction\" >>>");
// ut = (UserTransaction) initCtx.lookup("java:comp/UserTransaction");
out.println("<br/>");
out.println("<br/>");
out.println("<<< before beginning the transaction >>>");
out.println("<br/>");
conn = ds.getConnection();
ut.begin();
DraftBoxService draftBoxService = (DraftBoxService) Framework.getEngine().getContainer().getComponent("draftBoxService");
Object sdf = new Object();
DraftItem draftItem = new DraftItem();
draftItem.setBusinessId("businessid11");
draftItem.setTitle("title11");
draftItem.setDraftsman("userid11");
draftItem.setCreatedTime(new Timestamp((new java.util.Date()).getTime()));
draftItem.setEntityClassName("com.eway.workflow.sample.po.BusinessData");
draftItem.setModuleId("moduleId");
draftItem.setModuleName("moduleName");
draftItem.setTemplateId("templateId");
draftItem.setState(0);
draftItem.setProcessUrl("processUrl");
draftBoxService.saveDraftItem(draftItem);
BusinessDayService businessDayService = (BusinessDayService) Framework.getEngine().getContainer().getComponent("businessDayService");
businessDayService.saveOvertime(new Overtime());
stmt = conn.createStatement(
ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
rs = stmt.executeQuery("SELECT name FROM jta_test ");
rs.next();
out.println(rs.getString("name"));
out.println("<br/>");
PreparedStatement pstmt = conn.prepareStatement("insert into jta_test(id,name) values('asddddddddsdfsf','ddddd')");
pstmt.executeUpdate();
rs = stmt.executeQuery("SELECT name FROM jta_test where id='asdddf' ");
rs.next();
out.println(rs.getString("name"));
ut.commit();
out.println("<h1>commit ok</h>");
} catch (Exception e) {
if (ut != null) {
ut.rollback();//Or ut.commit();
out.println("rollback");
} else {
System.out.println("<<< ut is null >>>");
}
e.printStackTrace();
}
%>
分享到:
相关推荐
3. **开始事务**:通过UT接口启动一个新的全局事务。 4. **执行操作**:在事务内对每个数据源执行相应的操作。 5. **提交或回滚**:根据操作结果,决定是提交还是回滚事务。 博客可能还讨论了以下几个关键点: - **...
本篇文章将探讨如何在Java环境中,利用Spring框架和Atomikos这样的第三方工具实现分布式事务管理,即JTA(Java Transaction API)的实践。 JTA是Java平台提供的一种标准API,用于管理跨越多个资源(如数据库、消息...
JTA(Java Transaction API) 为 J2EE 平台提供了分布式事务服务。 要用 JTA 进行事务界定,应用程序要调用 javax.transaction.UserTransaction 接口中的方法。
在2PC中,事务处理监视器(TPM)先询问所有资源管理器(如数据库)是否准备好提交,然后再决定全局提交或回滚。JTA事务更复杂,但能保证分布式事务的一致性。 最后,我们提到的是**事务的传播特性**,这是Spring...
JTA是Java平台中处理分布式事务的标准API,它允许应用程序在一个全局事务中操作多个资源(如数据库、消息队列等)。Spring Boot支持JTA事务管理,主要通过以下组件实现: 1. Atomikos:这是一个开源的JTA实现,提供...
它定义了三种主要的角色:事务管理器(Transaction Manager)、资源管理器(Resource Manager)和用户事务(User Transaction)。 1. **事务管理器**:这是JTA的核心,负责协调参与事务的各个资源管理器,确保ACID...
JDBC事务和JTA(XA)事务 JDBC事务和JTA(XA)事务是两种常见的数据库事务类型,它们都可以用来管理数据库事务,确保数据库的一致性和可靠性。 JDBC事务 JDBC事务是Java Database Connectivity(JDBC)的事务机制,它...
此外,JTA还支持两阶段提交(2PC)协议,以协调不同资源的提交过程,确保全局一致性。 总之,JTA分布式事务的示例代码展示了如何在Java环境中处理跨多个数据源的事务,保证在分布式系统中的数据一致性。理解和掌握...
Spring框架在企业级Java应用中广泛用于实现事务管理,而JTA(Java Transaction API)是Java平台上的标准事务处理API,适用于分布式环境。本篇文章将深入探讨如何在Spring中配置JTA事务管理,以实现跨数据库和资源的...
在JPA中,我们可以使用JTA(Java Transaction API)来处理全局事务。 **全局事务的应用**: 1. **声明式事务管理**:在Spring框架中,可以通过@Transactional注解实现声明式事务管理,只需在需要事务的方法上添加此...
- **Atomikos、Bitronix等JTA实现**:这些第三方库实现了JTA规范,可以用来管理分布式事务。 6. **配置Spring JTA事务**:在Spring的配置文件中,你需要配置 `UserTransaction` 和 `TransactionManager`,并启用...
在tomcat 中配置JTA 事务,方便管理web项目
Spring+iBatis+JOTM实现JTA事务: 如何处理跨库事物:spring + jtom 的jta事务是个很好的选择. 这个源码示例非常不错,包括所有的源码和jar包,下载后eclipse 或 myeclipse 导入就能用。 里面有详细的说明和注释,...
Atomikos不仅仅是一个简单的JTA实现,它还包含了一些高级特性,如事务超时、事务恢复、事务日志、以及基于JMX的监控工具,这使得开发者可以更方便地处理复杂的分布式事务场景。 使用JTA和Atomikos进行多数据源事务...
XA协议是数据库层面的一套分布式事务管理的规范,JTA是XA协议在Java中的实现,多个数据库或是消息厂商实现JTA接口,开发人员只需要调用SpringJTA接口即可实现JTA事务管理功能。 JTA事务比JDBC事务更强大。一个JTA事务...
Local Transactions**: JTA允许在单一应用服务器内部进行局部事务,也可以跨越不同应用服务器和资源进行全局事务。 9. **Exception Handling**: JTA定义了异常层次结构,如`SystemException`和`UserException`,...
JTA是Java平台的标准事务API,它允许应用程序进行跨多个数据源(如数据库或消息队列)的全局事务处理。通过JTA,开发者可以编写不关心具体事务管理细节的代码,这样就提高了代码的可移植性和可维护性。 JOTM则是JTA...
在JTA分布式事务的场景下,iBATIS作为数据访问层,参与到事务处理中,其执行的SQL操作会受到JTA的控制,确保在事务中的所有数据库操作要么全部成功,要么全部回滚。 MySQL是广泛使用的开源关系型数据库管理系统,它...
4. **Xid**:代表一个全局事务的唯一标识,由三部分组成:全局事务ID、分支事务ID和格式ID。在`ChildXid.java` 文件中,可能定义了一个自定义的`Xid`实现,用于在事务中识别和跟踪资源。 5. **XADataSource**:这是...
在Spring框架中,JTA(Java Transaction API)事务管理是一种用于处理分布式事务的高级机制,它允许应用程序在多个数据源之间进行协调的事务操作。本文将详细介绍如何在Spring中使用JTA事务管理,包括通过集成JOTM...