动态实例化JMX MBean

时间:2012-08-30 20:35:02

标签: java spring jmx

我有一个白标/多租户服务器,提供相同的服务,但为多个客户打造品牌。我想使用JMX来监控每个客户的状态(nbr of calls,nbr of errors等)。

我知道如何使用Spring JMX注释来连接我的POJO(根据下面的代码)。我真正想要的是每个客户一个MBean,但由于客户在服务器启动时动态加载,我不知道如何使用注释来连接它。

这可能吗?如果没有,是否可以在启动时实例化我的MBean?

@Component
@ManagedResource(objectName = "TravelAPI:name=Customer") 
public class CustomerStatus extends GeneralCustomerStatus {

    @ManagedAttribute
    String customerId;
    .
    .
    .


}

1 个答案:

答案 0 :(得分:6)

我们所做的是让实际实例化动态对象的实体通过MBeanExporter向JMX注册它们。我们将MBeanExporter实例注入工厂实体,然后调用MBeanExporter.registerManagedResource(...)

例如我们做的事情如下:

...
mbeanExporter.registerManagedResource(beanInstance);
...

@Required
public void setMbeanExporter(MBeanExporter mbeanExporter) {
    this.mbeanExporter = mbeanExporter;
}

我们还使用NamingPolicy,以便动态对象可以提供自己的名称以使其唯一。在此处查看有关详细信息:

  

Change @ManagedResource objectName dynamically

另外,我的SimpleJMX package有一些代码可以帮助处理动态对象。