学习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 );
}
}
书中的代码中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 );
}
}