【问题标题】:EJB and Hibernate in Struts applicationStruts 应用程序中的 EJB 和 Hibernate
【发布时间】:2011-05-07 08:28:06
【问题描述】:

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

需要一些分析帮助。

下午


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

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

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

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

如果我的假设正确,请帮助我?

【问题讨论】:

    标签: java hibernate jakarta-ee struts-1 ejb-2.x


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      查看整个部分11.2. Database transaction demarcation,尤其是11.2.2. Using JTA。

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

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

      【讨论】:

        【解决方案3】:

        这是可能的解决方案之一

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

        【讨论】:

          猜你喜欢
          • 2011-10-27
          • 2012-09-07
          • 2014-07-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-19
          • 2012-03-26
          相关资源
          最近更新 更多