performance - 使用 EJB 的实例池如何提高性能?

标签 performance jakarta-ee ejb pooling

使用 EJB 的实例池如何提高性能?难道仅使用 Java servlet 之类的线程就无法实现相同的性能吗?

或者 EJB 实例池的发生可能是出于其他原因?

最佳答案

实例池不仅有帮助,因为您可以重复使用对象(并避免昂贵的对象创建),而且还允许应用程序。服务器正确管理负载。这是应用程序。服务器特定,但您通常可以指定 max-pool-size , min-pool-size , pool-resizetimeout

当池达到其 max-pool-size 时容量,使用现有实例来处理请求,如果在预期时间范围内没有可用实例,则会超时。这可能会降低应用程序的服务质量,但至少不会破坏应用程序。服务器本身。这与 Web 服务器相同。

关于线程安全的一些注意事项:

教派。 4.3.13 “序列化 session Bean 方法”

The container serializes calls to each session bean instance. Most containers will support many instances of a session bean executing concurrently; however, each instance sees only a serialized sequence of method calls. Therefore, a session bean does not have to be coded as reentrant.

根据 EJB 规范,对特定 Bean 实例的所有请求均由应用程序同步。服务器。例如,这允许无状态 session Bean (SLSB) 在其字段之一中存储数据库连接。不过,SLSB 的字段应该是 transient 的。 (bean 实例可以随时销毁/重新创建。)通过同步,应用程序。服务器确保 SLSB 是线程安全的。无需应用程序同步。服务器端,开发者应确保SLSB是线程安全的,即它不应该有任何字段。

注意:SLSB 中很少有字段。大多数 SLSB 本质上都是线程安全的。例如,我不建议将连接存储在字段中。最好在方法中获取一个,并尽快在方法中释放。

关于performance - 使用 EJB 的实例池如何提高性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1954137/

相关文章:

javascript - 为什么字符串连接比数组连接更快?

java - EJB 注入(inject)不起作用

java - 获取二进制文件和文本信息

java - 多线程servlet;单线程EJB

java - 初始化@EJB字段

performance - 我们需要 xfire 请求 header 中的 "Expect: 100-continue" header 吗?

c# - C#在Excel文件中添加多个超链接的优化方式

python - MATLAB 的速度是 Numpy 的两倍

java - 如何将日志跟踪从控制台导出到文本文件

database - 如何将从消息驱动的 bean 中检索到的数据保存到数据库中?