网站公告列表

  没有公告

加入收藏
设为首页
联系站长
您现在的位置: 网络学院 >> 程序设计 >> Java编程 >> 文章正文
  JDBC分层事务管理机制            【字体:
JDBC分层事务管理机制
作者:佚名    文章来源:不详    点击数:    更新时间:2007-9-2    

 文/李智慧

虽然ORM框架在J2EE应用中大行其道,但是使用JDBC直接访问数据库方式因其简单和强大而在许多时候对开发者极具诱惑力。
正在装载数据……
尤其在复杂的多表关联集合操作的时候,ORM框架大多显得笨拙并且力不从心,而一条使用统计函数的sql语句却可以直接搞定。因此通常在我设计J2EE应用程序架构的时候会在持久层框架中保留两种访问数据库的方式――Hibernate和JDBC。
 
基于J2EE分层架构设计思想,数据访问层应该专门处理数据访问,而业务逻辑则在业务逻辑层中处理。为了提高复用,数据访问层对象(DAO)的粒度通常都非常小,一个更新操作被封装在一个方法中,这样当有多个更新操作需要被捆绑为一个事务的时候,事务的处理只能在业务逻辑层中实现。
 
在不分层的情况下,一个典型的JDBC事务处理代码片断如下。
try {
conn =DriverManager.getConnection   
("jdbc:oracle:thin:@host:1521:SID","username","userpwd";
conn.setAutoCommit(false);//禁止自动提交,设置回滚点
stmt = conn.createStatement();
stmt.executeUpdate(“alter table …”); //数据库更新操作1
stmt.executeUpdate(“insert into table …”); //数据库更新操作2
conn.commit(); //事务提交
}catch(Exception ex) {  
         ex.printStackTrace();
         try {
              conn.rollback(); //操作不成功则回滚
         }catch(Exception e) {
e.printStackTrace();
         }
}
 
分层的JDBC事务机制通过TransactionController和TransactionControllerFactory两个类来进行事务管理。数据访问层的更新操作都添加到TransanctionController中,在业务逻辑层中将事务commit。业务逻辑层和数据访问层通过TransactionControllerFactory来获得同一个事务控制器TransactionController。
 
事务控制器TransactionController接口代码
public interface TransactionController {
              public void add(DataAccessor da){} //数据库操作的具体实现DataAccessor添加到事务控制器
 
              public int execute() throws SQLException{} //commit事务,如果异常,rollback。
}
 
事务控制器工厂TransactionControllerFactory实现类代码
public class TransactionControllerFactory{
              public static final ThreadLocal session = new ThreadLocal();
              /**
               * 启动TransactionController
               */
              public static TransactionController currentController() {
                            TransactionController ts = (TransactionController) session.get();
                            if (ts == null) {
                                          ts = new TransactionController ();
                                          session.set(ts);
                            }
                            return ts;
              }
              /**
               * 结束TransactionController
               */
              public static void closeController() {
                            session.remove();
              }
}
 
业务逻辑层代码举例
Test1Dao test1Dao = new DaoFacotory.getTest1Dao();
Test2Dao test1Dao = new DaoFacotory.getTest2Dao();
TransactionController tc = TransactionControllerFactory.currentController();
test1Dao.insertStaff (staff);
test2Dao.updateGroup(group)
tc.execute();
数据访问层代码举例
Public class Test1Dao{
Public void insertStaff(Staff staff){
        TransactionController tc = TransactionControllerFactory.currentController();
              DataAccessor da = DataAccessorFactory.getDataAccessor(…);//获取数据库操作实例DataAccessor
              da.setParameter(….);//设置DataAccessor参数
              tc.add(da);//将数据库操作实例添加到事务控制器
 



本文来源:http://blog.csdn.net/desertfish/archive/2007/07/09/1683655.aspx
站内文章搜索 高级搜索
文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
     用java实现web服务器
     用java快速开发linux gu…
     正则表达式分解siemens交…
     [portal参考手册]目录
     jsp中调用oracle存储过程…
  • 关于CTreeCtrlr的=NM_DBLCL…

  • 面向 Java 开发人员的 db4o …

  • BCC55  ALL IN ONE

  • Archive for the Linux Cate…

  • Windows API一日一练(25)Cre…

  • 如何用VB实现Modbus串行通讯

  • BCB/Delphi中常用的VCL函数说…

  • file not found frmaddBdsuo…

  • 全新java初学者实践教程9(ja…

  • 利用JDOM及XPath对XML文件进…

  •   网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    网络学院©2007 www.23book.net
    为您提供web编程,vb编程,vc编程,服务器架设管理,数据库设计等方面的知识 站长:David