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

时间:2011-09-14 23:00:30

标签: 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)
    {
    }
}

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

4 个答案:

答案 0 :(得分:2)

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

首先,您可以在主要方法的帖子中注明java代码中注册bean。 但是我觉得如果你使用Spring会更简单。

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

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

我使用了这个配置文件:

<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>

使用此配置将bean名称附加到MBeanExporter。确保'lazy-init'设置为false。请注意我在webapplication中使用此配置。 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 = “localhost” 的

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

答案 1 :(得分:1)

最简单的解决方案是使用Platform MBean Server configured via system properties

所以你需要{/ 1}}实例

MBeanServer

并在启动应用程序时设置以下系统属性:

MBeanServer mbeanServer = ManagementFactory.getPlatformMBeanServer();

答案 2 :(得分:0)

如果要在JConsole中查看MBean,则必须使用RMI。基本上,请执行以下操作

Registry registry = LocateRegistry.createRegistry(RMI_REGISTRY_PORT);
//... create your MBean Server here and add your MBeans...
Map<String, Object> env = new HashMap<String, Object>(); //Add authenticators and stuff to the environment.    

//Create a URL from which your beans will be accessible.    
JMXServiceURL jmxServiceURL = new JMXServiceURL("rmi", 
                                                "localhost", 
                                                CONNECTOR_SERVER_PORT, 
                                                "/jndi/rmi://localhost:" + RMI_REGISTRY_PORT + "myApp");

//Start the connector server
JMXConnectorServer connectorServer = JMXConnectorServerFactory.newJMXConnectorServer(jmxServiceURL, env, server);
System.out.println(jmxServiceURL); //Use this URL to connect through JConsole, instead of selecting Local Process, just select the Remote process

答案 3 :(得分:0)

您需要使用PlatformMBeanServer

MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();

ps http://www.javalobby.org/java/forums/t49130.html