【发布时间】:2012-01-03 04:18:14
【问题描述】:
我在 JBoss 中部署了一个应用程序,其中使用 JBoss JMS 实现部署了多个 MDB,每个 MDB 都具有不同的 MDB 池大小配置。我期待某种机制,我们可以在每个 MDB 池大小上都有一个侦听器,我们可以在任何时候检查 MDB 池中的所有实例是否都被利用。这将有助于为每个 MDB 分析和配置适当的 MDB 池大小。
【问题讨论】:
标签: jboss jms message-driven-bean
我在 JBoss 中部署了一个应用程序,其中使用 JBoss JMS 实现部署了多个 MDB,每个 MDB 都具有不同的 MDB 池大小配置。我期待某种机制,我们可以在每个 MDB 池大小上都有一个侦听器,我们可以在任何时候检查 MDB 池中的所有实例是否都被利用。这将有助于为每个 MDB 分析和配置适当的 MDB 池大小。
【问题讨论】:
标签: jboss jms message-driven-bean
我们使用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 实例。
【讨论】: