JXMサーバー機能をRMIを使って処理を実行してみる

MBean.java

package sample;

public interface MBean {

    public static final String SERVICE = "service:jmx:rmi:///jndi/rmi://localhost/sample";
    public static final String OBJECT_NAME = "sample.jmx:Type=JmxServer";
    public void test();

}

MBeanImpl.java

package sample;

import javax.management.StandardMBean;

public class MBeanImpl extends StandardMBean implements MBean {
    public MBeanImpl() {
        super(MBean.class,false);
    }
    public void test() {
        System.out.println("hoge fuga foobar");
    }
}

Server.java

package sample;

import java.rmi.registry.LocateRegistry;
import javax.management.MBeanServer;
import javax.management.ObjectName;
import javax.management.remote.JXMServiceURL;
import javax.management.remote.JMXConnectorServer;
import javax.management.remote.JMXConnectorServerFactory;
import java.lang.management.ManagementFactory;

public class Server {
    public static void main(String[] args) throws Exception {
        LocateRegistry.createRegistry(1099);

        MBeanServer mbean = ManagementFactory.getPlatformMBeanServer();
        mbean.registerMBean(new MBeanImpl(),new ObjectName(MBean.OBJECT_NAME));

        JMXServiceURL url = new JMXServiceURL(MBean.SERVICE);
        JMXConnectorServer server = JMXConnectorServerFactory.newJMXConnectorServer(url,null,mbean);
        server.start();
    }
}

コンパイル後に実行しJMXサーバーを起動しておく

Client.java

package sample;

import javax.management.remote.JMXServiceURL;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.MBEanServerConnection;
import javax.management.ObjectName;

public class Client {
    public static void main(String[] args) throws Exception {
        JMXServiceURL url = new JMXServiceURL(MBean.SERVICE);
        JMXConnector connector = JMXConnectorFactory.connect(url);
        MBeanServerConnection conn = connector.getMBeanServerConnection();
        ObjectName oname = new ObjectName(MBean.OBJECT_NAME);

        conn.invoke(oname,"test",null,null));
    }
}