java - 为什么要池化无状态 session bean?

标签 java ejb pooling stateless-session-bean

Java 中的无状态 bean 不会在来自客户端的两次调用之间保持其状态。所以简而言之,我们可以将它们视为具有业务方法的对象。每个方法都接受参数并返回结果。当调用该方法时,正在执行堆栈中创建一些局部变量。当方法返回时,局部变量会从堆栈中删除,如果分配了一些临时对象,它们无论如何都会被垃圾回收。

从我的角度来看,这与通过单独的线程调用同一单个实例的方法没有什么不同。那么为什么容器不能使用一个 bean 的实例而不是池化多个实例呢?

最佳答案

池有几件事情。

第一,通过每个实例有一个 bean,您可以保证线程安全(例如,Servlet 不是线程安全的)。

第二,您可以减少 bean 可能具有的任何潜在启动时间。虽然 session Bean 是“无状态的”,但它们只需要对客户端是无状态的。例如,在 EJB 中,您可以将多个服务器资源注入(inject)到一个 session Bean 中。该状态对于 bean 来说是私有(private)的,但是没有理由不能阻止它从调用到调用。因此,通过池化 bean,您可以将这些查找减少到仅在创建 bean 时发生。

三,你可以使用 bean pool 来限制流量。如果池中只有 10 个 Bean,则最多只能同时处理 10 个请求,其余的将排队。

关于java - 为什么要池化无状态 session bean?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/134791/

相关文章:

java - 区分父类的数组列表中的每个子类

java - EJB + JSF (Primefaces) Maven -> 在 EJB 中使用 primefaces jar -> 在 Jboss、Eclipse 上部署期间出现异常

java - 如何从同一 GlassFish Server 上的另一个应用程序注入(inject) EJB?

linux - 获取 Linux 接口(interface)上传入/传出带宽速度的快照?

python - Keras 中具有掩蔽支持的均值或最大池化

multithreading - 管理多进程 : What are the common strategies?

java - 在 mvn clean package 期间仅构建一次 WAR

java - 命令行中的 Spring 属性

java - 如果我们将 SessionScoped bean 注入(inject)到 Stateless bean 中,如果没有 HTTP session 会发生什么?

java - Spring 数据 JPA 存储库匹配所有列或整个 pojo