论坛首页 Java企业应用论坛

提问:使用tomcat服务器如何在业务逻辑层(Service)实现事务管理?

浏览 12194 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2006-11-14  
最近公司使用java做一个C to C 的电子商务平台,由于公司java团队开发人员的技术不强,所以我作为这个项目的负责人,为避免使用其它框架(hibernate,Spring)而带来的学习曲线,决定使用
Struts+Service+DAO的三层模式来架构。

本项目的需求基本上涉及不到J2EE的技术,所以没有应用服务器,只有web服务器tomcat.

目前的解决方法是:

  使用JDBC的Connection对象的con.commit()和con.rollback()方法来控制事务,那么必须早DAO的调用对象中即(业务逻辑对象)中创建Connection对象,然后再分发给各DAO,这样才能保证当业务逻辑对象的某一个业务方法的实现需要调用同一DAO对象的多个方法或者不同DAO对象的不同方法时,可以共用一个Connection连接对象。

  但是我觉得这样做觉得很不方便,并且在业务逻辑层中出现Connection对象,也违反了DAO的设计原则。
我知道一般在J2EE应用服务器中使用JTA在业务逻辑层实现事务的管理。但是tomcat中没有对JTA的支持。

请问,除了我说的方法外,还有类似JTA的方式来实现事务管理的吗?

(网上查了一下资料,好象有个什么JTOM跟JTA类似,但是只支持MySql和Sysbase数据库。)
   发表时间:2006-11-14  
为什么不用spring,用了这些就没你那么多问题了.
另外,service层是否实现事务管理和tocmat没有关系,JTA和你的问题也没有关系.
0 请登录后投票
   发表时间:2006-11-14  
wolfsquare 写道
为什么不用spring,用了这些就没你那么多问题了.
另外,service层是否实现事务管理和tocmat没有关系,JTA和你的问题也没有关系.


Spring我用现在的不是很成熟,所以没有用。 我现在想要在业务逻辑层实现象JTA那样的事务管理,而不是使用在业务逻辑层使用Conneciton来实现事务管理。

0 请登录后投票
   发表时间:2006-11-14  
请详细解释下"象JTA那样的事务管理",如果仅仅是不想看见connection之类的东西,有很多方法能避开的.
0 请登录后投票
   发表时间:2006-11-14  
不想直接用Connection,可以自己封装一个Transaction对象,很简单,把操作转发给Connection对象就可以了。
看上去会好一些,以后还有一些灵活性。
0 请登录后投票
   发表时间:2006-11-14  
JTA只是编程接口的标准, 需要底层有Transaction Manager才能工作,Sun有个Java Transaction Service(JTS)的标准,来规范Transaction Manager,JOTM是个开源的对JTS的实现。

JTA/JTS是分布式事务处理(跨越多个数据库),如果只对一个数据库读写,完全没有必要用JTA/JTS,这些操作的代价是很高的,JDBC Connection的commit, rollback足已。

要在业务逻辑里,不用自己编程进行事务处理,据我知只有两种方法,1,EJB, 2, Spring. 要不你自己用AspectJ编个类似的来,够累啊。

以为要用JTA编程,就不用把Connection传来传去么,除了Connection要传,还要传个JTA的UserTransaction.

import javax.transaction.*;
import javax.naming.*;
// ...
InitialContext ctx = new InitialContext();
Object txObj = 
  ctx.lookup("java:comp/UserTransaction");
UserTransaction utx = (UserTransaction) txObj;

utx.begin();
// ...
DataSource ds = obtainXADataSource();
Connection conn = ds.getConnection();
pstmt = conn.prepareStatement("UPDATE MOVIES ...");
pstmt.setString(1, "Spinal Tap");
pstmt.executeUpdate();
// ...
utx.commit();
// ...



还是用Spring吧,要不就把Connection传来传去。

http://www-128.ibm.com/developerworks/java/library/j-dao/
http://jotm.objectweb.org/index.html
http://java.sun.com/products/jta/
http://java.sun.com/products/jts/
0 请登录后投票
   发表时间:2006-11-15  
本项目的需求基本上涉及不到J2EE的技术,所以没有应用服务器,只有web服务器tomcat.


怯怯的问一下,什么是应用服务器,什么是web服务器。。
0 请登录后投票
   发表时间:2006-11-15  
谢谢各位的帮助,特别是bigpanda,让我对使用Connection进行事务管理和JTA的事务管理有的新的深刻认识。

由于此项目一开始就没有决定使用Spring框架,所以现在使用Spring的事务管理也不太可能。
所以最后决定象wolfsquare和Lucas Lee说的那样,自己写一个Transaction对象来封装Connection,来实现事务管理
0 请登录后投票
   发表时间:2006-11-15  
rkihabara 写道
本项目的需求基本上涉及不到J2EE的技术,所以没有应用服务器,只有web服务器tomcat.


怯怯的问一下,什么是应用服务器,什么是web服务器。。

我也奇怪这句话呢,难道servlet不属于J2EE?
楼主对J2EE一些基本概念的理解似乎都有问题,觉得这个项目危险了
0 请登录后投票
   发表时间:2006-11-15  
可以看看ibatis的事务处理,直接copy过来用
http://www.blogjava.net/RongHao/archive/2006/01/20/28817.html
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics