【问题标题】:Whats the difference between a EJB object and implementation bean?EJB 对象和实现 bean 有什么区别?
【发布时间】:2011-11-15 11:21:53
【问题描述】:

在本书Enterprise JavaBeans 3.1 中,他们讨论了EJB 对象和实现对象。我指的是我读到的关于无状态会话 bean 的内容:

一旦实例在方法就绪池中,它就可以服务了 客户请求。当客户端调用 EJB 上的业务方法时 对象,方法 calll 被委托给对象中的任何可用实例 方法就绪池。当实例执行请求时,is is 不能被其他 EJB 对象使用。一旦实例有 完成后,任何需要它的 EJB 对象都可以立即使用它。 无状态会话实例专用于 EJB 对象,仅用于 单个方法调用的持续时间。

我了解无状态会话 bean 的工作原理,但我不明白 EJB 对象和无状态会话实例之间的区别?

例如,当我使用 @Stateless 注释类时,我以为我创建了一个 EJB?

【问题讨论】:

  • 您的问题相当混乱......它在哪里谈到“实施”?你的意思是“实例”吗?

标签: java jakarta-ee ejb


【解决方案1】:

我认为它将 EJB 对象称为类中引用 EJB 的字段。
它不是 EJB 实例 - 它是一个代理,可让您访问 EJB 实例。

因此:

public class YourClass {

    @EJB
    private MyEJB myEjb;  // This is a proxy - not a concrete EJB instance
}

在访问期间,即myEjb.doSomething(),容器会查找将在其上执行调用的空闲 EJB 实例。再次调用 myEjb.doSomething() 时,容器可能会为您提供另一个 EJB 实例。

这两次,您都在使用相同的myEjb 对象,而在(可能)不同的EJB 实例上调用了一个方法。

这就是我对这一段的理解。

【讨论】:

  • 该段还说的是,如果您有两个 YourClass 实例并引用同一个 myEjb 对象,则永远不会将两个并发调用委托给同一个实例。该实例对方法调用是专有的。但这是一个细节。
  • @ewernli 同意。我认为线程安全是 EJB 最重要的特性之一。
【解决方案2】:

EJB 框架为您的实现类提供诸如事务性之类的服务,这是通过控制反转来完成的。
当您编写会话 bean 时,您只编写应用程序的业务逻辑,而 EJB 容器处理客户端调用和所有中间件。为此,它会生成 EJB 对象,这些对象增加了额外的功能,并且还包含您的业务逻辑。 注释类时,您告诉 EJB 容器将其视为 EJB 对象的基础。
摘录希望阐明无状态会话 bean 的“状态”保留时间不会超过一个客户端请求。 (不像有状态的 bean)

【讨论】:

    【解决方案3】:

    我了解无状态会话 bean 的工作原理,但我不明白 EJB 对象和无状态会话实例之间的区别?

    我认为您的困惑在于“EJB 对象”一词的使用

    我不认为有任何特殊的术语“EJB 对象”。也许你可以阅读

    当实例执行请求时,不能被其他 EJB 对象使用

    作为

    当实例正在执行请求时,不能被任何其他客户端使用

    还有这个

    无状态会话实例仅在单个方法调用期间专用于 EJB 对象。

    作为

    无状态会话实例仅在单个方法调用期间专用于客户端。来自客户端的第二次调用使用来自空闲池的实例

    (“client” - 可以是 servlet、会话 bean、mdb 或由 CDI 管理的 bean,或执行 JNDI 查找以获取 ejb 引用的 POJO)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-22
      • 1970-01-01
      • 2011-08-18
      • 2012-01-19
      • 1970-01-01
      • 2014-12-31
      • 1970-01-01
      • 2013-05-14
      相关资源
      最近更新 更多