在JBoss JMS中实现MDB池监听器

时间:2011-11-21 17:11:30

标签: jboss jms message-driven-bean

我在JBoss中部署了一个应用程序,其中使用JBoss JMS实现部署了多个MDB,每个MDB都具有不同的MDB池大小配置。我期待某种机制,我们可以在每个MDB池大小上有一个监听器,我们可以检查是否在任何时候MDB池中的所有实例都被利用。这将有助于为每个MDB分析和配置适当的MDB池大小。

1 个答案:

答案 0 :(得分:1)

我们使用Jamon来监控MDB的实例,如下所示:

    @MessageDriven
@TransactionManagement(value = TransactionManagementType.CONTAINER)
@TransactionAttribute(value = TransactionAttributeType.REQUIRED)
@ResourceAdapter("wmq.jmsra.rar")
@AspectDomain("YourDomainName")
public class YourMessageDrivenBean implements MessageListener
{
    // jamon package constant
    protected static final String WB_ONMESSAGE = "wb.onMessage";

    // instance counter
    private static AtomicInteger counter = new AtomicInteger(0);
    private int instanceIdentifier = 0;

    @Resource
    MessageDrivenContext ctx;

    @Override
    public void onMessage(Message message)
    {
        final Monitor monall = MonitorFactory.start(WB_ONMESSAGE);
        final Monitor mon = MonitorFactory.start(WB_ONMESSAGE + "." + toString()
                + "; mdb instance identifier=" + instanceIdentifier);

        try {
// process your  message here
            }

        } catch (final Exception x) {
            log.error("Error onMessage " + x.getMessage(), x);
            ctx.setRollbackOnly();
        } finally {
            monall.stop();
            mon.stop();
        }

    }

    @PostConstruct
    public void init()
    {
        instanceIdentifier = counter.incrementAndGet();
        log.debug("constructed instance #" + instanceIdentifier);
    }
}

然后,您可以在Jamon-Monitor中看到每个创建的MDB实例。