3

我有一个包含 struts 1.1 和 EJB 2 组合的应用程序,但现在我们正在使用 hibernate 3.2 向其中引入一个新部分。休眠 DAO 与具有纯 JDBC 的 EJB 2 会话 bean DAO 并行运行。在这种情况下,我担心 jdbc 连接管理。由于 EJB 2.0 具有容器管理的连接和事务。但是在休眠的情况下,我们开始并提交休眠事务,是否可以安全地假设此架构不会出现任何问题。

需要一些分析帮助。

下午


我正在考虑同样的问题,如果休眠模块可能访问由 JDBC DAO 使用的现有表,其事务由会话 Bean 管理。但这是我的方法:

  1. 我将有一个调用 EJB 会话 bean 的委托,并且由于这个 bean 将负责管理事务,我将创建我的休眠 DAO 并从这个会话 bean 调用它们,我认为这不会有任何问题。

  2. 此应用程序的休眠会话工厂将使用休眠插件实例化一次,该插件将成为 struts 配置 xml 的一部分,并将保存为 servlet 上下文的一部分,然后操作类将从 EJB 会话 bean 委托传递此 sessionfactory 实例到休眠的 DAO。

  3. 我想这将是一种干净的方法,因为事务将由部署到 websphere 上的 EJB Session bean 管理。由于 JDBC 连接池管理是在 websphere 上配置并使用数据源访问的,因此 hibernate 不必担心这一点。

如果我的假设走在正确的道路上,请帮助我?

4

3 回答 3

0

Hibernate 可以毫无问题地与 CMT(或 BMT)会话 bean 一起使用,与 JDBC 代码共享一个连接池并参与同一个事务。

请参阅第11.2 节的全部内容。数据库事务分界,特别是11.2.2。使用 JTA

尚不清楚 Hibernate 模块是否会与通过 JDBC 管理的实体“隔离”。如果您将通过两个 API 访问相同的表,则必须采取一些预防措施:

  • 不要期望在 Hibernate 实体图中混合 JDBC 实体(尽管反过来也是可能的)。
  • 通过 JDBC 更新行时尊重和模仿 Hibernate 乐观并发策略
  • 绕过 Hibernate 的 API 不会触发任何缓存更新(如果您使用的是二级缓存),在这种情况下您必须自己触发它。
于 2010-11-10T08:59:35.757 回答
0

事务划分逻辑工作单元,因此本质上是隔离的。但我想知道为什么你需要两者的结合。如果您已经在使用 EJB2 + JDBC,为什么不坚持这个呢?

于 2010-11-09T16:10:12.350 回答
0

这是可能的解决方案之一

一个通用的 JNDI 数据源,将在 EJB 和 Hibernate 中使用。

于 2010-12-06T18:27:01.880 回答