package jmx;
/**
* 接口命名规则:xxxMBean
* 实现类:xxx
*/
public interface HelloMBean {
public void setName(String name);
public String getName();
public void print();
public void addName();
}
package jmx;
public class Hello implements HelloMBean {
private String name = "";
public Hello() {
}
@Override
public String getName() {
return name;
}
@Override
public void print() {
System.out.println("Hello, " + name + "!");
}
@Override
public void setName(String name) {
this.name = name;
}
@Override
public void addName() {
this.name = "zml";
}
}
package jmx;
import java.rmi.registry.LocateRegistry;
import javax.management.InstanceAlreadyExistsException;
import javax.management.InstanceNotFoundException;
import javax.management.IntrospectionException;
import javax.management.MBeanRegistrationException;
import javax.management.MBeanServer;
import javax.management.MBeanServerFactory;
import javax.management.MalformedObjectNameException;
import javax.management.NotCompliantMBeanException;
import javax.management.ObjectName;
import javax.management.ReflectionException;
import javax.management.remote.JMXConnectorServer;
import javax.management.remote.JMXConnectorServerFactory;
import javax.management.remote.JMXServiceURL;
public class JmxBeanDemo {
/**
* localhost:9998
* -Dcom.sun.management.jmxremote.port=9998
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
*/
public static void main(String[] args)
throws InstanceAlreadyExistsException, MBeanRegistrationException,
NotCompliantMBeanException, MalformedObjectNameException,
NullPointerException, InterruptedException, IntrospectionException, InstanceNotFoundException, ReflectionException {
// MBeanServer server = ManagementFactory.getPlatformMBeanServer();
//
// ObjectName objectName = new ObjectName("jmx:type=hello");
//
// server.registerMBean(new Hello(), objectName);
//
// MBeanInfo meanInfo = server.getMBeanInfo(objectName);
try {
String DOMAIN = "localhost";
MBeanServer server = MBeanServerFactory.createMBeanServer(DOMAIN);
server.registerMBean(new Hello(), new ObjectName("jmx:type=hello"));
JMXServiceURL url = new JMXServiceURL("rmi", null, 9998, "/jndi/rmi://localhost:" + 1099 + "/zml");
// start()和stop()来启动和停止 JMXConnectorServer
//得到存储jmx用户信息的文件
// String userFile =context.getRealPath("/")+"/Web-INF/classes/"+Constants.JMX_USERS_FILE;
// //创建authenticator并且初始化RMI服务器
// Map<string> env = new HashMap<string>();
// env.put("jmx.remote.x.password.file", userFile);
// env = null;
JMXConnectorServer jmxServer = JMXConnectorServerFactory.newJMXConnectorServer(url, null, server);
//service:jmx:rmi://localhost:9589/jndi/rmi://localhost:1099/zml
//service:jmx:rmi:///jndi/rmi://localhost:1099/zml
System.out.println(url);
// 在RMI上注册
LocateRegistry.createRegistry(1099);
jmxServer.start();
} catch (Exception e) {
e.printStackTrace();
}
Thread.sleep(Long.MAX_VALUE);
}
}
package jmx;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
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 JMXProxyTest {
public static void main(String[] args) {
JMXWrapper jmxWrapper = new JMXWrapper(HelloMBean.class,
"jmx:type=hello");
HelloMBean mbean = (HelloMBean) jmxWrapper.getProxy();
mbean.addName();
mbean.print();
}
}
class JMXInvokerHandler implements InvocationHandler {
private String name;
private MBeanServerConnection mbsc = null;
public JMXInvokerHandler(String name) {
this.name = name;
}
private MBeanServerConnection getMBeanServerConnection() {
if(null == mbsc){
JMXServiceURL url = null;
JMXConnector jmxc = null;
try {
url = new JMXServiceURL(
"service:jmx:rmi://localhost/jndi/rmi://localhost:1099/zml");
jmxc = JMXConnectorFactory.connect(url, null);
mbsc = jmxc.getMBeanServerConnection();
} catch (Exception e) {
e.printStackTrace();
}
}
return mbsc;
}
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
MBeanServerConnection connection = getMBeanServerConnection();
ObjectName objectName = new ObjectName(name);
String operationName = method.getName();
Class classes[] = method.getParameterTypes();
String[] signature = new String[classes.length];
for (int i = 0; i < signature.length; i++) {
signature[i] = classes[i].getName();
}
Object object = connection.invoke(objectName, operationName, args,
signature);
return object;
}
}
class JMXWrapper {
private Class fInterface;
private String name;
private JMXInvokerHandler handler;
public JMXWrapper(Class interfaces, String name) {
this.fInterface = interfaces;
this.name = name;
}
public Object getProxy() {
handler = new JMXInvokerHandler(name);
Object object = Proxy.newProxyInstance(fInterface.getClassLoader(),
new Class[] { fInterface }, handler);
return object;
}
}
分享到:
相关推荐
JMX深入学习
个人收集整理的学习java JMX的好东西,帮助初学者更好的理解JMX的作用和使用方式。个人认为包括的资料比较全了。
有关JMX学习的一些文档,对初学JMX的朋友有帮助.
JMX 1.2.1 Reference Implementation(重点) Include com.sun.jdmk.comm.HtmlAdaptorServer class http://www.sun.com/software/jdmk/ Downloads, sun-jdmk-runtime-5.1-b34.2.zip/SUNWjdmk/5.1/lib/jdmkrt.jar
概要的介绍了JMX技术,适合于初学者!通过该资料的学习,可以基本熟悉JMX的基本知识和技术架构!
JMX学习资料JMX学习资料
JMX实战 书中不仅有对于基础知识的介绍,还有对于JMX开发中重大的体系架构问题的深入探讨,总结了大量JMX开发中的设计模式,并讨论了框架、安全性与性能等等。书中提供了几个典型的例子,兼顾各种开发平台,这些...
为什么JMX那么受欢迎,JMX到底有那些优势只得人们去学习和理解,本文从JMX的基本架构、hellowold jmx以及spring对JMX的支持讲起,希望大家能通过本文对JMX有个基础的认识,并能通过本文为今后学习JMX打个基础
NULL 博文链接:https://hu-bj.iteye.com/blog/382579
jmx学习整理里1
jmx快速上手 jmx快速上手 jmx快速上手 jmx快速上手
Description Resource Path Location Type Missing artifact com.sun.jmx:jmxri:jar:1.2.1 pom.xml /eshop-storm line 2 Maven Dependency Problem
Fiddler导出jmx文件,解决Fiddler导出文件中 没有jmx文件选项,各个版本fiddler都适用
JMX一步步来JMX一步步来JMX一步步来JMX一步步来
关于JMX学习的经典之作,推荐比看书籍,pdf格式
Java分布式应用学习笔记08JMX规范与各种监控场景
jmx第一个学习例子
catalina-jmx-remote.jar放到tomcat/lib目录下 如果是windows版本,编辑TOMCAT_HOME/bin/catalina.bat,在开头加入下面几行: set CATALINA_OPTS=%CATALINA_OPTS% -Djava.rmi.server.hostname=JMX_HOST set CATALINA...
Hbase和Hadoop JMX监控实战