有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java动态实例化JMX MBean

我有一台白标/multi-tennant服务器,提供相同的服务,但品牌面向多个客户。我想使用JMX来监控每个客户的状态(呼叫的nbr、错误的nbr等)

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

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

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

    @ManagedAttribute
    String customerId;
    .
    .
    .


}

共 (1) 个答案

  1. # 1 楼答案

    What I really want is one MBean per customer, but because the customers are dynamically loaded up at server startup time I don't know how to wire this up using annotations.

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

    例如,我们做了如下工作:

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

    我们还使用了NamingPolicy,以便动态对象可以提供自己的名称,使其唯一。请参见此处的更多详细信息:

    Change @ManagedResource objectName dynamically

    另外,mySimpleJMX package有一些代码可以帮助处理动态对象