﻿<?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-向左走，向右走。。。</title><link>http://www.blogjava.net/Tower/</link><description>永远不回头</description><language>zh-cn</language><lastBuildDate>Wed, 06 May 2026 19:59:18 GMT</lastBuildDate><pubDate>Wed, 06 May 2026 19:59:18 GMT</pubDate><ttl>60</ttl><item><title>JMX设计模式之MBeanWriteToLog模式</title><link>http://www.blogjava.net/Tower/archive/2005/05/13/4242.html</link><dc:creator>非飞</dc:creator><author>非飞</author><pubDate>Thu, 12 May 2005 16:08:00 GMT</pubDate><guid>http://www.blogjava.net/Tower/archive/2005/05/13/4242.html</guid><wfw:comment>http://www.blogjava.net/Tower/comments/4242.html</wfw:comment><comments>http://www.blogjava.net/Tower/archive/2005/05/13/4242.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/Tower/comments/commentRss/4242.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Tower/services/trackbacks/4242.html</trackback:ping><description><![CDATA[<A href="http://http://spaces.msn.com/members/towerhe/Blog/cns!1pOIfNncFyCSV4HswhDBQjlw!162.entry">@ My Space</A><img src ="http://www.blogjava.net/Tower/aggbug/4242.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Tower/" target="_blank">非飞</a> 2005-05-13 00:08 <a href="http://www.blogjava.net/Tower/archive/2005/05/13/4242.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JMX设计模式之MBeanForAppConfig模式</title><link>http://www.blogjava.net/Tower/archive/2005/05/07/4053.html</link><dc:creator>非飞</dc:creator><author>非飞</author><pubDate>Fri, 06 May 2005 16:19:00 GMT</pubDate><guid>http://www.blogjava.net/Tower/archive/2005/05/07/4053.html</guid><wfw:comment>http://www.blogjava.net/Tower/comments/4053.html</wfw:comment><comments>http://www.blogjava.net/Tower/archive/2005/05/07/4053.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Tower/comments/commentRss/4053.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Tower/services/trackbacks/4053.html</trackback:ping><description><![CDATA[<A href="http://spaces.msn.com/members/towerhe/Blog/cns!1pOIfNncFyCSV4HswhDBQjlw!153.entry">@ My space</A><img src ="http://www.blogjava.net/Tower/aggbug/4053.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Tower/" target="_blank">非飞</a> 2005-05-07 00:19 <a href="http://www.blogjava.net/Tower/archive/2005/05/07/4053.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>NIO中Selector的工作原理 </title><link>http://www.blogjava.net/Tower/archive/2005/04/26/3809.html</link><dc:creator>非飞</dc:creator><author>非飞</author><pubDate>Tue, 26 Apr 2005 02:06:00 GMT</pubDate><guid>http://www.blogjava.net/Tower/archive/2005/04/26/3809.html</guid><wfw:comment>http://www.blogjava.net/Tower/comments/3809.html</wfw:comment><comments>http://www.blogjava.net/Tower/archive/2005/04/26/3809.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/Tower/comments/commentRss/3809.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Tower/services/trackbacks/3809.html</trackback:ping><description><![CDATA[在JDK1.4.2中加入了对NIO的支持，掌握其中的Selector个人认为是能实现好NIO的关键。
<br>
<br>
Selector是用来获取注册在其中的channel的相关事件的发生，也就是accept，read和write。selector中有3个key set。
<br>
<br>
key set：包含代表所有在其中注册的channel，可以通过selector.keys()得到。
<br>
selected-key set：包含所有被检测到有关注的操作已经就绪的key，通过selector.selectedKeys得到。
<br>
cancelled-key set：包含所有已经被cancel，但是还没有channel还没有deregister的key，这个集合是不能直接被访问的。<br>
<br>
key通过调用channel的register方法被加入到key set中。被取消的key在select的时候会被从相应的key set中移除。<br>
<br>
key set自身是不可以直接进行修改的。

无论是通过调用channel的close方法还是调用key的cancel方法，key都会被放置到canceled-key set中。取消的key会将其channel在下一次select时将注册撤销，同时将key从所有的key set中移除。

<br>
<br>
key在执行select操作时被加入到selected-key set中。在selected-key
set中的key可以通过调用iterator的remove方法，将其从selected-key
set中移除，不能通过其他的办法将其从selected-key set中移除。<br>
<br>
通过selector的3个方法select（阻塞选择，直到有关心的事件发生时退出阻塞），selectNow（不阻塞选择），select(long)（指定超时选择，超时到达或者有关心事件发生时退出阻塞），来获取关心事件的发生。其执行步骤分为以下3步：
<br>
<br>
1、将存在于canceled-key set中的key从所有的key set中移除，撤销注册的channel，清空canceled-key set。
<br>
2、地层操作系统检查是否有关心的事件发生，当有关心的事件发生时，首先检查channel的key是否已经存在于selected-key
set中，如果不存在，则将其加入到selected-key set中去，同时修改key的ready-operation
set来表明当前ready的操作，而以前存在于ready-operation
set中的信息会被删除。如果对应的key已经存在于selected-key set中，这直接修改其ready-operation
set来表明当前ready的操作，删除原来ready-operation set中的信息。
<br>
3、如果在第二步中有加入到canceled-key set中的key，在这一步会执行第一步的操作。

<br>
<br>
selector自身是线程安全的，而他的key
set却不是。在一次选择发生的过程中，对于key的关心事件的修改要等到下一次select的时候才会生效。
另外，key和其代表的channel有可能在任何时候被cancel和close。因此存在于key
set中的key并不代表其key是有效的，也不代表其channel是open的。如果key有可能被其他的线程取消或关闭channel，程序必须小
心的同步检查这些条件。
<br>
<br>
阻塞了的select可以通过调用selector的wakeup方法来唤醒。<img src ="http://www.blogjava.net/Tower/aggbug/3809.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Tower/" target="_blank">非飞</a> 2005-04-26 10:06 <a href="http://www.blogjava.net/Tower/archive/2005/04/26/3809.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用JavaScript来实现页面间的参数传递</title><link>http://www.blogjava.net/Tower/archive/2005/04/18/3417.html</link><dc:creator>非飞</dc:creator><author>非飞</author><pubDate>Mon, 18 Apr 2005 07:52:00 GMT</pubDate><guid>http://www.blogjava.net/Tower/archive/2005/04/18/3417.html</guid><wfw:comment>http://www.blogjava.net/Tower/comments/3417.html</wfw:comment><comments>http://www.blogjava.net/Tower/archive/2005/04/18/3417.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/Tower/comments/commentRss/3417.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Tower/services/trackbacks/3417.html</trackback:ping><description><![CDATA[<BR>在JavaScript中，可以通过window.location来获取url地址。但是window.location是一个对象，没有办法直接从里面获取出我们需要的参数。通常的做法就是使用一个隐藏的&lt;input&gt;,通过将window.location负值给input。其目的就是为了将location转换成String。写的过程中总是觉得太复杂了，后来发现使用document.URL就可以解决这个问题。<img src ="http://www.blogjava.net/Tower/aggbug/3417.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Tower/" target="_blank">非飞</a> 2005-04-18 15:52 <a href="http://www.blogjava.net/Tower/archive/2005/04/18/3417.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JavaScript读取服务器端的xml</title><link>http://www.blogjava.net/Tower/archive/2005/04/09/3026.html</link><dc:creator>非飞</dc:creator><author>非飞</author><pubDate>Sat, 09 Apr 2005 04:23:00 GMT</pubDate><guid>http://www.blogjava.net/Tower/archive/2005/04/09/3026.html</guid><wfw:comment>http://www.blogjava.net/Tower/comments/3026.html</wfw:comment><comments>http://www.blogjava.net/Tower/archive/2005/04/09/3026.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/Tower/comments/commentRss/3026.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Tower/services/trackbacks/3026.html</trackback:ping><description><![CDATA[<P>今天在帮朋友写一个简单的产品发布网站，由于使用的空间是静态的，没有办法只能在javascript上下功夫了。首先想到的便是RIA,上网google了一下，发现这样的东西还真不少，可谓是十八般武艺各显灵通。看了看文明的bindows，感觉真的非常的好。可是选择它对于我要做的东西，可以说是过于复杂了。（<A href="http://www.bindows.net">http://www.bindows.net</A> 有兴趣的朋友可以去看看）。<BR>搜索了半天最后还是决定，采用javascript读取服务器端xml文件的办法来实现。尝试了一下感觉还不错，确定就是对使用的浏览器有依赖。<BR>先写了一个商品的xml文件：<BR></P>
<DIV style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid">
<DIV><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #0000ff">&lt;?</SPAN><SPAN style="COLOR: #ff00ff">xml&nbsp;version="1.0"</SPAN><SPAN style="COLOR: #0000ff">?&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">root</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">product&nbsp;</SPAN><SPAN style="COLOR: #ff0000">id</SPAN><SPAN style="COLOR: #0000ff">="0001"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;name</SPAN><SPAN style="COLOR: #0000ff">="product1"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;price</SPAN><SPAN style="COLOR: #0000ff">="10.00"</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">description</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;Detail&nbsp;Description<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">description</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">product</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">product&nbsp;</SPAN><SPAN style="COLOR: #ff0000">id</SPAN><SPAN style="COLOR: #0000ff">="0002"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;name</SPAN><SPAN style="COLOR: #0000ff">="product2"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;price</SPAN><SPAN style="COLOR: #0000ff">="20.00"</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">description</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;Detail&nbsp;Description<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">description</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">product</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">root</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN></DIV></DIV>
<P>&nbsp;</P>
<P>使用javascript来读入xml实在是相当的简单，只需要两句话就可以搞定：<BR></P>
<DIV style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid">
<DIV><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">&nbsp;装载xml文件的函数</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">function</SPAN><SPAN style="COLOR: #000000">&nbsp;loadXML(fileName)&nbsp;{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">&nbsp;定义一个xml&nbsp;dom对象</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">var</SPAN><SPAN style="COLOR: #000000">&nbsp;xmlDoc&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;ActiveXObject(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">Microsoft.XMLDOM</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;xmlDoc.load(fileName);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;xmlObj&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;xmlDoc.documentElement;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>}</SPAN></DIV></DIV>
<P>&nbsp;</P>
<P>指定要载入的xml文件名就可以完成对xml的读入。<BR></P>
<DIV style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid">
<DIV><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">&nbsp;载入xml文件</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">loadXML(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">product.xml</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">);</SPAN></DIV></DIV>
<P>&nbsp;</P>
<P>得到xml对象后就可以适用对象提供的相应方法和属性来获取xml中定义的数据信息。<BR>xmlObj.hasChildNodes来判断是否含有子项；<BR>xmlObj.childNodes.lenght 得到包含的子项的数量<BR>子项可以用数字来作为索引，以product.xml为例。如果我们要获取第二条商品时，可以用xmlObj.childNodes(1)来获得，xmlObj.childNodes(1).childNodes(0)得到的是description<BR>xmlObj.childNodes(1).childNodes(0).text 得到description的值<BR>xmlObj.childNodes(1).getAttribute("name") 得到第二条商品的名字<BR><BR><BR></P><img src ="http://www.blogjava.net/Tower/aggbug/3026.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Tower/" target="_blank">非飞</a> 2005-04-09 12:23 <a href="http://www.blogjava.net/Tower/archive/2005/04/09/3026.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用了一下flash的反编译</title><link>http://www.blogjava.net/Tower/archive/2005/04/04/2811.html</link><dc:creator>非飞</dc:creator><author>非飞</author><pubDate>Sun, 03 Apr 2005 19:32:00 GMT</pubDate><guid>http://www.blogjava.net/Tower/archive/2005/04/04/2811.html</guid><wfw:comment>http://www.blogjava.net/Tower/comments/2811.html</wfw:comment><comments>http://www.blogjava.net/Tower/archive/2005/04/04/2811.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/Tower/comments/commentRss/2811.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Tower/services/trackbacks/2811.html</trackback:ping><description><![CDATA[<BR><FONT size=2>下载了一个Action Script Viewer 4.0对原来的swf文件进行反编译，虽然有的movie clip会出现一点问题，但是总的来说效果还是不错的，而且操作相当的简单。<BR><BR>1）使用ASV打开要进行反编译的SWF文件；<BR>2）File--&gt;export rebuild data。这时将swf文件分拆成单个的swf文件；<BR>3）打开flash，创建一个空的fla文件；<BR>4）File--&gt;Import...--&gt;Import to Library&nbsp;&nbsp;&nbsp;将前面导出的swf文件导入，如果swf文件太多flash会报错，可以通过分批导入文件来绕过这个错误；<BR>5）将新建的swf文件保存为rebuild.fla，并且3）导出的文件在同一目录；<BR>6）运行3）产生的一个rebuild.jsfl文件，一切搞定。<BR><BR><BR></FONT><img src ="http://www.blogjava.net/Tower/aggbug/2811.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Tower/" target="_blank">非飞</a> 2005-04-04 03:32 <a href="http://www.blogjava.net/Tower/archive/2005/04/04/2811.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>程序员应该怎么过生活？？？</title><link>http://www.blogjava.net/Tower/archive/2005/03/23/2372.html</link><dc:creator>非飞</dc:creator><author>非飞</author><pubDate>Wed, 23 Mar 2005 07:25:00 GMT</pubDate><guid>http://www.blogjava.net/Tower/archive/2005/03/23/2372.html</guid><wfw:comment>http://www.blogjava.net/Tower/comments/2372.html</wfw:comment><comments>http://www.blogjava.net/Tower/archive/2005/03/23/2372.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/Tower/comments/commentRss/2372.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Tower/services/trackbacks/2372.html</trackback:ping><description><![CDATA[<P><FONT size=2>中午收到老姐来的电话，电话里她是一遍一遍又一遍的在我耳边唠叨，说，“不管你怎么忙，有多少东西要写，一定要按时睡觉”。还列出了一堆要按时睡觉的理由。其实谁不知道应该要按时睡觉，可是作为写程序的程序员来说，要真想做到这一点实在是难，难，难呀！<BR><BR>要按时睡觉的理由</FONT>： <BR><BR><FONT size=2>从人的排毒期入手：晚间11：00－－1：00，肝的排毒期（必须在睡觉中进行）<BR>从人的睡眠最佳时段入手：1：00－－4：00，人的睡眠是质量最高的<BR><BR>不知道各位有谁是有正常的生活习惯的，能不能说一说你是怎么做到的。。。<BR><BR><BR></FONT></P><img src ="http://www.blogjava.net/Tower/aggbug/2372.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Tower/" target="_blank">非飞</a> 2005-03-23 15:25 <a href="http://www.blogjava.net/Tower/archive/2005/03/23/2372.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux下JNI调用</title><link>http://www.blogjava.net/Tower/archive/2005/03/22/2338.html</link><dc:creator>非飞</dc:creator><author>非飞</author><pubDate>Tue, 22 Mar 2005 10:39:00 GMT</pubDate><guid>http://www.blogjava.net/Tower/archive/2005/03/22/2338.html</guid><wfw:comment>http://www.blogjava.net/Tower/comments/2338.html</wfw:comment><comments>http://www.blogjava.net/Tower/archive/2005/03/22/2338.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Tower/comments/commentRss/2338.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Tower/services/trackbacks/2338.html</trackback:ping><description><![CDATA[<P><FONT size=2>&nbsp;&nbsp;&nbsp; 做项目，无论是遗留产品的再生产，还是对遗留产品的再利用，都不可避免的会出现一大堆的异构现象。解决异构通信问题是这类项目的主要问题。以前看见这种情况第一个解决方案就是Socket通信。说实在的自己实现Socket通信，定制通信协议，或者是实现已有的通信协议都是很头痛的事情。本人有不堪回首的历史经历。<BR><BR>&nbsp;&nbsp;&nbsp; 最近同样在项目中需要去解决一个异构问题，由于时间的紧迫，以及先天的运行环境（两个部分是运行在同一台机器上的）。考虑到了使用JNI，结果表明JNI是完全可以胜任目前的角色的。以前没有了解过JNI，总是以为它这不好那不好，用了用，表现还不错，而且实现起来非常之简单。<BR><BR>&nbsp;&nbsp;&nbsp; 整个实现过程可以分为五步来完成：<BR><BR>1）写一个声明了native的Java文件：</FONT></P>
<DIV style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid">
<DIV><FONT size=2><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></FONT><FONT size=2><SPAN style="COLOR: #000000">package&nbsp;example;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG id=Codehighlighter1_39_122_Open_Image onclick="this.style.display='none'; Codehighlighter1_39_122_Open_Text.style.display='none'; Codehighlighter1_39_122_Closed_Image.style.display='inline'; Codehighlighter1_39_122_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_39_122_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_39_122_Closed_Text.style.display='none'; Codehighlighter1_39_122_Open_Image.style.display='inline'; Codehighlighter1_39_122_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">class</SPAN><SPAN style="COLOR: #000000">&nbsp;TestJNI&nbsp;</SPAN><SPAN id=Codehighlighter1_39_122_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN></FONT><SPAN id=Codehighlighter1_39_122_Open_Text><FONT size=2><SPAN style="COLOR: #000000">{<BR><IMG id=Codehighlighter1_49_82_Open_Image onclick="this.style.display='none'; Codehighlighter1_49_82_Open_Text.style.display='none'; Codehighlighter1_49_82_Closed_Image.style.display='inline'; Codehighlighter1_49_82_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_49_82_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_49_82_Closed_Text.style.display='none'; Codehighlighter1_49_82_Open_Image.style.display='inline'; Codehighlighter1_49_82_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">static</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN id=Codehighlighter1_49_82_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN></FONT><SPAN id=Codehighlighter1_49_82_Open_Text><FONT size=2><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.loadLibrary(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">test</SPAN><SPAN style="COLOR: #000000">"</SPAN></FONT><SPAN style="COLOR: #000000"><FONT size=2>);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</FONT></SPAN></SPAN><SPAN style="COLOR: #000000"><BR><FONT size=2><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</FONT></SPAN><SPAN style="COLOR: #0000ff"><FONT size=2>public</FONT></SPAN><SPAN style="COLOR: #000000"><FONT size=2>&nbsp;native&nbsp;String&nbsp;getNameCPP();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</FONT></SPAN></SPAN><SPAN style="COLOR: #000000"><BR><FONT size=2><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></FONT></SPAN></DIV></DIV><BR><FONT size=2>2)</FONT> <FONT size=2>使用javah产生对应的CPP头文件：<BR>命令：javah -classpath &lt;path&gt; -jni example.TestJNI -d &lt;out_dir&gt;<BR>生成的头文件example_TestJNI.h如下：<BR>
<DIV style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid">
<DIV><IMG id=Codehighlighter1_0_52_Open_Image onclick="this.style.display='none'; Codehighlighter1_0_52_Open_Text.style.display='none'; Codehighlighter1_0_52_Closed_Image.style.display='inline'; Codehighlighter1_0_52_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_0_52_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_0_52_Closed_Text.style.display='none'; Codehighlighter1_0_52_Open_Image.style.display='inline'; Codehighlighter1_0_52_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align=top><SPAN id=Codehighlighter1_0_52_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</SPAN><SPAN id=Codehighlighter1_0_52_Open_Text><SPAN style="COLOR: #008000">/*</SPAN><SPAN style="COLOR: #008000">&nbsp;DO&nbsp;NOT&nbsp;EDIT&nbsp;THIS&nbsp;FILE&nbsp;-&nbsp;it&nbsp;is&nbsp;machine&nbsp;generated&nbsp;</SPAN><SPAN style="COLOR: #008000">*/</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>#include&nbsp;</SPAN><SPAN style="COLOR: #000000">&lt;</SPAN><SPAN style="COLOR: #000000">jni.h</SPAN><SPAN style="COLOR: #000000">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG id=Codehighlighter1_71_108_Open_Image onclick="this.style.display='none'; Codehighlighter1_71_108_Open_Text.style.display='none'; Codehighlighter1_71_108_Closed_Image.style.display='inline'; Codehighlighter1_71_108_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_71_108_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_71_108_Closed_Text.style.display='none'; Codehighlighter1_71_108_Open_Image.style.display='inline'; Codehighlighter1_71_108_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align=top></SPAN><SPAN id=Codehighlighter1_71_108_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</SPAN><SPAN id=Codehighlighter1_71_108_Open_Text><SPAN style="COLOR: #008000">/*</SPAN><SPAN style="COLOR: #008000">&nbsp;Header&nbsp;for&nbsp;class&nbsp;example_TestJNI&nbsp;</SPAN><SPAN style="COLOR: #008000">*/</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>#ifndef&nbsp;_Included_example_TestJNI<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">#define</SPAN><SPAN style="COLOR: #000000">&nbsp;_Included_example_TestJNI</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>#ifdef&nbsp;__cplusplus<BR><IMG id=Codehighlighter1_209_422_Open_Image onclick="this.style.display='none'; Codehighlighter1_209_422_Open_Text.style.display='none'; Codehighlighter1_209_422_Closed_Image.style.display='inline'; Codehighlighter1_209_422_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_209_422_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_209_422_Closed_Text.style.display='none'; Codehighlighter1_209_422_Open_Image.style.display='inline'; Codehighlighter1_209_422_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">extern</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">C</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN id=Codehighlighter1_209_422_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_209_422_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">#endif</SPAN><SPAN style="COLOR: #000000"><BR><IMG id=Codehighlighter1_218_316_Open_Image onclick="this.style.display='none'; Codehighlighter1_218_316_Open_Text.style.display='none'; Codehighlighter1_218_316_Closed_Image.style.display='inline'; Codehighlighter1_218_316_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_218_316_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_218_316_Closed_Text.style.display='none'; Codehighlighter1_218_316_Open_Image.style.display='inline'; Codehighlighter1_218_316_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top></SPAN><SPAN id=Codehighlighter1_218_316_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</SPAN><SPAN id=Codehighlighter1_218_316_Open_Text><SPAN style="COLOR: #008000">/*</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;*&nbsp;Class:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;example_TestJNI<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;*&nbsp;Method:&nbsp;&nbsp;&nbsp;&nbsp;getNameForCPP<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;*&nbsp;Signature:&nbsp;()Ljava/lang/String;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;</SPAN><SPAN style="COLOR: #008000">*/</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>JNIEXPORT&nbsp;jstring&nbsp;JNICALL&nbsp;Java_example_TestJNI_getNameForCPP<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;(JNIEnv&nbsp;</SPAN><SPAN style="COLOR: #000000">*</SPAN><SPAN style="COLOR: #000000">,&nbsp;jobject);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>#ifdef&nbsp;__cplusplus<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">#endif</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">#endif</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN></DIV></DIV><BR>3）实现对应的CPP代码：<BR>
<DIV style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid">
<DIV><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #000000">#include&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">example_TestJNI.h</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>#include&nbsp;</SPAN><SPAN style="COLOR: #000000">&lt;</SPAN><SPAN style="COLOR: #0000ff">string</SPAN><SPAN style="COLOR: #000000">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>JNIEXPORT&nbsp;jstring&nbsp;JNICALL&nbsp;Java_example_TestJNI_getNameForCPP<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;(JNIEnv&nbsp;</SPAN><SPAN style="COLOR: #000000">*</SPAN><SPAN style="COLOR: #000000">&nbsp;env,&nbsp;jobject)<BR><IMG id=Codehighlighter1_135_228_Open_Image onclick="this.style.display='none'; Codehighlighter1_135_228_Open_Text.style.display='none'; Codehighlighter1_135_228_Closed_Image.style.display='inline'; Codehighlighter1_135_228_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_135_228_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_135_228_Closed_Text.style.display='none'; Codehighlighter1_135_228_Open_Image.style.display='inline'; Codehighlighter1_135_228_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align=top></SPAN><SPAN id=Codehighlighter1_135_228_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_135_228_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">TODO&nbsp;可以在此调用其他的代码</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;std::</SPAN><SPAN style="COLOR: #0000ff">string</SPAN><SPAN style="COLOR: #000000">&nbsp;strName&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">Tower</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">return</SPAN><SPAN style="COLOR: #000000">&nbsp;env</SPAN><SPAN style="COLOR: #000000">-&gt;</SPAN><SPAN style="COLOR: #000000">NewStringUTF(strName.c_str());<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN></DIV></DIV></FONT><BR><FONT size=2>4) 编译CPP代码<BR>命令：g++ -o libtest.so -shared -I&lt;include_path&gt; -I&lt;java_home&gt;/include -I&lt;java_home&gt;/include/linux example_TestJNI.cpp<BR><BR>5）执行<BR>
<DIV style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid">
<DIV><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #000000">package&nbsp;example;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG id=Codehighlighter1_36_170_Open_Image onclick="this.style.display='none'; Codehighlighter1_36_170_Open_Text.style.display='none'; Codehighlighter1_36_170_Closed_Image.style.display='inline'; Codehighlighter1_36_170_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_36_170_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_36_170_Closed_Text.style.display='none'; Codehighlighter1_36_170_Open_Image.style.display='inline'; Codehighlighter1_36_170_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">class</SPAN><SPAN style="COLOR: #000000">&nbsp;Test&nbsp;</SPAN><SPAN id=Codehighlighter1_36_170_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_36_170_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG id=Codehighlighter1_78_168_Open_Image onclick="this.style.display='none'; Codehighlighter1_78_168_Open_Text.style.display='none'; Codehighlighter1_78_168_Closed_Image.style.display='inline'; Codehighlighter1_78_168_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_78_168_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_78_168_Closed_Text.style.display='none'; Codehighlighter1_78_168_Open_Image.style.display='inline'; Codehighlighter1_78_168_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">static</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000">&nbsp;main(String[]&nbsp;args)&nbsp;</SPAN><SPAN id=Codehighlighter1_78_168_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_78_168_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TestJNI&nbsp;test&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;TestJNI();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.</SPAN><SPAN style="COLOR: #0000ff">out</SPAN><SPAN style="COLOR: #000000">.println(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">Hello&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #000000">&nbsp;test.getNameForCPP());<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN></DIV></DIV><BR>export LD_EXPORT_PATH=&lt;so_path&gt;<BR>java -cp &lt;path&gt; -Djava.library.path=&lt;so_path&gt; example.Test<BR>输出：Hello Tower</FONT><img src ="http://www.blogjava.net/Tower/aggbug/2338.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Tower/" target="_blank">非飞</a> 2005-03-22 18:39 <a href="http://www.blogjava.net/Tower/archive/2005/03/22/2338.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>设计模式精解 [读书笔记]</title><link>http://www.blogjava.net/Tower/archive/2005/03/13/2047.html</link><dc:creator>非飞</dc:creator><author>非飞</author><pubDate>Sun, 13 Mar 2005 15:41:00 GMT</pubDate><guid>http://www.blogjava.net/Tower/archive/2005/03/13/2047.html</guid><wfw:comment>http://www.blogjava.net/Tower/comments/2047.html</wfw:comment><comments>http://www.blogjava.net/Tower/archive/2005/03/13/2047.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Tower/comments/commentRss/2047.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Tower/services/trackbacks/2047.html</trackback:ping><description><![CDATA[<P><FONT size=2>做了这么久的软件，从来就没有好好的学习过设计模式。写代码，做设计的时候都是稀里糊涂。做出来的设计，都会不同程度的让自己感觉到不安。这可能就是《设计模式精解》书中所说那种直觉吧。<BR><STRONG><BR>引用：<BR><BR>留意你的知觉<BR><BR></STRONG>出自本能的直觉能对设计质量做出令人惊讶的预测。所谓“出自本能的直觉”，是指当你看到某些不喜欢的东西时，你胃部的感觉。我知道这听起来并不科学（而且它的确不科学），但我的经验总是向我证明：当我从直觉上不喜欢一个设计时，一个更好的设计一定就躺在角落里。<BR><BR></FONT><FONT size=2><STRONG>Facade模式：关键特征<BR></STRONG><BR>意图：希望简化现有系统的使用方法。你需要定义自己的接口。<BR>问题：只需要使用一个复杂系统的一个子集。或者，需要用一种特殊的方式与系统交互。<BR>解决方案：Facade向客户展现使用现有系统的一个新的接口。<BR>参与者与协作者：向客户展现一个定制的接口，让客户更容易地使用现有系统。<BR>效果：Facade模式简化了对所需子系统的使用。但是，由于Facade并不完整，因此某些功能对于客户可能是可用的。<BR>现实：1）定义一个（或一组）新的类来提供所需要的接口。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2）让新的类使用现有的系统。<BR><BR>Facade模式使用于以下情况：</FONT></P>
<UL>
<LI><FONT size=2>不需要使用一个复杂系统的所有功能，并且可以创建一个新的类来包容访问原有系统的接口的一个子集（通常它就是）比原始系统AP简单得多。</FONT></LI>
<LI><FONT size=2>希望包装或隐藏原有系统。</FONT></LI>
<LI><FONT size=2>希望使用原有系统的功能，并且希望增加一些新的功能。</FONT></LI>
<LI><FONT size=2>“编写一个新的类”的代价小于“让所有人学会使用原有系统”或“在未来维护整个系统”所需的代价<BR></FONT></LI></UL>
<P>&nbsp;</P><img src ="http://www.blogjava.net/Tower/aggbug/2047.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Tower/" target="_blank">非飞</a> 2005-03-13 23:41 <a href="http://www.blogjava.net/Tower/archive/2005/03/13/2047.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>组织团队开发项目的方式</title><link>http://www.blogjava.net/Tower/archive/2005/03/03/1667.html</link><dc:creator>非飞</dc:creator><author>非飞</author><pubDate>Thu, 03 Mar 2005 13:06:00 GMT</pubDate><guid>http://www.blogjava.net/Tower/archive/2005/03/03/1667.html</guid><wfw:comment>http://www.blogjava.net/Tower/comments/1667.html</wfw:comment><comments>http://www.blogjava.net/Tower/archive/2005/03/03/1667.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Tower/comments/commentRss/1667.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Tower/services/trackbacks/1667.html</trackback:ping><description><![CDATA[<BR><BR><FONT size=2>&nbsp;&nbsp;&nbsp; 一个项目通常分为表示层、业务逻辑层和持久层，这是最为常见的三层结构。在组织团队进行项目开发的时候，选择如何分工对版本控制有很大的影响。团队在做开发的时候一般有两种模式：按层开发和按功能开发。<BR><BR><B>按层开发（本人赞同的模式）</B><BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;在这种开发模式下，每个开发人员的目录结构相对固定和独立。对于CVS这类按文件夹来控制权限的版本控制服务器来说，比较容易实现对开发人员权限的划分，不易出现文件不同步而导致的版本混乱。<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;另外，这种开发模式下，更能集中开发人员的注意力，不需要了解太多与本层无关的其他技术。将精神全部集中在如何实现本层的功能上，更有利于写出功能强大，运行稳定的代码。例如：开发业务逻辑层的开发人员，他不可避免的会写很多逻辑上基本上一致的代码，在写代码的过程中，就能从中找出一些相对的共性，将公共的代码进行抽象，从而避免了出现大量的重复代码。由于工作范围相对较小，能有更多的时间去学习相关方面的最新技术和解决方案，并应用到程序中，能使程序在实现方式上较为先进、优越。<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;老天是公平的，万物有其好的一面也必然有其不好的一面，这种开发模式也不能例外。对于需求不明确，无法定义相对固定的对外接口时，这中按层开发的模式就有其无法避免的一个问题。各层开发人员需要在开发的过程中，反覆的修改接口，以便适应于变化了的需求。这必然就导致逻辑处理部分代码要做相应的修改。<BR><BR><B>按功能开发（本人持保留态度）</B><BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;这种开发模式下，开发人员的目录结构基本是项目的完整目录接口，他们需要到各层去编写对应他们所开发的模块的所有代码。对于CVS这类版本控制服务器来说，基本上是无法做到对开发人员权限的界定。很容易造成版本控制混乱，导致文件版本不同步，是在开发过程中使用了公共文件的开发人员不能保证同步。例如：一个文件为多个开发人员所共同维护，开发人员各自都需要在其中添加自己功能所需要部分的代码。这样很容易出现多个人同时修改一个文件的情况，导致文件不同步而造成的版本混乱。<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;另外，这种开发模式对开发人员的技术要求相对较高，它要求开发人员掌握各层中所需要的技术。从界面显示到数据持久化，甚至到网络通信都需要一个开发人员去实现。在功能实现架构不是很确定的情况下，程序代码中将会出现大量的重复代码，因为每个人都有自己的实现机制，而逻辑处理相同或相近的情况在同一层中出现频率又比较高。导致程序的整体结构不统一，尽管层次结构相同。使得程序日后维护极度困难，大大的提高了维护成本。由于开发人员牵涉使用的技术过多，也很难保证程序实现方式的先进性和优越性。<BR><BR><BR><BR></FONT><img src ="http://www.blogjava.net/Tower/aggbug/1667.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Tower/" target="_blank">非飞</a> 2005-03-03 21:06 <a href="http://www.blogjava.net/Tower/archive/2005/03/03/1667.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernate中的继承映射</title><link>http://www.blogjava.net/Tower/archive/2005/03/02/1617.html</link><dc:creator>非飞</dc:creator><author>非飞</author><pubDate>Wed, 02 Mar 2005 14:31:00 GMT</pubDate><guid>http://www.blogjava.net/Tower/archive/2005/03/02/1617.html</guid><wfw:comment>http://www.blogjava.net/Tower/comments/1617.html</wfw:comment><comments>http://www.blogjava.net/Tower/archive/2005/03/02/1617.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/Tower/comments/commentRss/1617.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Tower/services/trackbacks/1617.html</trackback:ping><description><![CDATA[<P><BR></P>
<P><BR>Hibernate的继承映射包含了三种不同的策略：<BR></P>
<OL>
<LI>每簇类使用一个表； 
<LI>每个子类一个表； 
<LI>每个具体内一个表（有限制）。<BR></LI></OL>假设我们有四个类Animal，Dog，Cat，其代码如下：<BR>文件名：Animal.java<BR>
<DIV style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid">
<DIV><IMG id=Codehighlighter1_13_125_Open_Image onclick="this.style.display='none'; Codehighlighter1_13_125_Open_Text.style.display='none'; Codehighlighter1_13_125_Closed_Image.style.display='inline'; Codehighlighter1_13_125_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_13_125_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_13_125_Closed_Text.style.display='none'; Codehighlighter1_13_125_Open_Image.style.display='inline'; Codehighlighter1_13_125_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align=top><SPAN style="COLOR: #0000ff">class</SPAN><SPAN style="COLOR: #000000">&nbsp;Animal&nbsp;</SPAN><SPAN id=Codehighlighter1_13_125_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_13_125_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">private</SPAN><SPAN style="COLOR: #000000">&nbsp;String&nbsp;identifier;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">private</SPAN><SPAN style="COLOR: #000000">&nbsp;String&nbsp;name;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">private</SPAN><SPAN style="COLOR: #000000">&nbsp;String&nbsp;category;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">&nbsp;setter&nbsp;and&nbsp;getter</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top></SPAN><SPAN style="COLOR: #000000">}</SPAN></SPAN></DIV></DIV><BR>文件名：Dog.java<BR>
<DIV style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid">
<DIV><IMG id=Codehighlighter1_25_75_Open_Image onclick="this.style.display='none'; Codehighlighter1_25_75_Open_Text.style.display='none'; Codehighlighter1_25_75_Closed_Image.style.display='inline'; Codehighlighter1_25_75_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_25_75_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_25_75_Closed_Text.style.display='none'; Codehighlighter1_25_75_Open_Image.style.display='inline'; Codehighlighter1_25_75_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align=top><SPAN style="COLOR: #0000ff">class</SPAN><SPAN style="COLOR: #000000">&nbsp;Dog&nbsp;extends&nbsp;Animal&nbsp;</SPAN><SPAN id=Codehighlighter1_25_75_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_25_75_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">private</SPAN><SPAN style="COLOR: #000000">&nbsp;String&nbsp;<IMG src="http://www.blogjava.net/images/dot.gif"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">&nbsp;setter&nbsp;and&nbsp;getter</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top></SPAN><SPAN style="COLOR: #000000">}</SPAN></SPAN></DIV></DIV><BR>文件名：Cat.java<BR>
<DIV style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid">
<DIV><IMG id=Codehighlighter1_25_75_Open_Image onclick="this.style.display='none'; Codehighlighter1_25_75_Open_Text.style.display='none'; Codehighlighter1_25_75_Closed_Image.style.display='inline'; Codehighlighter1_25_75_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_25_75_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_25_75_Closed_Text.style.display='none'; Codehighlighter1_25_75_Open_Image.style.display='inline'; Codehighlighter1_25_75_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align=top><SPAN style="COLOR: #0000ff">class</SPAN><SPAN style="COLOR: #000000">&nbsp;Cat&nbsp;extends&nbsp;Animal&nbsp;</SPAN><SPAN id=Codehighlighter1_25_75_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_25_75_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">private</SPAN><SPAN style="COLOR: #000000">&nbsp;String&nbsp;<IMG src="http://www.blogjava.net/images/dot.gif"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">&nbsp;setter&nbsp;and&nbsp;getter</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top></SPAN><SPAN style="COLOR: #000000">}</SPAN></SPAN></DIV></DIV><BR>
<UL>
<LI><B>每簇类使用一个表</B> </LI></UL>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 使用每簇类使用一个表的策略时，有一个限制就时子类不能有NOT NULL，映射文件为：<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 文件名：Animal.hbm.xml<BR>
<DIV style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid">
<DIV><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">class&nbsp;</SPAN><SPAN style="COLOR: #ff0000">name</SPAN><SPAN style="COLOR: #0000ff">="Animal"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;table</SPAN><SPAN style="COLOR: #0000ff">="TB_ANIMAL"</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">id&nbsp;</SPAN><SPAN style="COLOR: #ff0000">name</SPAN><SPAN style="COLOR: #0000ff">="identifier"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;type</SPAN><SPAN style="COLOR: #0000ff">="string"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;column</SPAN><SPAN style="COLOR: #0000ff">="IDENTIFIER"</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">generator&nbsp;</SPAN><SPAN style="COLOR: #ff0000">class</SPAN><SPAN style="COLOR: #0000ff">="uuid.hex"</SPAN><SPAN style="COLOR: #0000ff">/&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">id</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">discriminator&nbsp;</SPAN><SPAN style="COLOR: #ff0000">column</SPAN><SPAN style="COLOR: #0000ff">="ANIMAL_TYPE"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;type</SPAN><SPAN style="COLOR: #0000ff">="string"</SPAN><SPAN style="COLOR: #0000ff">/&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">property&nbsp;</SPAN><SPAN style="COLOR: #ff0000">name</SPAN><SPAN style="COLOR: #0000ff">="name"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;column</SPAN><SPAN style="COLOR: #0000ff">="NAME"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;type</SPAN><SPAN style="COLOR: #0000ff">="string"</SPAN><SPAN style="COLOR: #0000ff">/&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<IMG src="http://www.blogjava.net/images/dot.gif"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">subclass&nbsp;</SPAN><SPAN style="COLOR: #ff0000">name</SPAN><SPAN style="COLOR: #0000ff">="Dog"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;discriminator-value</SPAN><SPAN style="COLOR: #0000ff">="DOG"</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<IMG src="http://www.blogjava.net/images/dot.gif"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">subclass</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">subclass&nbsp;</SPAN><SPAN style="COLOR: #ff0000">name</SPAN><SPAN style="COLOR: #0000ff">="Cat"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;discriminator-value</SPAN><SPAN style="COLOR: #0000ff">="CAT"</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<IMG src="http://www.blogjava.net/images/dot.gif"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">subclass</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">class</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN></DIV></DIV><BR>
<UL>
<LI><B>每个子类一个表</B> </LI></UL>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 使用每个子类一个表的策略时，可以使用一个映射文件实现，也可以分成多个映射文件来实现。每个子类一个映射文件的情况：<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 文件名：Animal.hbm.xml<BR>
<DIV style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid">
<DIV><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">class&nbsp;</SPAN><SPAN style="COLOR: #ff0000">name</SPAN><SPAN style="COLOR: #0000ff">="Animal"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;table</SPAN><SPAN style="COLOR: #0000ff">="ANIMAL"</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">id&nbsp;</SPAN><SPAN style="COLOR: #ff0000">name</SPAN><SPAN style="COLOR: #0000ff">="identifier"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;column</SPAN><SPAN style="COLOR: #0000ff">="IDENTIFIER"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;type</SPAN><SPAN style="COLOR: #0000ff">="string"</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">generator&nbsp;</SPAN><SPAN style="COLOR: #ff0000">class</SPAN><SPAN style="COLOR: #0000ff">="uuid.hex"</SPAN><SPAN style="COLOR: #0000ff">/&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">id</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">property&nbsp;</SPAN><SPAN style="COLOR: #ff0000"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">class</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;文件名：Dog.hbm.xml<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">joined-subclass&nbsp;</SPAN><SPAN style="COLOR: #ff0000">name</SPAN><SPAN style="COLOR: #0000ff">="Dog"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;table</SPAN><SPAN style="COLOR: #0000ff">="DOG"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;extends</SPAN><SPAN style="COLOR: #0000ff">="Animal"</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">key&nbsp;</SPAN><SPAN style="COLOR: #ff0000">column</SPAN><SPAN style="COLOR: #0000ff">="DOG_ID"</SPAN><SPAN style="COLOR: #0000ff">/&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<IMG src="http://www.blogjava.net/images/dot.gif"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">joined-subclass</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;文件名：Cat.hbm.xml<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">joined-subclass&nbsp;</SPAN><SPAN style="COLOR: #ff0000">name</SPAN><SPAN style="COLOR: #0000ff">="Cat"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;table</SPAN><SPAN style="COLOR: #0000ff">="CAT"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;extends</SPAN><SPAN style="COLOR: #0000ff">="Cat"</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">key&nbsp;</SPAN><SPAN style="COLOR: #ff0000">column</SPAN><SPAN style="COLOR: #0000ff">="CAT_ID"</SPAN><SPAN style="COLOR: #0000ff">/&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<IMG src="http://www.blogjava.net/images/dot.gif"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">joined-subclass</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN></DIV></DIV><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 每个子类一个表的策略实际上一种one-to-one的映射。<BR>
<UL>
<LI><B>每个具体内一个表（有限制）</B> </LI></UL>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 使用每个具体内一个表（有限制）策略时，每一个子类的映射文件将要包含所有父类中的属性，映射文件：<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 文件名：Dog.hbm.xml<BR>
<DIV style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid">
<DIV><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">class&nbsp;</SPAN><SPAN style="COLOR: #ff0000">name</SPAN><SPAN style="COLOR: #0000ff">="Dog"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;table</SPAN><SPAN style="COLOR: #0000ff">="DOG"</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">id&nbsp;</SPAN><SPAN style="COLOR: #ff0000">name</SPAN><SPAN style="COLOR: #0000ff">="identifier"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;column</SPAN><SPAN style="COLOR: #0000ff">="IDENTIFIER"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;type</SPAN><SPAN style="COLOR: #0000ff">="string"</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">generator&nbsp;</SPAN><SPAN style="COLOR: #ff0000">class</SPAN><SPAN style="COLOR: #0000ff">="uuid.hex"</SPAN><SPAN style="COLOR: #0000ff">/&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">id</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">property&nbsp;</SPAN><SPAN style="COLOR: #ff0000">name</SPAN><SPAN style="COLOR: #0000ff">="name"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;column</SPAN><SPAN style="COLOR: #0000ff">="NAME"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;type</SPAN><SPAN style="COLOR: #0000ff">="string"</SPAN><SPAN style="COLOR: #0000ff">/&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<IMG src="http://www.blogjava.net/images/dot.gif"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">class</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;文件名：Cat.hbm.xml<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">class&nbsp;</SPAN><SPAN style="COLOR: #ff0000">name</SPAN><SPAN style="COLOR: #0000ff">="Cat"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;table</SPAN><SPAN style="COLOR: #0000ff">="CAT"</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">id&nbsp;</SPAN><SPAN style="COLOR: #ff0000">name</SPAN><SPAN style="COLOR: #0000ff">="identifier"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;column</SPAN><SPAN style="COLOR: #0000ff">="IDENTIFIER"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;type</SPAN><SPAN style="COLOR: #0000ff">="string"</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">generator&nbsp;</SPAN><SPAN style="COLOR: #ff0000">class</SPAN><SPAN style="COLOR: #0000ff">="uuid.hex"</SPAN><SPAN style="COLOR: #0000ff">/&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">id</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">property&nbsp;</SPAN><SPAN style="COLOR: #ff0000">name</SPAN><SPAN style="COLOR: #0000ff">="name"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;column</SPAN><SPAN style="COLOR: #0000ff">="NAME"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;type</SPAN><SPAN style="COLOR: #0000ff">="string"</SPAN><SPAN style="COLOR: #0000ff">/&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<IMG src="http://www.blogjava.net/images/dot.gif"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">class</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN></DIV></DIV><BR><BR><BR><BR><img src ="http://www.blogjava.net/Tower/aggbug/1617.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Tower/" target="_blank">非飞</a> 2005-03-02 22:31 <a href="http://www.blogjava.net/Tower/archive/2005/03/02/1617.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>各层共享使用PO的代价</title><link>http://www.blogjava.net/Tower/archive/2005/03/01/1584.html</link><dc:creator>非飞</dc:creator><author>非飞</author><pubDate>Tue, 01 Mar 2005 04:40:00 GMT</pubDate><guid>http://www.blogjava.net/Tower/archive/2005/03/01/1584.html</guid><wfw:comment>http://www.blogjava.net/Tower/comments/1584.html</wfw:comment><comments>http://www.blogjava.net/Tower/archive/2005/03/01/1584.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/Tower/comments/commentRss/1584.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Tower/services/trackbacks/1584.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; 网上一大堆关于PO，POJO，DTO，VO等等对象的讨论，通常都是各持己见，公说公有理，婆说婆有理，讨论到最后也没有什么定论。今天看到一个应用的代码，发现其讲PO直接做为VO（view object）在表示层使用。只从代码上讲，这样做确实省去了跟多操作。不用重复的做对象的赋值、构造。但是会过头来看，这样无疑增加了代码的耦合性。做一个简单的假设，如果对持久层的PO进行了修改，相应的使用PO做为对应的VO（value object）业务逻辑层和使用PO最为VO（view object）的表示层都必须做相应的修改，如此的应用给代码的维护带来了很大的负担，可谓是一动则百动。<BR>&nbsp;&nbsp;&nbsp; 在J2EE应用开发中，是不应该出现这中PO共享使用的方式的。实体对象不应该被跨层使用，各层维护自己的实体对象。这点看书我想大家都知道，而在实际应用中很多人都选择不遵循这一规则。（在使用hibernate时有所不同，引用：“<FONT class=htd>不过由于Hibernate的强大功能，例如动态生成PO，PO的状态管理可以脱离Session，使得在应用了Hibernate的J2EE框架中，PO完全可以充当VO，因此我们下面把PO和VO合并，统称为PO。”</FONT>引文：<FONT class=red_3><A href="http://www.hibernate.org.cn/viewtopic.php?t=627&amp;postdays=0&amp;postorder=asc&amp;start=0">结合struts和hibernate谈J2EE架构的数据表示</A></FONT>。）出现这总现象，我想原因只有一个就是贪图了一时的省事，在一次性应用开发中，相对的业务对象改动可能性相当的少，很多时候在做项目的时候并不会出现预料不到的改变，没有必要去管理一大堆各式各样的实体对象，这样就自然的导致了PO在各层中共享使用。可是就我目前接触到的项目基本上没有需求是如此明确的，通常需求都是在不断的改变，甚至有时到了最后发版的时候，一些客户都会提出修改需求的要求。另外就是自做需求的情况就更是如此了，这种项目的需求是不断的在变化的。为了保证项目的适应性和可扩展性，就必须保证各层之间的相对独立，尽可能降低耦合度。<BR><BR><BR><BR><img src ="http://www.blogjava.net/Tower/aggbug/1584.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Tower/" target="_blank">非飞</a> 2005-03-01 12:40 <a href="http://www.blogjava.net/Tower/archive/2005/03/01/1584.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>通过mx4j实现JMXConnectorServer和JMXConnector</title><link>http://www.blogjava.net/Tower/archive/2005/02/05/1037.html</link><dc:creator>非飞</dc:creator><author>非飞</author><pubDate>Sat, 05 Feb 2005 11:07:00 GMT</pubDate><guid>http://www.blogjava.net/Tower/archive/2005/02/05/1037.html</guid><wfw:comment>http://www.blogjava.net/Tower/comments/1037.html</wfw:comment><comments>http://www.blogjava.net/Tower/archive/2005/02/05/1037.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Tower/comments/commentRss/1037.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Tower/services/trackbacks/1037.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; 看了两天文档，总算对JMX有了一个整体的认识。发现使用mx4j实现JMX还是相当的轻松的。MBeans可以使用mx4j-tools中的 Xdoclet偷一下懒，让它自动的生成MBeans和Descriptions，ant有相应的支持，还是比较方便的，对于MBean接口的实现，自己写了。<BR><BR>&nbsp;&nbsp;&nbsp; 对于如何产生和注册MBeans，mx4j提供了一个相当方便的工具，为什么说相当方便，是因为它真的实在是太方便了。通过写一个xml配置文件可以完成所有的工作。比起M-LET确实是强了不少。下面就是一个在MBean Server产生注册一个NamingService、JMXConnectorServer和一个自写的MBean的配置文件。<BR><BR><FONT color=#006400>
<DIV style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid">
<DIV><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #0000ff">&lt;?</SPAN><SPAN style="COLOR: #ff00ff">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"</SPAN><SPAN style="COLOR: #0000ff">?&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">configuration&nbsp;</SPAN><SPAN style="COLOR: #ff0000">port</SPAN><SPAN style="COLOR: #0000ff">="9999"</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">startup</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">create&nbsp;</SPAN><SPAN style="COLOR: #ff0000">classname</SPAN><SPAN style="COLOR: #0000ff">="mx4j.tools.naming.NamingService"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;objectname</SPAN><SPAN style="COLOR: #0000ff">="naming:type=rmiregistry"</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">arg&nbsp;</SPAN><SPAN style="COLOR: #ff0000">type</SPAN><SPAN style="COLOR: #0000ff">="int"</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000">1099</SPAN><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">arg</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">create</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">call&nbsp;</SPAN><SPAN style="COLOR: #ff0000">operation</SPAN><SPAN style="COLOR: #0000ff">="start"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;objectname</SPAN><SPAN style="COLOR: #0000ff">="naming:type=rmiregistry"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">/&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">object&nbsp;</SPAN><SPAN style="COLOR: #ff0000">objectid</SPAN><SPAN style="COLOR: #0000ff">="rmi"</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">call&nbsp;</SPAN><SPAN style="COLOR: #ff0000">classname</SPAN><SPAN style="COLOR: #0000ff">="javax.management.remote.JMXConnectorServerFactory"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;method</SPAN><SPAN style="COLOR: #0000ff">="newJMXConnectorServer"</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">arg&nbsp;</SPAN><SPAN style="COLOR: #ff0000">type</SPAN><SPAN style="COLOR: #0000ff">="javax.management.remote.JMXServiceURL"</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">new&nbsp;</SPAN><SPAN style="COLOR: #ff0000">classname</SPAN><SPAN style="COLOR: #0000ff">="javax.management.remote.JMXServiceURL"</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">arg&nbsp;</SPAN><SPAN style="COLOR: #ff0000">type</SPAN><SPAN style="COLOR: #0000ff">="string"</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000">service:jmx:rmi://localhost/jndi/rmi://localhost:1099/jmx</SPAN><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">arg</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">new</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">arg</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">arg&nbsp;</SPAN><SPAN style="COLOR: #ff0000">type</SPAN><SPAN style="COLOR: #0000ff">="java.util.Map"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">/&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">arg&nbsp;</SPAN><SPAN style="COLOR: #ff0000">type</SPAN><SPAN style="COLOR: #0000ff">="javax.management.MBeanServer"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">/&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">call</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">object</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">register&nbsp;</SPAN><SPAN style="COLOR: #ff0000">objectname</SPAN><SPAN style="COLOR: #0000ff">="connectors:type=rmi,protocol=jrmp"</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">arg&nbsp;</SPAN><SPAN style="COLOR: #ff0000">type</SPAN><SPAN style="COLOR: #0000ff">="object"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;refobjectid</SPAN><SPAN style="COLOR: #0000ff">="rmi"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">/&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">register</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">call&nbsp;</SPAN><SPAN style="COLOR: #ff0000">method</SPAN><SPAN style="COLOR: #0000ff">="start"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;refobjectid</SPAN><SPAN style="COLOR: #0000ff">="rmi"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">/&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">create&nbsp;</SPAN><SPAN style="COLOR: #ff0000">classname</SPAN><SPAN style="COLOR: #0000ff">="nsmp.examples.mbeans.rmi.MyRemoteServiceObject"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;objectname</SPAN><SPAN style="COLOR: #0000ff">="services:type=my-remote"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">/&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">startup</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">shutdown</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">call&nbsp;</SPAN><SPAN style="COLOR: #ff0000">operation</SPAN><SPAN style="COLOR: #0000ff">="stop"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;objectname</SPAN><SPAN style="COLOR: #0000ff">="services:type=my-remote"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">/&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">call&nbsp;</SPAN><SPAN style="COLOR: #ff0000">method</SPAN><SPAN style="COLOR: #0000ff">="stop"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;refobjectid</SPAN><SPAN style="COLOR: #0000ff">="rmi"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">/&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">call&nbsp;</SPAN><SPAN style="COLOR: #ff0000">operation</SPAN><SPAN style="COLOR: #0000ff">="stop"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;objectname</SPAN><SPAN style="COLOR: #0000ff">="naming:type=rmiregistry"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">/&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">unregister&nbsp;</SPAN><SPAN style="COLOR: #ff0000">objectname</SPAN><SPAN style="COLOR: #0000ff">="services:type=my-remote"</SPAN><SPAN style="COLOR: #0000ff">/&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">unregister&nbsp;</SPAN><SPAN style="COLOR: #ff0000">objectname</SPAN><SPAN style="COLOR: #0000ff">="connectors:type=rmi,protocol=jrmp"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">/&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">unregister&nbsp;</SPAN><SPAN style="COLOR: #ff0000">objectname</SPAN><SPAN style="COLOR: #0000ff">="naming:type=rmiregistry"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">/&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">shutdown</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">configuration</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000">&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN></DIV></DIV><BR><FONT color=#000000>java代码：<BR><BR>
<DIV style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid">
<DIV><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #000000">package&nbsp;nsmp.agent;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>import&nbsp;java.io.BufferedReader;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>import&nbsp;java.io.FileReader;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>import&nbsp;java.io.Reader;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>import&nbsp;java.net.Socket;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>import&nbsp;javax.management.MBeanServer;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>import&nbsp;javax.management.MBeanServerFactory;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>import&nbsp;javax.management.ObjectName;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>import&nbsp;mx4j.tools.config.ConfigurationLoader;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>import&nbsp;nsmp.util.NsmpGlobals;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG id=Codehighlighter1_322_403_Open_Image onclick="this.style.display='none'; Codehighlighter1_322_403_Open_Text.style.display='none'; Codehighlighter1_322_403_Closed_Image.style.display='inline'; Codehighlighter1_322_403_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_322_403_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_322_403_Closed_Text.style.display='none'; Codehighlighter1_322_403_Open_Image.style.display='inline'; Codehighlighter1_322_403_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align=top></SPAN><SPAN id=Codehighlighter1_322_403_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</SPAN><SPAN id=Codehighlighter1_322_403_Open_Text><SPAN style="COLOR: #008000">/*</SPAN><SPAN style="COLOR: #008000">*<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;*&nbsp;@version&nbsp;1.0<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;*&nbsp;@author&nbsp;tower<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;*<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;*&nbsp;TODO&nbsp;write&nbsp;the&nbsp;comment&nbsp;of&nbsp;this&nbsp;type<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;</SPAN><SPAN style="COLOR: #008000">*/</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG id=Codehighlighter1_429_1188_Open_Image onclick="this.style.display='none'; Codehighlighter1_429_1188_Open_Text.style.display='none'; Codehighlighter1_429_1188_Closed_Image.style.display='inline'; Codehighlighter1_429_1188_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_429_1188_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_429_1188_Closed_Text.style.display='none'; Codehighlighter1_429_1188_Open_Image.style.display='inline'; Codehighlighter1_429_1188_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">class</SPAN><SPAN style="COLOR: #000000">&nbsp;NsmpServer&nbsp;</SPAN><SPAN id=Codehighlighter1_429_1188_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_429_1188_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG id=Codehighlighter1_474_934_Open_Image onclick="this.style.display='none'; Codehighlighter1_474_934_Open_Text.style.display='none'; Codehighlighter1_474_934_Closed_Image.style.display='inline'; Codehighlighter1_474_934_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_474_934_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_474_934_Closed_Text.style.display='none'; Codehighlighter1_474_934_Open_Image.style.display='inline'; Codehighlighter1_474_934_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000">&nbsp;startup()&nbsp;throws&nbsp;Exception&nbsp;</SPAN><SPAN id=Codehighlighter1_474_934_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_474_934_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MBeanServer&nbsp;server&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;MBeanServerFactory.newMBeanServer();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ConfigurationLoader&nbsp;loader&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;ConfigurationLoader();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;server.registerMBean(loader,&nbsp;ObjectName.getInstance(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">config:service=loader</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">));<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Reader&nbsp;reader&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;BufferedReader(</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;FileReader(NsmpGlobals.NSMP_HOME&nbsp;</SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">/conf/config.xml</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">));<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;loader.startup(reader);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reader.close();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.</SPAN><SPAN style="COLOR: #0000ff">out</SPAN><SPAN style="COLOR: #000000">.println(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">Start&nbsp;the&nbsp;nsmp&nbsp;server&nbsp;successfully!</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG id=Codehighlighter1_980_1186_Open_Image onclick="this.style.display='none'; Codehighlighter1_980_1186_Open_Text.style.display='none'; Codehighlighter1_980_1186_Closed_Image.style.display='inline'; Codehighlighter1_980_1186_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_980_1186_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_980_1186_Closed_Text.style.display='none'; Codehighlighter1_980_1186_Open_Image.style.display='inline'; Codehighlighter1_980_1186_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000">&nbsp;shutdown()&nbsp;throws&nbsp;Exception&nbsp;</SPAN><SPAN id=Codehighlighter1_980_1186_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_980_1186_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;shutdownCommand&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">shutdown</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Socket&nbsp;socket&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;Socket(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">127.0.0.1</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">,&nbsp;</SPAN><SPAN style="COLOR: #000000">9999</SPAN><SPAN style="COLOR: #000000">);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;socket.getOutputStream().write(shutdownCommand.getBytes());<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;socket.close();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN></DIV></DIV><BR>&nbsp;&nbsp;&nbsp; startup方法调用配置文件的startup部分完成创建和注册，shutdown方法调用配置文件的shutdown部分释放相应的资源。通过调用 startup方法就可以起动MBeanServer提供服务了。对于shutdown开始搞了我半天startup后 ConfigurationLoader都没有创建一个侦听端口来接收shutdown命令，看了看mx4j的源码发现 ConfigurationLoader也没有发现什么特殊地方。捉摸半天终于发现了自己放了一个愚笨的错误，eclipse是用普通用户权限开的，没有办法创建侦听，改成root后一切ok。<BR><BR>&nbsp;&nbsp;&nbsp; 接下就随便写了一个JMXConnector，代码：<BR><BR>
<DIV style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid">
<DIV><IMG id=Codehighlighter1_0_240_Open_Image onclick="this.style.display='none'; Codehighlighter1_0_240_Open_Text.style.display='none'; Codehighlighter1_0_240_Closed_Image.style.display='inline'; Codehighlighter1_0_240_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_0_240_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_0_240_Closed_Text.style.display='none'; Codehighlighter1_0_240_Open_Image.style.display='inline'; Codehighlighter1_0_240_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align=top><SPAN id=Codehighlighter1_0_240_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</SPAN><SPAN id=Codehighlighter1_0_240_Open_Text><SPAN style="COLOR: #008000">/*</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;*&nbsp;Copyright&nbsp;(C)&nbsp;The&nbsp;MX4J&nbsp;Contributors.<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;*&nbsp;All&nbsp;rights&nbsp;reserved.<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;*<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;*&nbsp;This&nbsp;software&nbsp;is&nbsp;distributed&nbsp;under&nbsp;the&nbsp;terms&nbsp;of&nbsp;the&nbsp;MX4J&nbsp;License&nbsp;version&nbsp;1.0.<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;*&nbsp;See&nbsp;the&nbsp;terms&nbsp;of&nbsp;the&nbsp;MX4J&nbsp;License&nbsp;in&nbsp;the&nbsp;documentation&nbsp;provided&nbsp;with&nbsp;this&nbsp;software.<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;</SPAN><SPAN style="COLOR: #008000">*/</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>package&nbsp;nsmp.examples.mbeans.rmi;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>import&nbsp;java.util.Map;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>import&nbsp;javax.management.MBeanInfo;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>import&nbsp;javax.management.MBeanOperationInfo;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>import&nbsp;javax.management.MBeanServerConnection;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>import&nbsp;javax.management.ObjectName;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>import&nbsp;javax.management.remote.JMXConnector;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>import&nbsp;javax.management.remote.JMXConnectorFactory;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>import&nbsp;javax.management.remote.JMXServiceURL;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG id=Codehighlighter1_608_643_Open_Image onclick="this.style.display='none'; Codehighlighter1_608_643_Open_Text.style.display='none'; Codehighlighter1_608_643_Closed_Image.style.display='inline'; Codehighlighter1_608_643_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_608_643_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_608_643_Closed_Text.style.display='none'; Codehighlighter1_608_643_Open_Image.style.display='inline'; Codehighlighter1_608_643_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align=top></SPAN><SPAN id=Codehighlighter1_608_643_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</SPAN><SPAN id=Codehighlighter1_608_643_Open_Text><SPAN style="COLOR: #008000">/*</SPAN><SPAN style="COLOR: #008000">*<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;*&nbsp;@version&nbsp;$Revision:&nbsp;1.3&nbsp;$<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;</SPAN><SPAN style="COLOR: #008000">*/</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">class</SPAN><SPAN style="COLOR: #000000">&nbsp;Client<BR><IMG id=Codehighlighter1_665_1672_Open_Image onclick="this.style.display='none'; Codehighlighter1_665_1672_Open_Text.style.display='none'; Codehighlighter1_665_1672_Closed_Image.style.display='inline'; Codehighlighter1_665_1672_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_665_1672_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_665_1672_Closed_Text.style.display='none'; Codehighlighter1_665_1672_Open_Image.style.display='inline'; Codehighlighter1_665_1672_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align=top></SPAN><SPAN id=Codehighlighter1_665_1672_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_665_1672_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">static</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000">&nbsp;main(String[]&nbsp;args)&nbsp;throws&nbsp;Exception<BR><IMG id=Codehighlighter1_729_1670_Open_Image onclick="this.style.display='none'; Codehighlighter1_729_1670_Open_Text.style.display='none'; Codehighlighter1_729_1670_Closed_Image.style.display='inline'; Codehighlighter1_729_1670_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_729_1670_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_729_1670_Closed_Text.style.display='none'; Codehighlighter1_729_1670_Open_Image.style.display='inline'; Codehighlighter1_729_1670_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_729_1670_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_729_1670_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JMXServiceURL&nbsp;address&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;JMXServiceURL(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">service:jmx:rmi://localhost/jndi/rmi://localhost:1099/jmx</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Map&nbsp;creationEnv&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">null</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JMXConnector&nbsp;connector&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;JMXConnectorFactory.newJMXConnector(address,&nbsp;creationEnv);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Map&nbsp;connectionEnv&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">null</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;connector.connect(connectionEnv);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MBeanServerConnection&nbsp;serverConnection&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;connector.getMBeanServerConnection();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ObjectName&nbsp;name&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;ObjectName.getInstance(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">services:type=my-remote</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MBeanInfo&nbsp;mbInfo&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;serverConnection.getMBeanInfo(name);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MBeanOperationInfo[]&nbsp;operationInfo&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;mbInfo.getOperations();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR><IMG id=Codehighlighter1_1461_1537_Open_Image onclick="this.style.display='none'; Codehighlighter1_1461_1537_Open_Text.style.display='none'; Codehighlighter1_1461_1537_Closed_Image.style.display='inline'; Codehighlighter1_1461_1537_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_1461_1537_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1461_1537_Closed_Text.style.display='none'; Codehighlighter1_1461_1537_Open_Image.style.display='inline'; Codehighlighter1_1461_1537_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">for</SPAN><SPAN style="COLOR: #000000">&nbsp;(</SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">&nbsp;i&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">0</SPAN><SPAN style="COLOR: #000000">;&nbsp;i&nbsp;</SPAN><SPAN style="COLOR: #000000">&lt;</SPAN><SPAN style="COLOR: #000000">&nbsp;operationInfo.length;&nbsp;i</SPAN><SPAN style="COLOR: #000000">++</SPAN><SPAN style="COLOR: #000000">)&nbsp;</SPAN><SPAN id=Codehighlighter1_1461_1537_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_1461_1537_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.</SPAN><SPAN style="COLOR: #0000ff">out</SPAN><SPAN style="COLOR: #000000">.println(operationInfo[i].getName());<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR><IMG id=Codehighlighter1_1617_1628_Open_Image onclick="this.style.display='none'; Codehighlighter1_1617_1628_Open_Text.style.display='none'; Codehighlighter1_1617_1628_Closed_Image.style.display='inline'; Codehighlighter1_1617_1628_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_1617_1628_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1617_1628_Closed_Text.style.display='none'; Codehighlighter1_1617_1628_Open_Image.style.display='inline'; Codehighlighter1_1617_1628_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;serverConnection.invoke(name,&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">sayHello</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">,&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;Object[]&nbsp;</SPAN><SPAN id=Codehighlighter1_1617_1628_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_1617_1628_Open_Text><SPAN style="COLOR: #000000">{</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">Tower&nbsp;He</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">}</SPAN></SPAN><SPAN style="COLOR: #000000">,&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;String[]&nbsp;</SPAN><SPAN id=Codehighlighter1_1644_1663_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_1644_1663_Open_Text><SPAN style="COLOR: #000000">{</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">java.lang.String</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">}</SPAN></SPAN><SPAN style="COLOR: #000000">);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN></DIV></DIV><BR><BR>JMXConnector是通过获取一个MBeanServerConnection来实现远程调用的，运行了一下一切顺利通过。<BR><BR>下载：<A href="http://www.blogjava.net/Files/Tower/MX4JExample.rar">MX4JExample.rar</A><BR></FONT></FONT><img src ="http://www.blogjava.net/Tower/aggbug/1037.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Tower/" target="_blank">非飞</a> 2005-02-05 19:07 <a href="http://www.blogjava.net/Tower/archive/2005/02/05/1037.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>看《难兄难弟》有感要说呀！</title><link>http://www.blogjava.net/Tower/archive/2005/02/03/928.html</link><dc:creator>非飞</dc:creator><author>非飞</author><pubDate>Wed, 02 Feb 2005 19:02:00 GMT</pubDate><guid>http://www.blogjava.net/Tower/archive/2005/02/03/928.html</guid><wfw:comment>http://www.blogjava.net/Tower/comments/928.html</wfw:comment><comments>http://www.blogjava.net/Tower/archive/2005/02/03/928.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Tower/comments/commentRss/928.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Tower/services/trackbacks/928.html</trackback:ping><description><![CDATA[<P>命运之可怕</P>
<P>&nbsp;&nbsp;&nbsp;深夜，没有睡。不是在写程序，而是在看《难兄难弟》。两大男主角都是我所喜欢的，罗嘉良扮演李奇，吴镇宇饰演谢源。电视的情节跌宕起伏，命运被剧中的演员诠释的入木三分。正所谓存在必不容易，电视剧的剧本不是编剧凭空想象而写成的，特别是好的剧本定是编剧不知道咬了多少笔头而写就而成的。（写好的程序不也是这样吗？）在《难兄难弟》一剧中谢源是一个在事业上一路顺风，扶摇直上的大明星，而李奇的星路则是坎坷岖崎的，做的角色大多是跑龙套一类的，更是经常做其他明星的影子（替身）。一身才华得不到人得赏识，有力无处使。命运简直是讲所有的一切大风大浪都强加与他的身上。以前看电视，总是觉得有不有这么巧呀，什么坏是都被他遇上了。而今，长大了，对周围的人、事也见多了。最后不得不感叹，原来命运真的是如此的不公平。知道不公平又能怎么样呢？人，作为一种自认为是高级的物种存在于这颗被称为地球的星球上，其实他本身是多么的渺小。对于自己面临的问题，很多时候人都是两手一摆，无能为力。<BR>&nbsp;&nbsp;&nbsp;前段时间跟一位故友讨论了一下所谓的人生价值。在闲聊之间，发现人生价值太难以去把握。人的一生拿来于宇宙来比较，太为短暂微不足道了。而一个人要在如此短暂的生命区间里找寻到自己的价值，谈何容易。马克思说一个人存在的价值是通过他的社会价值来表现的。只有当他实现了自己的社会价值，得到了社会的肯定和承认，这样才能得到社会的回报，得到自己的个人价值。从字面上来看，马克思说的这一点是勿庸置疑的。但是当用马克思的另一个原理矛盾存在的普遍性在来分析一下人生。人的一身是短暂的，而矛盾无处不在。从宏观的角度看，价值观可能如马克思所说，但是从微观上来说，人的一生是充满了不平等待遇的。就是所谓的好人未必又好报。剧本中的李奇这角色充分的体现了这一点。当人被命运不断的摧残下，有几个人能真正的挨得住，撑得下去。（可能有人说我太消极了，应该用积极的态度去看待，应该认为是在接受命运的考验。）可能是我真的太悲观了，但是我知道如果换成我是李奇我肯定顶不住。我觉得已经远远超过了我的承受能力。命运可能认为只是跟他开一个小小的玩笑，可是不要忘记人是渺小的，开不起这样的玩笑。</P><img src ="http://www.blogjava.net/Tower/aggbug/928.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Tower/" target="_blank">非飞</a> 2005-02-03 03:02 <a href="http://www.blogjava.net/Tower/archive/2005/02/03/928.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一天的工作终于结束了。。。</title><link>http://www.blogjava.net/Tower/archive/2005/01/26/738.html</link><dc:creator>非飞</dc:creator><author>非飞</author><pubDate>Wed, 26 Jan 2005 11:34:00 GMT</pubDate><guid>http://www.blogjava.net/Tower/archive/2005/01/26/738.html</guid><wfw:comment>http://www.blogjava.net/Tower/comments/738.html</wfw:comment><comments>http://www.blogjava.net/Tower/archive/2005/01/26/738.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Tower/comments/commentRss/738.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Tower/services/trackbacks/738.html</trackback:ping><description><![CDATA[看了一天的文档，头都要炸了，加上原本就有的发烧，简直就是要我的命了。上班的日子不知道比考研要累上多少被，才三天就有点支持不住了，可是为了生活没有办法呀。下午讨论了一下如何做到对一个局域网的安全性进行评估。单单只是谈论了一下需求就发现这个系统实在是把简单。<br>
目前提出的需求有：<br>
<ol>
  <li>网络上各节点主机是否存在病毒；</li>
  <li>网络上各节点主机存在的漏洞评估；</li>
  <li>主机上是否存在非法用户和非法应用；</li>
  <li>对网络上敏感信息的搜索；</li>
  <li>网络拓扑是否安全合理。</li>
</ol>
以上无条需求出了2、5以外其他的都是一个“伟大的工程”，需要慢慢研究。无奈呀<br><img src ="http://www.blogjava.net/Tower/aggbug/738.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Tower/" target="_blank">非飞</a> 2005-01-26 19:34 <a href="http://www.blogjava.net/Tower/archive/2005/01/26/738.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>回实验室上班</title><link>http://www.blogjava.net/Tower/archive/2005/01/26/717.html</link><dc:creator>非飞</dc:creator><author>非飞</author><pubDate>Wed, 26 Jan 2005 02:00:00 GMT</pubDate><guid>http://www.blogjava.net/Tower/archive/2005/01/26/717.html</guid><wfw:comment>http://www.blogjava.net/Tower/comments/717.html</wfw:comment><comments>http://www.blogjava.net/Tower/archive/2005/01/26/717.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/Tower/comments/commentRss/717.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Tower/services/trackbacks/717.html</trackback:ping><description><![CDATA[辛苦呀，是在是很辛苦。不过总算是熬过去了。看了3个月的考研书，头都快要大了。考完第3天了，回实验室也是第3天了，一大堆的东西要看，要写。最为郁闷
的是，昨天晚上开始有点发烧了，头疼的要命。同学坐今天下午的火车回家，没有办法，命苦呀，头痛还是要硬着头皮去送人。把知道西客站今天的人是否很多，但
愿少一点。<img src ="http://www.blogjava.net/Tower/aggbug/717.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Tower/" target="_blank">非飞</a> 2005-01-26 10:00 <a href="http://www.blogjava.net/Tower/archive/2005/01/26/717.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>