【问题标题】:Database table access via JPA Vs. EJB in a Web-Application通过 JPA 访问数据库表。 Web 应用程序中的 EJB
【发布时间】:2011-01-09 12:30:08
【问题描述】:

我正在设计一个访问许多数据库表的网络应用程序。 我想弄清楚访问这些表的首选方式是什么? 是通过 JPA 还是 EJB?

谢谢, 内森

【问题讨论】:

    标签: web-applications ejb jpa-2.0


    【解决方案1】:

    答案是“两者”。

    EJB 本身不访问任何数据库表。您在 Java 中所做的与 DB 相关的所有操作都是通过 Java Persistence API (JPA) 进行的,或者如果您想通过 JDBC 进行低级别的操作,但我们不在这里讨论。

    EJB 带来的好处是非常容易管理事务。你总是需要那些有 JPA 的,手动管理这些有点痛苦。 EJB 还使您可以非常轻松地访问将在 JPA 中用于与 DB 交互的主类:实体管理器。

    在实践中使用 EJB 是针对很多简单轻量级的情况,只不过是在 bean 中添加 @Stateless 注解:

    @Stateless
    public class FooService {
    
        @PersistenceContext
        private EntityManager entityManager;
    
        public Foo getByID(Long fooID) {
            return entityManager.find(Foo.class, ID);
        }
    }
    

    如果没有 EJB,执行这个简单查找的代码会非常更加冗长。如果没有 JPA,根本就不会有任何代码。如前所述,EJB 没有访问数据库的功能。

    【讨论】:

      【解决方案2】:

      除非您实际构建企业系统并且需要增加 EJB 的复杂性,否则只需使用 JPA。在我看来,您只是在构建一个 Web 应用程序,并且您需要简单的数据库访问 - 选择 JPA。我们使用OpenJPA,没有任何问题。

      【讨论】:

      • 我不太同意这一点。 EJB 不会增加复杂性,它会消除复杂性。在任何符合 Web 配置文件的服务器中,您只需将 @Stateless 注释添加到 bean 即可。手动使用 JPA,您必须使用 try catch finally 包围每个操作,开始事务进行检查,然后提交或回滚并关闭会话。与仅添加单个 @Stateless 注释相比,这在我的书中有很多复杂性。最基本的 Web 应用程序极大地受益于 EJB。这就是为什么它是 Web Profile 的一部分,并由 Resin 等超轻量级服务器实现。
      • 如果您将它用于不需要解决问题的简单应用程序,它绝对会增加复杂性,我建议仅使用 EJB 来管理简单事务是过度的.在一个简单的应用程序中,逻辑可以通过 ServletFilter 中的一些简单代码来处理,或者只是手动处理。
      • 我还是不同意。将@Stateless 注解添加到 bean 并不过分。以低级方式手动处理事务更容易出错、更冗长、更复杂,并使代码更难阅读和维护。如今,EJB 非常轻量级。您可能还记得旧的 EJB 2 bean,这确实是多余的。但不是 EJB 3,当然也不是 EJB3.1 lite。尤其是后者专门用于非常简单的应用程序。它们不需要任何 xml 或接口,并且可以直接放入普通战争中的任意包中。
      • 我还没有使用过 EJB3,这是真的,尽管我总是对引入另一个 API 来解决一个简单的问题持谨慎态度。我们必须同意不同意那个!我肯定会提倡以某种形式在原始 JDBC 上使用 JPA。我发现的最大优点是不再需要维护 sql 模式文件,而是直接从我的实体生成他的模式。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多