﻿<?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/jjwwhmm/category/30244.html</link><description>Embrace changes, pursue excellence, share niceness.
</description><language>zh-cn</language><lastBuildDate>Thu, 29 May 2008 12:54:59 GMT</lastBuildDate><pubDate>Thu, 29 May 2008 12:54:59 GMT</pubDate><ttl>60</ttl><item><title>equinox开发osgi时的一个小技巧:定义公用的jar文件.</title><link>http://www.blogjava.net/jjwwhmm/archive/2008/05/29/203922.html</link><dc:creator>pony</dc:creator><author>pony</author><pubDate>Thu, 29 May 2008 11:33:00 GMT</pubDate><guid>http://www.blogjava.net/jjwwhmm/archive/2008/05/29/203922.html</guid><wfw:comment>http://www.blogjava.net/jjwwhmm/comments/203922.html</wfw:comment><comments>http://www.blogjava.net/jjwwhmm/archive/2008/05/29/203922.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jjwwhmm/comments/commentRss/203922.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjwwhmm/services/trackbacks/203922.html</trackback:ping><description><![CDATA[一般在开发java项目的时候,我们会有一些公用的jar文件,在开发bundle的时候,如果把这些jar文件重复的在各bundle中复制的话,即烦琐,又容易出错.<br />
今天我琢磨出一个方法,虽然不敢说这么做是否是正确方法,但至少解决了正确的问题(用错误的方法解决正确的事总比用正确的方法解决错误的事好!哈哈).下面是解决的方法:<br />
&nbsp;1.修改org.eclipse.osgi.xxxxxx.jar文件<br />
&nbsp;&nbsp; a.把文件中META-INF目录中的ECLIPSE.SF,ECLIPSE.RSA文件删除掉(因为jar文件是通过SF文件来保证jar中的内容不被篡改!如果不了解这个的,可以去查下jar的详细说明)<br />
&nbsp;&nbsp; b.修改jar根目录下的J2SE-1.5.profile文件(如果你开发osgi使用的是其它J2SE环境,请编辑相应的文件)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这个文件中定义了osgi启动时的org.osgi.framework.system.packages属性,因为osgi中每个bundle都有自己独立的classpath,那么在各个bundle之间共享的class就是通过这个属性中定义的包来指定的.(如果不了解osgi的class载入机制,请参阅osgi的入门教材!),你可以在文件中的这个属性值上加入自己的包,例如:<br />
&nbsp;........<br />
&nbsp;org.ietf.jgss,\<br />
&nbsp;org.omg.*,\<br />
&nbsp;org.w3c.*,\<br />
&nbsp;org.xml.*,\<br />
&nbsp;sun.*,\<br />
&nbsp;demo.*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //这一行是新增加的包<br />
2.把demo.*所在的jar文件加入到启动osgi的classpath中,一般你可以系统环境变量的classpath中加入这个jar文件路径.<br />
3.把第1步中修改后的osgi jar文件拷贝到eclipse的plugins目录下,重新启动eclipse<br />
4.打开一个bundle的MANIFEST.MF文件,在dependencies项中,你就可以在imported packages中导入刚才定义的demo包了.<br />
<br />
虽然这样做可以做到在各个bundle间共享一些jar文件,但这些公用的jar一定要确认清楚,否则会给以后的开发带来麻烦!因为之所以用osgi来开发,就是为了使用它的class loader的管理机制. 
<img src ="http://www.blogjava.net/jjwwhmm/aggbug/203922.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjwwhmm/" target="_blank">pony</a> 2008-05-29 19:33 <a href="http://www.blogjava.net/jjwwhmm/archive/2008/05/29/203922.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OOD比OOP更重要</title><link>http://www.blogjava.net/jjwwhmm/archive/2008/05/29/203892.html</link><dc:creator>pony</dc:creator><author>pony</author><pubDate>Thu, 29 May 2008 09:35:00 GMT</pubDate><guid>http://www.blogjava.net/jjwwhmm/archive/2008/05/29/203892.html</guid><wfw:comment>http://www.blogjava.net/jjwwhmm/comments/203892.html</wfw:comment><comments>http://www.blogjava.net/jjwwhmm/archive/2008/05/29/203892.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jjwwhmm/comments/commentRss/203892.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjwwhmm/services/trackbacks/203892.html</trackback:ping><description><![CDATA[OOP相对比较容易学习,毕竟与编程语言的语法有很大关系.但是OOD就很复杂了,一个大的系统,到了后期越来越混乱,大多数原因是随着新员工的不断加入,他们不能和以前的老员工或者已离职的员工的设计概念保持一致.或者由于系统上线后,新来的业务需求大部分是以一个个小的特性加入到系统中,所以开发人员,管理人员都以一种很容易实现的方式去做这些事情,结果到后面就乱成一团.所以,系统在后期有个重要的工作,就是不断进行架构的重构,以便使新的模块,代码能与以前的在构架概念上保持一致.一个大的系统如果不以OOD的方式设计,那么构架师基本上很难把这个系统向新的涉众解释清楚,无论你是用用例图,类图,序列图,还是交互图,部署图,都难.必须要以一个个的子系统去描述它.<br />
总之,概念完整性是系统成功的关键.设计上的技术可能对某一个模块的影响会比较大.<br />
<img src ="http://www.blogjava.net/jjwwhmm/aggbug/203892.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjwwhmm/" target="_blank">pony</a> 2008-05-29 17:35 <a href="http://www.blogjava.net/jjwwhmm/archive/2008/05/29/203892.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle AS的远程调试</title><link>http://www.blogjava.net/jjwwhmm/archive/2008/05/28/203446.html</link><dc:creator>pony</dc:creator><author>pony</author><pubDate>Wed, 28 May 2008 03:57:00 GMT</pubDate><guid>http://www.blogjava.net/jjwwhmm/archive/2008/05/28/203446.html</guid><wfw:comment>http://www.blogjava.net/jjwwhmm/comments/203446.html</wfw:comment><comments>http://www.blogjava.net/jjwwhmm/archive/2008/05/28/203446.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jjwwhmm/comments/commentRss/203446.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjwwhmm/services/trackbacks/203446.html</trackback:ping><description><![CDATA[如果要使OracleAS支持远程调试功能,需要在目录: \OracleAS_1\opmn\conf,修改配置文件opmn.xml:
<div><span  style="font-family: white-space: pre; ">&lt;module-data></span>
<pre>&lt;category id="start-parameters">
&lt;data id="java-options" value="-server &lt;del>Xdebug &lt;/del>Xnoagent -Djava.compiler=NONE
-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=4000
-Djava.security.policy=$ORACLE_HOME/j2ee/home/config/java2.policy
-Djava.awt.headless=true"/>
&lt;/category>
&lt;/module-data>
</pre>
</div>
<img src ="http://www.blogjava.net/jjwwhmm/aggbug/203446.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjwwhmm/" target="_blank">pony</a> 2008-05-28 11:57 <a href="http://www.blogjava.net/jjwwhmm/archive/2008/05/28/203446.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Felix设计中的一个疑问</title><link>http://www.blogjava.net/jjwwhmm/archive/2008/05/19/201412.html</link><dc:creator>pony</dc:creator><author>pony</author><pubDate>Mon, 19 May 2008 08:11:00 GMT</pubDate><guid>http://www.blogjava.net/jjwwhmm/archive/2008/05/19/201412.html</guid><wfw:comment>http://www.blogjava.net/jjwwhmm/comments/201412.html</wfw:comment><comments>http://www.blogjava.net/jjwwhmm/archive/2008/05/19/201412.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/jjwwhmm/comments/commentRss/201412.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjwwhmm/services/trackbacks/201412.html</trackback:ping><description><![CDATA[这两天在看apache的osgi框架felix的源代码,对里面很多类的构造函数都有个logger感到很疑惑,一个logger对象会成为一个类的构造函数所必须要的参数吗?
<div>例如:</div>
<div>public Felix(Logger logger, Map configMutableMap, List activatorList) {...}</div>
<div>private EventDispatcher(Logger logger) {...}</div>
<div>protected BundleContextImpl(Logger logger, Felix felix, FelixBundle bundle) {...}</div>
<div>这样的例子太多了.我还看不出这样使用logger有什么好处,应该是跟osgi框架的每个bundle使用单独的classpath有关,不知道哪位可以解释下.谢谢!</div>
<img src ="http://www.blogjava.net/jjwwhmm/aggbug/201412.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjwwhmm/" target="_blank">pony</a> 2008-05-19 16:11 <a href="http://www.blogjava.net/jjwwhmm/archive/2008/05/19/201412.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>equinox的osgi命令</title><link>http://www.blogjava.net/jjwwhmm/archive/2008/05/14/200343.html</link><dc:creator>pony</dc:creator><author>pony</author><pubDate>Wed, 14 May 2008 01:49:00 GMT</pubDate><guid>http://www.blogjava.net/jjwwhmm/archive/2008/05/14/200343.html</guid><wfw:comment>http://www.blogjava.net/jjwwhmm/comments/200343.html</wfw:comment><comments>http://www.blogjava.net/jjwwhmm/archive/2008/05/14/200343.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jjwwhmm/comments/commentRss/200343.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjwwhmm/services/trackbacks/200343.html</trackback:ping><description><![CDATA[<span style="font-size: 10.5pt; color: rgb(0,0,0); font-family: ''Courier New''; mso-spacerun: ''yes''">控制osgi framework的命令:<br />
&nbsp;launch&nbsp;-&nbsp;start&nbsp;the&nbsp;OSGi&nbsp;Framework</span><span style="font-size: 10.5pt; font-family: ''Courier New''; mso-spacerun: ''yes''"><O:P></O:P></span>
<p class="0" style="layout-grid-mode: char; text-align: justify"><font size="3"><span style="font-size: 10.5pt; color: rgb(0,0,0); font-family: ''Courier New''; mso-spacerun: ''yes''">&nbsp;</span><span style="font-size: 10.5pt; color: rgb(0,0,0); font-family: ''Courier New''; mso-spacerun: ''yes''">shutdown&nbsp;-&nbsp;shutdown&nbsp;the&nbsp;OSGi&nbsp;Framework</span><span style="font-size: 10.5pt; font-family: ''Courier New''; mso-spacerun: ''yes''"><O:P></O:P></span></font></p>
<p class="0" style="layout-grid-mode: char; text-align: justify"><font size="3"><span style="font-size: 10.5pt; color: rgb(0,0,0); font-family: ''Courier New''; mso-spacerun: ''yes''">&nbsp;</span><span style="font-size: 10.5pt; color: rgb(0,0,0); font-family: ''Courier New''; mso-spacerun: ''yes''">close&nbsp;-&nbsp;shutdown&nbsp;and&nbsp;exit</span><span style="font-size: 10.5pt; font-family: ''Courier New''; mso-spacerun: ''yes''"><O:P></O:P></span></font></p>
<p class="0" style="layout-grid-mode: char; text-align: justify"><font size="3"><span style="font-size: 10.5pt; color: rgb(0,0,0); font-family: ''Courier New''; mso-spacerun: ''yes''">&nbsp;</span><span style="font-size: 10.5pt; color: rgb(0,0,0); font-family: ''Courier New''; mso-spacerun: ''yes''">exit&nbsp;-&nbsp;exit&nbsp;immediately&nbsp;(System.exit)</span><span style="font-size: 10.5pt; font-family: ''Courier New''; mso-spacerun: ''yes''"><O:P></O:P></span></font></p>
<p class="0" style="layout-grid-mode: char; text-align: justify"><font size="3"><span style="font-size: 10.5pt; color: rgb(0,0,0); font-family: ''Courier New''; mso-spacerun: ''yes''">&nbsp;</span><span style="font-size: 10.5pt; color: rgb(0,0,0); font-family: ''Courier New''; mso-spacerun: ''yes''">init&nbsp;-&nbsp;uninstall&nbsp;all&nbsp;bundles</span><span style="font-size: 10.5pt; font-family: ''Courier New''; mso-spacerun: ''yes''"><O:P></O:P></span></font></p>
<p class="0" style="layout-grid-mode: char; text-align: justify"><font size="3"><span style="font-size: 10.5pt; color: rgb(0,0,0); font-family: ''Courier New''; mso-spacerun: ''yes''">&nbsp;</span><span style="font-size: 10.5pt; color: rgb(0,0,0); font-family: ''Courier New''; mso-spacerun: ''yes''">setprop&nbsp;&lt;key&gt;=&lt;value&gt;&nbsp;-&nbsp;set&nbsp;the&nbsp;OSGi&nbsp;property<br />
</span><span style="font-size: 10.5pt; font-family: ''Courier New''; mso-spacerun: ''yes''"><O:P><br />
控制bundle的命令:</O:P></span></font></p>
<p class="0" style="layout-grid-mode: char; text-align: justify"><font size="3"><span style="font-size: 10.5pt; color: rgb(0,0,0); font-family: ''Courier New''; mso-spacerun: ''yes''">&nbsp;</span><span style="font-size: 10.5pt; color: rgb(0,0,0); font-family: ''Courier New''; mso-spacerun: ''yes''">install&nbsp;-&nbsp;install&nbsp;and&nbsp;optionally&nbsp;start&nbsp;bundle&nbsp;from&nbsp;the&nbsp;given&nbsp;URL</span><span style="font-size: 10.5pt; font-family: ''Courier New''; mso-spacerun: ''yes''"><O:P></O:P></span></font></p>
<p class="0" style="layout-grid-mode: char; text-align: justify"><font size="3"><span style="font-size: 10.5pt; color: rgb(0,0,0); font-family: ''Courier New''; mso-spacerun: ''yes''">&nbsp;</span><span style="font-size: 10.5pt; color: rgb(0,0,0); font-family: ''Courier New''; mso-spacerun: ''yes''">uninstall&nbsp;-&nbsp;uninstall&nbsp;the&nbsp;specified&nbsp;bundle(s)</span><span style="font-size: 10.5pt; font-family: ''Courier New''; mso-spacerun: ''yes''"><O:P></O:P></span></font></p>
<p class="0" style="layout-grid-mode: char; text-align: justify"><font size="3"><span style="font-size: 10.5pt; color: rgb(0,0,0); font-family: ''Courier New''; mso-spacerun: ''yes''">&nbsp;</span><span style="font-size: 10.5pt; color: rgb(0,0,0); font-family: ''Courier New''; mso-spacerun: ''yes''">start&nbsp;-&nbsp;start&nbsp;the&nbsp;specified&nbsp;bundle(s)</span><span style="font-size: 10.5pt; font-family: ''Courier New''; mso-spacerun: ''yes''"><O:P></O:P></span></font></p>
<p class="0" style="layout-grid-mode: char; text-align: justify"><font size="3"><span style="font-size: 10.5pt; color: rgb(0,0,0); font-family: ''Courier New''; mso-spacerun: ''yes''">&nbsp;</span><span style="font-size: 10.5pt; color: rgb(0,0,0); font-family: ''Courier New''; mso-spacerun: ''yes''">stop&nbsp;-&nbsp;stop&nbsp;the&nbsp;specified&nbsp;bundle(s)</span><span style="font-size: 10.5pt; font-family: ''Courier New''; mso-spacerun: ''yes''"><O:P></O:P></span></font></p>
<p class="0" style="layout-grid-mode: char; text-align: justify"><font size="3"><span style="font-size: 10.5pt; color: rgb(0,0,0); font-family: ''Courier New''; mso-spacerun: ''yes''">&nbsp;</span><span style="font-size: 10.5pt; color: rgb(0,0,0); font-family: ''Courier New''; mso-spacerun: ''yes''">refresh&nbsp;-&nbsp;refresh&nbsp;the&nbsp;packages&nbsp;of&nbsp;the&nbsp;specified&nbsp;bundles</span><span style="font-size: 10.5pt; font-family: ''Courier New''; mso-spacerun: ''yes''"><O:P></O:P></span></font></p>
<p class="0" style="layout-grid-mode: char; text-align: justify"><font size="3"><span style="font-size: 10.5pt; color: rgb(0,0,0); font-family: ''Courier New''; mso-spacerun: ''yes''">&nbsp;</span><span style="font-size: 10.5pt; color: rgb(0,0,0); font-family: ''Courier New''; mso-spacerun: ''yes''">update&nbsp;-&nbsp;update&nbsp;the&nbsp;specified&nbsp;bundle(s)</span><span style="font-size: 10.5pt; font-family: ''Courier New''; mso-spacerun: ''yes''"><O:P></O:P></span></font></p>
显示bundle状态的命令:<br />
<p class="0" style="layout-grid-mode: char; text-align: justify"><font size="3"><span style="font-size: 10.5pt; color: rgb(0,0,0); font-family: ''Courier New''; mso-spacerun: ''yes''">&nbsp;</span><span style="font-size: 10.5pt; color: rgb(0,0,0); font-family: ''Courier New''; mso-spacerun: ''yes''">status&nbsp;[-s&nbsp;[&lt;comma&nbsp;separated&nbsp;list&nbsp;of&nbsp;bundle&nbsp;states&gt;]&nbsp;&nbsp;[&lt;segment&nbsp;of&nbsp;bsn&gt;]]&nbsp;-&nbsp;display&nbsp;installed&nbsp;bundles&nbsp;and&nbsp;registered&nbsp;services</span><span style="font-size: 10.5pt; font-family: ''Courier New''; mso-spacerun: ''yes''"><O:P></O:P></span></font></p>
<p class="0" style="layout-grid-mode: char; text-align: justify"><font size="3"><span style="font-size: 10.5pt; color: rgb(0,0,0); font-family: ''Courier New''; mso-spacerun: ''yes''">&nbsp;</span><span style="font-size: 10.5pt; color: rgb(0,0,0); font-family: ''Courier New''; mso-spacerun: ''yes''">ss&nbsp;[-s&nbsp;[&lt;comma&nbsp;separated&nbsp;list&nbsp;of&nbsp;bundle&nbsp;states&gt;]&nbsp;&nbsp;[&lt;segment&nbsp;of&nbsp;bsn&gt;]]&nbsp;-&nbsp;display&nbsp;installed&nbsp;bundles&nbsp;(short&nbsp;status)</span><span style="font-size: 10.5pt; font-family: ''Courier New''; mso-spacerun: ''yes''"><O:P></O:P></span></font></p>
<p class="0" style="layout-grid-mode: char; text-align: justify"><font size="3"><span style="font-size: 10.5pt; color: rgb(0,0,0); font-family: ''Courier New''; mso-spacerun: ''yes''">&nbsp;</span><span style="font-size: 10.5pt; color: rgb(0,0,0); font-family: ''Courier New''; mso-spacerun: ''yes''">services&nbsp;{filter}&nbsp;-&nbsp;display&nbsp;registered&nbsp;service&nbsp;details</span><span style="font-size: 10.5pt; font-family: ''Courier New''; mso-spacerun: ''yes''"><O:P></O:P></span></font></p>
<p class="0" style="layout-grid-mode: char; text-align: justify"><font size="3"><span style="font-size: 10.5pt; color: rgb(0,0,0); font-family: ''Courier New''; mso-spacerun: ''yes''">&nbsp;</span><span style="font-size: 10.5pt; color: rgb(0,0,0); font-family: ''Courier New''; mso-spacerun: ''yes''">packages&nbsp;{&lt;pkgname&gt;|&lt;id&gt;|&lt;location&gt;}&nbsp;-&nbsp;display&nbsp;imported/exported&nbsp;package&nbsp;details</span><span style="font-size: 10.5pt; font-family: ''Courier New''; mso-spacerun: ''yes''"><O:P></O:P></span></font></p>
<p class="0" style="layout-grid-mode: char; text-align: justify"><font size="3"><span style="font-size: 10.5pt; color: rgb(0,0,0); font-family: ''Courier New''; mso-spacerun: ''yes''">&nbsp;</span><span style="font-size: 10.5pt; color: rgb(0,0,0); font-family: ''Courier New''; mso-spacerun: ''yes''">bundles&nbsp;[-s&nbsp;[&lt;comma&nbsp;separated&nbsp;list&nbsp;of&nbsp;bundle&nbsp;states&gt;]&nbsp;&nbsp;[&lt;segment&nbsp;of&nbsp;bsn&gt;]]&nbsp;-&nbsp;display&nbsp;details&nbsp;for&nbsp;all&nbsp;installed&nbsp;bundles</span><span style="font-size: 10.5pt; font-family: ''Courier New''; mso-spacerun: ''yes''"><O:P></O:P></span></font></p>
<p class="0" style="layout-grid-mode: char; text-align: justify"><font size="3"><span style="font-size: 10.5pt; color: rgb(0,0,0); font-family: ''Courier New''; mso-spacerun: ''yes''">&nbsp;</span><span style="font-size: 10.5pt; color: rgb(0,0,0); font-family: ''Courier New''; mso-spacerun: ''yes''">bundle&nbsp;(&lt;id&gt;|&lt;location&gt;)&nbsp;-&nbsp;display&nbsp;details&nbsp;for&nbsp;the&nbsp;specified&nbsp;bundle(s)</span><span style="font-size: 10.5pt; font-family: ''Courier New''; mso-spacerun: ''yes''"><O:P></O:P></span></font></p>
<p class="0" style="layout-grid-mode: char; text-align: justify"><font size="3"><span style="font-size: 10.5pt; color: rgb(0,0,0); font-family: ''Courier New''; mso-spacerun: ''yes''">&nbsp;</span><span style="font-size: 10.5pt; color: rgb(0,0,0); font-family: ''Courier New''; mso-spacerun: ''yes''">headers&nbsp;(&lt;id&gt;|&lt;location&gt;)&nbsp;-&nbsp;print&nbsp;bundle&nbsp;headers</span><span style="font-size: 10.5pt; font-family: ''Courier New''; mso-spacerun: ''yes''"><O:P></O:P></span></font></p>
<p class="0" style="layout-grid-mode: char; text-align: justify"><font size="3"><span style="font-size: 10.5pt; color: rgb(0,0,0); font-family: ''Courier New''; mso-spacerun: ''yes''">&nbsp;</span><span style="font-size: 10.5pt; color: rgb(0,0,0); font-family: ''Courier New''; mso-spacerun: ''yes''">log&nbsp;(&lt;id&gt;|&lt;location&gt;)&nbsp;-&nbsp;display&nbsp;log&nbsp;entries</span><span style="font-size: 10.5pt; font-family: ''Courier New''; mso-spacerun: ''yes''"><O:P></O:P></span></font></p>
其它的命令一般不怎么用到,就不贴出来了.<br />
一般启动好osgi后,我们会用ss命令来看看当前bundles的启动状态<br />
用install命令把开发好的bundle部署到osgi中<br />
用update命令更新已经部署的bundle<br />
用uninstall命令停止一个bundle的服务
<img src ="http://www.blogjava.net/jjwwhmm/aggbug/200343.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjwwhmm/" target="_blank">pony</a> 2008-05-14 09:49 <a href="http://www.blogjava.net/jjwwhmm/archive/2008/05/14/200343.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Eclipse中自动通过ant脚本把web应用部署到tomcat中</title><link>http://www.blogjava.net/jjwwhmm/archive/2008/05/04/198060.html</link><dc:creator>pony</dc:creator><author>pony</author><pubDate>Sun, 04 May 2008 05:51:00 GMT</pubDate><guid>http://www.blogjava.net/jjwwhmm/archive/2008/05/04/198060.html</guid><wfw:comment>http://www.blogjava.net/jjwwhmm/comments/198060.html</wfw:comment><comments>http://www.blogjava.net/jjwwhmm/archive/2008/05/04/198060.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/jjwwhmm/comments/commentRss/198060.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjwwhmm/services/trackbacks/198060.html</trackback:ping><description><![CDATA[<div>1.要使用tomcat的DeployTask,首先要在eclipse的ant环境变量中把DeployTask所在的jar把加到ant的classpath中</div>
<br />
<div>把tomcat目录的lib目录中的catalina-ant.jar拷贝的eclipse的ant插件所在目录的lib目录中,一般这个目录是在eclipse目录的plugins目录中的org.apache.ant开头的一个目录中.</div>
<div>eclipse->window->preference->ant->runtime->classpath,把上一步拷贝的jar文件加到classpath中</div>
<div>2.在ant脚本中定义deploy,undeploy的任务</div>
<div>&lt;taskdef name="deploy" classname="org.apache.catalina.ant.DeployTask" /></div>
<div>&lt;taskdef name="undeploy" classname="org.apache.catalina.ant.UndeployTask" /></div>
<div>3.在ant脚本中部署应用</div>
<div><span  style="white-space: pre; "><span class="Apple-tab-span" style="white-space:pre">	</span>&lt;target name="undeploy">
&lt;undeploy url="http://localhost:8080/manager"
username="username"
password="password"
path="/webapp-name" />
&lt;/target>
&lt;target name="deploy" depends="cas-war">
&lt;deploy url="http://localhost:8080/manager"
username="username"
password="password"
path="/webapp-name"
update="true"
localWar="${distDir}/webapp-name.war" />
&lt;/target>	</span></div>
<div><span  style="white-space: pre;">把username, password替换为登录tomcat的管理界面时使用的用户名/密码,把webapp-name替换为应用的名称.</span></div>
<div><span  style="white-space: pre;">执行ant的deploy任务,即可把在ant中打包好的war包部署到tomcat中.这样就不用每次ant打包好后,再登录tomcat管理界面部署应用了.同样的方法可以用于jboss的部署.</span></div>
<img src ="http://www.blogjava.net/jjwwhmm/aggbug/198060.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjwwhmm/" target="_blank">pony</a> 2008-05-04 13:51 <a href="http://www.blogjava.net/jjwwhmm/archive/2008/05/04/198060.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring的InitializingBean和init-method</title><link>http://www.blogjava.net/jjwwhmm/archive/2008/04/14/192800.html</link><dc:creator>pony</dc:creator><author>pony</author><pubDate>Mon, 14 Apr 2008 07:36:00 GMT</pubDate><guid>http://www.blogjava.net/jjwwhmm/archive/2008/04/14/192800.html</guid><wfw:comment>http://www.blogjava.net/jjwwhmm/comments/192800.html</wfw:comment><comments>http://www.blogjava.net/jjwwhmm/archive/2008/04/14/192800.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jjwwhmm/comments/commentRss/192800.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjwwhmm/services/trackbacks/192800.html</trackback:ping><description><![CDATA[<div><span  style="font-family: Arial; font-size: 14px; line-height: 18px; ">Spring在设置完一个bean所有的属性后，会检查bean是否实现了InitializingBean接口，如果实现就调用bean的afterPropertiesSet方法。另外,如果bean是单例的,则afterPropertiesSet方法只会被调用一次;否则每次创建bean时afterPropertiesSet方法都会被重新调用.</span></div>
<div><span  style="font-family: Arial; font-size: 14px; line-height: 18px; ">Spring虽然可以通过InitializingBean完成一个bean初始化后对这个bean的回调，但是这种方式要求bean实现 InitializingBean接口。一但bean实现了InitializingBean接口，那么这个bean的代码就和Spring耦合到一起了。通常情况下不建议直接实现InitializingBean，而是用Spring提供的init-method的功能来执行一个bean 子定义的初始化方法,这可以在一个bean的配置文件中通过init-method声明:</span></div>
<div><font  face="Arial" size="4"><span  style="font-size: 14px; line-height: 18px;"><span class="Apple-tab-span" style="white-space:pre">	</span>&lt;bean id="testBean" class="TestClass" init-method="initialize"/><br />
</span></font></div>
<div><font  face="Arial" size="4"><span  style="font-size: 14px; line-height: 18px;">spring要求这个init-method方法是一个无参数的方法</span></font></div>
<div><font  face="Arial" size="4"><span  style="font-size: 14px; line-height: 18px;">如果一个bean同时实现了这两种方式的初始化配置,则spring会先调用afterPropertiesSet方法,然后通过反射调用init-method,任何一个方法出错都会导致spring创建bean失败.如果afterPropertiesSet方法调用失败,也不会再继续执行init-mehtod方法.</span></font></div>
<img src ="http://www.blogjava.net/jjwwhmm/aggbug/192800.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjwwhmm/" target="_blank">pony</a> 2008-04-14 15:36 <a href="http://www.blogjava.net/jjwwhmm/archive/2008/04/14/192800.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>String,简单又复杂</title><link>http://www.blogjava.net/jjwwhmm/archive/2008/04/14/192706.html</link><dc:creator>pony</dc:creator><author>pony</author><pubDate>Mon, 14 Apr 2008 03:26:00 GMT</pubDate><guid>http://www.blogjava.net/jjwwhmm/archive/2008/04/14/192706.html</guid><wfw:comment>http://www.blogjava.net/jjwwhmm/comments/192706.html</wfw:comment><comments>http://www.blogjava.net/jjwwhmm/archive/2008/04/14/192706.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/jjwwhmm/comments/commentRss/192706.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjwwhmm/services/trackbacks/192706.html</trackback:ping><description><![CDATA[<br />
<div>
<div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; cursor: pointer; ">String a = "abc";</div>
<div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; cursor: pointer; ">String b = "abc";</div>
<div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; cursor: pointer; ">Assert.assertTrue(a == b);</div>
<div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; cursor: pointer; ">String c = "abcdefg";</div>
<div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; cursor: pointer; ">String d = c.substring(0, 3);</div>
<div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; cursor: pointer; ">Assert.assertFalse(a == d);</div>
<div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; cursor: pointer; ">a == b这个比较好理解,因为<span  style="font-family: Arial; font-size: 14px; line-height: 21px; ">在编译的时候会产生一个静态对象&#8220;abc&#8221;, 执行a = "abc"和b = "abc"的时候,只是把这个静态对象赋给了a和b,所以两个对象的引用相同,a==b</span></div>
<div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; cursor: pointer; "><font  face="Arial" size="4"><span  style="font-size: 14px; line-height: 21px;">但是,d的值为"abc"字符串,为什么jvm不把静态的"abc"的引用赋给d对象呢?</span></font></div>
<div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; cursor: pointer; "><font  face="Arial" size="4"><span  style="font-size: 14px; line-height: 21px;">我的理解是:String a = "abc"; String b = "abc";这两行代码是在解释执行之前编译成字节码的时候,"abc"就放在常量池中了,所以在执行的时候a和b指向同一个引用,而String d = c.substring(0, 3);是在执行的时候才给d对象赋值"abc",所以这个"abc"应该是放在堆中.</span></font></div>
<div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; cursor: pointer; "><font  face="Arial" size="4"><span  style="font-size: 14px; line-height: 21px;">还是想的不明白.</span></font></div>
</div>
<img src ="http://www.blogjava.net/jjwwhmm/aggbug/192706.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjwwhmm/" target="_blank">pony</a> 2008-04-14 11:26 <a href="http://www.blogjava.net/jjwwhmm/archive/2008/04/14/192706.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>今天看jdk包里的Class的源代码,不知道isSynthetic()是做什么用的</title><link>http://www.blogjava.net/jjwwhmm/archive/2008/03/26/188663.html</link><dc:creator>pony</dc:creator><author>pony</author><pubDate>Wed, 26 Mar 2008 02:35:00 GMT</pubDate><guid>http://www.blogjava.net/jjwwhmm/archive/2008/03/26/188663.html</guid><wfw:comment>http://www.blogjava.net/jjwwhmm/comments/188663.html</wfw:comment><comments>http://www.blogjava.net/jjwwhmm/archive/2008/03/26/188663.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/jjwwhmm/comments/commentRss/188663.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjwwhmm/services/trackbacks/188663.html</trackback:ping><description><![CDATA[这个方法在class是什么类型的时候返回true呢?有什么用呢?不知道哪位大虾可以告知小弟,万分感谢!
<div>参考连接:http://www.sagewire.org/java-programmer/isSynthetic-185494.aspx</div>
<img src ="http://www.blogjava.net/jjwwhmm/aggbug/188663.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjwwhmm/" target="_blank">pony</a> 2008-03-26 10:35 <a href="http://www.blogjava.net/jjwwhmm/archive/2008/03/26/188663.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于http gzip压缩的一点想法</title><link>http://www.blogjava.net/jjwwhmm/archive/2008/03/21/187675.html</link><dc:creator>pony</dc:creator><author>pony</author><pubDate>Fri, 21 Mar 2008 04:52:00 GMT</pubDate><guid>http://www.blogjava.net/jjwwhmm/archive/2008/03/21/187675.html</guid><wfw:comment>http://www.blogjava.net/jjwwhmm/comments/187675.html</wfw:comment><comments>http://www.blogjava.net/jjwwhmm/archive/2008/03/21/187675.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/jjwwhmm/comments/commentRss/187675.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjwwhmm/services/trackbacks/187675.html</trackback:ping><description><![CDATA[今天在路上偶尔想到,既然js,html,图片等静态内容可以通过http gzip压缩的方式传输到浏览器(相对于普通的浏览过程HTML ,CSS,Javascript , Text&nbsp;，它可以节省40%左右的流量),那用jsp,servlet等动态创建的内容是否也可以压缩传输呢?还有AJAX的请求内容是否也可以用gziap压缩传输?<br />
带着这些问题在网上查了下资料<br />
AJAX的请求可以通过在http request中增加一个头标识:accept-encoding,值为"gzip"的方式实现<br />
servlet则可以通过配置一个filter来实现<br />
针对Apache2.0之前的版本，可以通过添加第三方的module_gzip模块来启用<br />
针对Apache2.0及之后的版本，可以通过mod_deflate启动<br />
<br />
<br />
下面的一个链接详细介绍了apache,tomcat中的配置方法:<br />
http://www.128kj.com/article/article5/DA6B1D7BCDE9DE999C34E7379E18B35A.htm?id=2746<br />
http://blogger.org.cn/blog/more.asp?name=lhwork&amp;id=21867<br />
<br />
用tomcat 6的可以到下面的url参考:<br />
http://tomcat.apache.org/tomcat-6.0-doc/config/http.html<br />
<br />
在tomcat的server.xml的connector部分,把compression="force"选项加上,然后,就可以用下面的代码测试,我是在demo应用下放了个md5.js:<br />
<p>/**<br />
&nbsp;* Created at 2008-03-21.<br />
&nbsp;*/<br />
package com.demo.test.http.gzip;</p>
<p>import junit.framework.TestCase;</p>
<p>import org.apache.commons.httpclient.HttpClient;<br />
import org.apache.commons.httpclient.methods.GetMethod;</p>
<p>/**<br />
&nbsp;* @author pony</p>
<p>&nbsp;* 如果有任何对代码的修改,请按下面的格式注明修改的内容.<br />
&nbsp;* 序号&nbsp;&nbsp; 时间&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 作者&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 修改内容<br />
&nbsp;* 1.&nbsp; 2008-3-21&nbsp;pony created this class.<br />
&nbsp;*<br />
&nbsp;*/<br />
public class TestTomcatGzipConfigure extends TestCase {<br />
&nbsp;public void testGetGzipContentFromTomcat() throws Exception {<br />
&nbsp;&nbsp;HttpClient http = new HttpClient();<br />
&nbsp;&nbsp;GetMethod get = new GetMethod("http://192.168.66.128:8080/demo/md5.js");<br />
&nbsp;&nbsp;try {<br />
&nbsp;&nbsp;&nbsp;get.addRequestHeader("accept-encoding", "gzip,deflate");<br />
&nbsp;&nbsp;&nbsp;get.addRequestHeader(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"user-agent",<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Alexa Toolbar; Maxthon 2.0)");<br />
&nbsp;&nbsp;&nbsp;int er = http.executeMethod(get);<br />
&nbsp;&nbsp;&nbsp;if (er == 200) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(get.getResponseContentLength());<br />
&nbsp;&nbsp;&nbsp;&nbsp;String html = get.getResponseBodyAsString();<br />
&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(html);<br />
&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(html.getBytes().length);<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;} finally {<br />
&nbsp;&nbsp;&nbsp;get.releaseConnection();<br />
&nbsp;&nbsp;}<br />
&nbsp;}<br />
}</p>
<br />
<br />
 <img src ="http://www.blogjava.net/jjwwhmm/aggbug/187675.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjwwhmm/" target="_blank">pony</a> 2008-03-21 12:52 <a href="http://www.blogjava.net/jjwwhmm/archive/2008/03/21/187675.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jasperReport创建报表的基本流程</title><link>http://www.blogjava.net/jjwwhmm/archive/2008/03/11/185378.html</link><dc:creator>pony</dc:creator><author>pony</author><pubDate>Tue, 11 Mar 2008 06:46:00 GMT</pubDate><guid>http://www.blogjava.net/jjwwhmm/archive/2008/03/11/185378.html</guid><wfw:comment>http://www.blogjava.net/jjwwhmm/comments/185378.html</wfw:comment><comments>http://www.blogjava.net/jjwwhmm/archive/2008/03/11/185378.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jjwwhmm/comments/commentRss/185378.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjwwhmm/services/trackbacks/185378.html</trackback:ping><description><![CDATA[1.报表的xml设计,当然也可以是在内存中创建<br />
2.Loader,把xml报表设计加载到内存中<br />
3.Compiler,把加载到内存中的设计编译成为报表设计对象ReportDesign<br />
4.FillManager,读取数据填充到报表设计中,得到ReportPrint<br />
5.ExportManger,把ReportPrint保存到文件或打印到输出中
 <img src ="http://www.blogjava.net/jjwwhmm/aggbug/185378.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjwwhmm/" target="_blank">pony</a> 2008-03-11 14:46 <a href="http://www.blogjava.net/jjwwhmm/archive/2008/03/11/185378.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>准备有空的时候写篇文章介绍下各种java remoting机制的benchmarks</title><link>http://www.blogjava.net/jjwwhmm/archive/2008/03/10/184942.html</link><dc:creator>pony</dc:creator><author>pony</author><pubDate>Mon, 10 Mar 2008 01:52:00 GMT</pubDate><guid>http://www.blogjava.net/jjwwhmm/archive/2008/03/10/184942.html</guid><wfw:comment>http://www.blogjava.net/jjwwhmm/comments/184942.html</wfw:comment><comments>http://www.blogjava.net/jjwwhmm/archive/2008/03/10/184942.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/jjwwhmm/comments/commentRss/184942.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjwwhmm/services/trackbacks/184942.html</trackback:ping><description><![CDATA[主要包括以下几种java remoting机制:<br />
1.binary-rpc:例如hessian,httpinvoker,rmi,ormi<br />
2.xml-rpc:burlap,cxf<br />
3.rmi<br />
4.socket:mina<br />
5.jms:sonic mq, ibm mq, activemq<br />
从网上查到的结果看,一般是:<br />
1.基于二进制的remoting协议要比基于xml的快<br />
2.在各种二进制的remoting协议间性能的差距很小<br />
3.burlap要比其它的基于xml的remoting协议快<br />
4.基于二进制的remoting协议在传输大的对象时性能会有下降<br />
还有一个区别,我觉得基于http的remoting协议能基于http来实现负载均衡,这点很重要.
 <img src ="http://www.blogjava.net/jjwwhmm/aggbug/184942.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjwwhmm/" target="_blank">pony</a> 2008-03-10 09:52 <a href="http://www.blogjava.net/jjwwhmm/archive/2008/03/10/184942.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>27/Feb/2008:10:12:44 +0800这样的日期格式在java里的解析.</title><link>http://www.blogjava.net/jjwwhmm/archive/2008/02/28/182679.html</link><dc:creator>pony</dc:creator><author>pony</author><pubDate>Thu, 28 Feb 2008 06:17:00 GMT</pubDate><guid>http://www.blogjava.net/jjwwhmm/archive/2008/02/28/182679.html</guid><wfw:comment>http://www.blogjava.net/jjwwhmm/comments/182679.html</wfw:comment><comments>http://www.blogjava.net/jjwwhmm/archive/2008/02/28/182679.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/jjwwhmm/comments/commentRss/182679.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjwwhmm/services/trackbacks/182679.html</trackback:ping><description><![CDATA[今天在解析apache usertrack模块产生的clickstream日志文件时,其中有一个接收请求的时间,其格式为:<br />
27/Feb/2008:10:12:44 +0800<br />
在用SimpleDateFormat解析时始终出错.后来的解决办法:<br />
SimpleDateFormat formatter = new SimpleDateFormat("dd/MMM/yyyy:hh:mm:ss Z", Locale.ENGLISH);<br />
formatter.parse(strDateTime);<br />
这段代码就可以解析上面的时间字符串了.<br />
原因是:<br />
1.+0800表示的是时区的信息,用Z可以解析<br />
2.Feb这个月份只有用Locale.ENGLISH才能解析,如果用缺省的new SimpleDateFormat("dd/MMM/yyyy:hh:mm:ss Z"),<br />
这时解析器使用的是Locale.getDefault(),即Local.Chinese,而Feb在中文里并没有定义是几月,所以解析会出错.<br />
如果时间字符串是"27/一月/2008:10:12:44 +0800",注意英文简称的月份已经变为中文的月份,这时用确认的Locale是可以正确解析的.即:<br />
SimpleDateFormat formatter = new SimpleDateFormat("dd/MMM/yyyy:hh:mm:ss Z");<br />
formatter.parse(strDateTime);<br />
或者:<br />
SimpleDateFormat formatter = new SimpleDateFormat("dd/MMM/yyyy:hh:mm:ss Z", Locale.CHINESE);<br />
formatter.parse(strDateTime);<br />
 <img src ="http://www.blogjava.net/jjwwhmm/aggbug/182679.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjwwhmm/" target="_blank">pony</a> 2008-02-28 14:17 <a href="http://www.blogjava.net/jjwwhmm/archive/2008/02/28/182679.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>