﻿<?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-活到老，学到老-随笔分类-Java企业开发</title><link>http://www.blogjava.net/simonshen/category/48184.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 05 Apr 2011 12:28:03 GMT</lastBuildDate><pubDate>Tue, 05 Apr 2011 12:28:03 GMT</pubDate><ttl>60</ttl><item><title>JMX In Action 总结（二）--HelloWorld例子</title><link>http://www.blogjava.net/simonshen/archive/2011/04/05/347639.html</link><dc:creator>simon.shen</dc:creator><author>simon.shen</author><pubDate>Tue, 05 Apr 2011 08:20:00 GMT</pubDate><guid>http://www.blogjava.net/simonshen/archive/2011/04/05/347639.html</guid><wfw:comment>http://www.blogjava.net/simonshen/comments/347639.html</wfw:comment><comments>http://www.blogjava.net/simonshen/archive/2011/04/05/347639.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/simonshen/comments/commentRss/347639.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/simonshen/services/trackbacks/347639.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;&nbsp;&nbsp;这篇写一个简单的HelloWorld例子。&nbsp;&nbsp;&nbsp;&nbsp;首先准备环境，我使用的JDK1.6,1.5应该也可以。还需要去oracle下载JMX RI包，地址为：http://www.oracle.com/technetwork/java/javase/tech/download-jsp-141676.html，下载...&nbsp;&nbsp;<a href='http://www.blogjava.net/simonshen/archive/2011/04/05/347639.html'>阅读全文</a><img src ="http://www.blogjava.net/simonshen/aggbug/347639.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/simonshen/" target="_blank">simon.shen</a> 2011-04-05 16:20 <a href="http://www.blogjava.net/simonshen/archive/2011/04/05/347639.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JMX In Action 总结（一）</title><link>http://www.blogjava.net/simonshen/archive/2011/04/03/347589.html</link><dc:creator>simon.shen</dc:creator><author>simon.shen</author><pubDate>Sun, 03 Apr 2011 15:08:00 GMT</pubDate><guid>http://www.blogjava.net/simonshen/archive/2011/04/03/347589.html</guid><wfw:comment>http://www.blogjava.net/simonshen/comments/347589.html</wfw:comment><comments>http://www.blogjava.net/simonshen/archive/2011/04/03/347589.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/simonshen/comments/commentRss/347589.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/simonshen/services/trackbacks/347589.html</trackback:ping><description><![CDATA[<span style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;这是我读了JMX In Action以后的总结，这篇文章是这个系列的第一篇，主要介绍一下什么是JMX，为什么要使用JMX？以及简单阐述一下JMX的架构。<br />
&nbsp;&nbsp;&nbsp;<strong>&nbsp;什么是JMX？<br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp;首先看一下<font size="2">维基百科的定义：JMX（Java Management Extensions，即Java管理扩展）是Java平台上为应用程序、设备、系统等植入管理功能的框架。<br />
JMX可以跨越一系列异构操作系统平台、系统体系结构和网络传输协议，灵活的开发无缝集成的系统、网络和服务管理应用。<br />
&nbsp;&nbsp;&nbsp;&nbsp;<font size="2">随着企业 IT 规模的不断增长，IT 资源（IT resource）数量不断增加，IT 资源的分布也越来越分散。IT资源主要包括网络和应用等。管理网络（硬件）的主要工具是<br />
简单网络管理协议（SNMP），硬件厂商一般都会在设备中提供SNMP hooks，但SNMP开发不是件容易的事情，而且需要掌握特定的语言，对JAVA开发者绝非易事。<br />
&nbsp;&nbsp;&nbsp;&nbsp;有些企业开发的应用的时候，是不会考虑运行时配置和管理问题。有些企业直接在产品中开发管理工具和界面。也有一些企业直接使用应用服务器或web服务器的管理工具。<br />
&nbsp;&nbsp;&nbsp;&nbsp;现实世界的IT资源管理需求主要有以下一些：<br />
&nbsp;&nbsp;&nbsp;&nbsp;1、监控平台和硬件的健康。硬件可以通过SNMP，WEB服务器和应用服务器可以通过他们自己的管理工具。数据库也是一样等。<br />
&nbsp;&nbsp; 2、配置应用层面的资源。比如配置应用在查询结果中每页显示的数量，配置数据库连接池，或者外部请求数等。<br />
&nbsp;&nbsp; 3、收集应用程序的统计信息。如多少成功订单，多少失败订单等。<br />
&nbsp;&nbsp; 4、日志级别，改变日志级别。出问题的时候，可以通过改变日志级别来打印调试信息，快速定位问题。<br />
&nbsp;&nbsp; 5、监视服务器的性能、负载，通过email、sms等通知关键性事件，比如服务器负载超过预设的界限。<br />
&nbsp;&nbsp;&nbsp;&nbsp;要满足这些需求往往是非常昂贵和困难的，管理员通常需要通过不同的工具来管理不同的服务和硬件。&nbsp;如果使用JMX，创建一个满足上面需求的管理系统将是廉价、更加灵活、所需时间更短。&nbsp;&nbsp;&nbsp;&nbsp;</font></font></span>&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-size: 10pt"><strong>使用JMX的好处<br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1、非常容易使用。特别是对一个JAVA程序员，要理解SNMP是困难的。而JMX对他来说非常容易。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2、利用现有的技术：现有的管理工具可以插入JMX，JMX提供了很多协议（SNMP、HTTP）和传输方式（如RMI），如果原有的应用和设备没有提供管理能力，则可以创建JMX代理提供管理能力。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3、模块化。以模块化的方式创建你的管理环境。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4、警告、事件和统计信息。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JMX提供了一套通知系统，充分利用了面向对象优势，通知提供了不仅仅是数据，而是一个有分布式JAVA对象，封装了数据和行为。例如，你发送了一个服务器负载的通知，里面还包含了一个显示负载重要性的级别的机制，说白了就是对象里面有个方法，可以判定负载的严重程度。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5、快速的监控解决方案。不同的开发人员只需要自己开发MBean，而不需要花很多的时间在相互的协作上面，这些MBean分布在不同的主机上，但可以通过一个管理工具就可以管理所有的这些应用。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;JMX的一些术语<br />
<font size="2">&nbsp;&nbsp;&nbsp;&nbsp;1、可管理资源（<font size="2">Manageable resource</font>）<br />
&nbsp;&nbsp;&nbsp;&nbsp;可以是任何的应用、设备、或者其他存在的实体，能够被java访问和包装。是被JMX MBean管理的资源。<br />
&nbsp;&nbsp;&nbsp;&nbsp;2、MBean（Managed Bean）<br />
&nbsp;&nbsp;&nbsp;&nbsp;是满足某些命名规则和继承JMX 规范的java类，为可管理资源的管理和访问暴露接口。通过属性和行为来暴露接口。有这3类：Standard, Dynamic, and Model MBeans。<br />
&nbsp;&nbsp;&nbsp;&nbsp;3、MBean Server<br />
&nbsp;&nbsp;&nbsp;&nbsp;管理一组MBean的JAVA类。是JMX 管理环境核心。是MBean的注册器。<br />
&nbsp;&nbsp;&nbsp;&nbsp;</font><font size="2">4、JMX Agent<br />
&nbsp;&nbsp;&nbsp;&nbsp;JMX代理是为管理一组MBean提供一系列服务的java进程。是一个MBean&nbsp;Server的容器，它还提供了一些有用的服务：创建MBean之间的关系，动态加载类，简单的监控服务，定时器服务。Agent有一个协议适配器和连接器集合能使外部程序连接到他们。<br />
&nbsp;&nbsp;&nbsp;&nbsp;</font><font size="2">5、Protocol adapters and connectors<br />
&nbsp;&nbsp;&nbsp;&nbsp;协议适配器和连接器是位于JMX Agent内部的对象。把Agent暴露给管理程序和协议。一个Agent可以有很多适配器和连接器。<br />
&nbsp;&nbsp;&nbsp;&nbsp;</font><font size="2">6、Management application<br />
&nbsp;&nbsp;&nbsp;&nbsp;连接到JMX Agent的用户应用程序。<br />
&nbsp;&nbsp;&nbsp;&nbsp;</font><font size="2">7、Notification<br />
&nbsp;&nbsp;&nbsp;&nbsp;通知是Mbean或者Mbean server发送的java对象，他们封装了事件、警告、或者其他的一般信息。其他的Mbean或者java对象可以注册成为监听器来接受通知。<br />
</font><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;8、Instrumentation（设备化）<br />
&nbsp;&nbsp;&nbsp;&nbsp;用MBean暴露一个可管理资源的过程。<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<strong>JMX架构<br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp;JMX架构主要分为三层：<font size="2">Distributed layer</font>，<font size="2">Agent layer</font>，<font size="2">Instrumentation layer，如下图所示：</font><br />
<strong>&nbsp;&nbsp;&nbsp;&nbsp;<v:shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600">&nbsp;<img style="width: 661px; height: 339px" border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/simonshen/jmx_architecture.png" width="661" height="339" /><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></v:path><o:lock aspectratio="t" v:ext="edit"></o:lock></v:shapetype></strong></font></span>&nbsp;<br />
<br />
&nbsp;<span style="font-size: 10pt">&nbsp;&nbsp;&nbsp;1、</span><font size="2">Distributed layer（分布式层）<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;属于JMX架构的最外层，这层主要负责使JMX Agent能对外部程序可用。&nbsp;&nbsp;&nbsp;&nbsp;又分为两种：一种通过不同的协议（如SNMP，HTTP）来为MBean提供可见性。</font> <span style="font-size: 10pt">另一种是把Agent API暴露给其他的分布式技术如RMI。<br />
&nbsp;&nbsp;&nbsp;&nbsp;2、<font size="2">The agent layer</font>（代理层）<br />
&nbsp;&nbsp;&nbsp;&nbsp;它包含的最主要的组件是MBean Server，它还包括4个代理服务使管理MBean更加容易，它们分别是：&nbsp;&nbsp;&nbsp;&nbsp;定时器（timer）、监控服务、动态MBean加载、和MBean关系服务。Agent可以和被管理的资源在同一个主机上，也可以是远程的。<br />
&nbsp;&nbsp;&nbsp;&nbsp;3、<font size="2">The instrumentation layer</font><br />
&nbsp;&nbsp;&nbsp;&nbsp;这是最靠近资源的一层，它包含了注册在Agent里面的MBean。<br />
&nbsp;&nbsp;&nbsp;&nbsp;4、<font size="2">Notifications</font><br />
&nbsp;&nbsp;&nbsp;&nbsp;除了架构中的三层以外，JMX提供了一个通知机制，类似于JAVA事件模型。通知机制是管理系统的最后必须的组件。Agent和MBean可以使用通知机制来发送警告或信息给管理应用。<br />
&nbsp;&nbsp;&nbsp;&nbsp;以上就是JMX架构的主要内容，下一篇构建一个HelloWorld的JMX程序。<br />
</span>
<img src ="http://www.blogjava.net/simonshen/aggbug/347589.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/simonshen/" target="_blank">simon.shen</a> 2011-04-03 23:08 <a href="http://www.blogjava.net/simonshen/archive/2011/04/03/347589.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Restful Web Services 读书笔记（一）</title><link>http://www.blogjava.net/simonshen/archive/2011/03/30/347237.html</link><dc:creator>simon.shen</dc:creator><author>simon.shen</author><pubDate>Wed, 30 Mar 2011 13:59:00 GMT</pubDate><guid>http://www.blogjava.net/simonshen/archive/2011/03/30/347237.html</guid><wfw:comment>http://www.blogjava.net/simonshen/comments/347237.html</wfw:comment><comments>http://www.blogjava.net/simonshen/archive/2011/03/30/347237.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/simonshen/comments/commentRss/347237.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/simonshen/services/trackbacks/347237.html</trackback:ping><description><![CDATA[<p style="font-family: 微软雅黑; font-size: 12pt">&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-size: 10pt">这本书的前面三章主要讲了一下基本概念，客户端程序，和Amazon的S3，这篇博客总结一下第四章，个人感觉有很多重要的概念。<br />
&nbsp;&nbsp;&nbsp;&nbsp;面向资源的架构（<font face="微软雅黑">The Resource-Oriented Architecture</font>），这里的资源必须要有一个URI，资源和URI的关系：一个资源可能有一个或多个URI，而一个URI只能指定一个资源。<br />
<br />
&nbsp;&nbsp;&nbsp; Restful WS的特性：<br />
&nbsp;&nbsp;&nbsp;&nbsp;1、<strong>可寻址性（</strong><font face="微软雅黑"><strong>Addressability）<br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;资源通过URI来暴露给用户，可寻址性是最基本的特性。由于可寻址性，你可以把URI保存在你的书签里，你可以把链接发给别人，而不用把Html文件下载下来发给别人，也可以通过URI对资源进行缓存。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;2、<strong>无状态性（<font face="微软雅黑">Statelessness</font>）<br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;无状态性意味着每个HTTP请求是完全隔离的。每次客户端发送请求都必须带上所有服务器端需要的信息。&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;无状态的应用更容易分布到有负责均衡的多台服务器上；无状态性也更容易缓存：缓存工具只需要看这一个请求，和任何其他请求无关。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>应用状态和资源状态（<font face="微软雅黑">Application State Versus Resource State</font>）<br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;应用状态位于客户端，而资源状态位于服务器端，对于客户端，每个客户端都有各自的应用状态，例如：在google搜索，你可能搜索某个单词且当前页是第3页，我可能搜索另一个单词且在第一页，所以每个客户端都有一个应用状态。当客户端发起请求的时候，必须告诉服务器你的应用状态，比如你当前要看某个单词搜索结果的第几页，服务器端返回结果上有其他链接，这些链接客户端可能作为未来的请求。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;而对于资源状态，对于每个客户端都是相同的，就是服务器上的资源。&nbsp;&nbsp;<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;<strong>&nbsp;3、表述性（<font face="微软雅黑">Representations</font>）<br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;表述性，就是资源的表现形式，相同的资源可以有不同的表述性，比如同一个bug列表可以用XML文档表示，也可以用文本方式表示等等。对于同一资源的不同的<font face="微软雅黑">Representation</font>，如何知道客户端请求哪一种呢？作者建议不同的<font face="微软雅黑">Representation</font>使用不同的URI。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<strong>4、连通性（<font face="微软雅黑">Links and Connectedness</font>）<br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;简单点说，就是返回的结果中有对其他资源的链接（URI），比如google搜索，搜索结果可能有其他页的链接。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<strong>5、统一的接口（<font face="微软雅黑">The Uniform Interface</font>）<br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;也就是说Restful WS使用HTTP的基本方法作为他的方法的表示，主要使用HTTP的四个方法：GET,PUT,DELETE,POST。HEAD和OPTIONS用的比较少。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;取得某个资源的表述的时候使用GET。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;创建一个新的资源的时候，PUT到一个新的URI，或者POST到一个已经存在的URI。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;修改资源，使用PUT到存在的URI。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;删除资源使用DELETE。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PUT和POST都可以创建新的资源，那有什么区别呢？POST可以创建从属资源，如一个webblog程序通过资源（/weblogs/myweblog）暴露每个blog，而某个blog下面的条目作为从属资源为/weblogs/myweblog/entries/1，当你需要增加一个条目的时候，你可以POST到父资源/weblogs/myweblog，同样PUT也可以完成这个工作，在这里POST和PUT的区别是：当客户端可以控制新资源的URI的时候，则使用PUT，比如blog的下面的某篇文章使用名字来访问，如/weblogs/myweblog/entries/restful_ws_1（这样某个博客下面的文章不能重复），则当你发表一篇新文章的时候，可以PUT到新的URI如/weblogs/myweblog/entries/restful_ws_2来创建资源。而如果客户端不能控制URI的时候，比如blog是通过服务器端某个序列号来访问，客户端是无法知道下一个序号是什么，这时只能使用POST，这种POST如果创建成功，则返回201，响应头中的Location可以保护新创建资源的URI。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;还有一个区别，POST对某个存在的资源更新时，一般是追加（append），比如说对某个日志文件做POST，则把日志追加到原日志的后面。如果是PUT则进行的是替换，所以PUT是等幂的，而POST不是（后面会讲）。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>&nbsp;安全（Safety）<br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GET和HEAD方法只是获取资源的表述，所以是安全的。当然也可能有一些副作用，比如有些服务端会记录GET的次数等。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>&nbsp;等幂性（Idempotence）<br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;等幂性简单点说就是一次请求和多次请求，资源的状态是一样。比如GET和HEAD，不论你请求多少次，资源还是在那里。请注意，DELETE和PUT也是等幂的，以为对同一个资源删除一次或者多次，结果是一样的，就是资源被删除了，不存在了。为什么说PUT也是等幂的？当你PUT一个新资源的时候，资源被创建，再次PUT这个URI的时候，资源还是没变。当你PUT一个存在的资源时，更新了资源，再次PUT的时候，还是更新成这个样子。在PUT更新的时候，不能做相对的更新（依赖资源现在的状态），比如每次对一个数加1，这样资源状态就会变化。应该每次更新成某个数，比如把某个数变成4，则无论多少次PUT，值都是4，这样就是等幂了。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;我们设计Restful WS的时候，GET，HEAD, PUT, DELETE一定要设计成等幂的。由于网络是不可靠的，安全性和等幂性就显得特别重要。如果一次请求，服务器收到处理以后，客户端没有收到相应，客户端会再次请求，如果没有等幂性保障，就会发生意想不到的问题。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;POST是不安全也不等幂的，还是拿weblog的例子，如果两次POST相同的博文，则会产生两个资源，URI可能是这样/weblogs/myweblog/entries/1和/weblogs/myweblog/entries/2，尽管他们的内容是一摸一样的。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font></span><font face="微软雅黑"><br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
</font></p>
<img src ="http://www.blogjava.net/simonshen/aggbug/347237.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/simonshen/" target="_blank">simon.shen</a> 2011-03-30 21:59 <a href="http://www.blogjava.net/simonshen/archive/2011/03/30/347237.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>