JGroupsの情報を外部から監視する方法

JGroupsの情報を外部からJMX経由で監視する方法です。(JMX経由の監視方法はこちらを参照のこと)

以下のサンプルでは、OSCache の設定と同一チャネルに接続して、情報を取得しています。

import java.io.InputStream;
import java.lang.management.ManagementFactory;
import java.util.Properties;

import javax.management.MBeanServer;

import org.jgroups.JChannel;
import org.jgroups.jmx.JmxConfigurator;

public class Observer {
  
  public static void main(String[] args) throws Exception {
    // クラスパス中の OSCache の定義ファイルから、JGroups 関連情報を引き出す。
    InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("oscache.properties");
    Properties props = new Properties();
    props.load(is);
    
    // 必要があれば、JGroup 関連情報を加工する。
    // 下記では、STATS プロトコルを追加している。
    JChannel channel = new JChannel("STATS:" + props.getProperty("cache.cluster.properties"));
    
    // OSCache が使用している JGroups のバスに接続する。
    channel.connect("OSCacheBus");
    
    // 既存の MBeanServer を取得。既存のものがなければ、自作する。
    MBeanServer server = ManagementFactory.getPlatformMBeanServer();
    
    // MBeanServer に、チャネル情報を登録する。
    JmxConfigurator.registerChannel(channel, server, "JGroups", channel.getClusterName(), true);
  }
  
}