[자바네크워크]JMX,HelloWorld,커넥터이용
1. HelloMBean.java
public interface HelloMBean {
public void setMessage(String message);
public void sayHello();
}
2. Hell.java
public class Hello implements HelloMBean {
private String message = null;
public Hello() {
message = "Hello, world";
}
public Hello(String message) {
this.message = message;
}
public void setMessage(String message) {
this.message = message;
}
public void sayHello() {
System.out.println(message);
}
}
3. HelloAgent.java
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;
public class HelloAgent {
private MBeanServer mbs = null;
public HelloAgent() {
// Get MBeanServer
mbs = MBeanServerFactory.createMBeanServer("JmxAgent");
// Unique identification of MBeans
Hello helloBean = new Hello();
ObjectName helloName = null;
JMXServiceURL serviceUrl = null;
try {
LocateRegistry.createRegistry(7777);
serviceUrl = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:7777/server");
//HelloWorld MBean Name 정의
helloName = new ObjectName("FOO:name=HELLO");
//Client에서 접속하도록 커넥터 생성
JMXConnectorServer connector = JMXConnectorServerFactory
.newJMXConnectorServer(serviceUrl, null, mbs);
//helloName으로 helloBean을 등록
mbs.registerMBean(helloBean, helloName);
connector.start();
} catch(Exception e) {
e.printStackTrace();
}
}
// Utility method: so that the application continues to run
private static void waitForEnterPressed() {
try {
System.out.println("Press to continue...");
System.in.read();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String argv[]) {
new HelloAgent();
System.out.println("SimpleAgent is running...");
HelloAgent.waitForEnterPressed();
}
}
4. HelloClient.java
import java.util.Arrays;
import javax.management.JMX;
import javax.management.MBeanServerConnection;
import javax.management.ObjectName;
import javax.management.RuntimeErrorException;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL;
public class HelloClient {
public static void main(String[] args) {
foo();
}
public static void foo() {
try {
JMXServiceURL url = new JMXServiceURL(
"service:jmx:rmi:///jndi/rmi://localhost:7777/server");
JMXConnector jmxc = JMXConnectorFactory.connect(url, null);
// Get an MBeanServerConnection
MBeanServerConnection mbsc = jmxc.getMBeanServerConnection();
// Get domains from MBeanServer
String domains[] = mbsc.getDomains();
Arrays.sort(domains);
for (String domain : domains) {
System.out.println(domain);
}
//JMXServer에서 등록한 ObjectName 생성
ObjectName mbeanName = new ObjectName("FOO:name=HELLO");
// Create a dedicated proxy for the MBean instead of
// going directly through the MBean server connection
HelloMBean hello = JMX.newMBeanProxy(mbsc, mbeanName,
HelloMBean.class, true);
// start job
hello.setMessage("방가방가~~");
hello.sayHello();
} catch (RuntimeErrorException e) {
System.out.println("Error --->" + e);
e.printStackTrace();
} catch (Exception e) {
System.out.println(e);
e.printStackTrace();
}
}
}
5. 실행
[서버]
SimpleAgent is running...
Press to continue...
방가방가~~
[클라이언트]
FOO
JMImplementation
댓글 없음:
댓글 쓰기