EJB对象和实现bean之间的区别是什么?



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

一旦实例在Method-Ready池中,它就可以提供服务了客户机请求。当客户机调用EJB上的业务方法时对象中任何可用的实例都可以调用该方法Method-Ready池。当实例执行请求时,它是不可用于其他EJB对象。一旦实例完成后,任何需要它的EJB对象都可以立即使用它。无状态会话实例专用于EJB对象,仅用于单个方法调用的持续时间。

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

我认为我做了一个EJB当我注释类与@无状态的例子?

我认为它指的是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实例上调用了一个方法。

这就是我对这段话的理解

EJB框架为您的实现类提供事务性之类的服务,这是通过控制反转完成的。
在编写会话bean时,只编写应用程序的业务逻辑,EJB容器处理客户机调用和所有中间件内容。为此,它生成带有额外功能的EJB对象,并包含您的业务逻辑。当您注释您的类时,您告诉EJB容器将其视为EJB对象的基础。
这段摘录想要澄清的是,无状态会话bean保留其"状态"的时间不会超过一个客户端请求。(不作为有状态bean)

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

我认为你的困惑是在使用术语"EJB对象"

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

当实例执行请求时,其他EJB对象无法使用

当实例正在执行请求时,它不可用于任何其他客户端

和this

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

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

中的实例

("客户端"—可以是servlet、会话bean、mdb或CDI管理的bean,或执行JNDI查找以获取ejb引用的POJO)

相关内容

最新更新