我使用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时我还需要做什么吗?
答案 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();