在本书Enterprise JavaBeans 3.1中,他们讨论了EJB对象和实现对象。我指的是关于无状态会话bean的内容:
一旦实例位于方法就绪池中,就可以进行服务了 客户要求。当客户端在EJB上调用业务方法时 对象,方法calll被委托给中的任何可用实例 方法就绪池。当实例正在执行请求时,是 不可供其他EJB对象使用。一旦实例有 完成后,它立即可用于任何需要它的EJB对象。 无状态会话实例仅专用于EJB对象 单个方法调用的持续时间。
我理解无状态会话bean是如何工作的,但是我没有区分EJB对象和无状态会话实例?
当我用@Stateless注释类时,我以为我创建了一个EJB?
答案 0 :(得分:2)
我认为它将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实例上调用方法。
这就是我理解这一段的方式。
答案 1 :(得分:0)
EJB框架为您的implmenetation类提供事务性等服务,这是通过控制反转来完成的。
编写会话bean时,只编写应用程序的业务逻辑,EJB contatiner处理客户端调用和所有中间件。为此,它会生成EJB对象,并使用额外的功能进行扩充,并且还包含业务逻辑。
当您注释类时,您告诉EJB容器将其视为EJB对象的基础
摘录希望澄清无状态会话bean不会比一个客户端请求更长时间地保留其“状态”。 (不是有状态的豆)
答案 2 :(得分:0)
我理解无状态会话bean是如何工作的,但是我没有区分EJB对象和无状态会话实例?
我认为你的困惑在于使用术语'EJB Objects'
我认为没有任何特殊术语'EJB Objects'。也许你可以阅读
当实例正在执行请求时,is不可供其他EJB对象使用
作为
当实例正在执行请求时,is不可供任何其他客户端使用
和这个
无状态会话实例仅在单个方法调用期间专用于EJB对象。
as
无状态会话实例仅在单个方法调用期间专用于客户端。来自客户端的第二个调用使用free-pool中的实例
(“client” - 可以是由CDI管理的servlet,会话bean,mdb或bean,也可以是执行JNDI查找以获取ejb引用的POJO)