`
calmness
  • 浏览: 353312 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

Dao控制事务设想,线程级事务处理

    博客分类:
  • Java
阅读更多

最近在重构公司的一个项目,在事务处理的问题上挺伤脑筋,主要就是业务层如何进行事务控制的问题,由于没有使用spring等可以声明式事务管理,所以只能手动进行,大家都知道事务不应该放在DAO层进行,那样进行多个DAO操作时则无法进行单一事务控制,但是我个人又不想把事务控制代码写在业务层,因为如果将这些代码放到业务层,那么业务逻辑中就包含了与业务无关的代码,不是我所愿意的,同时也造成了业务层与持久层的耦合,思前想后,后来想到一个办法,应该可以做到两全其美,就是还是使用DAO进行控制事务,但是并不一定是每个方法一个事务,文采不好,还是直接用代码表示吧。

DAO泛型接口

public interface GenericDao <T, PK extends Serializable> {
    PK create(T newInstance);
    ...
    void beginTransaction();
    void commit();  
    void rollback();
}


DAO通用实现

public class GenericDAOHibernate <T,ID extends Serializable, DAOImpl extends GenericDao>
	implements GenericDao {

	private Session session;
	private Transaction tx;
	@Override
	public void beginTransaction() {
		// TODO Auto-generated method stub
		session = HibernateUtil.currentSession();
		tx = HibernateUtil.currentTx();
		tx.begin();
	}

	@Override
	public void commit() {
		// TODO Auto-generated method stub
		tx.commit();
	}

	@Override
	public void rollback() {
		// TODO Auto-generated method stub
		tx.rollback();
	}
	
         ......
}


   以上是比较典型的泛型DAO的实现,我只在其中增加了事务控制的方法,其中使用的HibernateUtil是通过ThreadLocal管理session的工具,我在其中增加了对Hibernate的Transaction类型的管理,和管理session一样,这样即使使用不同的DAO实现,在同一线程中都可用同一事务进行控制。

    之所以这样做,是为了DAO多个操作可以共享一个事务,这种实现方式在业务层也不会耦合持久层的代码,可以说达到了我的目的,但是这种方式只是刚刚想到的,并没有经过测试,而且由于个人水平问题,肯定有想不到或者是想错的地方,希望各位高手给点意见,谢谢!
分享到:
评论
5 楼 yirentianran 2008-08-13  
请问LZ有什么特别之处?
4 楼 yirentianran 2008-08-13  
请问LZ有什么特别之处?
3 楼 calmness 2007-11-26  
我试过了,行得通,但除了可以封装hibernate事务以外,没有其他实际好处,且无法处理service层的嵌套事务,还是用spring算了。
2 楼 kekeemx 2007-11-26  
好像可以行的通....找机会试试看
1 楼 calmness 2007-11-23  
补充一下,应该还增加一个release接口用于释放资源,如session等

相关推荐

    使用代理实现Hibernate Dao层自动事务

    本文将深入探讨如何使用代理来实现Hibernate Dao层的自动事务管理,以提高代码的可维护性和事务处理的效率。 首先,理解Dao(Data Access Object)层的作用至关重要。Dao层是应用与数据库之间的一层抽象,它封装了...

    java事务处理详解

    Java事务处理是指在Java应用程序中对事务的管理和控制。事务是指一系列的操作,Either all succeed or all fail。Java事务处理的目的是为了确保数据的一致性和完整性。 Spring是Java事务处理的核心功能之一。Spring...

    JAVA_DAO 事务界定 异常处理,日志记录

    ### JAVA DAO 事务界定、异常处理与日志记录 #### 一、引言 在现代软件开发中,尤其是在企业级应用领域,数据访问对象(Data Access Object,简称 DAO)模式是一种广泛采用的设计模式,用于将低级别的数据访问逻辑...

    JAVA设计模式之事务处理

    "JAVA设计模式之事务处理"主要关注如何在业务逻辑中有效地管理和控制事务。 事务处理在企业级应用中至关重要,因为它确保数据的一致性和完整性。Java平台提供了Java Transaction API (JTA) 来处理全局事务,适用...

    DAO多线程的技巧.rar_dao

    - **事务管理**:在多线程环境下,事务管理需要谨慎处理,避免并发操作导致的数据不一致。可以使用Spring的@Transactional注解配合PROPAGATION_REQUIRES_NEW属性,为每个线程创建独立的事务。 4. **读写分离与...

    spring配置在DAO和事务层(DOC)

    以上内容展示了如何在 Spring 中配置 Hibernate 事务管理器,并通过 AOP 将事务控制应用到 DAO 层。这种方式极大地简化了事务管理的过程,同时也提高了代码的可维护性和可读性。此外,通过将事务代理注入到 Service ...

    声明式事务控制spring+hibernate集成

    它允许开发者通过配置,而不是代码来管理事务,使得事务处理更加简洁、易于维护。本主题聚焦于"声明式事务控制"在Spring 2.5与Hibernate 3集成中的应用。 Spring框架是Java领域的一个核心组件,其提供了丰富的功能...

    jdbc在DAO层实现事务

    自己写的一个java示例 该示例用jdbc与java事务来实现DAO层的各个DAO的各方法之间的事务关联 使上层可以保证各数据访问的原子性 该示例包含了一个方便调用的数据库访问工具类,该工具类实现了调用SQL语句,调用...

    高级DAO编程技巧--软件工程师

    本文将详细介绍在DAO编程中经常被忽视但又极其重要的三个方面:事务界定、异常处理以及日志记录。 #### 二、DAO基础 **DAO设计模式**是一种标准的J2EE设计模式,用于将底层的数据访问操作与高层的业务逻辑分离。一...

    使用jdbc在DAO层实现了各DAO之间共享事务的示例

    自己写的一个java示例 该示例用jdbc与java事务来实现DAO层的各个DAO的各方法之间的事务关联 使上层可以保证各数据访问的原子性 该示例包含了一个方便调用的数据库访问工具类,该工具类实现了调用SQL语句,调用...

    关于java dao的入门介绍

    此外,对于复杂的业务场景,可能需要考虑事务的隔离级别和回滚规则,以及在多线程环境下的并发控制。 总之,DAO模式在Java应用中起着至关重要的作用,它简化了数据库操作,提高了代码的可测试性和可维护性。通过...

    JAVA设计模式之事务处理.pdf

    Java设计模式中的事务处理是构建企业级应用时不可或缺的一部分,主要关注数据的一致性和完整性。在J2EE环境中,Java Transaction API (JTA) 提供了全面的事务管理能力,支持跨多个事务性资源的事务处理。然而,很多...

    dao设计模式DAO 设计模式之事务界定疯.pdf

    为了更好地解决这个问题,可以采用一种更高级的设计方案,即在DAO层之外引入一个专门用于处理事务的工具类。这样做的好处包括: 1. **减少代码耦合度**:将事务管理逻辑从业务逻辑层抽离出来,可以降低各层之间的...

    vc6程序:DAO控制本地MDB文件

    然而,DAO不支持最新的数据库特性,比如存储过程和事务处理。 6. **DAO的局限性**:DAO只适用于Access和Jet数据库,不支持其他数据库系统。此外,由于年代较早,它没有ADO(ActiveX Data Objects)的广泛兼容性和...

    DAO设计模式DAO设计模式

    事务处理是DAO设计模式中的一个关键组成部分。事务是指一组相关的操作序列,这些操作要么全部成功,要么全部失败。在DAO设计模式中,事务的管理至关重要,因为这关系到数据的一致性和完整性。 - **事务划分**:决定...

    DAO多线程的技巧(31KB)

    DAO多线程的技巧(31KB)

    dao3.5数据库安装文件

    1. **数据库连接**:DAO提供了一种直接与数据库进行通信的方法,允许开发者创建连接、打开和关闭数据库,以及执行查询和事务处理。 2. **对象模型**:DAO 3.5包含一系列的对象,如Database、TableDef、QueryDef、...

Global site tag (gtag.js) - Google Analytics