如何在Glassfish v3上限制MDB的池大小

时间:2011-02-18 21:36:33

标签: glassfish jms pool message-driven-bean

我的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标准。

请问你能帮我限制游泳池吗?谢谢你的帮助。

2 个答案:

答案 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-sizeresize-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