﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-esoa-文章分类-b. J2EE.JMX/JMS</title><link>http://www.blogjava.net/esoa/category/16613.html</link><description /><language>zh-cn</language><lastBuildDate>Thu, 01 Mar 2007 15:36:10 GMT</lastBuildDate><pubDate>Thu, 01 Mar 2007 15:36:10 GMT</pubDate><ttl>60</ttl><item><title>JMX架构的了解</title><link>http://www.blogjava.net/esoa/articles/77579.html</link><dc:creator>comchyi</dc:creator><author>comchyi</author><pubDate>Fri, 27 Oct 2006 03:36:00 GMT</pubDate><guid>http://www.blogjava.net/esoa/articles/77579.html</guid><wfw:comment>http://www.blogjava.net/esoa/comments/77579.html</wfw:comment><comments>http://www.blogjava.net/esoa/articles/77579.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/esoa/comments/commentRss/77579.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/esoa/services/trackbacks/77579.html</trackback:ping><description><![CDATA[JMX应该说是关于网络应用管理的的框架，如果你开发了一个比较复杂的系统，无疑你要提供这个系统的自身管理 系统，JMX更多应用是体现在Server上，如果你要使用java开发一个自己Server或复杂的应用系统，那么推荐你基于JMX架构来开发， JBoss 3.0 weblogic等就是基于JMX开发的符合J2EE规范的服务器软件。 <br /><br />了解JMX可以使你深入了解J2EE服务器， 为什么我们平时说 "EJB"是个比较"Weight"的方案选择，其中一个原因是J2EE服务器软件本身 也是你的系统中一部分，它作为你系统的容器，对你的系统有至关重要的作用，如果无法直接介入 管理或“调教”它，那么无疑你的系统本身存在着隐含的危险， 现在，通过JMX，你现在可以深入到你J2EE容器内部的管理了。 (好像国内出现了第一个自己J2ee服务器，不知道那是不是基于JMX开发的?) <br /><br />J2EE并不能概括所有的应用领域，比如对速度和性能要求极高的游戏或股票行情等系统就需要自己直接来开发Server， 如果是能够基于JMX开发，那么可以说就大大提高编写管理程序的效率，可以将你的模块变成JMX的MBean，可以通过Agent在程序内部或者通过 WEB管理页面对你的MBean模块进行初始化 重启 以及参数设置。<br /><br />JMX的好处还有：可以方便整合连接现有的Java技术，如JNDI JDBC JTS及其它。特别是能够使用Jini的查询 发现机制以及协议，我们知道,Jini提供了一种服务的查询和发现机制，这些services都可以通过JMX 来实现管理。<br /><br />现在我们开始JMX的了解：<br /><br />1.到java.sun.com首页的JMX页面，下载JMX的规定说明和Samples程序。<br />2.按照JMX的说明进行一次Tutorial，了解如何加入 删除 配置一个MBean，Tutorial中是以SimpleMBean为例，那么我们能否建立一个自己的MBean?<br /><br />我们来做一个Hello 的MBean，这里有一个小关键点，你的class取名有个规则， 需要以MBean为结尾，如这里我们取名为HelloMbean:<br /><br /><br />public interface HelloMBean {<br /><br />　　// management attributes<br />　　public String getName();<br />　　public void setName(String name);<br /><br />　　// management operations<br />　　public void print();<br /><br />}<br /><br />在这个Class里，有一个隐含attributes: name, 提供了set和get的方法，同时有一个操作方法print()：<br /><br />再定义一个concrete类:<br /><br />public class Hello implements HelloMBean {<br /><br />　　private String name = "";<br /><br />　　public String getName() {<br />　　return name;<br />　　}<br /><br />　　public void setName(String name) {<br />　　this.name = name;<br />　　}<br /><br />　　public void print() {<br />　　System.out.println("Hello, " + name + "!!" );<br />　　}<br />}<br /><br /><br />这样一个简单的MBean就做好了，我们可以通过admin界面加入这个Hello，<br /><br />再按 Tutorial启动BaseAgent，在Agent Administration中参考Simple填入：<br />Domain: Standard_Hello_MBeans<br /><br />Keys : name=Hello,number=1<br /><br />Java Class: Hello<br /><br />将出现Create Successful信息。进入MBean View 给Name赋值，点按Apply ，然后再按print，这是你的Hello中的方法，在控制台你会看到输出。<br /><br />是不是很惊奇Hello中的 attributes 和operations能被动态的访问和控制？ 已经隐约感到JMX的架构原理了吧？<br /><br />下面再深入明确一些概念：<br />上面HelloMBean资源是通过admin这样的HTTP WEB界面管理，这种管理资源方式是属于JMX的Distributed服务层， JMX 通过Distributed层能够部署和管理MBean资源。就象上面的例子，是通过HtmlAdaptor提供的HTTP WEB界面来方面的维护管理HelloMBean.<br /><br />那么我们能否在程序中自动管理和部署我的MBean？当然可以，这是通过Agent层来完成，现在我们已经有了这个层次，MBean所在的资源层，<br />最外面的Distributed服务层，Distributed服务层是通过Agent层来访问MBean资源的，看看下面来自Sun公司JMX规定的架构图：<br /><br /><br /><div align="center"><a href="http://www.jspcn.net/upload/2005/7/25/11222800452500.jpg" target="_blank"><img height="366" src="http://www.jspcn.net/upload/2005/7/25/11222800452500.jpg" width="520" border="0" /></a></div><br />从图中看出，Agent Level(Agent层)包括MBean Server和Agent Services,那么我们来做一个上面例子HelloMBean的Agent：<br /><br />// CREATE the MBeanServer<br />//<br />System.out.println("\n\tCREATE the MBeanServer.");<br />MBeanServer server = MBeanServerFactory.createMBeanServer();<br /><br />// CREATE Registe HelloMBean<br />//<br />System.out.println("\n\tCREATE, REGISTER a new Hello Standard_MBean:");<br />HelloMBean helloMBean = new Hello();<br /><br />ObjectName hello_name = null;<br />try {<br />hello_name = new ObjectName("Standard_Hello_MBeans:name=Hello,number=1");<br />System.out.println("\tOBJECT NAME = " + hello_name);<br /><br />//将HelloMBean注册到MBeanServer中去<br />server.registerMBean(helloMBean, hello_name);<br />}<br />catch (Exception e) {<br />e.printStackTrace();<br />return;<br />}<br /><br />向MBeanServer注册后，以后JMX就知道有了这个HelloMBean资源。<br /><br />管理一个agent的MBean资源或使用它提供的服务必须通过一个protocol adaptor 或者connector,adaptor 或者connector属于Distributed layer level(Distributed服务层)，我们上面例子中通过HTTP WEB界面管理HelloMBean就是浏览器通过HtmlAdaptor这个adaptor来实现的。<br /><br />通过本篇文章，你应该大体了解了JMX的架构和一些原理和应用，再深入可以研究SUN的JMX Specification.<br /><img src ="http://www.blogjava.net/esoa/aggbug/77579.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/esoa/" target="_blank">comchyi</a> 2006-10-27 11:36 <a href="http://www.blogjava.net/esoa/articles/77579.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>什么是JMX </title><link>http://www.blogjava.net/esoa/articles/77568.html</link><dc:creator>comchyi</dc:creator><author>comchyi</author><pubDate>Fri, 27 Oct 2006 03:05:00 GMT</pubDate><guid>http://www.blogjava.net/esoa/articles/77568.html</guid><wfw:comment>http://www.blogjava.net/esoa/comments/77568.html</wfw:comment><comments>http://www.blogjava.net/esoa/articles/77568.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/esoa/comments/commentRss/77568.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/esoa/services/trackbacks/77568.html</trackback:ping><description><![CDATA[
		<p>JMX(Java Management Extensions)是一个为应用程序植入管理功能的框架。JMX是一套标准的代理和服务，实际上，用户可以在任何Java应用程序中使用这些代理和服务实现管理。 </p>
		<p>JMX的前身是<a class="editpage" title="Create 'JMAPI'" href="http://wiki.matrix.org.cn/Edit.jsp?page=JMAPI">JMAPI</a>。 </p>
		<p>JMX致力于解决分布式系统管理的问题，因此，能够适合于各种不同的环境是非常重要的。为了能够利用功能强大的Java计算环境解决这一的问题，Sun公司扩充了<a class="wikipage" href="http://wiki.matrix.org.cn/Wiki.jsp?page=Java">Java</a>基础类库，开发了专用的管理类库。 </p>
		<p>JMX是一种应用编程接口，可扩充对象和方法的集合体，可以用于跨越一系列不同的异构操作系统平台、系统体系结构和网络传输协议，灵活的开发无缝集成的系统、网络和服务管理应用它提供了用户界面指导、Java类和开发集成系统、网络及网络管理应用的规范。 </p>
		<p>管理对象是JMX应用程序的核心。JMX结构包括：支持Java的Web浏览器用户接口，管理运行模块ARM(Admin Runtime Module)和应用。这三个部件之间通过<a class="wikipage" href="http://wiki.matrix.org.cn/Wiki.jsp?page=RMI">RMI</a>（Remote Method Invocation）进行通信。这里需要说明的是，RMI是使得一个Java虚拟机（JVM）上运行的程序可以调用远程服务器上另一个<a class="wikipage" href="http://wiki.matrix.org.cn/Wiki.jsp?page=JVM">JVM</a>总的对象。 </p>
		<p>用户接口用来发布管理操作，这些操作可以间接的通过浏览器或通过单独的应用程序来激发。管理运行模块用来给应用提供实例化的管理对象。它包括<a class="wikipage" href="http://wiki.matrix.org.cn/Wiki.jsp?page=Agent">Agent</a>对象接口，通知接口和被管数据接口。应用指的是那些被管设备单元。 </p>
		<p>JMX是一个完整的网络管理应用程序开发环境，它同时提供了：厂商需要收集的完整的特性清单，可生成资源清单表格，图形化的用户接口；访问<a class="wikipage" href="http://wiki.matrix.org.cn/Wiki.jsp?page=SNMP">SNMP</a>的网络API；主机间远程过程调用；数据库访问方法。 </p>
		<p>JMX这一轻型的管理基础结构，价值在于对被管理资源的服务实现了抽象，提供了低层的基本类集合，开发人员在保证大多数的公共管理类的完整性和一致性的前提下，进行扩展以满足特定网络管理应用的需要。 </p>
		<p>JMX注重于构造管理工具的软件框架，并尽量采用已成熟的技术。 </p>
		<p>JMX体系被分成三个层次 </p>
		<ul>
				<li>表现层 
</li>
				<li>代理层 
</li>
				<li>分布式服务层 </li>
		</ul>
		<h2 id="section-JMX-_E8_A1_A8_E7_8E_B0_E5_B1_82">表现层 </h2>
		<p>表现层定义的是JMX可管理资源所在的层。 </p>
		<p>这些已管理的资源可以编写或封装为<a class="wikipage" href="http://wiki.matrix.org.cn/Wiki.jsp?page=MBean">MBean</a>。 </p>
		<p>MBean分为四种类型： 标准、动态、开放、模型 </p>
		<h2 id="section-JMX-_E4_BB_A3_E7_90_86_E5_B1_82">代理层 </h2>
		<p>定义的是MBean向应用程序施加管理的层。包括MBean服务器和代理服务的定义。还至少包括一个协议适配器或连接器。 </p>
		<p>代理的组成： 。一个MBean服务器 。要管理的MBean 。作为MBean实现的代理服务 。至少一个协议适配器 </p>
		<h3 id="section-JMX-MBean">MBean </h3>
		<p>在JMX中，最小的可管理单元是MBean。 </p>
		<p>MBean不是一个真正的接口和类，而是必须准循的设计模式以确保资源是一个兼容的MBean。 </p>
		<p>MBean的激活方法: </p>
		<p>invoke()方法是管理应用程序用于激活MBean的方法的手段。 invoke()方法有三个参数，分别是方法的名称、表示属性的对象数组和描述方法签名的一个字符串数组。它与使用<a class="editpage" title="Create 'JavaReflection'" href="http://wiki.matrix.org.cn/Edit.jsp?page=JavaReflection">Java Reflection</a> Api 激活方法的方式类似。 </p>
		<p>Notification(通知)模型： </p>
		<p>MBean的通知模型类似与Java事件的监听器模型。 MBean或管理应用程序可以作为MBean事件的监听器注册。 通知支持由两个基本的概念组成，即广播器和监听器。 </p>
		<h3 id="section-JMX-MBean_E6_9C_8D_E5_8A_A1_E5_99_A8">MBean服务器 </h3>
		<p>MBean服务器用于注册可管理的MBean。 </p>
		<p>所有对MBean的请求或查询都是通过MBean服务器实施的。 </p>
		<h3 id="section-JMX-_E4_BB_A3_E7_90_86_E6_9C_8D_E5_8A_A1">代理服务 </h3>
		<p>代理服务是一些特殊的函数，代理把这些服务提供给MBean，这些代理服务独立于任何MBean。 </p>
		<p>一个代理可以提供四种主要的服务： </p>
		<ul>
				<li>动态装载：允许代理通过下载这个Bean的类动态实例化MBean，这与装载applet的方式类似。 </li>
		</ul>JMX使用m-let这个标记指定期望动态装载的MBean的位置。 
<ul><li>监控：允许代理通知有关的监听器监控一个MBean的属性值的变化 </li></ul>JMX允许使用三种基本类型的监控程序 (1)CounterMonitor：该程序可以观察类型方面的变化，比如Byte类似或Integer类型 (2)GaugeMonitor：该程序可以观察类型方面的变化，比如Byte类似或Integer类型，还可以在到达上下阀值时进行报告。 (3)StringMonitor：该程序可以观察java.lang.String类型的变化。 
<ul><li>计时器：允许预设的时间间隔发送通知，可以作为一个调度程序 
</li><li>关系：允许创建和维护MBean之间的关系 </li></ul><h2 id="section-JMX-_E5_88_86_E5_B8_83_E5_BC_8F_E6_9C_8D_E5_8A_A1_E5_B1_82">分布式服务层 </h2><p>包含协议适配器和连接器两种类型的组件，通过它们连接到外部的应用，如<a class="wikipage" href="http://wiki.matrix.org.cn/Wiki.jsp?page=RMI">RMI</a>管理应用、基于浏览器的管理控制等 </p><h2 id="section-JMX-_E5_8D_8F_E8_AE_AE_E9_80_82_E9_85_8D_E5_99_A8_E5_92_8C_E8_BF_9E_E6_8E_A5_E5_99_A8">协议适配器和连接器 </h2><p>协议适配器是代理与管理客户通信的手段，每个通信的协议都可能不同。 </p><p>它们都是管理客户与MBean交互的方式。 </p><h2 id="section-JMX-JMX_E7_9A_84_E5_A5_BD_E5_A4_84">JMX的好处 </h2><ul><li>可减少对JAVA应用实施管理的投资 
</li><li>提供了一个可伸缩的管理框架 
</li><li>集成现有的管理方案：如：WBEM，SNMP，TMN 
</li><li>使用现有的标准JAVA技术 
</li><li>能使用未来的一些管理概念：如Jini连接技术、通用即插即用、服务定位协议(Service Location Protocol) 
</li><li>只定义了一些可以访问的接口 </li></ul><p>本介绍摘录自<a class="external" href="http://www.huihoo.org/">Huihoo</a><img class="outlink" alt="" src="http://wiki.matrix.org.cn/images/out.png" /></p><h2 id="section-JMX-_E5_8F_82_E8_A7_81">参见</h2><ul><li><a class="wikipage" href="http://wiki.matrix.org.cn/Wiki.jsp?page=JMX%E7%9B%B8%E5%85%B3">JMX相关框架</a></li><li><a class="wikipage" href="http://wiki.matrix.org.cn/Wiki.jsp?page=MC4J">MC4J</a></li><li><a class="editpage" title="Create 'XMOJO'" href="http://wiki.matrix.org.cn/Edit.jsp?page=XMOJO">XMOJO</a></li><li><a class="editpage" title="Create 'MX4J'" href="http://wiki.matrix.org.cn/Edit.jsp?page=MX4J">MX4J</a></li><li><a class="editpage" title="Create 'JFoxMX'" href="http://wiki.matrix.org.cn/Edit.jsp?page=JFoxMX">JFoxMX</a></li><li><a class="editpage" title="Create 'JMX4Ant'" href="http://wiki.matrix.org.cn/Edit.jsp?page=JMX4Ant">JMX4Ant</a></li><li><a class="editpage" title="Create 'Panoptes'" href="http://wiki.matrix.org.cn/Edit.jsp?page=Panoptes">Panoptes</a></li><li><a class="editpage" title="Create 'EJToolsJMXBrowser'" href="http://wiki.matrix.org.cn/Edit.jsp?page=EJToolsJMXBrowser">EJTools JMX Browser</a></li><li><a class="wikipage" href="http://wiki.matrix.org.cn/Wiki.jsp?page=JManage">jManage</a></li></ul><img src ="http://www.blogjava.net/esoa/aggbug/77568.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/esoa/" target="_blank">comchyi</a> 2006-10-27 11:05 <a href="http://www.blogjava.net/esoa/articles/77568.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>