每当我读到客户端与ejb一起使用时,我都不明白他们认为客户端是什么。
对于ejb,客户的生命周期是多少?它是否取决于获取豆类参考的方式,如jndi或注射。
它是否与http会话对齐,如果是这样,这与jndi有什么关系?
客户端会话何时开始并以ejb结束,具体取决于获取引用的方式?
它是否因java ee 7容器与se?
调用而异编辑:我想我应该更具体一点。有状态会话bean维护状态,但在什么上下文以及该状态维持的程度。例如,如果我获得一个引用,那么仅在该引用之间进行的调用之间是否保持状态?
此外,会话的概念和所有类型的ejbs中的唯一客户端是什么?
谢谢: - )
答案 0 :(得分:2)
会话bean的客户端是获取对会话bean的引用的任何对象(通过注入或通过JNDI查找)。客户端生命周期不依赖于引用的会话bean。客户端有自己的,以某种方式管理生命周期,会话bean有自己的独立生命周期。会话bean的生命周期取决于其类型。会话bean有3种类型:
@Singleton
bean生命周期非常简单,只在应用程序的整个生命周期中实例化一个bean。
@Stateful
豆就会存在,所以它的生命周期各不相同。好吧,由于钝化机制,技术上并不正确,但从开发人员的角度来看,你可以认为这是正确的。
应用程序服务器在部署时创建@Stateless
个bean池。创建的实例分布在许多客户端上,并由不同的客户端多次重用。这里重要的是,只有一个客户端可以使用bean实例。
答案 1 :(得分:1)
我会尝试通过使用EJB(即使不是那么深入)给出我对此的看法,我希望得到其他用户的建设性反馈。 Session有两种形式:ejb会话和“其他”(客户端)会话。 客户端是指查找并使用您提供的远程接口的任何实体,也可能是本地接口,在这种情况下,客户端和ejb在同一JVM中运行。
ejb会话是指由EJB容器管理的会话。 不管是否被调用,会话都会在查找并创建statefull ejb时开始,当然这发生在服务器端。 ejb具有注释会话持续时间的特定方式。在此会话过期后,您无法再访问EJB的此类实例,因此客户端您不再需要服务器中的某些内容。
另一方面,客户端有自己的会话,它独立于EJB会话,除非您希望两者相关。假设您的EJB正在管理客户端的登录,在激活ejb超时时,您的客户端将不再被记录。但这并不意味着您的客户端会话超时,也许它的会话时间更长。
考虑使用具有表示层和逻辑层的2层架构。通过jsf进行演示,它们有自己的会话概念,并通过EJB在不同的服务器上进行逻辑,这些服务器有自己的会话管理。
您希望两个会话彼此相关,但它们不相同。您可以设法在ejb超时时使http / Servlete会话到期,但它们处于两个不同的上下文中并且与两个不同的事物相关。