2

我们在无状态 EJB 中有池化概念。使用池化有什么好处?我的理解是,它将节省对象创建的时间。这是正确的吗?如果是,创建对象或从现有池中获取对象的性能是否存在显着差异?池化是否有除此之外的任何其他目的?

4

1 回答 1

0

池化对于共享有限资源(例如数据库连接)和重用创建和/或销毁成本高昂的对象很有用。当与 EJB 结合使用时,它可以限制整个系统的负载,这在您运行服务器时非常有用。根据在类似问题中接受的答案,它也有助于线程安全。

当注入各种资源和其他 EJB(使用注释)时,创建(或设置)EJB 的成本可能很高,根据我的经验,这是一种常见的情况。但是,例如 JBoss 似乎会重复此过程,即使是池化的 EJB(请参阅 Tom Anderson 在类似问题中的回答)。

如果池中的公共 EJB 经常被注入到其他 EJB 中,则其他 EJB 将不得不等待公共 EJB 在系统真正繁忙时变得可用。然后,池中的公共 EJB 充当共享的有限资源。缺点是当公共 EJB 不可用时(有时是由基础设施中的故障引起的),您可能会在意想不到的地方出现超时异常(例如 50 秒后)。

我对 JBoss 服务器有一些经验,该服务器具有用于无状态 EJB 的池机制。在该 JBoss 服务器中有一个常用的 EJB,它经常使用数据库连接。如果大量工作一次全部进入系统,负载会很高,但会受到池化机制的限制。如果池化机制限制最大负载过多,可以通过增加最大池大小来增加最大负载。

于 2013-12-08T16:27:07.570 回答