我有一个具有struts 1.1和EJB 2组合的应用程序,但现在我们正在用hibernate 3.2引入一个新的部分。 hibernate DAO与EJB 2会话bean DAO并行运行,使用纯JDBC。在这种情况下,我担心jdbc连接管理。由于EJB 2.0具有容器管理的连接和事务。但是在hibernate的情况下,我们开始并提交一个hibernate事务,可以安全地假设这个体系结构没有任何问题。
需要一些分析帮助。
PM
我正在考虑同样的问题,如果hibernate模块可能访问JDBC DAO使用的现有表,其事务由Session Beans管理。但这是我的方法:
我将有一个调用EJB会话bean的委托,并且由于这个bean将负责管理事务,我将创建我的hibernate DAO并从这个会话bean中调用它们,我认为它们没有任何的问题。
此应用程序的hibernate会话工厂将使用hibernate插件实例化一次,该插件将成为struts config xml的一部分,并将作为servlet上下文的一部分保存,然后action类将传递此sessionfactory实例从EJB会话bean委托到hibernate DAO。
我想这将是一个干净的方法,因为事务将由部署在websphere上的EJB Session bean管理。从那以后,JDBC连接池管理在websphere上配置并使用数据源进行访问,hibernate不必担心这一点。
如果我在假设的正确道路上,请帮助我吗?
答案 0 :(得分:0)
交易划分了逻辑工作单元,因此本质上是孤立的。但我想知道为什么你需要两者的结合。如果您已经在使用EJB2 + JDBC,为什么不坚持这个呢?
答案 1 :(得分:0)
Hibernate可以在没有CMT(或BMT)会话bean的任何问题的情况下使用,与JDBC代码共享连接池并参与同一事务。
请参阅整个部分11.2. Database transaction demarcation,特别是11.2.2. Using JTA。
目前尚不清楚的是,Hibernate模块是否会与通过JDBC管理的实体“隔离”。如果您通过两种API访问相同的表,则必须采取一些预防措施:
答案 2 :(得分:0)
这是可能的解决方案之一
一个常见的JNDI数据源,它将在EJB和Hibernate中使用。