`
buzhucele
  • 浏览: 331703 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JMX、MXBean学习

    博客分类:
  • java
阅读更多
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;
	}

}
  • ss.rar (11.6 KB)
  • 下载次数: 4
分享到:
评论

相关推荐

    最简单JMX例子

    Java Management ...总之,JMX提供了一种灵活、统一的方式来管理和监控Java应用,而"最简单JMX例子"是学习这项技术的良好起点。通过实际操作这个例子,你将更好地理解JMX的工作机制,并能将其运用到自己的项目中。

    JMX in Action

    ### JMX in Action #### 知识点概览 - **资源管理与JMX** - **JMX方式的“Hello World”示例** ...通过以上章节的学习,读者可以全面了解 JMX 的工作原理和实际应用,从而更好地管理和监控 Java 应用程序和其他资源。

    使用JMX监控Zookeeper状态Java API

    例如,使用ManagementFactory类可以获取MXBean实例,然后使用这些实例来监控Zookeeper的状态。 在使用JMX监控Zookeeper状态时,需要在Zookeeper服务器上启用JMX。可以在Zookeeper的配置文件中添加以下配置: ``` ...

    JDK15-java-management-extensions-guide.pdf

    * MXBean(Managed Extended Bean):是一种基于 Java 的组件,提供了一种扩展的方式来监控和管理应用程序。 * JMX API:提供了一种编程接口来监控和管理应用程序。 JMX 的应用场景非常广泛,包括: * 应用程序...

    [课堂课件讲解]Java微服务实践-Spring Boot 监管.pptx

    在 JMX 核心 API 中,我们可以使用标准 MBeans、MXBean、动态 MBeans 和开放 MBeans 等。标准 MBeans 是一种特殊类型的 MBeans,它使用开放 MBean 的概念,允许通用管理,同时简化编码。MXBean 是一种特殊类型的标准...

    mbean的样例代码

    MBean(Managed Bean)是Java管理扩展(Java Management Extensions,JMX)框架的一部分,它提供了一种标准的方式来...通过阅读和理解提供的`TestMB`样例代码,你可以进一步学习如何利用JMX进行有效的系统管理和监控。

    JBOSS使用指南

    - 可以创建一个简单的MBean作为示例,例如通过实现`javax.management.MXBean`接口或标注类为`@MXBean`来定义管理接口。 - **3.2 程序代码** - 实现具体的业务逻辑方法,并暴露给JMX客户端进行调用。 - **3.3 配置...

    Java SE 6 中监视和诊断性能问题1

    这通常涉及建立JMX RMI连接,然后通过`MBeanServerConnection`对象来获取和操作远程JVM上的MXBeans。 JConsole是Java SE 6中引入的图形化监视工具,它提供了用户友好的界面来实时监控JVM的性能指标,如CPU使用率、...

    JKADZS5.rar_java报刊

    MXBean是一种特殊的Java对象,可以通过JMX注册并暴露其管理特性。`ManagementFactoryHelper.java`可能包含帮助类,简化了获取和操作管理工厂的代码。 3. **线程管理**:`ThreadInfoCompositeData.java`和`...

    java监控开发示例

    对于远程监控,我们需要使用`MXBean`(Managed Beans)和JMX(Java Management Extensions)框架,它们允许我们定义、注册和管理可远程访问的管理对象。 要实现远程监控Windows系统,我们可以使用Java的`rmi`...

    java读取CPU内存信息

    为了更好地监控系统资源,Java还提供了`java.lang.management`包下的其他MXBean,如`MemoryPoolMXBean`,它用于获取各个内存池的详细信息,这对于诊断内存泄漏或优化内存配置非常有用。同时,`...

Global site tag (gtag.js) - Google Analytics