??xml version="1.0" encoding="utf-8" standalone="yes"?>
1、监控^台和g的健店硬件可以通过SNMPQWEB服务器和应用服务器可以通过他们自己的管理工兗数据库也是一L?br />
2、配|应用层面的资源。比如配|应用在查询l果中每|C的数量Q配|数据库q接池,或者外部请求数{?br />
3、收集应用程序的l计信息。如多少成功订单Q多失败订单等?br />
4、日志别,改变日志U别。出问题的时候,可以通过改变日志U别来打印调试信息,快速定位问题?br />
5、监视服务器的性能、负载,通过email、sms{通知关键性事Ӟ比如服务器负载超q预讄界限?br />
要满些需求往往是非常昂贵和困难的,理员通常需要通过不同的工h理不同的服务和g?nbsp;如果使用JMXQ创Z个满上面需求的理pȝ是廉h、更加灵zR所需旉更短?nbsp;
使用JMX的好?br />
1、非常容易用。特别是对一个JAVAE序员,要理解SNMP是困隄。而JMX对他来说非常Ҏ?br />
2、利用现有的技术:现有的管理工具可以插入JMXQJMX提供了很多协议(SNMP、HTTPQ和传输方式Q如RMIQ,如果原有的应用和讑֤没有提供理能力Q则可以创徏JMX代理提供理能力?br />
3、模块化。以模块化的方式创徏你的理环境?br />
4、警告、事件和l计信息?br />
JMX提供了一套通知pȝQ充分利用了面向对象优势Q通知提供了不仅仅是数据,而是一个有分布式JAVA对象Q封装了数据和行为。例如,你发送了一个服务器负蝲的通知Q里面还包含了一个显C载重要性的U别的机Ӟ说白了就是对象里面有个方法,可以判定负蝲的严重程度?br />
5、快速的监控解决Ҏ。不同的开发h员只需要自己开发MBeanQ而不需要花很多的时间在怺的协作上面,q些MBean分布在不同的L上,但可以通过一个管理工具就可以理所有的q些应用?br />
JMX的一些术?br />
1、可理资源Q?font size="2">Manageable resourceQ?br />
可以是Q何的应用、设备、或者其他存在的实体Q能够被java讉K和包装。是被JMX MBean理的资源?br />
2、MBeanQManaged BeanQ?br />
是满x些命名规则和l承JMX 规范的javac,为可理资源的管理和讉K暴露接口。通过属性和行ؓ来暴露接口。有q?c:Standard, Dynamic, and Model MBeans?br />
3、MBean Server
理一lMBean的JAVAcR是JMX 理环境核心。是MBean的注册器?br />
4、JMX Agent
JMX代理是ؓ理一lMBean提供一pd服务的javaq程。是一个MBean Server的容器,它还提供了一些有用的服务Q创建MBean之间的关p,动态加载类Q简单的监控服务Q定时器服务。Agent有一个协议适配器和q接器集合能使外部程序连接到他们?br />
5、Protocol adapters and connectors
协议适配器和q接器是位于JMX Agent内部的对象。把Agent暴露l管理程序和协议。一个Agent可以有很多适配器和q接器?br />
6、Management application
q接到JMX Agent的用户应用程序?br />
7、Notification
通知是Mbean或者Mbean server发送的java对象Q他们封装了事g、警告、或者其他的一般信息。其他的Mbean或者java对象可以注册成ؓ监听器来接受通知?br />
8、InstrumentationQ设备化Q?br />
用MBean暴露一个可理资源的过E?br />
JMX架构
JMX架构主要分ؓ三层Q?font size="2">Distributed layerQ?font size="2">Agent layerQ?font size="2">Instrumentation layerQ如下图所C:
1?/span>Distributed layerQ分布式层)
属于JMX架构的最外层Q这层主要负责JMX Agent能对外部E序可用?nbsp; 又分ZU:一U通过不同的协议(如SNMPQHTTPQ来为MBean提供可见性?/font> 另一U是把Agent API暴露l其他的分布式技术如RMI?br />
2?font size="2">The agent layerQ代理层Q?br />
它包含的最主要的组件是MBean ServerQ它q包?个代理服务ɽ理MBean更加ҎQ它们分别是Q?nbsp; 定时器(timerQ、监控服务、动态MBean加蝲、和MBean关系服务。Agent可以和被理的资源在同一个主ZQ也可以是远E的?br />
3?font size="2">The instrumentation layer
q是最靠近资源的一层,它包含了注册在Agent里面的MBean?br />
4?font size="2">Notifications
除了架构中的三层以外QJMX提供了一个通知机制Q类gJAVA事g模型。通知机制是管理系l的最后必ȝlg。Agent和MBean可以使用通知机制来发送警告或信息l管理应用?br />
以上是JMX架构的主要内容,下一构Z个HelloWorld的JMXE序?br />
Restful WS的特性:
1?strong>可寻址性(AddressabilityQ?br />
资源通过URI来暴露给用户Q可d性是最基本的特性。由于可d性,你可以把URI保存在你的书{NQ你可以把链接发l别人,而不用把Html文g下蝲下来发给别hQ也可以通过URI对资源进行缓存?br />
2?strong>无状态性(StatelessnessQ?br />
无状态性意味着每个HTTPh是完全隔ȝ。每ơ客L发送请求都必须带上所有服务器端需要的信息?nbsp;
无状态的应用更容易分布到有负责均衡的多台服务器上Q无状态性也更容易缓存:~存工具只需要看q一个请求,和Q何其他请求无兟?br />
应用状态和资源状态(Application State Versus Resource StateQ?br />
应用状态位于客LQ而资源状态位于服务器端,对于客户端,每个客户端都有各自的应用状态,例如Q在google搜烦Q你可能搜烦某个单词且当前页是第3,我可能搜索另一个单词且在第一,所以每个客L都有一个应用状态。当客户端发赯求的时候,必须告诉服务器你的应用状态,比如你当前要看某个单词搜索结果的W几,服务器端q回l果上有其他链接Q这些链接客L可能作ؓ未来的请求?br />
而对于资源状态,对于每个客户端都是相同的Q就是服务器上的资源?nbsp;
3、表q性(RepresentationsQ?br />
表述性,是资源的表现Ş式,相同的资源可以有不同的表q性,比如同一个bug列表可以用XML文档表示Q也可以用文本方式表C等{。对于同一资源的不同的RepresentationQ如何知道客Lh哪一U呢Q作者徏议不同的Representation使用不同的URI?br />
4、连通性(Links and ConnectednessQ?br />
单点_是q回的结果中有对其他资源的链接(URIQ,比如google搜烦Q搜索结果可能有其他늚链接?br />
5、统一的接口(The Uniform InterfaceQ?br />
也就是说Restful WS使用HTTP的基本方法作Z的方法的表示Q主要用HTTP的四个方法:GET,PUT,DELETE,POST。HEAD和OPTIONS用的比较?br />
取得某个资源的表q的时候用GET?br />
创徏一个新的资源的时候,PUTC个新的URIQ或者POSTC个已l存在的URI?br />
修改资源Q用PUT到存在的URI?br />
删除资源使用DELETE?br />
PUT和POST都可以创建新的资源,那有什么区别呢QPOST可以创徏从属资源Q如一个webblogE序通过资源Q?weblogs/myweblogQ暴露每个blogQ而某个blog下面的条目作Z属资源ؓ/weblogs/myweblog/entries/1Q当你需要增加一个条目的时候,你可以POST到父资源/weblogs/myweblogQ同样PUT也可以完成这个工作,在这里POST和PUT的区别是Q当客户端可以控制新资源的URI的时候,则用PUTQ比如blog的下面的某篇文章使用名字来访问,?weblogs/myweblog/entries/restful_ws_1Q这h个博客下面的文章不能重复Q,则当你发表一新文章的时候,可以PUT到新的URI?weblogs/myweblog/entries/restful_ws_2来创源。而如果客L不能控制URI的时候,比如blog是通过服务器端某个序列h讉KQ客L是无法知道下一个序h什么,q时只能使用POSTQ这UPOST如果创徏成功Q则q回201Q响应头中的Location可以保护新创源的URI?br />
q有一个区别,POSTҎ个存在的资源更新Ӟ一般是q加QappendQ,比如说对某个日志文g做POSTQ则把日志追加到原日志的后面。如果是PUT则进行的是替换,所以PUT是等q的Q而POST不是Q后面会Ԍ?br />
安全QSafetyQ?br />
GET和HEADҎ只是获取资源的表qͼ所以是安全的。当然也可能有一些副作用Q比如有些服务端会记录GET的次数等?br />
{幂性(IdempotenceQ?br />
{幂性简单点说就是一ơ请求和多次hQ资源的状态是一栗比如GET和HEADQ不Zh多少ơ,资源q是在那里。请注意QDELETE和PUT也是{幂的,以ؓ对同一个资源删除一ơ或者多ơ,l果是一LQ就是资源被删除了,不存在了。ؓ什么说PUT也是{幂的?当你PUT一个新资源的时候,资源被创建,再次PUTq个URI的时候,资源q是没变。当你PUT一个存在的资源Ӟ更新了资源,再次PUT的时候,q是更新成这个样子。在PUT更新的时候,不能做相对的更新Q依赖资源现在的状态)Q比如每ơ对一个数?Q这栯源状态就会变化。应该每ơ更新成某个敎ͼ比如把某个数变成4Q则无论多少ơPUTQ值都?Q这样就是等q了?br />
我们设计Restful WS的时候,GETQHEAD, PUT, DELETE一定要设计成等q的。由于网l是不可靠的Q安全性和{幂性就昑־特别重要。如果一ơ请求,服务器收到处理以后,客户端没有收到相应,客户端会再次hQ如果没有等q性保障,׃发生意想不到的问题?br />
POST是不安全也不{幂的,q是拿weblog的例子,如果两次POST相同的博文,则会产生两个资源QURI可能是这?weblogs/myweblog/entries/1?weblogs/myweblog/entries/2Q尽他们的内容是一怸L?br />