使用EJB与POJO相比有哪些优势?

5

我为什么要使用EJB?它能给我带来什么,而其他方式又不能做到呢?

相较于POJO,使用EJB有哪些优势?


5
声明式分布式事务、声明式安全、依赖注入、自动线程安全、有状态的 Bean、钝化和激活、远程访问等。 - JB Nizet
1个回答

8
EJBs由Java EE应用服务器管理和监控,它通过依赖注入创建和提供它们给客户端,并管理它们的生命周期。EJBs被保存在应用程序服务器的池中。每当客户端获取EJB时,应用程序服务器从池中选择一个并将其分配给客户端。客户端完成后(在客户端侧没有引用),它将返回到池中,准备分配给其他客户端。
池非常重要,可以提高应用程序的可伸缩性。您不必更改已部署的应用程序以处理增加的负载,如果资源量有限,则您的应用程序不会使应用程序服务器崩溃。一切都是通过配置应用程序服务器完成的。
EJBs可以 - 如果适当地进行注释 - 处理事务和异步执行,并可向远程客户端公开。
有四种类型的EJBs: 会话Bean
  1. 无状态 EJB:允许客户端执行某些操作并返回,不能用于保存状态,因为服务器可能将其分配给其他客户端(您可以将其用作客户端之间的通信,例如如果您在那里设置了一个实例变量并将其设置为一个值,那么其他客户端可能会看到这个值)。您可以将使用无状态 EJB 方法视为函数式编程或类的静态方法。
  2. 有状态 EJB:允许客户端在多个请求之间保持状态(客户端必须持有对它的引用,否则应用服务器可能将其分配给另一个客户端)。
  3. 单例 EJB:如其名称所示,服务器保证此实例对整个应用程序是唯一的。

消息驱动 bean

  1. 消息驱动的EJB:也是无状态的,通常与JMS结合使用发送和接收消息。消息处理函数是异步执行的。

虽然 EBJ 提供了诸多功能,但 POJO 只是普通的 Java 对象,没有更多或更少。


客户端必须持有对它的引用,否则应用服务器可能会将其分配给另一个客户端 - 这并不完全正确。应用服务器没有与GC进行特殊交互以查看客户端是否确实仍然具有引用的能力。在调用@Remove方法后,它可能会被重新设置和重新分配。通常情况下,其他客户端将获得一个新的bean,因为对于“无状态”bean来说,池化更为常见。 - Arjan Tijms
感谢您的准确性,这是基于我几个月前进行的一些测试,使用Servlet作为客户端和@LocalBean用于Statefull会话bean。我只能通过将其放入(Web)会话中来保持状态。 - A4L
这导致了一个仍未解答的问题:Session bean 中的 session 是什么?如果您有进一步阅读的链接,我将不胜感激! - A4L
session 起源于只有有状态和实体 bean(它们也是有状态的)存在的时代。它们是 RMI 应用程序的一种 HTTP 会话。 - Arjan Tijms

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接