Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsp 是还是不是?_Jsp_Ejb - Fatal编程技术网

Jsp 是还是不是?

Jsp 是还是不是?,jsp,ejb,Jsp,Ejb,我正在用JSP开发一个简单的web应用程序,它可以访问MySQL数据库。我正在使用Hibernate库连接和使用数据库。因此,我的问题是:我是否需要使用企业JavaBeans(EJB)来解决这个问题(考虑到它是一个网站,可能会被多个用户同时访问,并且所有用户都希望同时使用数据库)?Hibernate的ORM就足够了。我的理解是,EJB在多层应用程序中更为有用(在多层应用程序中,您与包含EJB的中间层进行前端对话,而中间层又与数据库进行对话),因此,为了更简单的目的,EJB的设计过于复杂(但EJB

我正在用JSP开发一个简单的web应用程序,它可以访问MySQL数据库。我正在使用Hibernate库连接和使用数据库。因此,我的问题是:我是否需要使用企业JavaBeans(EJB)来解决这个问题(考虑到它是一个网站,可能会被多个用户同时访问,并且所有用户都希望同时使用数据库)?

Hibernate的ORM就足够了。我的理解是,EJB在多层应用程序中更为有用(在多层应用程序中,您与包含EJB的中间层进行前端对话,而中间层又与数据库进行对话),因此,为了更简单的目的,EJB的设计过于复杂(但EJB3并不像以前的版本那样令人讨厌,所以请对此持保留态度).

EJB的主要优点是它允许以声明的方式划分事务。与反复编写相同的样板代码来启动事务、在事务结束时提交、在发生异常时回滚等不同,这是由EJB堆栈为您完成的。顺便说一句,Spring也提供了同样的可能性

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

业务逻辑应该放在Java类(EJB或非EJB)中,这些Java类应该从servlet调用,然后servlet将被分派到JSP以生成标记。有很多web框架可以帮助您正确地构建应用程序,还可以帮助您进行验证、i18n、模板等。看看Stripes、Spring MVC、Struts等。由于Java EE 6,您必须区分EJB和JPA

  • 企业JavaBeans(javax.ejb)为分布式、容器管理的业务逻辑定义了一个标准。这包括异步消息传递(JMS)、声明性事务管理等“业务逻辑层”
  • Java持久性API(javax.Persistence)定义了一个标准,用于访问/修改关系数据库管理系统中的持久性对象—持久性层
当前的Hibernate版本确实实现了JPAAPI。因此,如果您使用Hibernate,您可以使用其专有API或JPA API。后者的优点是,您可以在不同的JPA实现(如OpenJPA、EclipseLink、Hibernate)之间切换。专有的HibernateAPI更强大,因为它提供了更多的特性

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

我会说是的

EJB非常易于使用,这使得使用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不需要任何配置就可以使用(请参阅),而且它们受到许多服务器(Resin、GlassFish、TomEE、JBoss AS)的支持。您还可以通过OpenEJB向尚未支持EJB的服务器添加EJB,但从已经支持EJB的服务器开始要容易得多。

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

如果您的应用程序在JBoss或Glassfish下运行,则无需远程调用即可自由使用EJB3。 如果后端和前端分开,则可以通过远程调用使用EJB3


通常,如果您可以使用EJB3/3.1/3.2,请使用它

因此,如果我理解正确,最好将EJB用于更复杂的应用程序,但就我而言,简单使用JSP和Hibernate就可以了。谢谢:)EJB非常简单,即使是最简单的应用程序也可以使用。在JSP中,我只是从Java类中创建对象,然后调用特定的方法从数据库中获取结果,然后显示结果,仅此而已。我将看看您提到的框架。谢谢:)