CoherenceのMbeanにJMXで接続するサンプル
久々に技術ブログを書きたくなったので、Coherenceネタでも一つ。
Coherenceはドキュメントがしっかりしてるんだけど、結構重要なMbeanアクセスのサンプルが
Webに落ちてなくて四苦八苦したので、そのサンプルを提供。
まずはcoherence.jarをクラスパスにいれてください。
で、以下がJavaのコード
RemoteMbeanAccess.java
package com.example.coherence.jmx; import javax.management.MBeanServerConnection; import javax.management.ObjectName; import javax.management.remote.JMXConnector; import javax.management.remote.JMXConnectorFactory; import javax.management.remote.JMXServiceURL; public class RemoteMbeanAccess { public static void main(String[] args) throws Exception{ String host = "localhost"; String registryport = "9000"; String connectionport="3000"; String url = "service:jmx:rmi://" + host + ":" + connectionport + "/jndi/rmi://" + host + ":" + registryport + "/server"; System.out.println(url); JMXConnector connector = JMXConnectorFactory.connect(new JMXServiceURL(url)); MBeanServerConnection server = connector.getMBeanServerConnection(); System.out.println( server.getMBeanCount()); System.out.println("connection id = "+ connector.getConnectionId()); System.out.println("connection domain = "+ connector.getMBeanServerConnection().getDefaultDomain()); String name = (String)server.getAttribute(new ObjectName("Coherence:type=Cluster"),"ClusterName"); System.out.println(name); Integer cacheSize = (Integer)server.getAttribute(new ObjectName("Coherence:type=Cache,service=DistributedCache,name=test,nodeId=1,tier=back"),"Size"); System.out.println(cacheSize); connector.close(); } }
クラスタ名とキャッシュサイズを取得して返すだけです。
で、キャッシュサーバーを立ち上げるのはもちろんながら、MBeanコネクターサーバというのを立ち上げる必要もあります。
以下コマンド(Windows用)
1.キャッシュサーバーの起動コマンド(Windows用)
@echo off set coherence_home=%~dp0 set memory=512m set java_opts=-Xms%memory% -Xmx%memory% %jmxproperties% java %java_opts% -cp "%coherence_home%\lib\coherence.jar" com.tangosol.net.DefaultCacheServer @echo on
2.MBeanコネクターサーバの起動(Windows用)
→ホスト、ポートはデフォルトになっています。cmdファイル内でjavaの起動引数を設定していますので適宜変更ください。
@echo off set coherence_home=%~dp0 echo "%coherence_home%" set memory=256m set jmxproperties=-Dtangosol.coherence.management=all set jmxproperties=%jmxproperties% -Dcom.sun.management.jmxremote.ssl=false set jmxproperties=%jmxproperties% -Dcom.sun.management.jmxremote.authenticate=false set jmxproperties=%jmxproperties% -Dtangosol.coherence.management.remote.host=localhost set jmxproperties=%jmxproperties% -Dtangosol.coherence.management.remote.registryport=9000 set jmxproperties=%jmxproperties% -Dtangosol.coherence.management.remote.connectionport=3000 set java_opts=-Xms%memory% -Xmx%memory% %jmxproperties% java %java_opts% -cp "%coherence_home%\lib\coherence.jar" com.tangosol.net.management.MBeanConnector -rmi @echo on