`
shuai1234
  • 浏览: 972406 次
  • 性别: Icon_minigender_1
  • 来自: 山西
社区版块
存档分类
最新评论

JMX指南(Java管理扩展)

 
阅读更多

JMX指南

 Java管理扩展(也叫做JMX规范,英文名称Java Management Extensions)在Java编程语言中定义了应用程序以及网络管理和监控的体系结构、设计模式、应用程序接口以及服务。通常使用JMX来监控系统的运行状态或管理系统的某些方面,比如清空缓存、重新加载配置文件等

  JMX--Java Management Extensions,即Java管理扩展,是一个为应用程序、设备、系统等植入管理功能的框架。JMX可以跨越一系列异构操作系统平台、系统体系结构

  

JMX框架

和网络传输协议,灵活的开发无缝集成的系统、网络和服务管理应用。

  优点可以非常容易的使应用程序具有被管理

  伸缩性的架构每个JMX Agent服务可以很容易的放入到Agent中,每个JMX的实现都提供几个核心的Agent服务,你也可以自己编写服务,服务可以很容易的部署,取消部署。

  主要提供接口,允许有不同的实现

 

 

 

 

 

 


JMX可以用来管理网络,设备,应用程序等资源,当前规范为1.1版。

JMX的结构
在JMX中共分为三层
1:Instrumentation
2:Agent
3:Distributed Services

JMX的优点:
1:可以非常容易的使应用程序具有被管理的功能
2:提供具有高度伸缩性的架构
每个JMX Agent服务可以很容易的放入到Agent中,每个JMX的实现都提供几个核心的Agent服务,你也可以自己编写服务,服务可以很容易的部署,取消部署。
3:集成了现有的一些管理解决方案,如SNMP
4:非常容易的利用其他java技术
5:主要提供接口,允许有不同的实现
在JMX的规范中,只讲述了前两部分,分布式服务并没有涉及到,jmx规范还在不断完善中



上面的这个图是jmx in action中的一副JMX的结构图,通过上面这个图,我们可以将JMX的层次分的更清楚一点。
通常我们需要写一个Bean(Managed bean,简称MBean),利用这个bean去管理资源。


基本概念:
1:MBean
通常是一个java类,它提供接口可以使这个类具有管理功能(如standard MBean,接口中定义的方法使MBean具有管理功能)。
2:MBean server
是管理MBean的一个java类,你需要向MBean server注册一个MBean后,这个MBean才会具有管理功能,MBean server还提供了查询功能和注册监听器的功能,sun提供的只是接口,不同的jmx实现中的MBean server实现也不同。
3:JMX agent
agent是为了管理一系列的MBean,而提供的一系列的服务,如上图所示,通常有MBean relationships, dynamically loading classes, simple monitoring services, timers。agent可以利用Protocol adapters(例如HTTP 和SNMP)和connectors(RMI 和Jini)使不同的客户端可以访问MBean。
4:Protocol adapters 和connectors
适配器和连接器主要使不同的协议和客户端可以使用这个agent,一个agent中可以有多个Protocol adapters 和connectors,这样管理起MBean来就更方便了(有多种类型的客户端和协议可以操作MBean)。注意,Protocol adapters 和connectors通常也是MBean。

MBean的类型
JMX1.1相对于1.0有了很大改进,在1.1中提供4种类型的MBean,3,4两种MBean都是特殊类型的dynamic MBean。
1:standard MBean
2:dynamic MBean
3:open MBean
4:model MBean
类型 描述
standard MBean 这种类型的MBean最简单,它能管理的资源(包括属性,方法,时间)必须定义在接口中,然后MBean必须实现这个接口。它的命名也必须遵循一定的规范,例如我们的MBean为Hello,则接口必须为HelloMBean。
dynamic MBean 必须实现javax.management.DynamicMBean接口,所有的属性,方法都在运行时定义
open MBean 此MBean的规范还不完善,正在改进中
model MBean 与标准和动态MBean相比,你可以不用写MBean类,只需使用javax.management.modelmbean.RequiredModelMBean即可。RequiredModelMBean实现了ModelMBean接口,而ModelMBean扩展了DynamicMBean接口,因此与DynamicMBean相似,Model MBean的管理资源也是在运行时定义的。与DynamicMBean不同的是,DynamicMBean管理的资源一般定义在DynamicMBean中(运行时才决定管理那些资源),而model MBean管理的资源并不在MBean中,而是在外部(通常是一个类),只有在运行时,才通过set方法将其加入到model MBean中。后面的例子会有详细介绍


Standard MBean编程简介

上面我们已经提到了编写这种类型MBean的规则
1:编写接口
2:编写MBean
3:编写agent
下面看接口的代码,very easy,主要定义get/get方法和其它你想使用的方法

Java代码 复制代码 收藏代码
  1. public interface HelloWorldMBean   
  2. {   
  3. public void setGreeting( String greeting );   
  4.   
  5. public String getGreeting();   
  6.   
  7. public void printGreeting();   
  8. }  
public interface HelloWorldMBean
{
public void setGreeting( String greeting );

public String getGreeting();

public void printGreeting();
}




再看MBean的代码,跟传统的Bean非常相似,加入某个属性只有get方法,则说明这个属性是只读的,get/set都有的话,说明这个属性是可读可写的,此MBean只定义了一个属性 greeting。另外还定义了一个方法printGreeting。

Java代码 复制代码 收藏代码
  1.  public class HelloWorld implements HelloWorldMBean    
  2. {   
  3.   
  4. private String greeting = null;   
  5.   
  6. public HelloWorld()    
  7. {   
  8. this.greeting = "Hello World! I am a Standard MBean";    
  9. }    
  10.   
  11. public HelloWorld( String greeting )    
  12. {    
  13. this.greeting = greeting;    
  14. }    
  15.   
  16. public void setGreeting( String greeting )   
  17. {   
  18. this.greeting = greeting;   
  19. }   
  20.   
  21. public String getGreeting()   
  22. {   
  23. return greeting;    
  24. }   
  25.   
  26. public void printGreeting()   
  27. {   
  28. System.out.println( greeting );    
  29. }   
  30. }    
 public class HelloWorld implements HelloWorldMBean 
{

private String greeting = null;

public HelloWorld() 
{
this.greeting = "Hello World! I am a Standard MBean"; 
} 

public HelloWorld( String greeting ) 
{ 
this.greeting = greeting; 
} 

public void setGreeting( String greeting )
{
this.greeting = greeting;
}

public String getGreeting()
{
return greeting; 
}

public void printGreeting()
{
System.out.println( greeting ); 
}
}  



下面编写agent
1:创建 MBeanServer
2:创建一个adapter
3:将MBean注册到MBeanServer,同时将apapter也注册到MBeanServer
4: 启动adapter import javax.management.*;

Java代码 复制代码 收藏代码
  1. import com.sun.jdmk.comm.*;    
  2. public class HelloAgent   
  3. {   
  4. private MBeanServer mbs = null;   
  5.   
  6. public HelloAgent()   
  7. {   
  8. mbs = MBeanServerFactory.createMBeanServer( "HelloAgent" );    
  9.   
  10. HtmlAdaptorServer adapter = new HtmlAdaptorServer();    
  11.   
  12. HelloWorld hw = new HelloWorld();    
  13.   
  14. ObjectName adapterName = null;   
  15. ObjectName helloWorldName = null;   
  16.   
  17. try    
  18. {    
  19.   
  20. helloWorldName = new ObjectName( "HelloAgent:name=helloWorld1" );    
  21. mbs.registerMBean( hw, helloWorldName );    
  22. adapterName = new ObjectName( "HelloAgent:name=htmladapter,port=9092" );    
  23. adapter.setPort( 9092 );   
  24. mbs.registerMBean( adapter, adapterName );    
  25. adapter.start();    
  26. }   
  27. catch( Exception e )   
  28. {   
  29. e.printStackTrace();   
  30. }   
  31.   
  32. }   
  33.   
  34. public static void main( String args[] )   
  35. {   
  36. System.out.println( "HelloAgent is running" );   
  37. HelloAgent agent = new HelloAgent();    
  38. }   
  39.   
  40. }  
import com.sun.jdmk.comm.*; 
public class HelloAgent
{
private MBeanServer mbs = null;

public HelloAgent()
{
mbs = MBeanServerFactory.createMBeanServer( "HelloAgent" ); 

HtmlAdaptorServer adapter = new HtmlAdaptorServer(); 

HelloWorld hw = new HelloWorld(); 

ObjectName adapterName = null;
ObjectName helloWorldName = null;

try 
{ 

helloWorldName = new ObjectName( "HelloAgent:name=helloWorld1" ); 
mbs.registerMBean( hw, helloWorldName ); 
adapterName = new ObjectName( "HelloAgent:name=htmladapter,port=9092" ); 
adapter.setPort( 9092 );
mbs.registerMBean( adapter, adapterName ); 
adapter.start(); 
}
catch( Exception e )
{
e.printStackTrace();
}

}

public static void main( String args[] )
{
System.out.println( "HelloAgent is running" );
HelloAgent agent = new HelloAgent(); 
}

}





上面的代码使用了sun的一个adapter:HtmlAdaptorServer,使得html客户端可以访问MBean,注意ObjectName类,它的书写规则是这样的:"Domain names:key=value,key2=value2",因为createMBeanServer方法中我们使用了参数"HelloAgent",因此后面的Domain names必须为HelloAgent。
运行
将jmx的包放到classpath中,运行HelloAgent类,然后通过浏览器访问http://localhost:9092即可

分享到:
评论

相关推荐

    JDK11-java-management-extensions-guide.pdf

    JDK11 Java管理扩展指南 Java管理扩展(Java Management Extensions,JMX)...JDK11 Java管理扩展指南是Java开发人员学习JMX技术的不可或缺的参考指南,涵盖了JMX架构、API文档、示例代码和实践指南等方面的详细信息。

    JDK15-java-management-extensions-guide.pdf

    JDK 15 Java 管理扩展指南是 Oracle 公司发布的一份官方文档,旨在帮助开发者和管理员了解 JMX 的基本概念、架构和使用方法。 Java 平台标准版是 Java 技术的核心组件,提供了一组标准的 API 和工具来开发和部署 ...

    jdk20-java-management-extensions-guide.pdf

    Java 平台标准版 Java 管理扩展指南是 Oracle 公司发布的一份官方文档,该文档面向 Java 平台标准版的开发者和管理员,旨在帮助他们学习和掌握 Java 管理扩展技术。 Java 管理扩展简介 Java 管理扩展(Java ...

    JDK19-java-management-extensions-guide.pdf

    这篇指南专门介绍了Java管理扩展(Java Management Extensions,JMX)的基本概念、架构、组件、功能和应用场景,以帮助开发者更好地理解和使用JMX技术。 一、Java管理扩展简介 Java管理扩展(Java Management ...

    Manning+-+JMX+in+Action

    总的来说,《Manning - JMX in Action》是一本全面、实用的JMX指南,无论你是初学者还是经验丰富的Java开发者,都能从中受益匪浅,掌握如何借助JMX提升你的应用程序的管理能力。通过阅读这本书,你将能够熟练地运用...

    JBOSS使用指南,JMX原理和应用,EJB3.0使用说明

    3. 自定义MBeans:开发者可以创建自己的MBeans,扩展管理功能。 三、EJB3.0使用说明 EJB(Enterprise JavaBeans)是Java EE的一部分,用于构建分布式企业级应用。EJB3.0引入了许多改进,简化了开发过程。 1. EJB...

    jmx_tomcat_jboss

    【标题】:“jmx_tomcat_jboss”指的是在Java管理扩展(JMX)框架下对Tomcat和JBoss服务器的管理和监控。 【描述】:Java管理扩展(JMX)是一种标准,允许开发者创建、管理和监控Java应用程序的组件。在这个上下...

    JDK17-java-management-extensions-guide.pdf

    Java管理扩展指南 Java Management Extensions(JMX)是Java平台标准版(Java Platform, Standard Edition)的一部分,提供了一个强大的管理和监控Java应用程序的框架。JMX允许开发者编写管理代理程序,监控和控制...

    jmx入门

    5. **Management Agents**:这些代理负责将JMX管理能力扩展到网络中其他非Java的系统。它们通常作为桥接,使Java和非Java组件能够相互通信。 **二、JMX API** JMX API包含以下主要部分: 1. **MBean接口**:定义...

    jmx-1_2_1-ri.zip jmx_remote-1_0_1_03-ri.zip jmx-1_1-mr-spec.zip

    JMX Remote API扩展了基本的JMX,使得管理操作可以跨越网络进行,允许远程监控和管理Java应用程序。这个版本可能包含了更新的连接器(Connectors)和协议支持,提高了安全性,增强了稳定性,并修复了一些已知问题。...

    JDK10-JSE Java Management Extensions Guide-125.pdf

    《JDK10-JSE Java Management Extensions ...JDK10的JMX指南详细介绍了如何利用这一框架来有效地管理Java应用,确保其运行效率和稳定性。对于系统管理员和开发者来说,理解和掌握JMX对于优化和维护Java应用至关重要。

    java-se-monitoring-and-management-guide.pdf

    Java平台提供的监控和管理功能主要通过JMX(Java管理扩展)来实现,JMX是用于监控和管理Java应用程序和资源的编程接口和规范。 文档提到的版权信息显示,该软件及其相关文档是受许可协议保护的,不能随意复制或修改...

    JMX SNMP API

    - **扩展性**:通过SNMP Manager API,开发者可以在JMX管理的应用程序中实现SNMP的功能,例如收集设备状态数据、发送陷阱等。 #### 三、SNMP Manager API的组成 - **主要组件**:SNMP Manager API包含了一系列Java...

    Java管理扩展指南之MBean简介

    MBean是一个被管理的Java对象,就像Javabean组件一样,但是它遵从JMX规范的设计模式。MBean可以表示设备、应用或者任何需要被管理的资源。MBeans暴露如下管理接口:1.一组可读和可写属性,或者两者兼而有之。2.一组...

    《Java技术指南2019》

    此外,还介绍了Java集合类的使用,枚举的用法和Java IO与NIO的使用和原理,Java反射机制,序列化和反序列化的原理和安全问题,以及注解的使用、JMS消息服务、JMX管理模型、泛型编程、单元测试、正则表达式、常用工具...

    JMX in Action

    《JMX in Action》这本书是关于Java管理扩展(Java Management Extensions, 简称JMX)的一本实战指南。JMX是一种在Java应用程序中管理和监控资源的技术,它提供了标准的接口来创建、注册和访问管理对象,使得开发者...

    jmx-1_2_1-ri.zip

    Java Management Extensions(JMX)是Java平台上的一个标准技术,用于管理和监控应用程序、设备和服务。JMX 1.2.1是这个规范的一个版本,它...对于开发高效、可扩展和可管理的Java应用程序来说,深入理解JMX至关重要。

    jmx资料

    JMX的核心概念包括MBeans(Managed Beans)、代理(MBean Server)和管理工具,它们共同构建了一个灵活且可扩展的管理系统。 1. MBeans:MBeans是JMX的核心组件,代表了可管理的资源或对象。它们可以是简单的数据...

    WebLogic管理指南(中文)

    WebLogic Server提供丰富的监控工具,如管理控制台、JMX(Java Management Extensions)接口,用于实时查看服务器状态、诊断问题和优化性能。 六、故障排查与日志管理 WebLogic Server生成详细的日志文件,帮助管理...

    JDK18-java-management-extensions-guide.pdf

    Java Management Extensions Guide Java Management Extensions(JMX)是一种Java API,用于管理和监控...Java Management Extensions Guide提供了JMX的详细信息和使用指南,是Java开发者和系统管理员的重要参考资源。

Global site tag (gtag.js) - Google Analytics