gpt4 book ai didi

java - GlassFish 如何将客户端请求映射到 session

转载 作者:行者123 更新时间:2023-11-30 04:44:40 25 4
gpt4 key购买 nike

使用 EJB (3.x),您可以选择 session Bean:@Stateful@Stateless 。如果我了解这两个选项背后的基础知识:

  • @Stateful - 每个用户/客户端都有自己的,因此通常不会集中;在多个请求中维护状态
  • @Stateless - 不维护请求之间的状态,因此通常会进行池化,以便每个新的客户端请求都会获得一个新的 bean

我的核心问题很简单,但是我有几个与之无关的小问题:我的 POJO 设计在 @Stateful 之间有何不同? bean 类与@Stateless 换句话说,如果我有 HelloWorld实现 Hello 的 bean接口(interface),POJO 的设计如何根据我是否希望它有状态而改变?

与此无关:

  • 应用程序容器(在我的例子中为 GlassFish)根据 EJB 是否有状态对 EJB 施加哪些不同的限制?
  • @Stateful为例,来自同一用户/客户端的客户端请求如何映射到正确的 bean(维护前一请求的客户端状态的 bean)?
  • session Bean 何时终止?我假设它是在 @Stateless 的请求完成后立即执行的,但没有 @Stateful 的线索.

提前感谢您的澄清。

最佳答案

关于核心问题“@Stateful beans 与 @Stateless 之间我的 POJO 设计有何不同”:

您的 hello world 示例是 @Stateless session bean 的一个很好的示例:实现没有状态(没有类实例变量)。它不对状态做出任何假设。如果您确实需要在 @Stateless bean 中查找“更多信息”、(重新)计算它等。如果您违反此规则并在 bean 上定义实例变量,则无法保证该信息将是您所期望的它出现在 bean 的每次调用上:不要这样做。

@Stateful bean 的设计将保留容器在 bean 生命周期内保留的内部状态(类实例变量); bean 必须是可序列化的。在 session 的整个生命周期中保留 bean 会产生非常实际的运行时成本(内存和管理第二个切题问题的问题,特别是在集群环境中)——因此仅在适当的时候使用它(这证明了@Stateless beans 的存在)。

例如,考虑一个简单的注册页面:输入用户名、电子邮件地址等,然后输入“您确定吗?”? @Stateful bean 可以保留此临时信息,直到您准备好将其提交到后端为止。

Google 为例;这是一个:http://docs.redhat.com/docs/en-US/JBoss_Enterprise_Application_Platform/6/html/Beta_Documentation/Stateful_Session_Bean_Example.html

客户端如何映射到正确的 @Stateful bean 确实取决于实现(不是规范),但是您可以期望它的管理方式类似于 Servlet session 信息的维护方式。也就是说,不要将 Servlet session 与 @Stateful session 混淆 - 它们根本不是同一件事。

对于 Java EE 5/6,在 @Stateful bean 中用 @Remove 注释一个方法,当您的客户端调用该方法时,它将被释放回以太。除此之外,只要您持有对 @Stateful bean 的引用(即在您的 Servlet session 中),您就可以期望 @Stateful bean 在您需要时就在身边。

另请参阅:http://docs.oracle.com/javaee/5/tutorial/doc/bnbmt.html

关于java - GlassFish 如何将客户端请求映射到 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11333627/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com