EJB,是或否?

时间:2011-08-28 08:12:47

标签: jsp ejb

我正在JSP中开发一个简单的Web应用程序,它可以访问MySQL数据库。我正在使用Hibernate库连接并使用数据库。所以,我的问题是:我是否需要使用Enterprise Java Beans(EJB)来考虑这个问题(考虑到它是一个网站,可能会被多个用户同时访问,并且所有人都想在同时)?

5 个答案:

答案 0 :(得分:3)

EJB的主要优点是它允许以声明方式划分事务。不是一次又一次地编写相同的样板代码来启动事务,而是在最后提交它,如果发生异常则回滚等等,这是由EJB堆栈为您完成的。 Spring提供了相同的可能性,BTW。

但是,阅读您的问题和之前的评论最重要的是正确构建您的应用程序。不要在JSP中放置任何Java代码。只使用JSP中的JSP EL,JSTL和其他自定义标记来生成标记。

业务逻辑应该放在Java类(EJB或非EJB)中,并且应该从servlet调用这些Java类,然后servlet将调度到JSP以生成标记。有很多Web框架可以帮助您正确构建应用程序,还可以帮助您进行验证,测试,模板等。查看Stripes,Spring MVC,Struts等。

答案 1 :(得分:2)

Java EE 6 开始,您必须区分 EJB JPA

  • Enterprise Java Beans(javax.ejb)为分布式容器管理业务逻辑定义标准。这包括异步消息传递(JMS),声明式事务管理等。“业务逻辑层”。
  • Java Persistence API(javax.persistence)定义了一个访问/修改关系数据库管理系统中持久对象的标准 - 持久层。

当前的Hibernate版本确实实现了 JPA API。因此,如果您使用Hibernate,您可以使用其专有API或JPA API。后者提供的优势是您可以在OpenJPA,EclipseLink,Hibernate等不同的JPA实现之间切换。专有的Hibernate API功能更强大,因为它提供了更多功能。

您不需要使用EJB,您可以基于标准Java功能构建自己的业务逻辑层,也可以使用其他容器,如Spring。

答案 2 :(得分:1)

我会说是。

EJB使用bean非常简单,这使得使用JPA(Hibernate)变得更加容易。

没有它们,您需要手动跟踪事务,并在try / catch / finally块中清除它们。您还需要在应用程序启动时手动创建实体管理器工厂,然后将其存储在某个位置。这并不是很困难,但这是一项繁琐的工作,使你的代码非常冗长。

使用EJB,这一切都消失了。你需要做的就是这样:

@Stateless
public class MyService {

    @PersistenceContext
    private EntityManager entityManager;

    public Customer getCustomer(Integer customerId) {
        return entityManager.find(Customer.class, customerId);
    }
}

没有手动处理事务,也没有代码来存储和保留实体管理器。

除此之外,EJB还自动是线程安全的,并且实例是池化的。这意味着更好的性能和自动节流可以防止系统过载。

EJB中还有一些功能,但我个人发现,在大多数情况下,上述内容与您最常用的一样。

EJB不需要使用任何配置(参见Minimal 3-tier Java EE app, without any XML config),并且许多服务器(Resin,GlassFish,TomEE,JBoss AS)都支持它们。您还可以将EJB添加到尚未通过OpenEJB支持它的服务器,但是从已经支持它的服务器开始更容易。

答案 3 :(得分:0)

Hibernate的ORM足够用于此目的。我的理解是EJB在多层应用程序中更有用(在那里你有一个包含EJB的中间层的前端对话,后者又与数据库进行对话),因此EJB为了更简单的目的而可怕地过度设计(但EJB3)不是以前的版本所憎恶的,所以拿一点盐就可以了。)

答案 4 :(得分:0)

如果您的应用程序在Apache Tomcat下运行,则应使用hibernate或纯JPA。 我认为对于简单的应用程序,你不需要JBoss,还是需要?

如果您的应用程序在JBoss或Glassfish下运行,您可以在没有远程调用的情况下自由使用EJB3。 如果你的后端和前端分开,你可以通过远程调用使用EJB3。

一般情况下,如果你可以使用EJB3 / 3.1 / 3.2 - 使用它!