JMX-RMI实现

标准Mbean

package jmxtest;

import java.io.Serializable;
import java.util.concurrent.atomic.AtomicInteger;

/**
*
* @author fengzl
*/
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();
}

class HelloWorld implements HelloWorldMBean, Serializable {

static AtomicInteger count = new AtomicInteger();
private static final long serialVersionUID = 1627976932729278650L;
int id = count.incrementAndGet();
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() {
return "Hello, " + name;
}

public synchronized int getId() {
return id;
}

public HelloWorldMBean getThis() {
return this;
}
}



服务端注册

/*
 * Copyrights (C) 2008 Bearice (Bearice@Gmail.com)
 * Release under GNU/GPL Version 2.
 */
package jmxtest;

import java.rmi.registry.LocateRegistry;
import java.util.HashMap;
import javax.management.MBeanServer;
import javax.management.MBeanServerFactory;
import javax.management.ObjectInstance;
import javax.management.ObjectName;
import javax.management.remote.JMXAuthenticator;
import javax.management.remote.JMXConnectorServer;
import javax.management.remote.JMXConnectorServerFactory;
import javax.management.remote.JMXServiceURL;
import javax.security.auth.Subject;

public class Main {

/**
* @param args the command line arguments
*/
public static void main(String[] args) throws Exception {
LocateRegistry.createRegistry(8877);
MBeanServer server = MBeanServerFactory.createMBeanServer();
ObjectName helloName = new ObjectName("hello:name=hello");
HelloWorld hello = new HelloWorld();
HashMap<String, Object> prop = new HashMap<String, Object>();
prop.put(JMXConnectorServer.AUTHENTICATOR, new JMXAuthenticator() {

public Subject authenticate(Object credentials) {
System.out.println(credentials);
if (credentials instanceof String) {
if (credentials.equals("hello")) {
return new Subject();
}
}
throw new SecurityException("not authicated");
}
});
JMXConnectorServer cserver =
JMXConnectorServerFactory.newJMXConnectorServer(
new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:8877/hello"), prop, server);
cserver.start();
server.registerMBean(hello, helloName);
for (ObjectInstance object : server.queryMBeans(null, null)) {
System.out.println(object.getObjectName());
}
System.out.println(hello);
System.out.println("start.....");
}
}




客户端验证

package jmxtest;

import java.util.concurrent.atomic.AtomicInteger;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.HashMap;

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

public class Client {

static HelloWorldMBean hello;

public static void main(String[] args) throws Exception {
final AtomicInteger count = new AtomicInteger();
HashMap<String,Object> prop = new HashMap<String, Object>();
prop.put(JMXConnector.CREDENTIALS, "hello");
final JMXConnector conn = JMXConnectorFactory.connect(new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:8877/hello"), prop);
conn.connect();
Runnable r = new Runnable() {

public void run() {
for (int i = 0; i < 10; i++) {
try {
final HelloWorldMBean hello = JMX.newMBeanProxy(conn.getMBeanServerConnection(), new ObjectName("hello:name=hello"), HelloWorldMBean.class);
hello.setName("bearice");
hello.sayHello();
hello.getHelloString();
System.out.println(count.incrementAndGet());
Client.hello = hello;
System.out.println(hello.equals(hello.getThis()));
} catch (Exception ex) {
Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
};
Thread[] ts = new Thread[5];
for (int i = 0; i < ts.length; i++) {
ts[i] = new Thread(r);
ts[i].start();
}
for (Thread t : ts) {
t.join();
}
System.out.println(hello.equals(hello.getThis()));
System.out.println(hello.getId());
System.out.println(hello);
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值