直接通过servlet调用数据库vs使用EAR和EJB中介

时间:2011-11-08 15:57:11

标签: java-ee servlets ejb dao

我通过servlet在网页上显示文本和xml。 servlet只是通过getPost()方法中的调用将HTML / XML加载到页面上。现在我按照我想要的方式工作到下一步是用对数据库的调用替换静态显示文本,以便它可以动态显示信息。我的问题是:

这样做的最佳方法是什么。我正在使用JPA和实体进行持久化,但我可以选择直接调用持久化项目或者通过我创建的数据/实体访问对象。我遵循了一个教程,该教程使用EAO和实体与EJB作为教授最佳实践的一种方式。然而,我还没有看到这样做的价值。当我可以直接访问数据时,通过3个类似乎过于复杂。

这是首选方法吗?或者servlet是直接访问还是通过EAO访问数据?

由于

3 个答案:

答案 0 :(得分:4)

如果你不需要它 - 不要这样做。

不要在没有理由的情况下引入额外的抽象层。它更难维护,如果你真的不需要它 - 你将以一堆死代码(空委托)结束。

所以,如果我是你,我会做的第一步,我会使用JPA作为持久层。它可以让你摆脱额外的DAO课程。 EntityManager(您可以将其视为JPA的入口点)是一个数据访问对象本身。 您的servlet代码不应该直接依赖于数据库,因此在您的情况下,EntityManager是一个很好的关注点。

然后,您可以考虑将表示代码(Servlet)与面向数据的操作分开。您可以通过使用CDI并在简单的POJO中实现此逻辑来实现。这将使您(Servlet)不依赖于用于获取或转换数据的代码。您的servlet通常只是“获取数据”(它不必知道它的来源)。

如果您需要它们引入的服务(事务性,线程安全性,定时器,异步调用,SOAP或REST Web服务,JMX访问,池化等其他入口点),请使用EJB。

HTH。

答案 1 :(得分:1)

有不同的因素,了解这两种方法很有用。

EJB更简单,并且具有许多用于事务管理的功能。没有EJB,持久化的代码将更加冗长。

也许这有助于更好地理解。

http://java.sun.com/blueprints/corej2eepatterns/Patterns/DataAccessObject.html

答案 2 :(得分:1)

是否应该在每个用例基本的IMO中使用DAO。

链接到答案,可以帮助您解决这个问题。

How should EntityManager be used in a nicely decoupled service layer and data access layer?