注册到mbean服务器的Mbeans没有出现在jconsole中

Pra*_*nna 5 java jmx mbeans

我使用MBeanServerFactory.createMBeanServer创建一个mbean服务器并使用它注册mbeans.我可以在jconsole中找到mbean服务器,但是当我连接到它时,我看不到已注册的mbeans.这是代码:

public static void main(String[] args) throws Exception
{
    MBeanServer mbeanServer = MBeanServerFactory.createMBeanServer("example");
    ObjectName objectName = new ObjectName("example:type=simpleMbean");
    Simple simple = new Simple (1, 0);
    mbeanServer.registerMBean(simple, objectName);
    while (true)
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我使用platformMBeanServer并将mbean注册到它,而不是创建一个mbean服务器,我可以在jconsole中看到mbean.知道做createMBeanServer时我还需要做什么?

小智 2

我昨天遇到了这个问题,但设法解决了这个问题。我花了一些时间这样做,所以我认为这篇文章将有助于节省其他人的时间。

首先,您可以在 java 代码中注册您的 bean,如您在 main 方法中的帖子中所述。但我觉得如果用Spring的话就简单多了。

查看此链接以获取更多信息;http://static.springsource.org/spring/docs/2.0.x/reference/jmx.html

您需要避免一些漏洞。不要在应用程序中启动两个 MBeans 服务器。

我使用了这个配置文件:

<bean id="mbeanExporter" class="org.springframework.jmx.export.MBeanExporter" lazy-init="false">
<property name="beans">
<map>
<entry key="bean:name=beanName" value-ref="dataSource"/>
</map>
</property>
  <property name="registrationBehaviorName" value="REGISTRATION_REPLACE_EXISTING"/>
</bean>
Run Code Online (Sandbox Code Playgroud)

使用此配置将 bean 名称附加到 MBeanExporter。确保“lazy-init”设置为 false。请注意,我在网络应用程序中使用此配置。Web应用程序部署在tomcat内部。所以tomcat已经有了MBean服务器。因此您无需明确提供。如果以独立模式运行它,则需要启动 MBean 服务器并进行相应配置。

另请注意,您需要在 tomcat 的 catalina.bat 文件中添加以下属性。设置CATALINA_OPTS = -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port = 8088 -Dcom.sun.management.jmxremote.ssl = false -Dcom.sun.management.jmxremote.authenticate = false -Dcom。 sun.management.jmxremote.hostname =“本地主机”

在本例中,Jmx 连接器端口是 8088,主机名是“localhost”一旦启动 tomcat,您需要启动 jconsole(我不会在这里告诉如何启动它)然后单击“RemoteProcess”并输入“localhost:8088”并连接到 tomcat 的 MBean 服务器。然后转到 jconsole 中的 MBean 选项卡,您应该在那里看到您的 MBean。