论坛首页 Java企业应用论坛

一个业务用到多个DAO,如何实现连接共用?

浏览 8874 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2005-04-15  
DAO
比如业务A需要dao1,dao2,也就需要2个连接,如果是连接池过程会是这样的
dao1用完连接归还,dao2可能用到dao1用完的连接,也可能是新的连接,这样业务是否不合理呀,业务量大时可能dao1成功,dao2得不过连接失败。
试想如果一个业务用到dao1,dao2,dao3 ... ... 业务处理将受到多大的影响呀。

一个业务中的dao能共用一个连接如何实现呢?
   发表时间:2005-04-15  
精华区有相关的贴子,可以使用Filter对session进行打开以及关闭等操作
0 请登录后投票
   发表时间:2005-04-15  
beckhamzlb 写道
精华区有相关的贴子,可以使用Filter对session进行打开以及关闭等操作


看过了贴子的绍介,清楚了流程。如果不用spring这个方法没问题,可以DAO之间共用session。
0 请登录后投票
   发表时间:2005-04-15  
你的意思是说如何保证事务吗?

假如在一个业务方法里面用到了DAO1 DAO2 ...... 他们肯定是需要同一个CONNECTION的。
0 请登录后投票
   发表时间:2005-04-15  
dengyin2000 写道
你的意思是说如何保证事务吗?

假如在一个业务方法里面用到了DAO1 DAO2 ...... 他们肯定是需要同一个CONNECTION的。

可是没个dao要用session来管理connection呀,也就是如果不共用session,dao就无法共用connection。不知道我这么理解对不对?
0 请登录后投票
   发表时间:2005-04-15  
zb1015  写道


dengyin2000 写道:
你的意思是说如何保证事务吗?

假如在一个业务方法里面用到了DAO1 DAO2 ...... 他们肯定是需要同一个CONNECTION的。

可是没个dao要用session来管理connection呀,也就是如果不共用session,dao就无法共用connection。不知道我这么理解对不对?



是的。 用spring吧。他能够很好的解决这个问题。
0 请登录后投票
   发表时间:2005-04-15  
引用

是的。 用spring吧。他能够很好的解决这个问题。


/*
 * StudentsManagerImp.java
 *
 * Created on 2005年3月11日, 下午4:31
 */

package com.bin.business.imp;

import com.bin.business.StudentManager;
import com.bin.dao.ClassesDao;
import com.bin.dao.StudentDao;
import com.bin.bean.Address;
import com.bin.bean.Classes;
import com.bin.bean.Student;
/**
 *
 * @author Administrator
 */
public class StudentsManagerImp implements  StudentManager{
    
    /** Creates a new instance of StudentsManagerImp */
    public StudentsManagerImp(); {
    }
    /**
     * Holds value of property DAO.
     */
    private StudentDao SDAO;
    private ClassesDao CDAO;
    /**
     * Setter for property DAO.
     * @param DAO New value of property DAO.
     */
    public void setSDAO(StudentDao SDAO); {
        this.SDAO = SDAO;
    }
    
     public void setCDAO(ClassesDao CDAO); {
        this.CDAO = CDAO;
    }
    
     public Student Add(Student student,Address address,String classesId); {
        Classes classes=(Classes);CDAO.load(classesId);;
        student.setAddress(address);;
        address.setStudent(student);;
        student.setClasses(classes);;
        SDAO.Add(student);;
        return student;
    }
}

/*
 * BaseDao.java
 *
 * Created on 2005年3月11日, 上午10:02
 */

package com.bin;

import org.springframework.orm.hibernate.support.HibernateDaoSupport;
import org.springframework.orm.hibernate.*;
import net.sf.hibernate.HibernateException;
import org.springframework.dao.*;
import net.sf.hibernate.Session;
import java.util.Collection;
import java.util.*;
/**
 *
 * @author Administrator
 */
public abstract class BaseDao extends HibernateDaoSupport{
    
    /** Creates a new instance of BaseDao */
    public BaseDao(); {
    }

     public Object Add(Object Obj);{
        getHibernateTemplate();.saveOrUpdate(Obj);;  
        //getHibernateTemplate();.save(Obj);;    
        return Obj;
    }

    public abstract void Remove(Object Obj);;

    public  Object Update(Object Obj);{
        getHibernateTemplate();.update(Obj);; 
        return Obj;
    }
    
}

这是我用spring+hibernate事务管理的一个业务类,如果SDAO,CDAO共用一个connection,那真是少做了不少工作呀!
0 请登录后投票
   发表时间:2005-04-17  
zb1015 写道
比如业务A需要dao1,dao2,也就需要2个连接,如果是连接池过程会是这样的
dao1用完连接归还,dao2可能用到dao1用完的连接,也可能是新的连接,这样业务是否不合理呀,业务量大时可能dao1成功,dao2得不过连接失败。
试想如果一个业务用到dao1,dao2,dao3 ... ... 业务处理将受到多大的影响呀。

一个业务中的dao能共用一个连接如何实现呢?


为什么不可以共用呢~ 你在DAO中传递 Connection 对象就可以咯~
问题还是你怎么设计
0 请登录后投票
   发表时间:2005-04-17  
用ThreadLocal管理session,可以在同一个Thread中取到同一个session
0 请登录后投票
   发表时间:2005-04-18  
引用

为什么不可以共用呢~ 你在DAO中传递 Connection 对象就可以咯~
问题还是你怎么设计

这样做从设计角度讲不太合理,Spring的AOP是可以解决这个问题的。
0 请登录后投票
论坛首页 Java企业应用版

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