JMX服务端和客户端的代码
服务端代码如下
以下是客户端代码:
以下是HelloWorldMBean
以下是HelloWorld.java类:
- package com.rmi;
- import java.rmi.registry.LocateRegistry;
- import java.util.HashMap;
- import java.util.Map;
- 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;
- public class Server {
- /**
- * @param args
- * @throws Exception
- */
- public static void main(String[] args) throws Exception {
- LocateRegistry.createRegistry(1234);//必须要这句,参数为端口号
- ObjectName helloName = new ObjectName("QianYu:type=oamp,name=hello");
- HelloWorld hello = new HelloWorld();
- MBeanServer server = MBeanServerFactory.createMBeanServer();
- // provide a valid username and password (e.g., via program arguments)
- String user = "monitorRole";
- String pw = "password";
- // place the username and password in a string array of credentials that
- // can be used when making the connection to the remote JMX agent
- String[] credentials = new String[] { user, pw };
- // the string array of credentials is placed in a map keyed against the
- // well-defined credentials identifier string
- Map<String, String[]> props = new HashMap<String, String[]>();
- props.put("jmx.remote.credentials", credentials);
- // supply the map of credentials to the connect call
- JMXServiceURL address =
- new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:1234/jmxrmi");
- JMXConnectorServer cserver =
- JMXConnectorServerFactory.newJMXConnectorServer(address, props, server);
- cserver.start();
- server.registerMBean(hello, helloName);
- }
- }
package com.rmi;
import java.rmi.registry.LocateRegistry;
import java.util.HashMap;
import java.util.Map;
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;
public class Server {
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
LocateRegistry.createRegistry(1234);//必须要这句,参数为端口号
ObjectName helloName = new ObjectName("QianYu:type=oamp,name=hello");
HelloWorld hello = new HelloWorld();
MBeanServer server = MBeanServerFactory.createMBeanServer();
// provide a valid username and password (e.g., via program arguments)
String user = "monitorRole";
String pw = "password";
// place the username and password in a string array of credentials that
// can be used when making the connection to the remote JMX agent
String[] credentials = new String[] { user, pw };
// the string array of credentials is placed in a map keyed against the
// well-defined credentials identifier string
Map<String, String[]> props = new HashMap<String, String[]>();
props.put("jmx.remote.credentials", credentials);
// supply the map of credentials to the connect call
JMXServiceURL address =
new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:1234/jmxrmi");
JMXConnectorServer cserver =
JMXConnectorServerFactory.newJMXConnectorServer(address, props, server);
cserver.start();
server.registerMBean(hello, helloName);
}
}
以下是客户端代码:
- package com.rmi;
- import java.util.HashMap;
- import java.util.Hashtable;
- import java.util.Map;
- import javax.management.JMX;
- import javax.management.MBeanServerConnection;
- import javax.management.ObjectInstance;
- import javax.management.ObjectName;
- import javax.management.remote.JMXConnector;
- import javax.management.remote.JMXConnectorFactory;
- import javax.management.remote.JMXServiceURL;
- public class Client {
- /**
- * @param args
- * @throws Exception
- */
- public static void main(String[] args) throws Exception {
- // provide a valid username and password (e.g., via program arguments)
- String user = "monitorRole";
- String pw = "password";
- // place the username and password in a string array of credentials that
- // can be used when making the connection to the remote JMX agent
- String[] credentials = new String[] { user, pw };
- // the string array of credentials is placed in a map keyed against the
- // well-defined credentials identifier string
- Map<String, String[]> props = new HashMap<String, String[]>();
- props.put("jmx.remote.credentials", credentials);
- // supply the map of credentials to the connect call
- JMXServiceURL address =
- new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:1234/jmxrmi");
- JMXConnector connector = JMXConnectorFactory.connect(address, props);
- // it is a trivial matter to get a reference for the MBean server
- // connection to the remote agent
- MBeanServerConnection mbsc = connector.getMBeanServerConnection();
- connector.connect();
- ObjectName objectName=new ObjectName("hello:name=hello");
- if(!mbsc.isRegistered(objectName)){
- mbsc.createMBean("com.rmi.HelloWorld", objectName,null,null);
- }
- System.out.println("\nMBean count = " + mbsc.getMBeanCount());
- for (ObjectInstance object : mbsc.queryMBeans(null, null)) {//服务器上的所有MBean
- System.out.println("object.getObjectName="+object.getObjectName());
- }
- //hello对象属于远程的对象,调用sayHello方法,则是调用服务器端的sayHello方法
- final HelloWorldMBean hello = JMX.newMBeanProxy(mbsc, objectName,
- HelloWorldMBean.class);
- // hello.setName("Peter");
- hello.sayHello();
- // ObjectName unObjectName=new ObjectName("hello:name=hello");
- // Hashtable map=new Hashtable();
- // map.put("name", "hello");
- //unregister MBean
- // ObjectName unObjectName=new ObjectName("hello",map);
- // ObjectName unObjectName=ObjectName.getInstance("hello:name=hell*");
- // for (ObjectInstance object : mbsc.queryMBeans(unObjectName, null)) {//这里可根据查询结果进行注销MBean
- // mbsc.unregisterMBean(object.getObjectName());
- // }
- System.out.println("\nMBean count = " + mbsc.getMBeanCount());
- System.out.println("end");
- }
- }
package com.rmi;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Map;
import javax.management.JMX;
import javax.management.MBeanServerConnection;
import javax.management.ObjectInstance;
import javax.management.ObjectName;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL;
public class Client {
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
// provide a valid username and password (e.g., via program arguments)
String user = "monitorRole";
String pw = "password";
// place the username and password in a string array of credentials that
// can be used when making the connection to the remote JMX agent
String[] credentials = new String[] { user, pw };
// the string array of credentials is placed in a map keyed against the
// well-defined credentials identifier string
Map<String, String[]> props = new HashMap<String, String[]>();
props.put("jmx.remote.credentials", credentials);
// supply the map of credentials to the connect call
JMXServiceURL address =
new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:1234/jmxrmi");
JMXConnector connector = JMXConnectorFactory.connect(address, props);
// it is a trivial matter to get a reference for the MBean server
// connection to the remote agent
MBeanServerConnection mbsc = connector.getMBeanServerConnection();
connector.connect();
ObjectName objectName=new ObjectName("hello:name=hello");
if(!mbsc.isRegistered(objectName)){
mbsc.createMBean("com.rmi.HelloWorld", objectName,null,null);
}
System.out.println("\nMBean count = " + mbsc.getMBeanCount());
for (ObjectInstance object : mbsc.queryMBeans(null, null)) {//服务器上的所有MBean
System.out.println("object.getObjectName="+object.getObjectName());
}
//hello对象属于远程的对象,调用sayHello方法,则是调用服务器端的sayHello方法
final HelloWorldMBean hello = JMX.newMBeanProxy(mbsc, objectName,
HelloWorldMBean.class);
// hello.setName("Peter");
hello.sayHello();
// ObjectName unObjectName=new ObjectName("hello:name=hello");
// Hashtable map=new Hashtable();
// map.put("name", "hello");
//unregister MBean
// ObjectName unObjectName=new ObjectName("hello",map);
// ObjectName unObjectName=ObjectName.getInstance("hello:name=hell*");
// for (ObjectInstance object : mbsc.queryMBeans(unObjectName, null)) {//这里可根据查询结果进行注销MBean
// mbsc.unregisterMBean(object.getObjectName());
// }
System.out.println("\nMBean count = " + mbsc.getMBeanCount());
System.out.println("end");
}
}
以下是HelloWorldMBean
- package com.rmi;
- import java.io.Serializable;
- public interface HelloWorldMBean extends Serializable{
- void setName(String name);
- String getName();
- void sayHello();
- String getHelloString();
- int getId();
- String toString();
- int hashCode();
- boolean equals( Object obj);
- HelloWorldMBean getThis();
- }
package com.rmi;
import java.io.Serializable;
public interface HelloWorldMBean extends Serializable{
void setName(String name);
String getName();
void sayHello();
String getHelloString();
int getId();
String toString();
int hashCode();
boolean equals( Object obj);
HelloWorldMBean getThis();
}
以下是HelloWorld.java类:
- package com.rmi;
- import java.io.Serializable;
- import java.util.concurrent.atomic.AtomicInteger;
- import javax.management.AttributeChangeNotification;
- import javax.management.MBeanRegistration;
- import javax.management.MBeanServer;
- import javax.management.NotificationBroadcasterSupport;
- import javax.management.ObjectName;
- public class HelloWorld implements HelloWorldMBean, Serializable{
- static AtomicInteger count = new AtomicInteger();
- private static final long serialVersionUID = 1627976932729278650L;
- int id = 0;
- String name;
- public synchronized void setName(String name) {
- this.name = name;
- }
- public synchronized String getName() {
- return name;
- }
- public synchronized void sayHello() {
- System.out.println(getHelloString());
- }
- public synchronized String getHelloString() {
- // System.out.println("1111");
- return "Hello, " + name;
- }
- public synchronized int getId() {
- return id;
- }
- public HelloWorldMBean getThis() {
- return this;
- }
- }