0

每次我读到与 ejb 一起使用的客户一词时,我都不明白他们认为客户是什么。

对于 ejb,客户端的生命周期是多少?它是否因获取 bean 引用的方式而异,例如 jndi 或注入。

它是否与 http 会话一致,如果是,这与 jndi 有什么关系?

取决于如何获取参考,客户对话何时以 ejb 开始和结束?

它是否根据它是从 java ee 7 容器还是从 se 调用而有所不同?

编辑:我想我应该更具体。有状态会话 bean 维护状态,但是在什么上下文中以及在什么程度上维护该状态。例如,如果我获得参考,那么调用之间的状态是否仅由该参考保持?

此外,会话的概念以及所有类型的 ejb 中的唯一客户端是如何考虑的?

谢谢 :-)

4

2 回答 2

2

会话 bean 的客户端是获得对会话 bean 的引用(通过注入或通过 JNDI 查找)的任何对象。客户端的生命周期不依赖于引用的会话 bean。客户端有自己的,以某种方式管理的生命周期,会话 bean 有自己的,独立的生命周期。会话 bean 的生命周期取决于它的类型。会话 bean 有 3 种类型:

@Singletonbean 的生命周期非常简单,在应用的整个生命周期中只实例化一个 bean。

@Statefulbean 的生命周期与它的客户端生命周期一样长,所以它的生命周期不同。好吧,由于钝化机制,这在技术上并不正确,但从开发人员的角度来看,您可以假设这是正确的。

应用程序服务器@Stateless在部署时创建一个 bean 池。创建的实例分布在许多客户端上,并被不同的客户端多次重用。这里重要的是一次只有一个客户端可以使用一个 bean 实例。

于 2013-12-05T23:19:59.140 回答
1

我将尝试就使用 EJB 产生的这一点发表我的看法(即使不是那么深入),并且我希望从其他用户那里获得建设性的反馈。会话有 2 种风格:ejb 会话和“其他”(客户端)会话。客户端是指任何正在查找和使用您提供的远程接口的实体,也可能是本地接口,在这种情况下,客户端和 ejb 在同一个 JVM 中运行。

ejb 会话是指由 EJB 容器管理的会话。是否被调用无关紧要,会话在查找并创建有状态的 ejb 时开始,当然这发生在服务器端。ejb 具有注释会话持续时间的特定方法。此会话过期后,您将无法再访问 EJB 的此类实例,因此客户端您不再有对服务器中某些内容的引用。

另一方面,客户端有自己的会话,它独立于 EJB 会话,除非您希望两者相关。假设您的 EJB 正在管理您的客户端的登录,在触发 ejb 超时时,您的客户端将不再被记录。但这并不意味着您的客户端会话超时,也许它的会话时间更长。

考虑具有表示层和逻辑层的 2 层架构。通过具有自己会话概念的 jsf 进行演示,并通过 EJB 在具有自己的会话管理的不同服务器上进行逻辑。

您希望这两个会话相互关联,但它们并不相同。您可以设法在 ejb 超时时使 http/Servlete 会话过期,但它们处于两个不同的上下文中并且与两个不同的事物相关。

于 2013-09-22T08:32:14.857 回答