Java EJB对象和实现bean之间有什么区别?

Java EJB对象和实现bean之间有什么区别?,java,jakarta-ee,ejb,Java,Jakarta Ee,Ejb,在本书中,他们讨论了EJB对象和实现对象。我指的是我读到的关于无状态会话bean的内容: 一旦实例位于方法就绪池中,它就可以开始服务了 客户端请求。当客户端调用EJB上的业务方法时 对象,方法calll被委托给 方法就绪池。当实例执行请求时,is 不可供其他EJB对象使用。一旦实例完成 完成后,任何需要它的EJB对象都可以立即使用它。 无状态会话实例仅用于EJB对象 单个方法调用的持续时间 我了解无状态会话bean是如何工作的,但我不了解EJB对象和无状态会话实例之间的区别 例如,当我用@Sta

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

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

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


例如,当我用@Stateless注释类时,我想我制作了一个EJB。

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

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

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

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

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

作为

当实例执行请求时,is不可供任何其他客户端使用

还有这个

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

作为

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


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

我认为它将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
对象,那么两个并发调用永远不会委托给同一个实例。该实例是方法调用的专用实例。“但这是一个细节。”埃温利同意。我认为线程安全是EJB最重要的特性之一。