【问题标题】:What are the advantages of using EJB compared to POJO? [closed]与 POJO 相比,使用 EJB 有什么优势? [关闭]
【发布时间】:2013-03-24 22:48:37
【问题描述】:

我为什么要使用 EJB?我能从中得到什么是其他方式无法得到的?

与 POJO 相比,使用 EJB 有什么优势?

【问题讨论】:

  • 声明式分布式事务、声明式安全、依赖注入、自动线程安全、有状态bean、钝化和激活、远程处理等

标签: java jakarta-ee ejb pojo


【解决方案1】:

EJBs 由 Java EE 应用服务器管理和监控,它负责通过依赖注入创建并提供给客户端,并管理它们的lifecycles。 EJB 由应用程序服务器保存在池中。每次客户端获取 EJB 时,应用程序服务器都会从池中挑选一个并将其分配给客户端。客户端完成后(客户端没有对它的引用),它被返回到池中并准备分配给其他客户端。

池对于应用程序的可扩展性非常重要。您不必对已部署的应用程序进行任何更改来处理不断增长的负载,并且如果负载过高,您的应用程序不会让应用服务器屈服,因为资源量是有限的。一切都是通过配置应用服务器来完成的。

如果有相应的注释,EJB 可以处理事务和异步执行,并且可以暴露给远程客户端。

有四种类型的 EJB:

会话 bean

  1. Stateless EJBs:让客户端执行一些操作并返回,不能用于保持状态,因为服务器可能会将其分配给其他客户端(您可以将其用作客户端之间的一种通信,例如,如果您有一个实例变量那里将其设置为一个值,然后该值可能会被其他客户端看到)。您可以将无状态 EJB 方法视为类的函数式编程或静态方法。
  2. Statefull EJBs:让客户端跨多个请求维护一个状态(客户端必须持有对它的引用,否则应用服务器可能会将其分配给另一个客户端)
  3. Singleton EJBs:顾名思义,服务器保证此实例对于整个应用程序是唯一的。

消息驱动 bean

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

虽然 EBJ 提供了所有这些,并且可能提供其他东西,但 POJO 只是 POJO,仅此而已。

【讨论】:

  • >客户端必须持有对它的引用,否则应用服务器可能会将其分配给另一个客户端 - 这并不完全正确。应用服务器与 GC 没有特殊交互,看客户端是否确实还有引用。在调用@Remove 方法后,它可能会被重新设置和重新分配。更典型的是,另一个客户端会得到一个新的 bean,因为池化对于 Stateless bean 来说更常见。
  • 感谢您的精确,这是基于我几个月前使用 servlet 作为客户端和 @LocalBean 用于 Statefull 会话 bean 所做的一些测试。我只能通过将其放入(网络)会话来保持状态。
  • ...女巫导致了 - 仍然没有答案 - 问题 Session bean 中的 session 是什么?如果您有进一步阅读的链接,我将不胜感激!
  • session 起源于只有有状态和实体 bean 的时代(它们也是有状态的)。它们是 RMI 应用程序的一种 http 会话。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-03-20
  • 1970-01-01
  • 2010-09-24
  • 2010-12-27
  • 2015-04-06
  • 2013-05-09
  • 2017-05-29
相关资源
最近更新 更多