锁定老帖子 主题:一个业务用到多个DAO,如何实现连接共用?
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2005-04-15
dao1用完连接归还,dao2可能用到dao1用完的连接,也可能是新的连接,这样业务是否不合理呀,业务量大时可能dao1成功,dao2得不过连接失败。 试想如果一个业务用到dao1,dao2,dao3 ... ... 业务处理将受到多大的影响呀。 一个业务中的dao能共用一个连接如何实现呢? 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2005-04-15
精华区有相关的贴子,可以使用Filter对session进行打开以及关闭等操作
|
|
返回顶楼 | |
发表时间:2005-04-15
beckhamzlb 写道 精华区有相关的贴子,可以使用Filter对session进行打开以及关闭等操作
看过了贴子的绍介,清楚了流程。如果不用spring这个方法没问题,可以DAO之间共用session。 |
|
返回顶楼 | |
发表时间:2005-04-15
你的意思是说如何保证事务吗?
假如在一个业务方法里面用到了DAO1 DAO2 ...... 他们肯定是需要同一个CONNECTION的。 |
|
返回顶楼 | |
发表时间:2005-04-15
dengyin2000 写道 你的意思是说如何保证事务吗?
假如在一个业务方法里面用到了DAO1 DAO2 ...... 他们肯定是需要同一个CONNECTION的。 可是没个dao要用session来管理connection呀,也就是如果不共用session,dao就无法共用connection。不知道我这么理解对不对? |
|
返回顶楼 | |
发表时间:2005-04-15
zb1015 写道 dengyin2000 写道: 你的意思是说如何保证事务吗? 假如在一个业务方法里面用到了DAO1 DAO2 ...... 他们肯定是需要同一个CONNECTION的。 可是没个dao要用session来管理connection呀,也就是如果不共用session,dao就无法共用connection。不知道我这么理解对不对? 是的。 用spring吧。他能够很好的解决这个问题。 |
|
返回顶楼 | |
发表时间: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,那真是少做了不少工作呀! |
|
返回顶楼 | |
发表时间:2005-04-17
zb1015 写道 比如业务A需要dao1,dao2,也就需要2个连接,如果是连接池过程会是这样的
dao1用完连接归还,dao2可能用到dao1用完的连接,也可能是新的连接,这样业务是否不合理呀,业务量大时可能dao1成功,dao2得不过连接失败。 试想如果一个业务用到dao1,dao2,dao3 ... ... 业务处理将受到多大的影响呀。 一个业务中的dao能共用一个连接如何实现呢? 为什么不可以共用呢~ 你在DAO中传递 Connection 对象就可以咯~ 问题还是你怎么设计 |
|
返回顶楼 | |
发表时间:2005-04-17
用ThreadLocal管理session,可以在同一个Thread中取到同一个session
|
|
返回顶楼 | |
发表时间:2005-04-18
引用 为什么不可以共用呢~ 你在DAO中传递 Connection 对象就可以咯~ 问题还是你怎么设计 这样做从设计角度讲不太合理,Spring的AOP是可以解决这个问题的。 |
|
返回顶楼 | |