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

【JMX 学习笔记01】

 
阅读更多

这两天,正巧有个姑娘遇到JMX的问题,顺便就跟着一起研究了下。

 

百度百科对JMX给出了比较清晰的定义:

JMX (Java Management Extensions)是一个为应用程序,设备,系统等植入管理功能框架

既然是框架,那么我们来看看JMX这种框架里有些什么?

 

JMX模型用户定义管理容器,管理容器由MBeanServer、与托管资源对应的MBean集、每个MBean的代理和供外部管理工具访问时使用的至少 一个协议适配器或连接器成。MBeanServer充当可以在容器中使用MBean的存库,用于聚集每个托管资源的属性和操作。

 

JMX 规范可以分为三层: 设备层, 代理层, 分布式服务层。
设备层规范定义了编写可由 JMX 管理的资源的标准,即如何写 MBean;
代理层规范定义了创建代理的规范,封装了 MBean Server;
分布式服务层主要定义了对代理层进行操作的管理接口和构件;

 

 设备层

JMX装备和托管资源
在JMX模型中,要管理的每个资源(一般就是我们需要管控的对象了)都必须提供一个接口。JMX托管资源是根据规范定义的模式装备的。这些模式指定了:
(1)该管理接口必须是JAVA接口并且与该资源同名,后面跟“MBean”
(2)实现类必须包括至少一个公共构造函数
(3)接口属性的getter和setter必须严格遵守命名约定
每个托管资源都要接受装备来公开一组属性和操作。通过托管Bean即MBean可以对这些属性和操作进行访问。

所谓装备的概念,个人理解就是XXXXMBean这玩意了。

 

代理层

代理层的核心就是MBeanServer了,MBeanServer提供给注册MBean的服务被称作JMX代理服务,它们本身也被封装成MBean的形式。JMX代理充当托管资源和管理容器的中介,使用MBeanServer注册器MBean。使用代理注册后,MBeanServer通过JAVA反射访问资源,确保符合JMX要求的模式,若有违背则抛出异常。代理服务主要包括如:动态加载(Advanced Dynamic Loading)服务、监视(Monitor)服务、定时器(Timer)服务、关联(Relation)服务等,具体代理服务的应用待后续补充。

 

分布式服务层

个人理解,分布式服务层的核心就是协议适配器和连接器了,MBeanServer依赖于协议适配器和连接器 用来和 运行在远程的管理应用程序进行通信。协议适配器通过特定的协议提供了一张注册在MBeanServer的管理构件视图。例如,一个HTML适配器可以将所有注册过的管理构件显示在WEB上。不同的协议,提供不同的视图。
连接器还必须提供管理应用一方的接口以使代理和管理应用程序进行通信,即针对不同的协议,连接器必须提供同样的远程接口来封装通信过程。当远程应用程序使用这个接口时,就可以通过网络透明的和代理进行交互,而忽略协议本身。适配器和连接器使MBean服务器与管理应用程序能进行通信。因此,一个代理要被管理,它必须提供至少一个协议适配器或者连接器。面临多种管理应用时,代理可以包含各种不同的协议适配器和连接器。当前已经实现和将要实现的协议适配器和连接器包括:RMI连接器、SNMP协议适配器、IIOP协议适配、HTML协议适配器、HTTP连接器 。

 

 -------------------------------------------------------------------------------------------------------------------------------------

网上还有一部分是关于JMX管理器的,我来理解就是JMX的客户端了。使用协议适配器或连接器作为通信通道,外部管理工具能够对JMX环境中的资源进行监控和控制。

 

查阅了网上的一些资料,个人感觉JMX简单理解可以分为以下几部分组成:

1、MBean :描述一个可管理的资源,是一个java对象;JMX提供了4种类型的MBean,具体内容本章不做讨论。

2、MBean Server:提供MBean对象的一个管理容器,接收客户端的请求,然后调用相应的MBean。MBean需要注册到MBean Server中向外开放。

3、Adaptor:负责客户端通信 到 MBean Server之间的协议通信,连接协议包含HTTP、SNMP、RMI、IIOP等。JAVA默认自带的了JMX RMI的适配连接器,所以,只需要在启动JAVA程序的时候带上运行参数,就可以开启RMI协议的连接器。

4、MBean Client :通过JMXConnector访问远程的MBeanServerConnection,进而访问具体的MBean对象。

1、2、3 在服务端,4在客户端

 -------------------------------------------------------------------------------------------------------------------------------------

百度百科是示意图,感觉还是很清晰了描述了JMX。


 --------------------------------------------------------------------------------------------------------------------------------------


 

附上测试代码:

服务端:

public class ManagerRmiAdapt {
	private static MBeanServer server;

	public static void initServer() throws InstanceAlreadyExistsException,
			MBeanRegistrationException, NotCompliantMBeanException,
			MalformedObjectNameException {
		server = MBeanServerFactory.createMBeanServer();
		InstanceMBean instance = new Instance();
		server.registerMBean(instance, new ObjectName("objectName:id=instance"));
	}

	public static void bingRmi() throws MalformedURLException, IOException {
		Registry registry = LocateRegistry.createRegistry(9999);

		JMXConnectorServer connectServer = JMXConnectorServerFactory
				.newJMXConnectorServer(new JMXServiceURL(
						"service:jmx:rmi:///jndi/rmi://localhost:9999/server"),
						null, server);
		connectServer.start();
	}

	public static void main(String[] args)
			throws InstanceAlreadyExistsException, NotCompliantMBeanException,
			MalformedObjectNameException, InstanceNotFoundException,
			ReflectionException, MBeanException, UnknownHostException,
			IOException, InterruptedException {
		initServer();
		bingRmi();
	}
}

 客户端:

public class MyClient {
	public static void main(String[] args) throws IOException,
			InstanceNotFoundException, IntrospectionException,
			ReflectionException, MalformedObjectNameException, MBeanException {
		String url = "service:jmx:rmi:///jndi/rmi://localhost:9999/server";
		JMXServiceURL serviceUrl = new JMXServiceURL(url);
		JMXConnector jmxConnector = JMXConnectorFactory.connect(serviceUrl,
				null);
		try {
			MBeanServerConnection mbeanConn = jmxConnector
					.getMBeanServerConnection();
			mbeanConn.invoke(new ObjectName("objectName:id=instance"),
					"mointor", new Object[] {}, new String[] {});
		} finally {
			jmxConnector.close();
		}
	}
}

  装备:

  

public interface InstanceMBean {
	public void mointor();
}

  资源:

  

public class Instance implements InstanceMBean {
	public void mointor() {
		System.out.println("Hello World!");
	}
}

 

  • 大小: 145.9 KB
分享到:
评论
4 楼 lisaiori 2015-10-29  
toknowme 写道
InstanceMBean 这个类是哪里来的啊?


就是需要被管理的资源了,原文里+上了这部分。
3 楼 toknowme 2015-10-29  
toknowme 写道
InstanceMBean 这个类是哪里来的啊?

应该是你自己写的吧!

但是对于JMX的应用场景还是不清晰~~  
回去睡觉了!

http://jasonhan-sh-hotmail-com.iteye.com/blog/1166517
2 楼 toknowme 2015-10-29  
InstanceMBean 这个类是哪里来的啊?
1 楼 toknowme 2015-10-29  
有点意思 昊子!哈哈
虽然很晚了,不过我还是很有兴趣去动手练习下你的例子!
感觉公司里面有一块地方可以使用~~   

相关推荐

    Java分布式应用学习笔记09JMX-MBean的介绍

    ### Java分布式应用学习笔记09JMX-MBean的介绍 #### MBean概念及作用 MBean,即Managed Bean,是在JMX(Java Management Extensions)框架中用于管理资源的一种特殊Java对象。通过MBean,可以方便地对应用程序进行...

    Java分布式应用学习笔记08JMX规范与各种监控场景.pdf

    Java Management Extensions (JMX) 是Java平台上的一个标准,它定义了一种管理和监控Java应用程序的机制。JMX规范允许开发者创建可管理的组件,并通过管理系统(如JConsole)进行监控和控制。这些组件称为MBeans...

    Java JDK 6学习笔记.zip

    这个压缩包“Java JDK 6学习笔记.zip”显然是一个包含有关Java JDK 6深入学习资源的集合,可能是PDF文档、笔记或者其他形式的教学材料。 在Java JDK 6中,有几个关键的特性值得我们关注: 1. **改进的性能**:JDK ...

    kafka学习笔记.doc

    10. 代码实践《kafka学习代码》中可能包含了一些示例,涵盖了producer、consumer的创建、消息发送与接收、配置调整等内容,是深入理解Kafka工作原理和使用技巧的重要参考资料。 总结,Kafka作为一个分布式流处理...

    Java分布式应用学习笔记09JMX-MBean的介绍.doc

    java

    SSH学习笔记6 SSH学习笔记6

    SSH的学习笔记通常涵盖以下几个主要方面: 1. **安装与配置**:在不同的操作系统(如Linux、macOS或Windows)上安装SSH客户端和服务端软件,例如OpenSSH。配置SSH服务,包括修改`sshd_config`文件以设置端口号、...

    spring2.0学习笔记

    本学习笔记旨在深入探讨Spring 2.0的核心特性,帮助开发者更好地理解和运用这个强大的框架。 1. **依赖注入(Dependency Injection, DI)**:Spring 2.0加强了DI,允许开发者通过XML配置或注解来管理对象间的依赖...

    Jboss_ESB学习笔记

    【JBoss ESB学习笔记】 JBoss ESB(Enterprise Service Bus)是Red Hat公司开发的一款开源企业服务总线,它是企业级应用集成的核心组件,用于连接不同系统、服务和应用程序,实现服务之间的通信和交互。本学习笔记...

    JAVA JDK6 学习笔记

    **Java JDK6 学习笔记概述** Java JDK6(Java Development Kit 6)是Oracle公司发布的一个用于开发Java应用程序的重要工具集,包含了JRE(Java Runtime Environment)和一系列的开发和调试工具。这个版本的JDK发布...

    j2ee精华学习笔记

    **J2EE精华学习笔记** J2EE,全称为Java 2 Platform, Enterprise Edition,是Java平台上用于构建企业级分布式应用程序的框架。本学习笔记旨在深入解析J2EE的核心概念和技术,帮助读者全面掌握J2EE开发的关键知识。 ...

    Java jdk1.7学习笔记pdf

    ### Java JDK 1.7 学习笔记核心知识点解析 #### 一、Java JDK 1.7 概述 在《Java JDK 1.7 学习笔记》这本书中,作者详细介绍了Java Development Kit (JDK) 1.7 的新特性与改进之处。Java 作为一门广泛使用的编程...

    JBOSS7学习笔记

    【JBoss7学习笔记】 JBoss Application Server,简称JBoss AS,是Red Hat公司开发的一款开源Java EE应用服务器,而JBoss7则是其一个重要的版本,带来了许多性能优化和架构改进。这篇学习笔记将深入探讨JBoss7的核心...

    java学习笔记JDK6课件和课本代码

    本资源包"java学习笔记JDK6课件和课本代码"是针对初学者和希望提升Java技能的人士精心准备的学习材料,它包含了JDK6版本的相关内容。JDK6(Java Development Kit 6)是Java语言开发的一个重要版本,引入了多项新特性...

    J2EE学习笔记(J2ee初学者必备手册)

    本学习笔记主要针对J2EE初学者,将涵盖以下关键知识点: 1. **Java基础**:首先,理解Java编程语言的基本概念,包括类、对象、接口、继承、多态和异常处理,这些都是J2EE开发的基础。 2. **Servlet和JSP**:...

    JDK1.60学习笔记

    通过阅读《Java JDK 1.60学习笔记.chm》这样的资源,开发者可以深入学习这些主题,进一步提升自己的Java编程能力。这份文档可能涵盖了所有这些知识点的详细讲解,以及实例代码和最佳实践,对于初学者和经验丰富的...

    tomcat学习笔记.rar

    【标题】:Tomcat学习笔记 【描述】:Tomcat是一款广泛应用的开源Java Servlet容器,由Apache软件基金会下属的Tomcat项目开发维护。它主要用于部署和运行Java Web应用程序,包括Servlet和JSP。Tomcat以其轻量级、...

    weblogic 学习 笔记 ppt

    本PPT学习笔记将深入探讨WebLogic的核心概念、功能以及如何进行配置和管理。 1. **WebLogic基础** - **Java EE平台**:WebLogic是Java EE平台的一部分,提供了对Servlets、JSP(JavaServer Pages)、EJB...

    JVM的学习笔记PDF版

    这份“JVM的学习笔记PDF版”应该包含了关于JVM的详细信息,帮助学习者深入理解这个复杂的系统。JVM允许Java代码跨平台运行,通过解释器、类加载器、垃圾收集器等组件实现“一次编写,到处运行”的理念。 1. **JVM...

    Java JDK 6学习笔记PPT版

    Java JDK 6学习笔记PPT版是一份专为初学者设计的教育资源,旨在全面解析Java编程语言的基础知识。这份资料基于J2SDK1.6,也就是我们常说的JDK1.6或JDK6.0,它包含了Java开发工具集的重要更新和改进。JDK6.0是Oracle...

Global site tag (gtag.js) - Google Analytics