使用 EJB 的实例池如何提高性能?难道仅使用 Java servlet 之类的线程就无法实现相同的性能吗?
或者 EJB 实例池的发生可能是出于其他原因?
最佳答案
实例池不仅有帮助,因为您可以重复使用对象(并避免昂贵的对象创建),而且还允许应用程序。服务器正确管理负载。这是应用程序。服务器特定,但您通常可以指定 max-pool-size
, min-pool-size
, pool-resize
和 timeout
。
当池达到其 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/