读书人

JMX in Action 学习日记

发布时间: 2012-08-28 12:37:01 作者: rapoo

JMX in Action 学习日志
学习JMX 是JMX IN ACTION 一书
书中的代码中RMI的API已经过时了,
写了些新代码

JMXBookAgent.java //Server
package jmxbook.ch3;

import java.rmi.registry.LocateRegistry;

import javax.management.MBeanServer;
import javax.management.MBeanServerFactory;
import javax.management.ObjectName;
import javax.management.remote.JMXConnectorServer;
import javax.management.remote.JMXConnectorServerFactory;
import javax.management.remote.JMXServiceURL;

import com.sun.jdmk.comm.HtmlAdaptorServer;

public class JMXBookAgent {

private MBeanServer server = null;

public JMXBookAgent() {
System.out.println("\n\tCREATE the MBeanServer");
server = MBeanServerFactory.createMBeanServer("JMXBookAget");

startHTMLAdapter();
startRMIConnector();

try {
server.registerMBean(new HelloWorld(), new ObjectName("HelloWorldMBean:name=helloWorld"));
} catch (Exception e) {
e.printStackTrace();
}
}

private void startRMIConnector() {
try {
/*
* 先注册RMI的端口 再进行对RMIConnectorServer的注册
*/
LocateRegistry.createRegistry(2099);
JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:2099/server");
JMXConnectorServer cs = JMXConnectorServerFactory.newJMXConnectorServer(url, null, server);
server.registerMBean(cs, new ObjectName("JMXAgent:name=RMI,port=2099"));
cs.start();
} catch (Exception e) {
e.printStackTrace();
}
}

private void startHTMLAdapter() {
HtmlAdaptorServer adapter = new HtmlAdaptorServer();
ObjectName adapterName = null;
try {
adapter.setPort(9092);
adapterName = new ObjectName("JMXBookAgent:name=html,port=9092");
server.registerMBean(adapter, adapterName);
adapter.start();
} catch (Exception e) {
e.printStackTrace();
}
}

public static void main(String[] args) {
System.out.println("\n~~~~~~~~~~~~~~~~~~~~~~~" +
"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
System.out.println("\n>>> START of JMXBook Agent");
System.out.println("\n>>> CREATE the agent...");

JMXBookAgent jba = new JMXBookAgent();

System.out.println("\nAgent is Ready for Service...\n");
}
}

Client:
package jmxbook.ch3;

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 RMIClientFactory {

public static MBeanServerConnection getClient() {
MBeanServerConnection mbsc = null;
try {
JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:2099/server");
JMXConnector jmxc = JMXConnectorFactory.connect(url, null);
mbsc = jmxc.getMBeanServerConnection();
} catch (Exception e) {
e.printStackTrace();
}
return mbsc;
}

public static void main(String[] args) {
MBeanServerConnection mbsc = RMIClientFactory.getClient();
System.out.println("**************");
try {
mbsc.invoke(new ObjectName("HelloWorldMBean:name=helloWorld"), "printGreeting", null, null);
} catch (Exception e) {
e.printStackTrace();
}

}
}

HelloWorldMBean:
package jmxbook.ch3;

public interface HelloWorldMBean
{
public void setGreeting( String greeting );

public String getGreeting();

public void printGreeting();
}

HelloWorld
package jmxbook.ch3;

public class HelloWorld implements HelloWorldMBean
{

private String greeting = null;

public HelloWorld()
{
this.greeting = "Hello World! I am a Standard MBean";
}

public HelloWorld( String greeting )
{
this.greeting = greeting;
}

public void setGreeting( String greeting )
{
this.greeting = greeting;
}

public String getGreeting()
{
return greeting;
}

public void printGreeting()
{
System.out.println( greeting );
}

}




读书人网 >软件架构设计

热点推荐