我们在无状态EJB中引入了池化的概念。使用池化的优势是什么?我的理解是,这将节省创建对象的时间。是这样的吗?如果是,在创建对象和从现有池中获取对象时,性能是否有显著差异?除了这个之外,池化还有其他用途吗?
发布于 2013-12-09 00:27:08
池化对于共享有限的资源(例如数据库连接)和重用创建和/或销毁代价高昂的对象非常有用。当与EJB结合使用时,它可以限制整个系统的负载,这在运行服务器时非常有用。根据类似question中的公认答案,它还有助于提高线程安全性。
在注入各种资源和其他EJB (带有注释)时,创建(或设置)EJB的成本可能很高,根据我的经验,这是一种常见的情况。但是,例如,即使对于池化的question,JBoss似乎也会重复此过程(请参阅类似EJB中Tom Anderson的答案)。
如果池中的公共EJB经常被注入到其他EJB中,那么当系统真正繁忙时,其他EJB将不得不等待公共EJB变为可用。然后,池中的公共EJB充当共享的有限资源。缺点是,当通用EJB不可用时(有时是由基础设施中的hickup引起的),您可能会在意想不到的地方获得超时异常(例如,50秒后)。
我有一些使用JBoss服务器的经验,它具有用于无状态EJB的池机制。在该JBoss服务器中有一个公共的EJB,它经常使用数据库连接。如果大量工作同时进入系统,负载将会很高,但会受到池化机制的限制。如果池机制对最大负载的限制过大,则可以通过增加最大池大小来增加最大负载。
https://stackoverflow.com/questions/6555504
复制相似问题