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