我的Message Driven Bean执行高度密集的操作,所以我想限制它的池大小,否则我的服务器会被重载。我试过这个(代码)但它不起作用,它的池仍然是32(经验测试,我不时重新启动服务器,所以没有池实例)。
@MessageDriven( mappedName = "jms/TestTopic", activationConfig = {
@ActivationConfigProperty( propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge" ),
@ActivationConfigProperty( propertyName = "destinationType", propertyValue = "javax.jms.Topic" ),
@ActivationConfigProperty( propertyName = "subscriptionDurability", propertyValue = "Durable" ),
@ActivationConfigProperty( propertyName = "clientId", propertyValue = "Reader" ),
@ActivationConfigProperty( propertyName = "subscriptionName", propertyValue = "Reader" ),
@ActivationConfigProperty( propertyName = "endpointPoolMaxSize", propertyValue = "1" ),
@ActivationConfigProperty( propertyName = "endpointPoolResizeCount", propertyValue = "1" ),
@ActivationConfigProperty( propertyName = "endpointPoolSteadySize", propertyValue = "0" )
} )
public class Reader implements MessageListener {
我在JDK 6上使用Glassfish v3上的EJB 3.应用程序使用EE 6标准。
请问你能帮我限制游泳池吗?谢谢你的帮助。
答案 0 :(得分:3)
我建议创建一个sun-ejb-jar.xml并将池配置放在那里。请参阅http://www.sun.com/software/appserver/dtds/sun-ejb-jar_3_1-0.dtd中的bean-pool了解原始的血腥细节。有关详细信息,请参阅http://download.oracle.com/docs/cd/E19798-01/821-1750/6nmnbjlfi/index.html中的bean-pool,非常精细。
答案 1 :(得分:0)
我按照@vkraemer发布的链接,bellow是我的代码片段。似乎还需要steady-pool-size
和resize-quantity
,因为它们的默认值与低最大池大小不兼容。
<glassfish-ejb-jar>
<enterprise-beans>
<ejb>
<ejb-name>SimpleClassName</ejb-name>
<bean-pool>
<steady-pool-size>1</steady-pool-size>
<resize-quantity>1</resize-quantity>
<max-pool-size>6</max-pool-size>
</bean-pool>
</ejb>
</enterprise-beans>
</glassfish-ejb-jar>
但请注意:
设置较小的
max-pool-size
会导致过多的对象破坏 (因此过多的对象创建)实例被销毁 如果当前池大小超过max-pool-size
,则从池中。
...来自GlassFish performance-tuning-guide