gpt4 book ai didi

java - 为什么这个内部类可能是不兼容的 MBean?

转载 作者:行者123 更新时间:2023-12-02 21:09:36 28 4
gpt4 key购买 nike

看来我的类是内部类这一事实导致了这个问题,这是我的预感 - 但基本上它是通常的模式:

public class UserProvisionerProfiler implements UserProvisionerProfilerMBean {

@Override
public int getTotalNumberOfUsers() {
return activeClients.size();
}
}

以及接口(interface)(嵌套在更大的类中):

public interface UserProvisionerProfilerMBean {

public int getTotalNumberOfUsers();

}

在代码中注册:

    UserProvisionerProfiler userProvisionerProfiler = new UserProvisionerProfiler();

MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
ObjectName name = new ObjectName(userProvisionerProfiler.getClass().getPackage().getName() + ":type=" + userProvisionerProfiler.getClass().getName());

mbs.registerMBean(userProvisionerProfiler, name);

错误:

   1356 [1;31mERROR[39m [main],            UserProvisioner  ; Unhandled exception caught in     main()
javax.management.NotCompliantMBeanException: MBean class UserProvisioner$UserProvisionerProfiler does not implement DynamicMBean, and neither follows the Standard MBean conventions (javax.management.NotCompliantMBeanException: Class UserProvisioner$UserProvisionerProfiler is not a JMX compliant Standard MBean) nor the MXBean conventions (javax.management.NotCompliantMBeanException: UserProvisioner$UserProvisionerProfiler: Class UserProvisioner$UserProvisionerProfiler is not a JMX compliant MXBean)
at com.sun.jmx.mbeanserver.Introspector.checkCompliance(Introspector.java:171)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerMBean(DefaultMBeanServerInterceptor.java:317)
at com.sun.jmx.mbeanserver.JmxMBeanServer.registerMBean(JmxMBeanServer.java:512)
UserProvisioner.registerThisAsMBean(UserProvisioner.java:734)
UserProvisioner.start(UserProvisioner.java:797)
UserProvisioner.main(UserProvisioner.java:844)

除了阅读 JMX 规范或代码之外,我在找到兼容 MBean 的更严格定义方面几乎没有成功,所以我想知道是否可以挽救内部类,或者是否必须将其分离出来,或者如果我还缺少其他东西。

最佳答案

根据 JMX 规范,标准 MBean 必须由两部分组成:

  1. 名为 MBean 的 MBean 接口(interface)
  2. 命名并实现 MBean 接口(interface)的 MBean 实现。

由于这些限制,当且仅当 MBean 接口(interface)也是同一包含类的静态内部类时,静态内部类才可以是 MBean 实现。

关于java - 为什么这个内部类可能是不兼容的 MBean?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12360405/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com