gpt4 book ai didi

java - 关于企业 Java session Bean

转载 作者:行者123 更新时间:2023-11-30 07:24:26 25 4
gpt4 key购买 nike

完全不熟悉企业 Java 开发并且在阅读 following 之后教程。我设法开发了我的第一个 session bean。在阅读了一些有关 session bean 的内容后,我确实对它( session bean)有一些疑问,我希望这里的专家可以帮助我。

通常在不使用 EJB 的 servlet 场景中,我们会做类似下面的事情来完成某个任务

 StudentList stud = businesslayer.businessMethod_GetStudentsFromDb(); 

现在业务层将调用服务层,服务层将从数据库获取详细信息并将其返回。

现在我的问题如下:

1-如果我要使用无状态 EJB 实现此机制,我必须将包含域对象 StudentList 的域包复制到我的企业项目的“-ejb”文件夹中(我正在使用 netbeans)。同样,我必须将其他业务方法从我的“-war”文件夹的源文件夹复制到 ejb 文件夹,以便“-ejb”文件夹中的无状态 bean 可以使用这些方法。 “-ejb”文件夹内的类不能使用“-war”文件夹的源文件夹内的类。

2-到目前为止,这是我无法理解的问题。如果我使用 EJB 而不是我当前的机制,我将获得什么优势?

最佳答案

1

如果您正在构建单个应用程序,则无需复制任何内容。如果你想在业务代码和网络/ View 代码之间有一个非常严格的分离,你可以创建一个 ear,一个 ejb 模块 和一个 web 模块。 web模块中的所有类都可以访问ejb模块中的所有类,反之则不然。这有效地在您的应用程序中强加了一个分层。

但是您不必为了这次分离。您也可以将您的 EJB bean 与您的 Servlet 以及您拥有的东西放在一起。你把 bean 放在哪里没有限制。它可以位于单独的包中,也可以与您的 Servlet 位于同一包中。

你可能想看看我做的这个例子:http://arjan-tijms.omnifaces.org/2011/08/minimal-3-tier-java-ee-app-without-any.html .在那里,BusinessBean 是一个 EJB,它与单个 war 中的 JSF 支持 bean 位于相同的(默认)包中。

在单一 war 设置中,一切都可以访问一切。请注意,即使在这种情况下,您也可能希望保持您的业务代码“干净”,并将诸如 HttpRequest 之类的内容排除在外。

2

EJB bean,尤其是 EJB light,提供了大多数 Web 应用程序需要的那些东西:事务、池、线程安全、安全和注入(inject)。当与 JPA 结合使用时,您将充分利用 EJB bean。优点是您的代码将更加简洁,同时避免了使用普通 JDBC 时会遇到的竞争条件和不一致问题。

例如

@Stateless 
public class CustomerService {

@PersistenceContext
private EntityManager entityManager;

public void addCustomer(Customer customer) {
entityManager.persist(customer);
}
}

如果没有 EJB,您将需要一堆 try/finally block 来打开和关闭连接、启动和提交事务等。如果没有 JPA,您将拥有一大块繁琐的代码,用于插入 Customer 示例中显示的实体放入准备好的语句中。

如果您(稍后)有调用一个或多个其他服务的服务,并且要么所有内容都需要保存到 DB 中,要么什么都不需要(而不是介于两者之间的未定义内容),那么这在普通 JDBC 中完成是一个相当大的挑战.除了可以在中间阶段使用的方法之外,您还必须传递打开的连接并且需要打开/关闭连接和启动/提交事务的每个服务方法的特殊变体。不久之后,这将变得非常复杂并且是一个大泥球。

使用 EJB,您从另一个 EJB bean 中调用的 EJB bean 中的每个方法都会自动加入正在进行的事务,或者如果没有事务在进行中则启动它自己的。仅此一项就大大简化了典型网络应用程序执行的许多常见业务任务。

不要让任何人告诉您只有“企业应用程序”才需要事务,Web 应用程序不需要这个。这是不正确的。事务是做数据库操作时非常基本的东西,与主键或外键的基本要求相同。当执行一个订单的业务逻辑时(在网上商店),您肯定不希望您的库存被减少,但没有实际订单被发送,或者一个订单被发送但没有从您的客户账户中减去钱等等。最简单的业务逻辑通常涉及写入至少两个表,每次发生这种情况时,您最好使用事务。

但请确保您使用的是 EJB 3。远离与 EJB 2 相关的一切。甚至不要接触 home 接口(interface)或 Entity Beans 之类的东西,它们已经被弃用了大约 6 年。 (不要将 EJB 实体 Bean 与 JPA 实体混淆,尽管不幸的是名称相似,但它们是完全不同的。JPA 实体非常理智和有用)

关于java - 关于企业 Java session Bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11480863/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com