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

时间:2011-11-15 11:21:54

标签: java java-ee ejb

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

  

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

我理解无状态会话bean是如何工作的,但是我没有区分EJB对象和无状态会话实例?

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

3 个答案:

答案 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)