JMX 注册MBean服务 MBean RMI

X的概念不说了,可以管理很多组件,例子程序用了简单的bean,然后JMX注册它进行管理,JMX可以管理其他高级组件,管理osgi等等。jmx可以通过http,rmi等方式管理组件,jmx配上osgi来管理组件就很好了,osgi。。。

try {
String DOMAIN = "localhost";
// 创建一个MBeanServer

MBeanServer server = MBeanServerFactory.createMBeanServer(DOMAIN);
// 用MBeanServer注册LoginStatsMBean
// MBeanServer.registerMBean(Object,ObjectName)方法使用的参数有两个:一个是MBean实现的一个实例;另一个是类型ObjectName的一个对象-它用于唯一地标识该MBean
server.registerMBean(new Status(), new ObjectName(DOMAIN + ":name=statusBean"));
// 存取该JMX服务的URL:
JMXServiceURL url = new JMXServiceURL("rmi", "127.0.0.1", 9589, "/jndi/rmi://localhost:" + 1099 + "/linpeiwen");
// start()和stop()来启动和停止 JMXConnectorServer
JMXConnectorServer jmxServer = JMXConnectorServerFactory.newJMXConnectorServer(url, null, server);

System.out.println(url);
// 在RMI上注册
LocateRegistry.createRegistry(1099);

jmxServer.start();

} catch (Exception e) {
e.printStackTrace();
}

通过JConsole便可以访问这个MBEAN里面的public方法:

JMX 注册MBean服务 MBean RMI

在JMX URL中输入jmx service url: service:jmx:rmi:///jndi/rmi://localhost:1099/linpeiwen

就可以访问到注册到的MBean中的方法.

例子程序:

//SimpleStandardMBean.java 简单的被管理的bean

public interface SimpleStandardMBean {

public void setName(String name);

public String getName(String name);

public void reSet();

public int getAge();
}

//SimpleStandard.java 简单的被管理的bean的实现

public class SimpleStandard implements SimpleStandardMBean{

public String name;
public int getAge() {
return 24;
}

public String getName(String name) {
this.name=name;
System.out.println("----------调用了getName方法----------");
return this.name;
}

public void reSet() {
System.out.println("----------reSet()-----------");
}

public void setName(String name) {
this.name=name;
}

public void aaa(){
System.out.println("888888888888888888888");
}

}


//Server.java 测试程序

import java.io.File;
import java.io.IOException;
import java.rmi.RMISecurityManager;
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 Server {

private static MBeanServer server;

private static int PORT = 10022;

private static final String DOMAIN = "linpeiwen";

public static void init() throws Exception {
server = MBeanServerFactory.createMBeanServer(DOMAIN);
// server = ManagementFactory.getPlatformMBeanServer();
server.registerMBean(new SimpleStandard(), new ObjectName(DOMAIN + ":name=standard"));
initialize();
JMXServiceURL serviceURL = new JMXServiceURL(
"service:jmx:rmi://localhost/jndi/rmi://localhost:" + PORT
+ "/" + DOMAIN);
JMXConnectorServer connectorServer = JMXConnectorServerFactory
.newJMXConnectorServer(serviceURL, null, server);
server.registerMBean(connectorServer, new ObjectName(
"connector:name=rmi"));
connectorServer.start();
System.out.print("startup....");
}

private static void initialize() throws IOException {
// URL serverPolicyFileName = new URL("server.policy"); //$NON-NLS-1$
// (serverPolicyBundleURL);
// URL serverPolicyBundleURL =
// FileLocator.toFileURL(serverPolicyFileName);
File file = new File("D:/workspace/jxmdemo/src/com/server.policy");
System
.setProperty(
"java.security.policy", "D:/workspace/jxmdemo/src/com/server.policy"); //$NON-NLS-1$
LocateRegistry.createRegistry(PORT);
System.setSecurityManager(new RMISecurityManager());
}

public static void main(String[] args) {

try {
init();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}

//Client.java 测试程序

import java.util.HashMap;
import java.util.Map;

import javax.management.MBeanServer;
import javax.management.MBeanServerConnection;
import javax.management.MBeanServerFactory;
import javax.management.ObjectName;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL;

public class Client {
private static int PORT = 10022;

private static final String DOMAIN = "linpeiwen";
public static void main(String[] args) {
try {
//创建jmx连接
JMXServiceURL jmxUrl=new JMXServiceURL("service:jmx:rmi://localhost/jndi/rmi://localhost:" + PORT
+ "/" + DOMAIN);
Map<String ,String> map=new HashMap();
map.put("jmx.remote.protocol.provider.pkgs", "org.logicblaze.lingo.jmx.remote.provider");
JMXConnector jmxConn=JMXConnectorFactory.connect(jmxUrl,map);
//获得MBean服务连接
MBeanServerConnection mbsConn=jmxConn.getMBeanServerConnection();
String defaultDedomain=mbsConn.getDefaultDomain();
ObjectName objname=null;
objname=new ObjectName(defaultDedomain + ":name=standard");
Object[] para={"standard"};//参数名
String[] paraType={"java.lang.String"};//参数类型
Object str=mbsConn.invoke(objname, "getName", para, paraType);//调用服务端的方法
System.out.println("name=" + str.toString());
} catch (Exception e) {
e.printStackTrace();
}
}
}

//server.policy

grant { permission java.security.AllPermission; };

你可能感兴趣的:(java,bean,Security,osgi)