6

MBeanServerFactory.createMBeanServer を使用して mbean サーバーを作成し、それに mbean を登録します。jconsole で mbean サーバーを見つけることができますが、それに接続すると、登録済みの mbean が表示されません。コードは次のとおりです。

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)
    {
    }
}

mbean サーバーを作成する代わりに、platformMBeanServer を使用して mbean を登録すると、jconsole で mbean を確認できます。createMBeanServer の実行中に他に何をする必要があるか考えていますか?

4

4 に答える 4

2

昨日この問題に遭遇しましたが、なんとか解決しました。私はそれに時間を費やしているので、この投稿は他の人の時間を節約するのに役立つと思いました.

最初に、メイン メソッドの投稿に記載されているように、Java コードに Bean を登録できます。しかし、Spring を使えばもっと簡単だと思います。

詳細については、このリンクを参照してください。http://static.springsource.org/spring/docs/2.0.x/reference/jmx.html

回避する必要がある抜け穴がいくつかあります。アプリケーションで 2 つの 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 に設定されていることを確認してください。この構成を Web アプリケーションで使用していることに注意してください。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 が表示されます。

于 2012-03-08T10:26:08.260 に答える
1

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
于 2013-03-21T06:03:47.707 に答える
1

最も簡単な解決策は、システム プロパティで構成されたプラットフォーム MBean サーバーを使用することです。

MBeanServerしたがって、インスタンスを使用する必要があります

MBeanServer mbeanServer = ManagementFactory.getPlatformMBeanServer();

アプリケーションの起動時に次のシステム プロパティを設定します。

-Dcom.sun.management.jmxremote.port=1919
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
于 2014-04-24T13:28:45.520 に答える
0

PlatformMBeanServer を使用する必要があります

MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();

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

于 2013-09-27T15:49:56.500 に答える