﻿<?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/hyint/</link><description>品味技术与生活之间的差距，追求代码与国画之间的艺术.</description><language>zh-cn</language><lastBuildDate>Sat, 20 Jun 2026 01:10:12 GMT</lastBuildDate><pubDate>Sat, 20 Jun 2026 01:10:12 GMT</pubDate><ttl>60</ttl><item><title>Linux 配置防火墙</title><link>http://www.blogjava.net/hyint/articles/259578.html</link><dc:creator>苦瓜</dc:creator><author>苦瓜</author><pubDate>Fri, 13 Mar 2009 09:11:00 GMT</pubDate><guid>http://www.blogjava.net/hyint/articles/259578.html</guid><wfw:comment>http://www.blogjava.net/hyint/comments/259578.html</wfw:comment><comments>http://www.blogjava.net/hyint/articles/259578.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hyint/comments/commentRss/259578.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hyint/services/trackbacks/259578.html</trackback:ping><description><![CDATA[&nbsp;Linux 配置完成以后，如果外界需要其他机器连接，必须配置防火墙，其例子如下：<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 87.2%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; height: 476px; background-color: #eeeeee"><span style="color: #008080">&nbsp;1</span><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">[root@localhost&nbsp;</span><span style="color: #000000">~</span><span style="color: #000000">]#&nbsp;cat&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">etc</span><span style="color: #000000">/</span><span style="color: #000000">sysconfig</span><span style="color: #000000">/</span><span style="color: #000000">iptables;<br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />#&nbsp;Firewall&nbsp;configuration&nbsp;written&nbsp;by&nbsp;system</span><span style="color: #000000">-</span><span style="color: #000000">config</span><span style="color: #000000">-</span><span style="color: #000000">securitylevel<br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />#&nbsp;Manual&nbsp;customization&nbsp;of&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">&nbsp;file&nbsp;is&nbsp;not&nbsp;recommended.<br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">*</span><span style="color: #000000">filter<br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />:INPUT&nbsp;ACCEPT&nbsp;[</span><span style="color: #000000">0</span><span style="color: #000000">:</span><span style="color: #000000">0</span><span style="color: #000000">]<br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />:FORWARD&nbsp;ACCEPT&nbsp;[</span><span style="color: #000000">0</span><span style="color: #000000">:</span><span style="color: #000000">0</span><span style="color: #000000">]<br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />:OUTPUT&nbsp;ACCEPT&nbsp;[</span><span style="color: #000000">0</span><span style="color: #000000">:</span><span style="color: #000000">0</span><span style="color: #000000">]<br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />:RH</span><span style="color: #000000">-</span><span style="color: #000000">Firewall</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">-</span><span style="color: #000000">INPUT&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;[</span><span style="color: #000000">0</span><span style="color: #000000">:</span><span style="color: #000000">0</span><span style="color: #000000">]<br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">-</span><span style="color: #000000">A&nbsp;INPUT&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">j&nbsp;RH</span><span style="color: #000000">-</span><span style="color: #000000">Firewall</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">-</span><span style="color: #000000">INPUT<br />
</span><span style="color: #008080">10</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">-</span><span style="color: #000000">A&nbsp;FORWARD&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">j&nbsp;RH</span><span style="color: #000000">-</span><span style="color: #000000">Firewall</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">-</span><span style="color: #000000">INPUT<br />
</span><span style="color: #008080">11</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">-</span><span style="color: #000000">A&nbsp;RH</span><span style="color: #000000">-</span><span style="color: #000000">Firewall</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">-</span><span style="color: #000000">INPUT&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">i&nbsp;lo&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">j&nbsp;ACCEPT<br />
</span><span style="color: #008080">12</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">-</span><span style="color: #000000">A&nbsp;RH</span><span style="color: #000000">-</span><span style="color: #000000">Firewall</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">-</span><span style="color: #000000">INPUT&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">i&nbsp;eth0&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">j&nbsp;ACCEPT<br />
</span><span style="color: #008080">13</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">-</span><span style="color: #000000">A&nbsp;RH</span><span style="color: #000000">-</span><span style="color: #000000">Firewall</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">-</span><span style="color: #000000">INPUT&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">p&nbsp;icmp&nbsp;</span><span style="color: #000000">--</span><span style="color: #000000">icmp</span><span style="color: #000000">-</span><span style="color: #000000">type&nbsp;any&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">j&nbsp;ACCEPT<br />
</span><span style="color: #008080">14</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">-</span><span style="color: #000000">A&nbsp;RH</span><span style="color: #000000">-</span><span style="color: #000000">Firewall</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">-</span><span style="color: #000000">INPUT&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">p&nbsp;</span><span style="color: #000000">50</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">j&nbsp;ACCEPT<br />
</span><span style="color: #008080">15</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">-</span><span style="color: #000000">A&nbsp;RH</span><span style="color: #000000">-</span><span style="color: #000000">Firewall</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">-</span><span style="color: #000000">INPUT&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">p&nbsp;</span><span style="color: #000000">51</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">j&nbsp;ACCEPT<br />
</span><span style="color: #008080">16</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">-</span><span style="color: #000000">A&nbsp;RH</span><span style="color: #000000">-</span><span style="color: #000000">Firewall</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">-</span><span style="color: #000000">INPUT&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">p&nbsp;udp&nbsp;</span><span style="color: #000000">--</span><span style="color: #000000">dport&nbsp;</span><span style="color: #000000">5353</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">d&nbsp;</span><span style="color: #000000">224.0</span><span style="color: #000000">.</span><span style="color: #000000">0.251</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">j&nbsp;ACCEPT<br />
</span><span style="color: #008080">17</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">-</span><span style="color: #000000">A&nbsp;RH</span><span style="color: #000000">-</span><span style="color: #000000">Firewall</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">-</span><span style="color: #000000">INPUT&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">p&nbsp;udp&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">m&nbsp;udp&nbsp;</span><span style="color: #000000">--</span><span style="color: #000000">dport&nbsp;</span><span style="color: #000000">631</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">j&nbsp;ACCEPT<br />
</span><span style="color: #008080">18</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">-</span><span style="color: #000000">A&nbsp;RH</span><span style="color: #000000">-</span><span style="color: #000000">Firewall</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">-</span><span style="color: #000000">INPUT&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">m&nbsp;state&nbsp;</span><span style="color: #000000">--</span><span style="color: #000000">state&nbsp;ESTABLISHED,RELATED&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">j&nbsp;ACCEPT<br />
</span><span style="color: #008080">19</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">-</span><span style="color: #000000">A&nbsp;RH</span><span style="color: #000000">-</span><span style="color: #000000">Firewall</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">-</span><span style="color: #000000">INPUT&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">m&nbsp;state&nbsp;</span><span style="color: #000000">--</span><span style="color: #000000">state&nbsp;NEW&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">m&nbsp;tcp&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">p&nbsp;tcp&nbsp;</span><span style="color: #000000">--</span><span style="color: #000000">dport&nbsp;</span><span style="color: #000000">80</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">j&nbsp;ACCEPT<br />
</span><span style="color: #008080">20</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">-</span><span style="color: #000000">A&nbsp;RH</span><span style="color: #000000">-</span><span style="color: #000000">Firewall</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">-</span><span style="color: #000000">INPUT&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">m&nbsp;state&nbsp;</span><span style="color: #000000">--</span><span style="color: #000000">state&nbsp;NEW&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">m&nbsp;tcp&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">p&nbsp;tcp&nbsp;</span><span style="color: #000000">--</span><span style="color: #000000">dport&nbsp;</span><span style="color: #000000">443</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">j&nbsp;ACCEPT<br />
</span><span style="color: #008080">21</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">-</span><span style="color: #000000">A&nbsp;RH</span><span style="color: #000000">-</span><span style="color: #000000">Firewall</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">-</span><span style="color: #000000">INPUT&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">m&nbsp;state&nbsp;</span><span style="color: #000000">--</span><span style="color: #000000">state&nbsp;NEW&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">m&nbsp;tcp&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">p&nbsp;tcp&nbsp;</span><span style="color: #000000">--</span><span style="color: #000000">dport&nbsp;</span><span style="color: #000000">21</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">j&nbsp;ACCEPT<br />
</span><span style="color: #008080">22</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">-</span><span style="color: #000000">A&nbsp;RH</span><span style="color: #000000">-</span><span style="color: #000000">Firewall</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">-</span><span style="color: #000000">INPUT&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">m&nbsp;state&nbsp;</span><span style="color: #000000">--</span><span style="color: #000000">state&nbsp;NEW&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">m&nbsp;tcp&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">p&nbsp;tcp&nbsp;</span><span style="color: #000000">--</span><span style="color: #000000">dport&nbsp;</span><span style="color: #000000">22</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">j&nbsp;ACCEPT<br />
</span><span style="color: #008080">23</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">-</span><span style="color: #000000">A&nbsp;RH</span><span style="color: #000000">-</span><span style="color: #000000">Firewall</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">-</span><span style="color: #000000">INPUT&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">m&nbsp;state&nbsp;</span><span style="color: #000000">--</span><span style="color: #000000">state&nbsp;NEW&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">m&nbsp;tcp&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">p&nbsp;tcp&nbsp;</span><span style="color: #000000">--</span><span style="color: #000000">dport&nbsp;</span><span style="color: #000000">25</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">j&nbsp;ACCEPT<br />
</span><span style="color: #008080">24</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">-</span><span style="color: #000000">A&nbsp;RH</span><span style="color: #000000">-</span><span style="color: #000000">Firewall</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">-</span><span style="color: #000000">INPUT&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">m&nbsp;state&nbsp;</span><span style="color: #000000">--</span><span style="color: #000000">state&nbsp;NEW&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">m&nbsp;tcp&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">p&nbsp;tcp&nbsp;</span><span style="color: #000000">--</span><span style="color: #000000">dport&nbsp;</span><span style="color: #000000">6888</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">j&nbsp;ACCEPT<br />
</span><span style="color: #008080">25</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">-</span><span style="color: #000000">A&nbsp;RH</span><span style="color: #000000">-</span><span style="color: #000000">Firewall</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">-</span><span style="color: #000000">INPUT&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">m&nbsp;state&nbsp;</span><span style="color: #000000">--</span><span style="color: #000000">state&nbsp;NEW&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">m&nbsp;tcp&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">p&nbsp;tcp&nbsp;</span><span style="color: #000000">--</span><span style="color: #000000">dport&nbsp;</span><span style="color: #000000">3306</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">j&nbsp;ACCEPT<br />
</span><span style="color: #008080">26</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">-</span><span style="color: #000000">A&nbsp;RH</span><span style="color: #000000">-</span><span style="color: #000000">Firewall</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">-</span><span style="color: #000000">INPUT&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">m&nbsp;state&nbsp;</span><span style="color: #000000">--</span><span style="color: #000000">state&nbsp;NEW&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">m&nbsp;tcp&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">p&nbsp;tcp&nbsp;</span><span style="color: #000000">--</span><span style="color: #000000">dport&nbsp;</span><span style="color: #000000">8161</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">j&nbsp;ACCEPT<br />
</span><span style="color: #008080">27</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">-</span><span style="color: #000000">A&nbsp;RH</span><span style="color: #000000">-</span><span style="color: #000000">Firewall</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">-</span><span style="color: #000000">INPUT&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">m&nbsp;state&nbsp;</span><span style="color: #000000">--</span><span style="color: #000000">state&nbsp;NEW&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">m&nbsp;tcp&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">p&nbsp;tcp&nbsp;</span><span style="color: #000000">--</span><span style="color: #000000">dport&nbsp;</span><span style="color: #000000">61616</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">j&nbsp;ACCEPT<br />
</span><span style="color: #008080">28</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">-</span><span style="color: #000000">A&nbsp;RH</span><span style="color: #000000">-</span><span style="color: #000000">Firewall</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">-</span><span style="color: #000000">INPUT&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">j&nbsp;REJECT&nbsp;</span><span style="color: #000000">--</span><span style="color: #000000">reject</span><span style="color: #000000">-</span><span style="color: #000000">with&nbsp;icmp</span><span style="color: #000000">-</span><span style="color: #000000">host</span><span style="color: #000000">-</span><span style="color: #000000">prohibited<br />
</span><span style="color: #008080">29</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />COMMIT</span></div>
<br />
配置好防火墙后并不能直接使用，必须重启防火墙才能生效。<br />
&nbsp;
<p style="line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">打开防火墙和关闭防火墙的指令：</span></p>
<p style="line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1</span><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">）即时生效，重启服务器后失效</span></p>
<p style="margin-left: 21pt; text-indent: 21pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">开启： service iptables start</span></p>
<p style="margin-left: 21pt; text-indent: 21pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">关闭： service iptables stop</span></p>
<p style="margin-left: 21pt; text-indent: 21pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">2</span><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">）重启服务器后生效</span></p>
<p style="margin-left: 21pt; text-indent: 21pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">开启： chkconfig iptables on</span></p>
<p style="margin-left: 21pt; text-indent: 21pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">关闭： chkconfig iptables off</span></p>
<img src ="http://www.blogjava.net/hyint/aggbug/259578.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hyint/" target="_blank">苦瓜</a> 2009-03-13 17:11 <a href="http://www.blogjava.net/hyint/articles/259578.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>中标数据库服务器 Linux 配置 JDK1.6_11</title><link>http://www.blogjava.net/hyint/articles/259499.html</link><dc:creator>苦瓜</dc:creator><author>苦瓜</author><pubDate>Fri, 13 Mar 2009 03:54:00 GMT</pubDate><guid>http://www.blogjava.net/hyint/articles/259499.html</guid><wfw:comment>http://www.blogjava.net/hyint/comments/259499.html</wfw:comment><comments>http://www.blogjava.net/hyint/articles/259499.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hyint/comments/commentRss/259499.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hyint/services/trackbacks/259499.html</trackback:ping><description><![CDATA[<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">&nbsp;1</span><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//今天在中标&nbsp;Linux&nbsp;&nbsp;配置&nbsp;jdk</span><span style="color: #000000">-</span><span style="color: #000000">6u11</span><span style="color: #000000">-</span><span style="color: #000000">linux</span><span style="color: #000000">-</span><span style="color: #000000">i586.bin。<br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//由于我是在VM上装的中标，所以采用了Linux&nbsp;and&nbsp;Windows&nbsp;共享文件夹(Linux&nbsp;Share&nbsp;Document&nbsp;&nbsp;自己命名的文件夹)。&nbsp;<br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//首先：&nbsp;<br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;cd&nbsp;&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">mnt</span><span style="color: #000000">/</span><span style="color: #000000">hgfs</span><span style="color: #000000">/</span><span style="color: #000000">Linux&nbsp;Share&nbsp;Document</span><span style="color: #000000">/</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;cp&nbsp;&nbsp;jdk</span><span style="color: #000000">-</span><span style="color: #000000">6u11</span><span style="color: #000000">-</span><span style="color: #000000">linux</span><span style="color: #000000">-</span><span style="color: #000000">i586.bin&nbsp;&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">usr</span><span style="color: #000000">/</span><span style="color: #000000">java<br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;.</span><span style="color: #000000">/</span><span style="color: #000000">jdk</span><span style="color: #000000">-</span><span style="color: #000000">6u11</span><span style="color: #000000">-</span><span style="color: #000000">linux</span><span style="color: #000000">-</span><span style="color: #000000">i586.bin<br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;<img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><img src="http://www.blogjava.net/Images/dot.gif"  alt="" />中间大部分步骤省略&nbsp;&nbsp;more&nbsp;<img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><img src="http://www.blogjava.net/Images/dot.gif"  alt="" />.<br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;Do&nbsp;you&nbsp;agree&nbsp;to&nbsp;the&nbsp;above&nbsp;license&nbsp;terms</span><span style="color: #000000">?</span><span style="color: #000000">&nbsp;[yes&nbsp;or&nbsp;no]&nbsp;yes<br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;Unpacking<img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><img src="http://www.blogjava.net/Images/dot.gif"  alt="" />..<br />
</span><span style="color: #008080">10</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;解压部分省略<img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><img src="http://www.blogjava.net/Images/dot.gif"  alt="" />.<br />
</span><span style="color: #008080">11</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;Press&nbsp;Enter&nbsp;to&nbsp;</span><span style="color: #0000ff">continue</span><span style="color: #000000"><br />
</span><span style="color: #008080">12</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;安装完成.<br />
</span><span style="color: #008080">13</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">14</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">15</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//配置JDK环境：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;vi&nbsp;&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">etc</span><span style="color: #000000">/</span><span style="color: #000000">profile<br />
</span><span style="color: #008080">16</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;<br />
</span><span style="color: #008080">17</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;export&nbsp;&nbsp;JAVA_HOME&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">usr</span><span style="color: #000000">/</span><span style="color: #000000">java</span><span style="color: #000000">/</span><span style="color: #000000">jdk1.</span><span style="color: #000000">6</span><span style="color: #000000">.0_11<br />
</span><span style="color: #008080">18</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;export&nbsp;&nbsp;PATH&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;$PATH:$JAVA_HOME</span><span style="color: #000000">/</span><span style="color: #000000">bin<br />
</span><span style="color: #008080">19</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;export&nbsp;&nbsp;CLASSPATH&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;.:$CLASSPATH:$JAVA_HOME</span><span style="color: #000000">/</span><span style="color: #000000">lib</span><span style="color: #000000">/</span><span style="color: #000000">dt.jar:$JAVA_HOME</span><span style="color: #000000">/</span><span style="color: #000000">lib</span><span style="color: #000000">/</span><span style="color: #000000">tools.jar<br />
</span><span style="color: #008080">20</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;export&nbsp;&nbsp;JRE_HOME&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;$JAVA_HOME</span><span style="color: #000000">/</span><span style="color: #000000">jre<br />
</span><span style="color: #008080">21</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;export&nbsp;&nbsp;&nbsp;JAVA_HOME&nbsp;&nbsp;&nbsp;PATH&nbsp;&nbsp;&nbsp;CLASSPATH&nbsp;&nbsp;&nbsp;JRE_HOME&nbsp;<br />
</span><span style="color: #008080">22</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;esc&nbsp;&nbsp;&nbsp;:wq&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;保存退出<br />
</span><span style="color: #008080">23</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">24</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;vi&nbsp;&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">etc</span><span style="color: #000000">/</span><span style="color: #000000">profile.d</span><span style="color: #000000">/</span><span style="color: #000000">java.sh&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">创建一个&nbsp;shell&nbsp;&nbsp;来启动</span><span style="color: #008000"><br />
</span><span style="color: #008080">25</span><span style="color: #008000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #008080">26</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;export&nbsp;&nbsp;JAVA_HOME&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">usr</span><span style="color: #000000">/</span><span style="color: #000000">java</span><span style="color: #000000">/</span><span style="color: #000000">jdk1.</span><span style="color: #000000">6</span><span style="color: #000000">.0_11<br />
</span><span style="color: #008080">27</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;export&nbsp;&nbsp;PATH&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;$PATH:$JAVA_HOME</span><span style="color: #000000">/</span><span style="color: #000000">bin<br />
</span><span style="color: #008080">28</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;export&nbsp;&nbsp;CLASSPATH&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;.:$CLASSPATH:$JAVA_HOME</span><span style="color: #000000">/</span><span style="color: #000000">lib</span><span style="color: #000000">/</span><span style="color: #000000">dt.jar:$JAVA_HOME</span><span style="color: #000000">/</span><span style="color: #000000">lib</span><span style="color: #000000">/</span><span style="color: #000000">tools.jar<br />
</span><span style="color: #008080">29</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;export&nbsp;&nbsp;JRE_HOME&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;$JAVA_HOME</span><span style="color: #000000">/</span><span style="color: #000000">jre<br />
</span><span style="color: #008080">30</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;export&nbsp;&nbsp;&nbsp;JAVA_HOME&nbsp;&nbsp;&nbsp;PATH&nbsp;&nbsp;&nbsp;CLASSPATH&nbsp;&nbsp;&nbsp;JRE_HOME&nbsp;<br />
</span><span style="color: #008080">31</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;esc&nbsp;&nbsp;&nbsp;:wq&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;保存退出<br />
</span><span style="color: #008080">32</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">33</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">34</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;cd&nbsp;&nbsp;$JAVA_HOME</span><span style="color: #000000">/</span><span style="color: #000000">lib<br />
</span><span style="color: #008080">35</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;chmod&nbsp;&nbsp;</span><span style="color: #000000">755</span><span style="color: #000000">&nbsp;dt.jar<br />
</span><span style="color: #008080">36</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;chmod&nbsp;&nbsp;</span><span style="color: #000000">755</span><span style="color: #000000">&nbsp;tools.jar<br />
</span><span style="color: #008080">37</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;chmod&nbsp;&nbsp;</span><span style="color: #000000">755</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">etc</span><span style="color: #000000">/</span><span style="color: #000000">profile<br />
</span><span style="color: #008080">38</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;chmod&nbsp;&nbsp;</span><span style="color: #000000">755</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">etc</span><span style="color: #000000">/</span><span style="color: #000000">profile.d</span><span style="color: #000000">/</span><span style="color: #000000">java.sh<br />
</span><span style="color: #008080">39</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;source&nbsp;&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">etc</span><span style="color: #000000">/</span><span style="color: #000000">profile<br />
</span><span style="color: #008080">40</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;source&nbsp;&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">etc</span><span style="color: #000000">/</span><span style="color: #000000">profile.d</span><span style="color: #000000">/</span><span style="color: #000000">java.sh<br />
</span><span style="color: #008080">41</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//然后在控制台查看配置JDK的路径<br />
</span><span style="color: #008080">42</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;echo&nbsp;$JAVA_HOME<br />
</span><span style="color: #008080">43</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">usr</span><span style="color: #000000">/</span><span style="color: #000000">java</span><span style="color: #000000">/</span><span style="color: #000000">jdk1.</span><span style="color: #000000">6</span><span style="color: #000000">.0_11<br />
</span><span style="color: #008080">44</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;echo&nbsp;$CLASSPATH<br />
</span><span style="color: #008080">45</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.;</span><span style="color: #000000">/</span><span style="color: #000000">usr</span><span style="color: #000000">/</span><span style="color: #000000">java</span><span style="color: #000000">/</span><span style="color: #000000">jdk1.</span><span style="color: #000000">6</span><span style="color: #000000">.0_11</span><span style="color: #000000">/</span><span style="color: #000000">lib</span><span style="color: #000000">/</span><span style="color: #000000">dt.jar&nbsp;:&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">usr</span><span style="color: #000000">/</span><span style="color: #000000">java</span><span style="color: #000000">/</span><span style="color: #000000">jdk1.</span><span style="color: #000000">6</span><span style="color: #000000">.0_11</span><span style="color: #000000">/</span><span style="color: #000000">lib</span><span style="color: #000000">/</span><span style="color: #000000">tools.jar<br />
</span><span style="color: #008080">46</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">47</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;然后在控制台输入<br />
</span><span style="color: #008080">48</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">java&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">version<br />
</span><span style="color: #008080">49</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;java&nbsp;version&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">1.6.0_11</span><span style="color: #000000">"</span><span style="color: #000000"><br />
</span><span style="color: #008080">50</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Java&nbsp;(TM)&nbsp;SE&nbsp;Runtime&nbsp;Enviroment(build&nbsp;&nbsp;</span><span style="color: #000000">1.6</span><span style="color: #000000">.0_11</span><span style="color: #000000">-</span><span style="color: #000000">b03);<img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><img src="http://www.blogjava.net/Images/dot.gif"  alt="" />.<br />
</span><span style="color: #008080">51</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">javac&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">version<br />
</span><span style="color: #008080">52</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;javac&nbsp;&nbsp;</span><span style="color: #000000">1.6</span><span style="color: #000000">.0_11<br />
</span><span style="color: #008080">53</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">54</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//这样，JDK就完全配置成功了。&nbsp;</span></div>
<img src ="http://www.blogjava.net/hyint/aggbug/259499.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hyint/" target="_blank">苦瓜</a> 2009-03-13 11:54 <a href="http://www.blogjava.net/hyint/articles/259499.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java 争论之指针</title><link>http://www.blogjava.net/hyint/articles/258705.html</link><dc:creator>苦瓜</dc:creator><author>苦瓜</author><pubDate>Tue, 10 Mar 2009 00:55:00 GMT</pubDate><guid>http://www.blogjava.net/hyint/articles/258705.html</guid><wfw:comment>http://www.blogjava.net/hyint/comments/258705.html</wfw:comment><comments>http://www.blogjava.net/hyint/articles/258705.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hyint/comments/commentRss/258705.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hyint/services/trackbacks/258705.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在经历了 JNI 和 JNA 的应用和摸索之后，看待 java 的方式也开始改变了，也许有许多是好的一面，但是大部分的懊恼与抱怨，还是让我感觉 JVM 的机制让人偶尔烦闷。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 首先我们从几个问题来说说 java .&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1)、Java 有指针吗？<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 指针概述：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a)&nbsp;&nbsp; 指针其实指针就像是其它变量一样，所不同的是一般的变量包含的是实际的真实的数据，而指针是一个指示器，它告<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 诉程序在内存的哪块区域可以找到数据。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b)&nbsp;&nbsp; 指针是一个数据类型，是一个无符号整数（unsigned int），它是一个以当前系统寻址范围为取值范围的整数。32位系<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 统下寻址能力（地址空间）是4G-byte（0~2^32-1)二进制表示长度为32bit，也就是4GB。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;从上面的例子，我们可以知道，Java 似乎也存在这样的东西。没错，确切地说，Java 是有指针的。JNIEnv *env ，这个就是一个经典的指针，在 Java 本身的特性是 Java 中除了基本数据类型意外，每个对象的识别名称 ( 即：Java对象的 Reference )都是指针，但是它们的作用是受限制的，不紧受编译器的保护，也受执行期系统的保护 (执行期系统： Runtime&nbsp; System )，但是 Java 中却没有指针运算。&nbsp;<br />
Reference 可以被认为是 安全的指针。在 Java 开发时，当你传递某个对象时，其实你应该接收一个事实：你传递的其实是一个Reference.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
<img src ="http://www.blogjava.net/hyint/aggbug/258705.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hyint/" target="_blank">苦瓜</a> 2009-03-10 08:55 <a href="http://www.blogjava.net/hyint/articles/258705.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JNI  ------ 入门 &lt;二&gt;</title><link>http://www.blogjava.net/hyint/articles/258623.html</link><dc:creator>苦瓜</dc:creator><author>苦瓜</author><pubDate>Mon, 09 Mar 2009 08:59:00 GMT</pubDate><guid>http://www.blogjava.net/hyint/articles/258623.html</guid><wfw:comment>http://www.blogjava.net/hyint/comments/258623.html</wfw:comment><comments>http://www.blogjava.net/hyint/articles/258623.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hyint/comments/commentRss/258623.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hyint/services/trackbacks/258623.html</trackback:ping><description><![CDATA[从Java 1.1开始，Java Native Interface <br />
&nbsp;&nbsp;&nbsp; (JNI)标准成为java平台的一部分，它允许Java代码和其他语言写的代码进行交互。JNI一开始是为了本地已编译语言，尤其是C和C++而设计的，<br />
但是它并不妨碍你使用其他语言，只要调用约定受支持就可以了。让我们看一些使用JNI的简单例子吧。<br />
<br />
使用java与本地已编译的代码交互，通常会丧失平台可移植性。但是，有些情况下这样做是可以接受的，甚至是必须的，比如，使用一些旧的库，<br />
与硬件、操作系统进行交互，或者为了提高程序的性能。JNI标准至少保证本地代码能工作在任何Java 虚拟机实现下。 <br />
<br />
开始：<br />
如果你习惯了使用JNI，你就不会觉得它难了。既然本地方法是由其他语言实现的，它们在Java中没有函数体。但是，所有本地代码必须用本地关<br />
键词声明，成为Java类的成员。清单A演示了一个简单的类，它申明了一个本地的（native），静态的（static）方法：sum。<br />
<br />
写完了你的Java类，接下来就要写本地代码。本地方法符号提供一个满足约定的头文件，使用Java工具可以很容易地创建它而不用手动去创建。<br />
你对Java的class文件使用javah命令，就会为你生成一个对应的C/C++头文件。清单B就是为清单A的Test1类创建的头文件。注意：它创建了一个<br />
C/C++函数：Java_Test1_sum。 <br />
<br />
执行本地方法：<br />
<br />
一旦你有了这个头文件，你就需要写头文件对应的本地方法，就像我在清单C做的那样。<br />
<br />
注意：所有的本地方法的第一个参数都是指向JNIEnv结构的。这个结构是用来调用JNI函数的，（我会在另一个章节中讨论）。第二个参数jclass的意义，<br />
要看方法是不是静态的（static）或者实例（Instance）的。前者，jclass代表一个类对象的引用，而后者是被调用的方法所属对象的引用。最后的两个<br />
jint参数表示了Java方法的 int参数。<br />
<br />
返回值和参数类型根据等价约定映射到本地C/C++类型，如表A所示。有些类型，如清单B里面的两个jint参数，在本地代码中可直接使用，而其他类型<br />
只有通过JNI调用操作。<br />
<br />
表A 　　<br />
&nbsp;&nbsp;&nbsp; Java类型&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 本地类型&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; 描述<br />
&nbsp;+---------------+--------------------+--------------------------+&nbsp;&nbsp;&nbsp; 　　<br />
&nbsp;|<u>&nbsp; boolean&nbsp;&nbsp; &nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; jboolean&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; C/C++8位整型 　　&nbsp;&nbsp; &nbsp; </u>|<br />
&nbsp;|<u>&nbsp; byte&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; jbyte&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp; |&nbsp;&nbsp;&nbsp; C/C++带符号的8位整型&nbsp; </u>|<br />
&nbsp;|<u>&nbsp; char&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; jchar&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp; |&nbsp;&nbsp;&nbsp; C/C++无符号的16位整型 </u>|　<br />
&nbsp;|<u>&nbsp; short&nbsp;&nbsp; &nbsp; &nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; jshort&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; C/C++带符号的16位整型 </u>|　<br />
&nbsp;|<u>&nbsp; int&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; |&nbsp;&nbsp;&nbsp; jint&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; C/C++带符号的32位整型 </u>|　<br />
&nbsp;|<u>&nbsp; long&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; jlong&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp; |&nbsp;&nbsp;&nbsp; C/C++带符号的64位整型 </u>|　<br />
&nbsp;|<u>&nbsp; float&nbsp; &nbsp; &nbsp; &nbsp; |&nbsp;&nbsp;&nbsp; jfloat&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; C/C++32位浮点型 　　&nbsp; </u>|<br />
&nbsp;|<u>&nbsp; double&nbsp; &nbsp; &nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; jdouble&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; C/C++64位浮点型 　 &nbsp;&nbsp; </u>|<br />
&nbsp;|&nbsp; Object&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; jobject 有对应&nbsp; |&nbsp;&nbsp;&nbsp; 任何Java对象，或者没&nbsp; |<br />
&nbsp;|<u>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; | &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |&nbsp;&nbsp;&nbsp; 有</u><u>java 类型的对象</u><u> &nbsp; &nbsp; </u>|&nbsp; <br />
&nbsp;|<u>　Class&nbsp; &nbsp; &nbsp; &nbsp; |&nbsp;&nbsp;&nbsp; jclass&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; Class对象 　　&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; </u>|<br />
&nbsp;|&nbsp; String&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; jstring&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; 字符串对象 　　&nbsp; &nbsp; &nbsp;&nbsp; |<br />
&nbsp;+---------------+--------------------+--------------------------+<br />
&nbsp;| Object[]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; jobjectArray &nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; 任何对象的数组 　&nbsp;&nbsp; &nbsp; |<br />
&nbsp;| boolean[]&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; jbooleanArray&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; 布尔型数组 　　&nbsp; &nbsp; &nbsp;&nbsp; |<br />
&nbsp;| byte[]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; jbyteArray&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; 比特型数组 　　&nbsp; &nbsp; &nbsp;&nbsp; |<br />
&nbsp;| char[]&nbsp;&nbsp; &nbsp; &nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; jcharArray&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; 字符型数组 　　&nbsp; &nbsp; &nbsp;&nbsp; |<br />
&nbsp;| short[]&nbsp;&nbsp; &nbsp; &nbsp; |&nbsp;&nbsp;&nbsp; jshortArray&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; 短整型数组 　　&nbsp; &nbsp; &nbsp;&nbsp; |<br />
&nbsp;| int[]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; jintArray&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; 整型数组 　　&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp; |<br />
&nbsp;| long[]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; jlongArray&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; 长整型数组&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |<br />
&nbsp;| float[]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; jfloatArray&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; 浮点型数组 　　&nbsp;&nbsp; &nbsp; &nbsp; |<br />
&nbsp;| double[]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; jdoubleArray&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; 双浮点型数组&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; |<br />
&nbsp;+---------------+--------------------+--------------------------+<br />
<br />
※ JNI类型映射<br />
最后一步是把本地代码编译成共享库（比如，UNIX的so文件，Windows的dll文件）。在Java中调用方法前，共享库须通过System.loadLibrary导入。<br />
最常用的方式是在类的静态（static）初始化器里做这这个工作。<br />
<br />
在本地代码中访问JNI我举的例子很简单，并不能满足演示怎样写JNI方法的目标。现在，让我们看一些高级的，通过JNIEnv结构使用非简单类型的例子。<br />
<br />
JNI通过函数的形式提供了很多功能，供本地代码通过指向JNIEnv结构的指针调用；它作为第一个参数传递给每个本地方法。JNI函数的调用有下面<br />
几种格式（这里，假设env是指向JNIEnv的指针）：<br />
<br />
//C 格式<br />
<br />
(*env)-＞＜jni function＞( env, ＜parameters＞ )<br />
<br />
//C++ 格式<br />
<br />
env-＞＜jni function＞( ＜ parameters＞ )<br />
<br />
这篇文章中接下来的例子我将会用C++格式。<br />
<br />
使用数组：<br />
JNI通过JNIEnv提供的操作Java数组的功能。它提供了两个函数：一个是操作java的简单<br />
型数组的，另一个是操作对象类型数组的。<br />
因为速度的原因，简单类型的数组作为指向本地类型的指针暴露给本地代码。因此，它<br />
们能作为常规的数组存取。这个指针是指向实际的Java数组或者Java数组的拷贝的指针。另<br />
外，数组的布置保证匹配本地类型。<br />
为了存取Java简单类型的数组，你就要要使用GetXXXArrayElements函数（见表B），XX<br />
X代表了数组的类型。这个函数把Java数组看成参数，返回一个指向对应的本地类型的数组的<br />
指针。<br />
<br />
<br />
表B 　<br />
<br />
&nbsp; 函数&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Java数组类型&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 本地类型 <br />
+--------------------------+---------------------+-----------------+&nbsp; 　　<br />
|<u> GetBooleanArrayElements&nbsp; |&nbsp;&nbsp;&nbsp; jbooleanArray&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; jboolean 　　</u>|<br />
|<u> GetByteArrayElements&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; jbyteArray&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; jbyte 　　&nbsp;&nbsp; </u>|&nbsp;&nbsp;&nbsp; <br />
|<u> GetCharArrayElements&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; jcharArray&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; jchar 　　&nbsp;&nbsp; </u>|<br />
|<u> GetShortArrayElements&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; jshortArray&nbsp;&nbsp;&nbsp; &nbsp; |&nbsp;&nbsp;&nbsp; jshort&nbsp; &nbsp; &nbsp;&nbsp; </u>|<br />
|<u> GetIntArrayElements&nbsp;&nbsp;&nbsp; &nbsp; |&nbsp;&nbsp;&nbsp; jintArray&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; jint 　　&nbsp;&nbsp;&nbsp; </u>|<br />
|<u> GetLongArrayElements&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; jlongArray&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; jlong&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </u>|<br />
|<u> GetFloatArrayElements&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; jfloatArray&nbsp;&nbsp;&nbsp; &nbsp; |&nbsp;&nbsp;&nbsp; jfloat 　　&nbsp; </u>|<br />
|<u> GetDoubleArrayElements&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; jdoubleArray&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; jdouble&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </u>|<br />
<br />
JNI数组存取函数<br />
当你对数组的存取完成后，要确保调用相应的ReleaseXXXArrayElements函数，参数是对应Java数组和 GetXXXArrayElements返回的指针。<br />
如果必要的话，这个释放函数会复制你做的任何变化（这样它们就反射到java数组），然后释放所有相关的资源。<br />
<br />
为了使用java对象的数组，你必须使用GetObjectArrayElement函数和SetObjectArrayElement函数，分别去get，set数组的元素。<br />
GetArrayLength函数会返回数组的长度。<br />
<br />
&nbsp;&nbsp;&nbsp; 清单D包含了一个简单的类，它演示了本地代码如何使用Java数组。这个本地实现循环遍历一个整型（int）数组，返回这些元素的总和。<br />
为简单起见，这个清单包含了java代码和本地实现。我已经省略了头文件，它可以很方便地通过javah得到。<br />
<br />
<br />
在本地代码中访问JNI 　　使用对象<br />
<br />
&nbsp;&nbsp;&nbsp; JNI 提供的另外一个功能是在本地代码中使用Java对象。通过使用合适的JNI函数，你可以创建Java对象，get、set 静态(static)和<br />
实例（instance）的域，调用静态(static)和实例（instance）函数。JNI通过ID识别域和方法，一个域或方法的ID是任何处理域和方法的函数的必须参数。<br />
<br />
表C列出了用以得到静态(static)和实例（instance）的域与方法的JNI函数。每个函数接受（作为参数）域或方法的类，它们的名称，符号和<br />
它们对应返回的jfieldID或jmethodID。<br />
<br />
表C 　<br />
<br />
&nbsp; 函数&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 描述 <br />
+--------------------+---------------------------+　　<br />
|<u>&nbsp; GetFieldID&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; 得到一个实例的域的ID 　</u>|　<br />
|<u>&nbsp; GetStaticFieldID&nbsp; |&nbsp;&nbsp;&nbsp; 得到一个静态的域的ID 　</u>|　<br />
|<u>&nbsp; GetMethodID&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; 得到一个实例的方法的ID </u>|<br />
|<u>　GetStaticMethodID |&nbsp;&nbsp;&nbsp; 得到一个静态方法的ID&nbsp;&nbsp; </u>|<br />
<br />
<br />
※域和方法的函数<br />
如果你有了一个类的实例，它就可以通过方法GetObjectClass得到，或者如果你没有这个类的实例，可以通过FindClass得到。符号是从域的类型或者<br />
方法的参数，返回值得到字符串，如表D所示。<br />
<br />
表D <br />
&nbsp;&nbsp; +------------+---------+<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |Java 类型&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; 符号 |<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +------------+---------+　　<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |boolean&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; Z 　 |　<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |byte&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; B 　 |　<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |char&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; C 　 |　<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |short&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; S&nbsp;&nbsp;&nbsp; |<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |int&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; I&nbsp;&nbsp;&nbsp; |　　<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |long&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; L&nbsp;&nbsp;&nbsp; |　　<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |float&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; F&nbsp;&nbsp;&nbsp; |　　<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |double&nbsp; &nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; D&nbsp;&nbsp;&nbsp; |　　<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |void&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; V&nbsp;&nbsp;&nbsp; |　　<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |objects对象 |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +------------+---------+<br />
<br />
&nbsp;&nbsp;&nbsp; Lfully-qualified-class-name;L类名 　　<br />
&nbsp;&nbsp;&nbsp; Arrays数组 [array-type [数组类型 methods方法 (argument-types)return-type(参数类型)返回类型<br />
<br />
<br />
※确定域和方法的符号<br />
<br />
一旦你有了类和方法或者域的ID，你就能把它保存下来以后使用，而没有必要重复去获取。<br />
<br />
有几个分别访问域和方法的函数。实例的域可以使用对应域的GetXXXField的变体函数访问。GetStaticXXXField函数用于静态类型。<br />
设置域的值，用SetXXXField 和SetStaticXXXField函数。表E包含了所有访问域的函数列表。<br />
<br />
表E 　　<br />
&nbsp; +-------------+---------------------------+ <br />
&nbsp; |&nbsp; Java类型&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; Method方法&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />
&nbsp; +-------------+---------------------------+　　<br />
&nbsp; |&nbsp;&nbsp; boolean&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; GetBooleanField &nbsp; &nbsp;&nbsp;&nbsp;&nbsp; |<br />
&nbsp; |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; GetStaticBooleanField&nbsp; |<br />
&nbsp; |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; SetBooleanField &nbsp; &nbsp;&nbsp;&nbsp;&nbsp; |<br />
&nbsp; |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; SetStaticBooleanField&nbsp; |<br />
&nbsp; +-------------+---------------------------+　<br />
&nbsp; |&nbsp;&nbsp; byte&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; GetByteField&nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />
&nbsp; |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; GetStaticByteField&nbsp; &nbsp;&nbsp; |<br />
&nbsp; |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; SetByteField&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />
&nbsp; |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; SetStaticByteField 　　|<br />
&nbsp; +-------------+---------------------------+<br />
&nbsp; |&nbsp;&nbsp; char&nbsp;&nbsp; &nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; GetCharField&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />
&nbsp; |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; GetStaticCharField&nbsp; &nbsp;&nbsp; |<br />
&nbsp; |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; SetCharField&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />
&nbsp; |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; SetStaticCharField 　　|<br />
&nbsp; +-------------+---------------------------+<br />
&nbsp; |&nbsp;&nbsp; short&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; GetShortField&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />
&nbsp; |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; GetStaticShortField&nbsp; &nbsp; |<br />
&nbsp; |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; SetShortField&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />
&nbsp; |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; |&nbsp;&nbsp;&nbsp; SetStaticShortField 　 |　<br />
&nbsp; +-------------+---------------------------+<br />
&nbsp; |&nbsp;&nbsp;&nbsp; int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; GetIntField,&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />
&nbsp; |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; GetStaticIntField,&nbsp;&nbsp;&nbsp;&nbsp; |<br />
&nbsp; |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; SetIntField,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />
&nbsp; |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; SetStaticIntField 　&nbsp;&nbsp; |<br />
&nbsp; +-------------+---------------------------+<br />
&nbsp; |&nbsp;&nbsp; long&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; GetLongField,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />
&nbsp; |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; GetStaticLongField,&nbsp;&nbsp;&nbsp; |<br />
&nbsp; |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; SetLongField,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />
&nbsp; |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; SetStaticLongField 　&nbsp; |<br />
&nbsp; +-------------+---------------------------+<br />
&nbsp; |&nbsp;&nbsp; float&nbsp;&nbsp; &nbsp; |&nbsp;&nbsp;&nbsp; GetFloatField,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />
&nbsp; |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; GetStaticFloatField,&nbsp;&nbsp; |<br />
&nbsp; |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; SetFloatField,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />
&nbsp; |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; SetStaticFloatField&nbsp;&nbsp;&nbsp; |<br />
&nbsp; +-------------+---------------------------+<br />
&nbsp; |　double&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; GetDoubleField,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />
&nbsp; |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; |&nbsp;&nbsp;&nbsp; GetStaticDoubleField,&nbsp; |<br />
&nbsp; |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; |&nbsp;&nbsp;&nbsp; SetDoubleField,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />
&nbsp; |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; |&nbsp;&nbsp;&nbsp; SetStaticDoubleField 　|　<br />
&nbsp; +-------------+---------------------------+<br />
&nbsp; |&nbsp; object&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; GetObjectField,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />
&nbsp; |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; GetStaticObjectField,&nbsp; |<br />
&nbsp; |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; SetObjectField,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />
&nbsp; |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; SetStaticObjectField&nbsp;&nbsp; |<br />
&nbsp; +-------------+---------------------------+<br />
<br />
※访问域的函数<br />
&nbsp;&nbsp;&nbsp; 另外，方法的访问是由 CallXXXMethod 函数和 CallStaticXXXMethod函数完成的，XXX表明了方法的返回值类型。这些函数的变体允<br />
许传递数组参数 (CallXXXMethodA and CallStaticXXXMethodA)或者传递一个可变大小的列表(CallXXXMethodV and CallStaticXXXMethodV)。<br />
<br />
<br />
一个完整的列表<br />
<br />
表F：一个完整的列表 　<br />
<br />
&nbsp;&nbsp;&nbsp; 返回类型&nbsp;&nbsp;&nbsp; 函数 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +-------------+---------------------------+　　&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; boolean&nbsp; |&nbsp; CallBooleanMethod&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; |&nbsp; CallBooleanMethodA&nbsp; &nbsp;&nbsp; &nbsp; |<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; |&nbsp; CallBooleanMethodV&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; |<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; |&nbsp; CallStaticBooleanMethod&nbsp; |<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; |&nbsp; CallStaticBooleanMethodA |<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; |&nbsp; CallStaticBooleanMethodV |<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +-------------+---------------------------+<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; byte&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp; CallByteMethod&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; |&nbsp; CallByteMethodA &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; |<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; |&nbsp; CallByteMethodV&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; |<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; |&nbsp; CallStaticByteMethod&nbsp; &nbsp;&nbsp; |<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; |&nbsp; CallStaticByteMethodA&nbsp; &nbsp; |<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; |&nbsp; CallStaticByteMethodV&nbsp;&nbsp;&nbsp; |<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +-------------+---------------------------+&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 　　<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; char&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp; CallCharMethod&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; |<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; |&nbsp; CallCharMethodA&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; |&nbsp; CallCharMethodV&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; |&nbsp; CallStaticCharMethod &nbsp; &nbsp; |<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; |&nbsp; CallStaticCharMethodA&nbsp;&nbsp;&nbsp; |<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; |&nbsp; CallStaticCharMethodV　&nbsp; |<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +-------------+---------------------------+&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 　<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; short&nbsp;&nbsp;&nbsp; |&nbsp; CallShortMethod &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; |<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; |&nbsp; CallShortMethodA&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; |&nbsp; CallShortMethodV&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; |&nbsp; CallStaticShortMethod&nbsp; &nbsp; |<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; |&nbsp; CallStaticShortMethodA &nbsp; |<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; |&nbsp; CallStaticShortMethodV &nbsp; |<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +-------------+---------------------------+&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 　<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp; CallIntMethod &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; |&nbsp; CallIntMethodA&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; |&nbsp; CallIntMethodV&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; |&nbsp; CallStaticIntMethod&nbsp; &nbsp;&nbsp;&nbsp; |<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; |&nbsp; CallStaticIntMethodA&nbsp; &nbsp;&nbsp; |<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; |&nbsp; CallStaticIntMethodV 　&nbsp; |<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +-------------+---------------------------+&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 　<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; long&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp; CallLongMethod&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; |&nbsp; CallLongMethodA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; |&nbsp; CallLongMethodV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; |&nbsp; CallStaticLongMethod&nbsp;&nbsp;&nbsp;&nbsp; |<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; |&nbsp; CallStaticLongMethodA&nbsp;&nbsp;&nbsp; |<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; |&nbsp; CallStaticLongMethodV　&nbsp; |<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +-------------+---------------------------+&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 　<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; float&nbsp;&nbsp;&nbsp; |&nbsp; CallFloatMethod &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; |<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; |&nbsp; CallFloatMethodA &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; |<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; |&nbsp; CallFloatMethodV &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; |<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; |&nbsp; CallStaticFloatMethod&nbsp; &nbsp; |<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; |&nbsp; CallStaticFloatMethodA&nbsp;&nbsp; |<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; |&nbsp; CallStaticFloatMethodV&nbsp;&nbsp; |<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +-------------+---------------------------+&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 　　<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; double&nbsp;&nbsp; |&nbsp; CallDoubleMethod &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; |<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; |&nbsp; CallDoubleMethodA &nbsp; &nbsp;&nbsp; &nbsp; |<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; |&nbsp; CallDoubleMethodV &nbsp; &nbsp;&nbsp; &nbsp; |<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; |&nbsp; CallStaticDoubleMethod&nbsp;&nbsp; |<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; |&nbsp; CallStaticDoubleMethodA&nbsp; |<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; |&nbsp; CallStaticDoubleMethodV　|<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +-------------+---------------------------+&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 　<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | void&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; |&nbsp; CallVoidMethod&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; |<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; |&nbsp; CallVoidMethodA &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; |<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; |&nbsp; CallVoidMethodV &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; |<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; |&nbsp; CallStaticVoidMethod&nbsp;&nbsp;&nbsp;&nbsp; |<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp; |&nbsp; CallStaticVoidMethodA&nbsp; &nbsp; |<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp; |&nbsp; CallStaticVoidMethodV&nbsp; &nbsp; |<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +-------------+---------------------------+&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 　　<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | object&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp; CallObjectMethod&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; |&nbsp; CallObjectMethodA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; |&nbsp; CallObjectMethodV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; |&nbsp; CallStaticObjectMethod&nbsp;&nbsp; |<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; |&nbsp; CallStaticObjectMethodA&nbsp; |<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; |&nbsp; CallStaticObjectMethodV&nbsp; |<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +-------------+---------------------------+<br />
<br />
当你关注java的扩展时，JNI是一个强大的工具，它不会严重降低可移植性。我这里只是接触它的表面，仅仅向你演示了JNI的能力和潜力。我鼓励你获取 　　<br />
<br />
<br />
<br />
<img src ="http://www.blogjava.net/hyint/aggbug/258623.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hyint/" target="_blank">苦瓜</a> 2009-03-09 16:59 <a href="http://www.blogjava.net/hyint/articles/258623.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JNI  ------ Java Native Interface (Java 本地接口)</title><link>http://www.blogjava.net/hyint/articles/258613.html</link><dc:creator>苦瓜</dc:creator><author>苦瓜</author><pubDate>Mon, 09 Mar 2009 08:18:00 GMT</pubDate><guid>http://www.blogjava.net/hyint/articles/258613.html</guid><wfw:comment>http://www.blogjava.net/hyint/comments/258613.html</wfw:comment><comments>http://www.blogjava.net/hyint/articles/258613.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hyint/comments/commentRss/258613.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hyint/services/trackbacks/258613.html</trackback:ping><description><![CDATA[<meta content="Word.Document" name="ProgId" />
<meta content="Microsoft Word 11" name="Generator" />
<meta content="Microsoft Word 11" name="Originator" />
<link href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml" rel="File-List" /><!--[if gte mso 9]><xml>
<w:WordDocument>
<w:View>Normal</w:View>
<w:Zoom>0</w:Zoom>
<w:PunctuationKerning/>
<w:DrawingGridVerticalSpacing>7.8 磅</w:DrawingGridVerticalSpacing>
<w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery>
<w:DisplayVerticalDrawingGridEvery>2</w:DisplayVerticalDrawingGridEvery>
<w:ValidateAgainstSchemas/>
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:Compatibility>
<w:SpaceForUL/>
<w:BalanceSingleByteDoubleByteWidth/>
<w:DoNotLeaveBackslashAlone/>
<w:ULTrailSpace/>
<w:DoNotExpandShiftReturn/>
<w:AdjustLineHeightInTable/>
<w:BreakWrappedTables/>
<w:SnapToGridInCell/>
<w:WrapTextWithPunct/>
<w:UseAsianBreakRules/>
<w:DontGrowAutofit/>
<w:UseFELayout/>
</w:Compatibility>
<w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
</w:WordDocument>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:LatentStyles deflockedstate="false" latentstylecount="156">
</w:LatentStyles>
</xml><![endif]-->
<style>
<!-- /* Font Definitions */
@font-face
{font-family:Wingdings;
panose-1:5 0 0 0 0 0 0 0 0 0;
mso-font-charset:2;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:0 268435456 0 0 -2147483648 0;}
@font-face
{font-family:宋体;
panose-1:2 1 6 0 3 1 1 1 1 1;
mso-font-alt:SimSun;
mso-font-charset:134;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:3 135135232 16 0 262145 0;}
@font-face
{font-family:"\@宋体";
panose-1:2 1 6 0 3 1 1 1 1 1;
mso-font-charset:134;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:3 135135232 16 0 262145 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-parent:"";
margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
mso-pagination:none;
font-size:10.5pt;
mso-bidi-font-size:12.0pt;
font-family:"Times New Roman";
mso-fareast-font-family:宋体;
mso-font-kerning:1.0pt;}
p
{mso-margin-top-alt:auto;
margin-right:0cm;
mso-margin-bottom-alt:auto;
margin-left:0cm;
mso-pagination:widow-orphan;
font-size:12.0pt;
font-family:宋体;
mso-bidi-font-family:宋体;}
/* Page Definitions */
@page
{mso-page-border-surround-header:no;
mso-page-border-surround-footer:no;}
@page Section1
{size:595.3pt 841.9pt;
margin:54.55pt 46.3pt 72.0pt 45.0pt;
mso-header-margin:42.55pt;
mso-footer-margin:49.6pt;
mso-paper-source:0;
layout-grid:15.6pt;}
div.Section1
{page:Section1;}
/* List Definitions */
@list l0
{mso-list-id:44531681;
mso-list-template-ids:1151265196;}
@list l0:level1
{mso-level-number-format:bullet;
mso-level-text:;
mso-level-tab-stop:36.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l1
{mso-list-id:51585350;
mso-list-template-ids:1328175036;}
@list l1:level1
{mso-level-number-format:bullet;
mso-level-text:;
mso-level-tab-stop:36.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l2
{mso-list-id:703135797;
mso-list-template-ids:935254178;}
@list l2:level1
{mso-level-number-format:bullet;
mso-level-text:;
mso-level-tab-stop:36.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l3
{mso-list-id:758791968;
mso-list-template-ids:-1058773756;}
@list l3:level1
{mso-level-number-format:bullet;
mso-level-text:;
mso-level-tab-stop:36.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l4
{mso-list-id:795216359;
mso-list-template-ids:296811844;}
@list l4:level1
{mso-level-number-format:bullet;
mso-level-text:;
mso-level-tab-stop:36.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l5
{mso-list-id:1063210938;
mso-list-template-ids:-1352872398;}
@list l5:level1
{mso-level-number-format:bullet;
mso-level-text:;
mso-level-tab-stop:36.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l6
{mso-list-id:2054189778;
mso-list-template-ids:320640154;}
@list l6:level1
{mso-level-number-format:bullet;
mso-level-text:;
mso-level-tab-stop:36.0pt;
mso-level-number-position:left;
text-indent:-18.0pt;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
ol
{margin-bottom:0cm;}
ul
{margin-bottom:0cm;}
-->
</style>
<!--[if gte mso 10]>
<style>
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman";
mso-ansi-language:#0400;
mso-fareast-language:#0400;
mso-bidi-language:#0400;}
</style>
<![endif]-->
<p class="MsoNormal"><span style="font-size: 15pt; font-family: 宋体">一．</span><span lang="EN-US" style="font-size: 15pt">JNI</span><span style="font-size: 15pt; font-family: 宋体">简介</span><span lang="EN-US" style="font-size: 15pt"><o:p></o:p></span></p>
<p class="MsoNormal"><strong><span lang="EN-US" style="font-size: 14pt">1</span></strong><strong><span style="font-size: 14pt; font-family: 宋体">．开篇</span></strong><strong><span lang="EN-US" style="font-size: 14pt"><o:p></o:p></span></strong></p>
<p style="margin: 0cm 0cm 0pt; line-height: 18pt">　　<span lang="EN-US" style="font-size: 10.5pt">JNI </span><span style="font-size: 10.5pt">是本地编程接口。它使得在<span lang="EN-US"> Java </span>虚拟机<span lang="EN-US"> (VM) </span>内部运行的<span lang="EN-US"> Java </span>代码能够与用其它编程语言（如<span lang="EN-US"> C</span>、<span lang="EN-US">C++ </span>和汇编语言）编写的应用程序和库进行互操作。<span lang="EN-US"><o:p></o:p></span></span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; line-height: 18pt"><span lang="EN-US" style="font-size: 10.5pt">JNI </span><span style="font-size: 10.5pt">最重要的好处是它没有对底层<span lang="EN-US"> Java </span>虚拟机的实现施加任何限制。因此，<span lang="EN-US">Java </span>虚拟机厂商可以在不影响虚拟机其它部分的情况下添加对<span lang="EN-US"> JNI </span>的支持。程序员只需编写一种版本的本地应用程序或库，就能够与所有支持<span lang="EN-US"> JNI </span>的<span lang="EN-US"> Java </span>虚拟机协同工作。<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal" style="text-indent: 12pt"><span lang="EN-US" style="font-size: 12pt">1.1 </span><span style="font-size: 12pt; font-family: 宋体">为什么需要</span><span lang="EN-US" style="font-size: 12pt">JNI</span><span style="font-size: 12pt; font-family: 宋体">？</span><span lang="EN-US" style="font-size: 12pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-indent: 10.5pt"><span lang="EN-US"><span>&nbsp; </span>Java</span><span style="font-family: 宋体">是跨平台的语言，但是有的时候需要调用本地代码实现升级，更新或者其他操作，而这些本地代码往往是一个</span><span lang="EN-US">COM</span><span style="font-family: 宋体">技术编程，生成的</span><span lang="EN-US">DLL</span><span style="font-family: 宋体">是与本机密切关联着的，这时我们就需要</span><span lang="EN-US">JNI</span><span style="font-family: 宋体">来调用本地的</span><span lang="EN-US">dll</span><span style="font-family: 宋体">文件。</span></p>
<p class="MsoNormal" style="text-indent: 12pt"><span lang="EN-US" style="font-size: 12pt">1.2 </span><span style="font-size: 12pt; font-family: 宋体">什么是</span><span lang="EN-US" style="font-size: 12pt">JNI</span><span style="font-size: 12pt; font-family: 宋体">？</span><span lang="EN-US" style="font-size: 12pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-indent: 10.5pt"><span lang="EN-US"><span>&nbsp; </span>SUN</span><span style="font-family: 宋体">公司提供的</span><span lang="EN-US">JNI</span><span style="font-family: 宋体">是</span><span lang="EN-US">Java</span><span style="font-family: 宋体">平台的一个功能强大的接口，这个</span><span lang="EN-US">JNI</span><span style="font-family: 宋体">提供了</span><span lang="EN-US">Java</span><span style="font-family: 宋体">与操作系统本地代码交互调用的功能。</span></p>
<p class="MsoNormal"><strong><span lang="EN-US" style="font-size: 14pt">2 . Java</span></strong><strong><span style="font-size: 14pt; font-family: 宋体">本地接口概述</span></strong><strong><span lang="EN-US" style="font-size: 14pt"><o:p></o:p></span></strong></p>
<p class="MsoNormal" style="text-indent: 21pt; line-height: 18pt; text-align: left" align="left"><span style="font-family: 宋体">尽管可以完全用<span lang="EN-US"> Java </span>编写应用程序，但是有时单独用<span lang="EN-US"> Java </span>不能满足应用程序的需要。程序员使用<span lang="EN-US"> JNI </span>来编写 <em><span lang="EN-US">Java </span>本地方法</em>，可以处理那些不能完全用<span lang="EN-US"> Java </span>编写应用程序的情况。<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal" style="line-height: 18pt; text-align: left" align="left"><span style="font-family: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;以下示例说明了何时需要使用<span lang="EN-US"> Java </span>本地方法：<span lang="EN-US"> <o:p></o:p></span></span></p>
<ul style="margin-top: 0cm" type="disc">
    <li class="MsoNormal" style="line-height: 18pt; text-align: left"><span style="font-family: 宋体">标准<span lang="EN-US"> Java </span>类库不支持与平台相关的应用程序所需的功能。<span lang="EN-US"> <o:p></o:p></span></span>
    <li class="MsoNormal" style="line-height: 18pt; text-align: left"><span style="font-family: 宋体">已经拥有了一个用另一种语言编写的库，而又希望通过<span lang="EN-US"> JNI </span>使<span lang="EN-US"> Java </span>代码能够访问该库。<span lang="EN-US"> <o:p></o:p></span></span>
    <li class="MsoNormal" style="line-height: 18pt; text-align: left"><span style="font-family: 宋体">想用低级语言（如汇编语言）实现一小段时限代码。<span lang="EN-US"> <o:p></o:p></span></span></li>
</ul>
<p class="MsoNormal" style="line-height: 18pt; text-align: left" align="left"><span style="font-family: 宋体">通过用<span lang="EN-US"> JNI </span>编程，可以将本地方法用于：<span lang="EN-US"> <o:p></o:p></span></span></p>
<ul style="margin-top: 0cm" type="disc">
    <li class="MsoNormal" style="line-height: 18pt; text-align: left"><span style="font-family: 宋体">创建、检查及更新<span lang="EN-US"> Java </span>对象（包括数组和字符串）。<span lang="EN-US"> <o:p></o:p></span></span>
    <li class="MsoNormal" style="line-height: 18pt; text-align: left"><span style="font-family: 宋体">调用<span lang="EN-US"> Java </span>方法。<span lang="EN-US"> <o:p></o:p></span></span>
    <li class="MsoNormal" style="line-height: 18pt; text-align: left"><span style="font-family: 宋体">捕捉和抛出异常。<span lang="EN-US"> <o:p></o:p></span></span>
    <li class="MsoNormal" style="line-height: 18pt; text-align: left"><span style="font-family: 宋体">加载类和获得类信息。<span lang="EN-US"> <o:p></o:p></span></span>
    <li class="MsoNormal" style="line-height: 18pt; text-align: left"><span style="font-family: 宋体">执行运行时类型检查。<span lang="EN-US"> <o:p></o:p></span></span></li>
</ul>
<p class="MsoNormal" style="line-height: 18pt; text-align: left" align="left"><span style="font-family: 宋体">&nbsp;&nbsp;&nbsp; 也可以与<em>调用<span lang="EN-US"> API</span></em><span lang="EN-US"> </span>一起使用<span lang="EN-US"> JNI</span>，以允许任意本地应用程序嵌入到<span lang="EN-US"> Java </span>虚拟机中。这样使得程序员能够轻易地让已有应用程序支持<span lang="EN-US"> Java</span>，而不必与虚拟机源代码相链接。<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal" style="text-align: left" align="left"><strong><span lang="EN-US" style="font-size: 14pt; font-family: 宋体">3.</span></strong><strong><span style="font-size: 14pt; font-family: 宋体">背景<span lang="EN-US"> <o:p></o:p></span></span></strong></p>
<p class="MsoNormal" style="text-indent: 21pt; line-height: 18pt; text-align: left" align="left"><span style="font-family: 宋体">目前，不同厂商的虚拟机提供了不同的本地方法接口。这些不同的接口使程序员不得不在给定平台上编写、维护和分发多种版本的本地方法库。<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal" style="line-height: 18pt; text-align: left" align="left"><span style="font-family: 宋体">下面简要分析一下部分已有本地方法接口，例如：<span lang="EN-US"> <o:p></o:p></span></span></p>
<p class="MsoNormal" style="margin-left: 35.7pt; text-indent: -17.85pt; line-height: 18pt; text-align: left" align="left"><!--[if !supportLists]--><span lang="EN-US" style="font-size: 10pt; font-family: Symbol"><span>&#183;<span style="font: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal; -x-system-font: none">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><!--[endif]--><span lang="EN-US" style="font-family: 宋体">JDK 1.0 </span><span style="font-family: 宋体">本地方法接口<span lang="EN-US"> <o:p></o:p></span></span></p>
<p class="MsoNormal" style="margin-left: 35.7pt; text-indent: -17.85pt; line-height: 18pt; text-align: left" align="left"><!--[if !supportLists]--><span lang="EN-US" style="font-size: 10pt; font-family: Symbol"><span>&#183;<span style="font: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal; -x-system-font: none">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><!--[endif]--><span lang="EN-US" style="font-family: 宋体">Netscape </span><span style="font-family: 宋体">的<span lang="EN-US"> Java </span>运行时接口<span lang="EN-US"> <o:p></o:p></span></span></p>
<p class="MsoNormal" style="margin-left: 35.7pt; text-indent: -17.85pt; line-height: 18pt; text-align: left" align="left"><!--[if !supportLists]--><span lang="EN-US" style="font-size: 10pt; font-family: Symbol"><span>&#183;<span style="font: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal; -x-system-font: none">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><!--[endif]--><span lang="EN-US" style="font-family: 宋体">Microsoft </span><span style="font-family: 宋体">的原始本地接口和<span lang="EN-US"> Java/COM </span>接口 <span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal" style="line-height: 18pt; text-align: left" align="left"><strong><span lang="EN-US" style="font-size: 14pt; font-family: 宋体">4.JDK 1.0 </span></strong><strong><span style="font-size: 14pt; font-family: 宋体">本地方法接口<span lang="EN-US"> <o:p></o:p></span></span></strong></p>
<p class="MsoNormal" style="text-indent: 21pt; line-height: 18pt; text-align: left" align="left"><span lang="EN-US" style="font-family: 宋体">JDK 1.0 </span><span style="font-family: 宋体">附带有本地方法接口。遗憾的是<span lang="EN-US">,</span>有两点原因使得该接口不适合于其它<span lang="EN-US"> Java </span>虚拟机。<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal" style="text-indent: 21pt; line-height: 18pt; text-align: left" align="left"><span style="font-family: 宋体">第一，平台相关代码将<span lang="EN-US"> Java </span>对象中的域作为<span lang="EN-US"> C </span>结构的成员来进行访问。但是，<em><span lang="EN-US">Java </span>语言规范</em>没有规定在内存中对象是如何布局的。如果<span lang="EN-US"> Java </span>虚拟机在内存中布局对象的方式有所不同，程序员就不得不重新编译本地方法库。<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal" style="text-indent: 21pt; line-height: 18pt; text-align: left" align="left"><span style="font-family: 宋体">第二，<span lang="EN-US">JDK 1.0 </span>的本地方法接口依赖于保守的垃圾收集器。例如，无限制地使用<span lang="EN-US"> unhand </span>宏使得有必要以保守方式扫描本地堆栈。<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal" style="text-align: left" align="left"><strong><span lang="EN-US" style="font-size: 14pt; font-family: 宋体">5.Java </span></strong><strong><span style="font-size: 14pt; font-family: 宋体">运行时接口<span lang="EN-US"> <o:p></o:p></span></span></strong></p>
<p class="MsoNormal" style="text-indent: 21pt; line-height: 18pt; text-align: left" align="left"><span lang="EN-US" style="font-family: 宋体">Netscape </span><span style="font-family: 宋体">建议使用<span lang="EN-US"> Java </span>运行时接口<span lang="EN-US"> (JRI)</span>，它是<span lang="EN-US"> Java </span>虚拟机所提供服务的通用接口。<span lang="EN-US">JRI </span>的设计融入了可移植性<span lang="EN-US">---</span>它几乎没有对底层<span lang="EN-US"> Java </span>虚拟机的实现细节作任何假设。<span lang="EN-US">JRI </span>提出了各种各样的问题，包括本地方法、调试、反射、嵌入（调用）等等。<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal" style="text-align: left" align="left"><strong><span lang="EN-US" style="font-size: 14pt; font-family: 宋体">6.</span></strong><strong><span style="font-size: 14pt; font-family: 宋体">原始本地接口和<span lang="EN-US"> Java/COM </span>接口<span lang="EN-US"> <o:p></o:p></span></span></strong></p>
<p class="MsoNormal" style="text-indent: 21pt; line-height: 18pt; text-align: left" align="left"><span lang="EN-US" style="font-family: 宋体">Microsoft Java </span><span style="font-family: 宋体">虚拟机支持两种本地方法接口。在低一级，它提供了高效的原始本地接口<span lang="EN-US"> (RNI)</span>。<span lang="EN-US">RNI </span>提供了与<span lang="EN-US"> JDK </span>本地方法接口有高度源代码级的向后兼容性，尽管它们之间还有一个主要区别，即平台相关代码必须用<span lang="EN-US"> RNI </span>函数来与垃圾收集器进行显式的交互，而不是依赖于保守的垃圾收集。<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal" style="text-indent: 21pt; line-height: 18pt; text-align: left" align="left"><span style="font-family: 宋体">在高一级，<span lang="EN-US">Microsoft </span>的<span lang="EN-US"> Java/COM </span>接口为<span lang="EN-US"> Java </span>虚拟机提供了与语言无关的标准二进制接口。<span lang="EN-US">Java </span>代码可以象使用<span lang="EN-US"> Java </span>对象一样来使用<span lang="EN-US"> COM </span>对象。<span lang="EN-US">Java </span>类也可以作为<span lang="EN-US"> COM </span>类显示给系统的其余部分。<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal" style="text-align: left" align="left"><strong><span lang="EN-US" style="font-size: 14pt; font-family: 宋体">7.</span></strong><strong><span style="font-size: 14pt; font-family: 宋体">目标<span lang="EN-US"> <o:p></o:p></span></span></strong></p>
<p class="MsoNormal" style="line-height: 18pt; text-align: left" align="left"><span style="font-family: 宋体">我们认为统一的，经过细致考虑的标准接口能够向每个用户提供以下好处：<span lang="EN-US"> <o:p></o:p></span></span></p>
<ul style="margin-top: 0cm" type="disc">
    <li class="MsoNormal" style="line-height: 18pt; text-align: left"><span style="font-family: 宋体">每个虚拟机厂商都可以支持更多的平台相关代码。<span lang="EN-US"> <o:p></o:p></span></span>
    <li class="MsoNormal" style="line-height: 18pt; text-align: left"><span style="font-family: 宋体">工具构造器不必维护不同的本地方法接口。<span lang="EN-US"> <o:p></o:p></span></span>
    <li class="MsoNormal" style="line-height: 18pt; text-align: left"><span style="font-family: 宋体">应用程序设计人员可以只编写一种版本的平台相关代码就能够在不同的虚拟机上运行。<span lang="EN-US"> <o:p></o:p></span></span></li>
</ul>
<p class="MsoNormal" style="line-height: 18pt; text-align: left" align="left"><span style="font-family: 宋体">&nbsp;&nbsp;&nbsp; 获得标准本地方法接口的最佳途径是联合所有对<span lang="EN-US"> Java </span>虚拟机有兴趣的当事方。因此，我们在<span lang="EN-US"> Java </span>获得许可方之间组织了一系列研讨会，对设计统一的本地方法接口进行了讨论。从研讨会可以明确地看出标准本地方法接口必须满足以下要求：<span lang="EN-US"> <o:p></o:p></span></span></p>
<ul style="margin-top: 0cm" type="disc">
    <li class="MsoNormal" style="line-height: 18pt; text-align: left"><span style="font-family: 宋体">二进制兼容性<span lang="EN-US"> - </span>主要的目标是在给定平台上的所有<span lang="EN-US"> Java </span>虚拟机实现之间实现本地方法库的二进制兼容性。对于给定平台，程序员只需要维护一种版本的本地方法库。<span lang="EN-US"> <o:p></o:p></span></span>
    <li class="MsoNormal" style="line-height: 18pt; text-align: left"><span style="font-family: 宋体">效率<span lang="EN-US"> - </span>若要支持时限代码，本地方法接口必须增加一点系统开销。所有已知的用于确保虚拟机无关性（因而具有二进制兼容性）的技术都会占用一定的系统开销。我们必须在效率与虚拟机无关性之间进行某种折衷。<span lang="EN-US"> <o:p></o:p></span></span>
    <li class="MsoNormal" style="line-height: 18pt; text-align: left"><span style="font-family: 宋体">功能<span lang="EN-US"> - </span>接口必须显示足够的<span lang="EN-US"> Java </span>虚拟机内部情况以使本地方法能够完成有用的任务。<span lang="EN-US"><o:p></o:p></span></span> </li>
</ul>
<p class="MsoNormal" style="text-align: left" align="left"><strong><span lang="EN-US" style="font-size: 14pt; font-family: 宋体">&nbsp;&nbsp; 8.</span></strong><strong><span lang="EN-US" style="font-size: 14pt; font-family: 宋体">Java </span></strong><strong><span style="font-size: 14pt; font-family: 宋体">本地接口方法 <span lang="EN-US"><o:p></o:p></span></span></strong></p>
<p class="MsoNormal" style="text-indent: 21pt; text-align: left" align="left"><span style="font-family: 宋体">我们希望采用一种已有的方法作为标准接口，因为这样程序员（程序员不得不学习在不同虚拟机中的多种接口）的工作负担最轻。遗憾的是，已有解决方案中没有任何方案能够完全地满足我们的目标。<span lang="EN-US">Netscape </span>的<span lang="EN-US"> JRI </span>最接近于我们所设想的可移植本地方法接口，因而我们采用它作为设计起点。熟悉<span lang="EN-US"> JRI </span>的读者将会注意到在<span lang="EN-US"> API </span>命名规则、方法和域<span lang="EN-US"> ID </span>的使用、局部和全局引用的使用，等等中的相似点。虽然我们进行了最大的努力，但是<span lang="EN-US"> JNI </span>并不具有对<span lang="EN-US"> JRI </span>的二进制兼容性，不过虚拟机既可以支持<span lang="EN-US"> JRI</span>，又可以支持<span lang="EN-US"> JNI</span>。</span><strong><span lang="EN-US" style="font-family: 宋体"><o:p></o:p></span></strong></p>
<p class="MsoNormal" style="line-height: 18pt; text-align: left" align="left"><span lang="EN-US" style="font-family: 宋体">&nbsp;&nbsp;&nbsp; Microsoft </span><span style="font-family: 宋体">的<span lang="EN-US"> RNI </span>是对<span lang="EN-US"> JDK 1.0 </span>的改进，因为它可以解决使用非保守的垃圾收集器的本地方法的问题。然而，<span lang="EN-US">RNI </span>不适合用作与虚拟机无关的本地方法接口。与<span lang="EN-US"> JDK </span>类似，<span lang="EN-US">RNI </span>本地方法将<span lang="EN-US"> Java </span>对象作为<span lang="EN-US"> C </span>结构来访问。这将导致两个问题：<span lang="EN-US"> <o:p></o:p></span></span></p>
<ul style="margin-top: 0cm" type="disc">
    <li class="MsoNormal" style="line-height: 18pt; text-align: left"><span lang="EN-US" style="font-family: 宋体">RNI </span><span style="font-family: 宋体">将内部<span lang="EN-US"> Java </span>对象的布局暴露给了平台相关代码。<span lang="EN-US"> <o:p></o:p></span></span>
    <li class="MsoNormal" style="line-height: 18pt; text-align: left"><span style="font-family: 宋体">将<span lang="EN-US"> Java </span>对象作为<span lang="EN-US"> C </span>结构直接进行访问使得不可能有效地加入<span lang="EN-US">&#8220;</span>写屏障<span lang="EN-US">&#8221;</span>，写屏障是高级的垃圾收集算法所必需的。<span lang="EN-US"> <o:p></o:p></span></span></li>
</ul>
<p class="MsoNormal" style="line-height: 18pt; text-align: left" align="left"><span style="font-family: 宋体">&nbsp;&nbsp;&nbsp; 作为二进制标准，<span lang="EN-US">COM </span>确保了不同虚拟机之间的完全二进制兼容性。调用<span lang="EN-US"> COM </span>方法只要求间接调用，而这几乎不会占用系统开销。另外，<span lang="EN-US">COM </span>对象对动态链接库解决版本问题的方式也有很大的改进。<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal" style="line-height: 18pt; text-align: left" align="left"><span style="font-family: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;然而，有几个因素阻碍了将<span lang="EN-US"> COM </span>用作标准<span lang="EN-US"> Java </span>本地方法接口：<span lang="EN-US"> <o:p></o:p></span></span></p>
<ul style="margin-top: 0cm" type="disc">
    <li class="MsoNormal" style="line-height: 18pt; text-align: left"><span style="font-family: 宋体">第一，<span lang="EN-US">Java/COM </span>接口缺少某些必需功能，例如访问私有域和抛出普通异常。<span lang="EN-US"> <o:p></o:p></span></span>
    <li class="MsoNormal" style="line-height: 18pt; text-align: left"><span style="font-family: 宋体">第二，<span lang="EN-US">Java/COM </span>接口自动为<span lang="EN-US"> Java </span>对象提供标准的<span lang="EN-US"> IUnknown </span>和<span lang="EN-US"> IDispatch COM </span>接口，因而平台相关代码能够访问公有方法和域。遗憾的是，<span lang="EN-US">IDispatch </span>接口不能处理重载的<span lang="EN-US"> Java </span>方法，而且在匹配方法名称时不区别大小写。另外，通过<span lang="EN-US"> IDispatch </span>接口暴露的所有<span lang="EN-US"> Java </span>方法被打包在一起来执行动态类型检查和强制转换。这是因为<span lang="EN-US"> IDispatch </span>接口的设计只考虑到了弱类型的语言（例如<span lang="EN-US"> Basic</span>）。<span lang="EN-US"> <o:p></o:p></span></span>
    <li class="MsoNormal" style="line-height: 18pt; text-align: left"><span style="font-family: 宋体">第三，<span lang="EN-US">COM </span>允许软件组件（包括完全成熟的应用程序）一起工作，而不是处理单个低层函数。我们认为将所有<span lang="EN-US"> Java </span>类或低层本地方法都当作软件组件是不恰当的。<span lang="EN-US"> <o:p></o:p></span></span>
    <li class="MsoNormal" style="line-height: 18pt; text-align: left"><span style="font-family: 宋体">第四，在<span lang="EN-US"> UNIX </span>平台上由于缺少对<span lang="EN-US"> COM </span>的支持，所以阻碍了直接采用<span lang="EN-US"> COM</span>。<span lang="EN-US"> <o:p></o:p></span></span></li>
</ul>
<p class="MsoNormal" style="line-height: 18pt; text-align: left" align="left"><span style="font-family: 宋体">&nbsp;&nbsp;&nbsp; 虽然我们没有将<span lang="EN-US"> Java </span>对象作为<span lang="EN-US"> COM </span>对象暴露给平台相关代码，但是<span lang="EN-US"> JNI </span>接口自身与<span lang="EN-US"> COM </span>具有二进制兼容性。我们采用与<span lang="EN-US"> COM </span>一样的跳转表和调用约定。<em>这意味着，一旦具有对<span lang="EN-US"> COM </span>的跨平台支持，<span lang="EN-US">JNI </span>就能成为<span lang="EN-US"> Java </span>虚拟机的<span lang="EN-US"> COM </span>接口。</em><span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal" style="text-indent: 18.4pt; line-height: 18pt; text-align: left" align="left"><span style="font-family: 宋体">我们认为<span lang="EN-US"> JNI </span>不应该是给定<span lang="EN-US"> Java </span>虚拟机所支持的唯一的本地方法接口。标准接口的好处在于程序员可以将自己的平台相关代码库加载到不同的<span lang="EN-US"> Java </span>虚拟机上。在某些情况下，程序员可能不得不使用低层且与虚拟机有关的接口来获得较高的效率。但在其它情况下，程序员可能使用高层接口来建立软件组件。实际上，我们希望随着<span lang="EN-US"> Java </span>环境和组件软件技术发展得越来越成熟，本地方法将变得越来越不重要。<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal" style="text-indent: 10.5pt"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="text-indent: 10.5pt"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="text-indent: 10.5pt"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<img src ="http://www.blogjava.net/hyint/aggbug/258613.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hyint/" target="_blank">苦瓜</a> 2009-03-09 16:18 <a href="http://www.blogjava.net/hyint/articles/258613.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Start RMI in one ---- Thinking</title><link>http://www.blogjava.net/hyint/articles/257068.html</link><dc:creator>苦瓜</dc:creator><author>苦瓜</author><pubDate>Fri, 27 Feb 2009 09:10:00 GMT</pubDate><guid>http://www.blogjava.net/hyint/articles/257068.html</guid><wfw:comment>http://www.blogjava.net/hyint/comments/257068.html</wfw:comment><comments>http://www.blogjava.net/hyint/articles/257068.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hyint/comments/commentRss/257068.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hyint/services/trackbacks/257068.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;什么是 RMI？<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 当你在JDK的帮助文档中输入Remote,或者你也可以浏览 java.rmi包中的所有class，你也许不知道它是做什么的！首先定义一下：<br />
RMI ------Remote&nbsp;&nbsp; Method&nbsp; Invocation (远程方法调用)。是用Java在JDK1.1中实现的，它大大增强了Java开发分布式应用的能力。Java作为一种风靡一时的网络开发语言，其巨大的威力就体现在它强大的开发分布式网络应用的能力上，而RMI就是开发百分之百纯 Java 的网络分布式应用系统的核心解决方案之一。其实它可以被看作是 RPC 的 Java 版本。但是传统 RPC 并不能很好地应用于分布式对象系统。而 Java&nbsp;&nbsp; RMI&nbsp; 则支持存储于不同地址空间的程序级对象之间彼此进行通信，实现远程对象之间的无缝远程调用。RMI 目前使用Java远程消息交换协议 JRMP（Java&nbsp; Remote&nbsp; Messaging&nbsp; Protocol）进行通信。JRMP 是专为 Java 的远程对象制定的协议。因此，Java&nbsp; RMI 具有 Java 的 "Write&nbsp; Once, Run&nbsp; Anywhere" 的优点，是分布式应用系统的百分之百纯Java解决方案。用Java&nbsp;RMI开发的应用系统可以部署在任何支持 JRE（Java&nbsp;Run&nbsp;Environment&nbsp;Java，运行环境）的平台上。但由于JRMP是专为Java对象制定的，因此，RMI 对于用非 Java 语言开发的应用系统的支持不足。不能与用非Java语言书写的对象进行通信。本文拟从程序的角度举例介绍怎样利用RMI实现Java分布式应用，在现在的分布式中，大多数都是采用WebService，因为传输数据基于 XML，所以可以达到平台无关，语言无关的优点。<br />
<br />
<span style="font-size: 24pt"><span style="font-size: 18pt">1、RMI的运行机制</span><br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RMI应用程序通常包括两个独立的程序：服务器程序 和 客户机程序。典型的服务器应用程序将创建多个远程对象，使这些远程对象能够被引用，然后等待客户机调用这些远程对象的方法。而典型的客户机程序则从服务器中得到一个或多个远程对象的引用，然后调用远程对象的方法。RMI为服务器和客户机进行通信和信息传递提供了一种机制。&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在与远程对象的通信过程中，RMI使用标准机制：stub 和 skeleton。远程对象的 stub 担当远程对象的客户本地代表或代理人角色。调用程序将调用本地stub的方法，而本地stub将负责执行对远程对象的方法调用。在RMI中，远程对象的stub与该远程对象所实现的远程接口集相同。调用stub的方法时将执行下列操作：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;(1)&nbsp;初始化与包含远程对象的远程虚拟机的连接；<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (2)&nbsp;对远程虚拟机的参数进行编组（写入并传输）；<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (3)&nbsp;等待方法调用结果；<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (4)&nbsp;解编（读取）返回值或返回的异常；<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (5)&nbsp;将值返回给调用程序。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;为了向调用程序展示比较简单的调用机制，stub将参数的序列化和网络级通信等细节隐藏了起来。在远程虚拟机中，每个远程对象都可以有相应的skeleton（在JDK1.2环境中无需使用skeleton）。Skeleton负责将调用分配给实际的远程对象实现。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 它在接收方法调用时执行下列操作：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (1)&nbsp;解编（读取）远程方法的参数；<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (2)&nbsp;调用实际远程对象实现上的方法；<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (3)&nbsp;将结果（返回值或异常）编组（写入并传输）给调用程序。stub和skeleton由rmic编译器生成。&nbsp;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;利用RMI编写分布式对象应用程序需要完成以下工作：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (1)&nbsp;&nbsp;&nbsp; 定位远程对象。应用程序可使用两种机制中的一种得到对远程对象的引用。它既可用RMI的简单命名工具rmiregistry来注册它的远程对<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;象，也可以将远程对象引用作为常规操作的一部分来进行传递和返回。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (2)&nbsp;&nbsp;&nbsp; 与远程对象通信。远程对象间通信的细节由RMI处理，对于程序员来说，远程通信看起来就像标准的Java方法调用。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (3)&nbsp;&nbsp;&nbsp;&nbsp; 给作为参数或返回值传递的对象加载类字节码。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 因为RMI允许调用程序将纯Java对象传给远程对象，所以，RMI将提供必要的机制，既可以加载对象的代码又可以传输对象的数据。在RMI分布式应用程序运行时，服务器调用注册服务程序以使名字与远程对象相关联。客户机在服务器上的注册服务程序中用远程对象的名字查找该远程对象，然后调用它的方法。 <br />
<br />
<span style="font-size: 18pt">2、对象序列化 </span><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在 RMI 分布式应用系统中，服务器与客户机之间传递的 Java 对象必须是可序列化的对象。不可序列化的对象不能在对象流中进行传递。对象序列化扩展了核心Java输入/输出类，同时也支持对象。对象序列化支持把对象编码以及将通过它们可访问到的对象编码变成字节流；同时，它也支持流中对象图形的互补重构造。序列化用于轻型持久性和借助于套接字或远程方法调用 ( RMI ) 进行的通信。序列化中现在包括一个&nbsp;API(Application&nbsp;Programming&nbsp;Interface，应用程序接口)，允许独立于类的域指定对象的序列化数据，并允许使用现有协议将序列化数据域写入流中或从流中读取，以确保与缺省读写机制的兼容性。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 为编写应用程序，除多数瞬态应用程序外，都必须具备存储和检索&nbsp;Java对象的能力。以序列化方式存储和检索对象的关键在于提供重新构造该对象所需的足够对象状态。存储到流的对象可能会支持&nbsp;Serializable（可序列化）或&nbsp;Externalizable（可外部化）接口。对于Java对象，序列化形式必须能标识和校验存储其内容的对象所属的&nbsp;Java类，并且将该内容还原为新的实例。对于可序列化对象，流将提供足够的信息将流的域还原为类的兼容版本。对于可外部化对象，类将全权负责其内容的外部格式。序列化&nbsp;Java&nbsp;对象的目的是：提供一种简单但可扩充的机制，以序列化方式维护&nbsp;Java对象的类型及安全属性；具有支持编组和解编的扩展能力以满足远程对象的需要；具有可扩展性以支持&nbsp;Java&nbsp;对象的简单持久性；只有在自定义时，才需对每个类提供序列化自实现；允许对象定义其外部格式。 <br />
<br />
<span style="font-size: 18pt">3、分布式应用的实现和运行步骤 </span><br />
<br />
编写Java&nbsp;RMI分布式应用程序的步骤主要包括以下几步： <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (1)&nbsp;&nbsp; 将远程类的功能定义为Java接口。在Java中，远程对象是实现远程接口的类的实例。在远程接口中声明每个要远程调用的方法。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 远程接口具有如下特点：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1)&nbsp;&nbsp; 远程接口必须声明为public。如果不这样，则除非客户端与远程接口在同一个包内，否则当试图装入实现该远程接口的远程对<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 象时会得到错误结果。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2)&nbsp;&nbsp; 远程对象扩展java.rmi.Remote接口。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3)&nbsp; &nbsp;除了所有应用程序特定的例外之外，每个方法还必须抛出java.rmi.RemoteException例外。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;4)&nbsp;&nbsp; 任何作为参数或返回值传送的远程对象的数据类型必须声明为远程接口类型，而不是实现类。&nbsp;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(2)&nbsp;&nbsp; 编写和实现服务器类。该类是实现(1)中定义的远程接口。所以在该类中至少要声明实现一个远程接口，并且必须具有构造方法。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在该类中还要实现远程接口中所声明的各个远程方法。&nbsp;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(3)&nbsp;&nbsp;&nbsp; 编写使用远程服务的客户机程序。在该类中使用java.rmi.Naming中的lookup()方法获得对远程对象的引用，依据需要调用该引用的远程方<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;法，其调用方式和对本地对象方法的调用相同。 <br />
<br />
实现了服务器和客户机的程序后，就是编译和运行该RMI系统。其步骤有：&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;(1)&nbsp;&nbsp;&nbsp;使用javac编译远程接口类，远程接口实现类和客户机程序。&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;(2)&nbsp;&nbsp; 使用rmic编译器生成实现类的stub和skeleton。&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;(3)&nbsp;&nbsp; 启动RMI注册服务程序rmiregistry。&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;(4)&nbsp; &nbsp;启动服务器端程序。&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;(5)&nbsp;&nbsp; 启动客户机程序。&nbsp;<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在当前RMI / IIOP 的使用中，RMI并没有被广泛使用，而是被封装成多种形式，譬如WebService，EJB等都继承了 RMI 的分布式思想，而RMI的缺点确实不得不让大家为了这效率而捏把汗，因为对象传输过程是串行化的，所以效率奇低。<br />
<img src ="http://www.blogjava.net/hyint/aggbug/257068.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hyint/" target="_blank">苦瓜</a> 2009-02-27 17:10 <a href="http://www.blogjava.net/hyint/articles/257068.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java IO 在Linux下报 bad file descriptor</title><link>http://www.blogjava.net/hyint/articles/256948.html</link><dc:creator>苦瓜</dc:creator><author>苦瓜</author><pubDate>Fri, 27 Feb 2009 01:10:00 GMT</pubDate><guid>http://www.blogjava.net/hyint/articles/256948.html</guid><wfw:comment>http://www.blogjava.net/hyint/comments/256948.html</wfw:comment><comments>http://www.blogjava.net/hyint/articles/256948.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hyint/comments/commentRss/256948.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hyint/services/trackbacks/256948.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 今天在做Java的IO写视频数据文件的时候，突然报了一个bad file descriptor，我以为是我的文件名写的不对，或者其他的操作出错了！由于函数是被c++的动态库回调的，所以我当初把错误归为c++报错，当我检查以后，发现，IO 才刚执行就关闭了流，导致报错。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 可以相当于此异常的代码如下</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">&nbsp;1</span><img id="Codehighlighter1_28_345_Open_Image" onclick="this.style.display='none'; Codehighlighter1_28_345_Open_Text.style.display='none'; Codehighlighter1_28_345_Closed_Image.style.display='inline'; Codehighlighter1_28_345_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_28_345_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_28_345_Closed_Text.style.display='none'; Codehighlighter1_28_345_Open_Image.style.display='inline'; Codehighlighter1_28_345_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;&nbsp;TestBadFileDes</span><span id="Codehighlighter1_28_345_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"  alt="" /></span><span id="Codehighlighter1_28_345_Open_Text"><span style="color: #000000">{&nbsp;<br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img id="Codehighlighter1_69_342_Open_Image" onclick="this.style.display='none'; Codehighlighter1_69_342_Open_Text.style.display='none'; Codehighlighter1_69_342_Closed_Image.style.display='inline'; Codehighlighter1_69_342_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_69_342_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_69_342_Closed_Text.style.display='none'; Codehighlighter1_69_342_Open_Image.style.display='inline'; Codehighlighter1_69_342_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></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)</span><span id="Codehighlighter1_69_342_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"  alt="" /></span><span id="Codehighlighter1_69_342_Open_Text"><span style="color: #000000">{&nbsp;<br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />FileOutputStream&nbsp;fos&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">&nbsp;;&nbsp;<br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img id="Codehighlighter1_106_160_Open_Image" onclick="this.style.display='none'; Codehighlighter1_106_160_Open_Text.style.display='none'; Codehighlighter1_106_160_Closed_Image.style.display='inline'; Codehighlighter1_106_160_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_106_160_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_106_160_Closed_Text.style.display='none'; Codehighlighter1_106_160_Open_Image.style.display='inline'; Codehighlighter1_106_160_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">try</span><span id="Codehighlighter1_106_160_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"  alt="" /></span><span id="Codehighlighter1_106_160_Open_Text"><span style="color: #000000">{&nbsp;<br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />fos&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;FileOutputStream(</span><span style="color: #000000">"</span><span style="color: #000000">F:\\javatest.txt</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;<br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img id="Codehighlighter1_193_220_Open_Image" onclick="this.style.display='none'; Codehighlighter1_193_220_Open_Text.style.display='none'; Codehighlighter1_193_220_Closed_Image.style.display='inline'; Codehighlighter1_193_220_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_193_220_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_193_220_Closed_Text.style.display='none'; Codehighlighter1_193_220_Open_Image.style.display='inline'; Codehighlighter1_193_220_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />}</span></span><span style="color: #0000ff">catch</span><span style="color: #000000">(FileNotFoundException&nbsp;fnf)</span><span id="Codehighlighter1_193_220_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"  alt="" /></span><span id="Codehighlighter1_193_220_Open_Text"><span style="color: #000000">{&nbsp;<br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />fnf.printStackTrace();&nbsp;<br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img id="Codehighlighter1_248_339_Open_Image" onclick="this.style.display='none'; Codehighlighter1_248_339_Open_Text.style.display='none'; Codehighlighter1_248_339_Closed_Image.style.display='inline'; Codehighlighter1_248_339_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_248_339_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_248_339_Closed_Text.style.display='none'; Codehighlighter1_248_339_Open_Image.style.display='inline'; Codehighlighter1_248_339_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i</span><span style="color: #000000">=0 </span><span style="color: #000000">;i&nbsp;</span><span style="color: #000000">&lt;100</span><span style="color: #000000">;i</span><span style="color: #000000">++</span><span style="color: #000000">)</span><span id="Codehighlighter1_248_339_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"  alt="" /></span><span id="Codehighlighter1_248_339_Open_Text"><span style="color: #000000">{&nbsp;<br />
</span><span style="color: #008080">10</span><span style="color: #000000"><img id="Codehighlighter1_254_286_Open_Image" onclick="this.style.display='none'; Codehighlighter1_254_286_Open_Text.style.display='none'; Codehighlighter1_254_286_Closed_Image.style.display='inline'; Codehighlighter1_254_286_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_254_286_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_254_286_Closed_Text.style.display='none'; Codehighlighter1_254_286_Open_Image.style.display='inline'; Codehighlighter1_254_286_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">try</span><span id="Codehighlighter1_254_286_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"  alt="" /></span><span id="Codehighlighter1_254_286_Open_Text"><span style="color: #000000">{&nbsp;<br />
</span><span style="color: #008080">11</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />fos.write(i);&nbsp;<br />
</span><span style="color: #008080">12</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />fos.close();&nbsp;<br />
</span><span style="color: #008080">13</span><span style="color: #000000"><img id="Codehighlighter1_309_336_Open_Image" onclick="this.style.display='none'; Codehighlighter1_309_336_Open_Text.style.display='none'; Codehighlighter1_309_336_Closed_Image.style.display='inline'; Codehighlighter1_309_336_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_309_336_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_309_336_Closed_Text.style.display='none'; Codehighlighter1_309_336_Open_Image.style.display='inline'; Codehighlighter1_309_336_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />}</span></span><span style="color: #0000ff">catch</span><span style="color: #000000">(IOException&nbsp;ioe)</span><span id="Codehighlighter1_309_336_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"  alt="" /></span><span id="Codehighlighter1_309_336_Open_Text"><span style="color: #000000">{&nbsp;<br />
</span><span style="color: #008080">14</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />ioe.printStackTrace();&nbsp;<br />
</span><span style="color: #008080">15</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #008080">16</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #008080">17</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #008080">18</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span></div>
异常如下：<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">&nbsp;1</span><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">java&nbsp;TestBadFileDes<br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />java.io.IOException:&nbsp;Bad&nbsp;file&nbsp;descriptor&nbsp;<br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.io.FileOutputStream.write(Native&nbsp;Method)&nbsp;<br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;FileTest.main(TestBadFileDes.java:</span><span style="color: #000000">38</span><span style="color: #000000">)&nbsp;<br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />java.io.IOException:&nbsp;Bad&nbsp;file&nbsp;descriptor&nbsp;<br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.io.FileOutputStream.write(Native&nbsp;Method)&nbsp;<br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;FileTest.main(TestBadFileDes.java:</span><span style="color: #000000">38</span><span style="color: #000000">)&nbsp;<br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />java.io.IOException:&nbsp;Bad&nbsp;file&nbsp;descriptor&nbsp;<br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.io.FileOutputStream.write(Native&nbsp;Method)&nbsp;<br />
</span><span style="color: #008080">10</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;FileTest.main(TestBadFileDes.java:</span><span style="color: #000000">38</span><span style="color: #000000">)&nbsp;<br />
</span><span style="color: #008080">11</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />java.io.IOException:&nbsp;Bad&nbsp;file&nbsp;descriptor&nbsp;<br />
</span><span style="color: #008080">12</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.io.FileOutputStream.write(Native&nbsp;Method)&nbsp;<br />
</span><span style="color: #008080">13</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;FileTest.main(TestBadFileDes.java:</span><span style="color: #000000">38</span><span style="color: #000000">)&nbsp;<br />
</span><span style="color: #008080">14</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />java.io.IOException:&nbsp;Bad&nbsp;file&nbsp;descriptor&nbsp;<br />
</span><span style="color: #008080">15</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.io.FileOutputStream.write(Native&nbsp;Method)&nbsp;<br />
</span><span style="color: #008080">16</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;FileTest.main(TestBadFileDes.java:</span><span style="color: #000000">38</span><span style="color: #000000">)&nbsp;<br />
</span><span style="color: #008080">17</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />java.io.IOException:&nbsp;Bad&nbsp;file&nbsp;descriptor&nbsp;<br />
</span><span style="color: #008080">18</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.io.FileOutputStream.write(Native&nbsp;Method)&nbsp;<br />
</span><span style="color: #008080">19</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;FileTest.main(TestBadFileDes.java:</span><span style="color: #000000">38</span><span style="color: #000000">)&nbsp;<br />
</span><span style="color: #008080">20</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />java.io.IOException:&nbsp;Bad&nbsp;file&nbsp;descriptor&nbsp;<br />
</span><span style="color: #008080">21</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.io.FileOutputStream.write(Native&nbsp;Method)&nbsp;<br />
</span><span style="color: #008080">22</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;FileTest.main(TestBadFileDes.java:</span><span style="color: #000000">38</span><span style="color: #000000">)&nbsp;<br />
</span><span style="color: #008080">23</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />java.io.IOException:&nbsp;Bad&nbsp;file&nbsp;descriptor&nbsp;<br />
</span><span style="color: #008080">24</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.io.FileOutputStream.write(Native&nbsp;Method)&nbsp;<br />
</span><span style="color: #008080">25</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;FileTest.main(TestBadFileDes.java:</span><span style="color: #000000">38</span><span style="color: #000000">)&nbsp;<br />
</span><span style="color: #008080">26</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />java.io.IOException:&nbsp;Bad&nbsp;file&nbsp;descriptor&nbsp;<br />
</span><span style="color: #008080">27</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.io.FileOutputStream.write(Native&nbsp;Method)&nbsp;<br />
</span><span style="color: #008080">28</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;FileTest.main(TestBadFileDes.java:</span><span style="color: #000000">38</span><span style="color: #000000">)&nbsp;<br />
</span><span style="color: #008080">29</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />java.io.IOException:&nbsp;Bad&nbsp;file&nbsp;descriptor&nbsp;<br />
</span><span style="color: #008080">30</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.io.FileOutputStream.write(Native&nbsp;Method)&nbsp;<br />
</span><span style="color: #008080">31</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;FileTest.main(TestBadFileDes.java:</span><span style="color: #000000">38</span><span style="color: #000000">)&nbsp;<br />
</span><span style="color: #008080">32</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />java.io.IOException:&nbsp;Bad&nbsp;file&nbsp;descriptor&nbsp;<br />
</span><span style="color: #008080">33</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.io.FileOutputStream.write(Native&nbsp;Method)&nbsp;<br />
</span><span style="color: #008080">34</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;FileTest.main(TestBadFileDes.java:</span><span style="color: #000000">38</span><span style="color: #000000">)&nbsp;<br />
</span><span style="color: #008080">35</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />java.io.IOException:&nbsp;Bad&nbsp;file&nbsp;descriptor&nbsp;<br />
</span><span style="color: #008080">36</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.io.FileOutputStream.write(Native&nbsp;Method)&nbsp;<br />
</span><span style="color: #008080">37</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;FileTest.main(TestBadFileDes.java:</span><span style="color: #000000">38</span><span style="color: #000000">)&nbsp;<br />
</span><span style="color: #008080">38</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />java.io.IOException:&nbsp;Bad&nbsp;file&nbsp;descriptor&nbsp;<br />
</span><span style="color: #008080">39</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.io.FileOutputStream.write(Native&nbsp;Method)&nbsp;<br />
</span><span style="color: #008080">40</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;FileTest.main(TestBadFileDes.java:</span><span style="color: #000000">38</span><span style="color: #000000">)&nbsp;<br />
</span><span style="color: #008080">41</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />java.io.IOException:&nbsp;Bad&nbsp;file&nbsp;descriptor&nbsp;<br />
</span><span style="color: #008080">42</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.io.FileOutputStream.write(Native&nbsp;Method)&nbsp;<br />
</span><span style="color: #008080">43</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;FileTest.main(TestBadFileDes.java:</span><span style="color: #000000">38</span><span style="color: #000000">)&nbsp;<br />
</span><span style="color: #008080">44</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />java.io.IOException:&nbsp;Bad&nbsp;file&nbsp;descriptor&nbsp;<br />
</span><span style="color: #008080">45</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.io.FileOutputStream.write(Native&nbsp;Method)&nbsp;<br />
</span><span style="color: #008080">46</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;FileTest.main(TestBadFileDes.java:</span><span style="color: #000000">38</span><span style="color: #000000">)&nbsp;<br />
</span><span style="color: #008080">47</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />java.io.IOException:&nbsp;Bad&nbsp;file&nbsp;descriptor&nbsp;<br />
</span><span style="color: #008080">48</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.io.FileOutputStream.write(Native&nbsp;Method)&nbsp;<br />
</span><span style="color: #008080">49</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;FileTest.main(TestBadFileDes.java:</span><span style="color: #000000">38</span><span style="color: #000000">)&nbsp;<br />
</span><span style="color: #008080">50</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />java.io.IOException:&nbsp;Bad&nbsp;file&nbsp;descriptor&nbsp;<br />
</span><span style="color: #008080">51</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.io.FileOutputStream.write(Native&nbsp;Method)&nbsp;<br />
</span><span style="color: #008080">52</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;FileTest.main(TestBadFileDes.java:</span><span style="color: #000000">38</span><span style="color: #000000">)&nbsp;<br />
</span><span style="color: #008080">53</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />java.io.IOException:&nbsp;Bad&nbsp;file&nbsp;descriptor&nbsp;<br />
</span><span style="color: #008080">54</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.io.FileOutputStream.write(Native&nbsp;Method)&nbsp;<br />
</span><span style="color: #008080">55</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;FileTest.main(TestBadFileDes.java:</span><span style="color: #000000">38</span><span style="color: #000000">)&nbsp;<br />
</span><span style="color: #008080">56</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />java.io.IOException:&nbsp;Bad&nbsp;file&nbsp;descriptor&nbsp;<br />
</span><span style="color: #008080">57</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.io.FileOutputStream.write(Native&nbsp;Method)&nbsp;<br />
</span><span style="color: #008080">58</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;FileTest.main(TestBadFileDes.java:</span><span style="color: #000000">38</span><span style="color: #000000">)&nbsp;<br />
</span><span style="color: #008080">59</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />java.io.IOException:&nbsp;Bad&nbsp;file&nbsp;descriptor&nbsp;<br />
</span><span style="color: #008080">60</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.io.FileOutputStream.write(Native&nbsp;Method)&nbsp;<br />
</span><span style="color: #008080">61</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;FileTest.main(TestBadFileDes.java:</span><span style="color: #000000">38</span><span style="color: #000000">)&nbsp;<br />
</span><span style="color: #008080">62</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />java.io.IOException:&nbsp;Bad&nbsp;file&nbsp;descriptor&nbsp;<br />
</span><span style="color: #008080">63</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.io.FileOutputStream.write(Native&nbsp;Method)&nbsp;<br />
</span><span style="color: #008080">64</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;FileTest.main(TestBadFileDes.java:</span><span style="color: #000000">38</span><span style="color: #000000">)&nbsp;<br />
</span><span style="color: #008080">65</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />java.io.IOException:&nbsp;Bad&nbsp;file&nbsp;descriptor&nbsp;<br />
</span><span style="color: #008080">66</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.io.FileOutputStream.write(Native&nbsp;Method)&nbsp;<br />
</span><span style="color: #008080">67</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;FileTest.main(TestBadFileDes.java:</span><span style="color: #000000">38</span><span style="color: #000000">)&nbsp;<br />
</span><span style="color: #008080">68</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />java.io.IOException:&nbsp;Bad&nbsp;file&nbsp;descriptor&nbsp;<br />
</span><span style="color: #008080">69</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.io.FileOutputStream.write(Native&nbsp;Method)&nbsp;<br />
</span><span style="color: #008080">70</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;FileTest.main(TestBadFileDes.java:</span><span style="color: #000000">38</span><span style="color: #000000">)&nbsp;<br />
</span><span style="color: #008080">71</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />java.io.IOException:&nbsp;Bad&nbsp;file&nbsp;descriptor&nbsp;<br />
</span><span style="color: #008080">72</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.io.FileOutputStream.write(Native&nbsp;Method)&nbsp;<br />
</span><span style="color: #008080">73</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;FileTest.main(TestBadFileDes.java:</span><span style="color: #000000">38</span><span style="color: #000000">)&nbsp;<br />
</span><span style="color: #008080">74</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
把close改成 flush.在流使用完毕后再close掉！问题解决
<img src ="http://www.blogjava.net/hyint/aggbug/256948.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hyint/" target="_blank">苦瓜</a> 2009-02-27 09:10 <a href="http://www.blogjava.net/hyint/articles/256948.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>中标普华LINUX系统安装 AND MySQl 5.0.1 正式版</title><link>http://www.blogjava.net/hyint/articles/256882.html</link><dc:creator>苦瓜</dc:creator><author>苦瓜</author><pubDate>Thu, 26 Feb 2009 11:34:00 GMT</pubDate><guid>http://www.blogjava.net/hyint/articles/256882.html</guid><wfw:comment>http://www.blogjava.net/hyint/comments/256882.html</wfw:comment><comments>http://www.blogjava.net/hyint/articles/256882.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hyint/comments/commentRss/256882.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hyint/services/trackbacks/256882.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;<span style="font-size: 12pt; line-height: 150%; font-family: Wingdings"><span style="font: 7pt 'Times New Roman'"> </span></span><strong><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">安装中标普华Linux操作系统</span></strong>
<p style="text-indent: 21pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">首先安装中标普华Linux操作系统，在第一个安装光盘内，选择光盘安装，然后选择自定义安装（不要选择典型安装，因为典型安装没有安装开发环境，例如：GCC），在安装途中会弹出两个安装图面，一个为通信协议（全选，包括SSH、FTP、HTTP、EMAIL），一个为开发环境（全选，包括GCC、图形界面等），然后根据提示一步一步安装下去。<br />
</span></p>
<p style="margin-left: 21pt; text-indent: -21pt; line-height: 150%; tab-stops: list 21.0pt"><span style="font-size: 12pt; line-height: 150%; font-family: Wingdings"><span style="font: 7pt 'Times New Roman'"><br />
<br />
<br />
</span></span><strong><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">网卡安装<br />
<br />
</span></strong></p>
<p style="line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">中标普华系统内核有些网卡驱动没有包含在内，需要进行安装，如果知道网卡型号，可以直接下载该网卡驱动进行安装，如果还不是很清楚网卡型号，则进行以下操作。</span></p>
<p style="line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">在系统操作终端输入lspci命令后，查看Ethernet controller:信息，可以看出该网卡是什么产商、什么型号的。操作如下：</span></p>
<p style="margin-left: 21pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">[root@localhost ~]# lspci</span></p>
<p style="margin-left: 21pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">00:00.0 Host bridge: Intel Corporation: Unknown device 29c0 (rev 10)</span></p>
<p style="margin-left: 21pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">00:01.0 PCI bridge: Intel Corporation: Unknown device 29c1 (rev 10)</span></p>
<p style="margin-left: 21pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">00:1b.0 Audio device: Intel Corporation 82801G (ICH7 Family) High Definition Audio Controller (rev 01)</span></p>
<p style="margin-left: 21pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">00:1c.0 PCI bridge: Intel Corporation 82801G (ICH7 Family) PCI Express Port 1 (rev 01)</span></p>
<p style="margin-left: 21pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">00:1c.3 PCI bridge: Intel Corporation 82801G (ICH7 Family) PCI Express Port 4 (rev 01)</span></p>
<p style="margin-left: 21pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">00:1d.0 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI #1 (rev 01)</span></p>
<p style="margin-left: 21pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">00:1d.1 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI #2 (rev 01)</span></p>
<p style="margin-left: 21pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">00:1d.2 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI #3 (rev 01)</span></p>
<p style="margin-left: 21pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">00:1d.3 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI #4 (rev 01)</span></p>
<p style="margin-left: 21pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">00:1d.7 USB Controller: Intel Corporation 82801G (ICH7 Family) USB2 EHCI Controller (rev 01)</span></p>
<p style="margin-left: 21pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">00:1e.0 PCI bridge: Intel Corporation 82801 PCI Bridge (rev e1)</span></p>
<p style="margin-left: 21pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">00:1f.0 ISA bridge: Intel Corporation 82801GB/GR (ICH7 Family) LPC Interface Bridge (rev 01)</span></p>
<p style="margin-left: 21pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">00:1f.1 IDE interface: Intel Corporation 82801G (ICH7 Family) IDE Controller (rev 01)</span></p>
<p style="margin-left: 21pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">00:1f.2 IDE interface: Intel Corporation 82801GB/GR/GH (ICH7 Family) Serial ATA Storage Controllers cc=IDE (rev 01)</span></p>
<p style="margin-left: 21pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">00:1f.3 SMBus: Intel Corporation 82801G (ICH7 Family) SMBus Controller (rev 01)</span></p>
<p style="margin-left: 21pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">01:00.0 VGA compatible controller: nVidia Corporation: Unknown device 0641 (rev a1)</span></p>
<p style="margin-left: 21pt; line-height: 150%"><span style="font-size: 12pt; color: red; line-height: 150%; font-family: 宋体">02:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd.: Unknown device 8168 (rev 02)</span></p>
<p style="margin-left: 21pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">&nbsp;</span><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">通过网卡信息找到网卡驱动，将安装包拷贝到服务器上，根据安装说明进行安装。基本安装命令过程如下（下面是以8168网卡进行说明）：</span></p>
<p style="margin-left: 21pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体"># lsmod | grep r8169</span></p>
<p style="margin-left: 21pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体"># rmmod r8169</span></p>
<p style="margin-left: 21pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">#tar vjxf r8168-8.aaa.bb.tar.bz2</span></p>
<p style="margin-left: 21pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体"># cd r8168-8.aaa.bb</span></p>
<p style="margin-left: 21pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体"># make clean modules&nbsp;&nbsp;&nbsp; (as root or with sudo)</span></p>
<p style="margin-left: 21pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体"># make install</span></p>
<p style="margin-left: 21pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体"># depmod -a</span></p>
<p style="margin-left: 21pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体"># insmod ./src/r8168.ko (or r8168.o in linux kernel 2.4.x)</span></p>
<p style="margin-left: 21pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体"># lsmod | grep r8168</span></p>
<p style="margin-left: 21pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体"># ifconfig -a</span></p>
<p style="margin-left: 21pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体"># ifconfig ethX up </span><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">（X=0,1,2,...）<br />
<br />
</span><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">重新启动服务器，系统将在检测新硬件设备是提示出新安装的网卡，可以通过该界面进行网络配置，也可以进入系统进行设备网络配置。<br />
<br />
&nbsp; </p>
<p style="margin-left: 21pt; text-indent: -21pt; line-height: 150%; tab-stops: list 21.0pt"><strong><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">Mysql</span></strong><strong><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">数据库安装</span></strong></p>
<p style="line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">通过SSH客户端将mysql-5.0.22.tar.gz包拷贝到服务器后，打开Linux终端进行以下操作：</span></p>
<p style="margin-left: 21pt; line-height: 150%"><strong><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">1.</span></strong><span style="font-size: 12pt; line-height: 150%; font-family: 宋体"> groupadd mysql </span></p>
<p style="margin-left: 21pt; line-height: 150%"><strong><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">2.</span></strong><span style="font-size: 12pt; line-height: 150%; font-family: 宋体"> useradd -g mysql mysql</span></p>
<p style="margin-left: 21pt; line-height: 150%"><strong><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">3.</span></strong><span style="font-size: 12pt; line-height: 150%; font-family: 宋体"> tar -zxvf mysql-xxxx.tar.gz</span></p>
<p style="margin-left: 21pt; line-height: 150%"><strong><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">4.</span></strong><span style="font-size: 12pt; line-height: 150%; font-family: 宋体"> cd mysql-xxxx</span></p>
<p style="margin-left: 21pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">./configure --prefix=/usr/local/mysql</span></p>
<p style="margin-left: 21pt; line-height: 150%"><strong><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">5.</span></strong><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">make</span></p>
<p style="margin-left: 21pt; line-height: 150%"><strong><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">6.</span></strong><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">make install</span></p>
<p style="margin-left: 21pt; line-height: 150%"><strong><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">7.</span></strong><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">/server/mysql/bin/mysql_install_db --user=mysql</span></p>
<p style="margin-left: 21pt; line-height: 150%"><strong><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">8.</span></strong><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">cp support-files/my-medium.cnf /etc/my.cnf</span></p>
<p style="margin-left: 21pt; line-height: 150%"><strong><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">9.</span></strong><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">cp support-files/mysql.server /etc/rc.d/init.d/mysqld</span></p>
<p style="margin-left: 21pt; line-height: 150%"><strong><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">10. </span></strong><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">chmod 700 /etc/rc.d/init.d/mysqld</span></p>
<p style="margin-left: 21pt; line-height: 150%"><strong><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">11. </span></strong><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">chkconfig --add mysqld</span></p>
<p style="margin-left: 21pt; line-height: 150%"><strong><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">12.</span></strong><span style="font-size: 12pt; line-height: 150%; font-family: 宋体"> cd /server/mysql</span></p>
<p style="margin-left: 21pt; line-height: 150%"><strong><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">13.</span></strong><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">chown -R root .</span></p>
<p style="margin-left: 21pt; line-height: 150%"><strong><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">14.</span></strong><span style="font-size: 12pt; line-height: 150%; font-family: 宋体"> chown -R mysql var</span></p>
<p style="margin-left: 21pt; line-height: 150%"><strong><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">15.</span></strong><span style="font-size: 12pt; line-height: 150%; font-family: 宋体"> chgrp -R mysql .</span></p>
<p style="margin-left: 21pt; line-height: 150%"><strong><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">16.</span></strong><span style="font-size: 12pt; line-height: 150%; font-family: 宋体"> /server/mysql/bin/mysqld_safe --user=mysql &amp;</span></p>
<p style="margin-left: 21pt; line-height: 150%"><strong><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">17.</span></strong><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">在出现 mysqld ended 的时候.点击回车.回到命令行</span></p>
<p style="margin-left: 21pt; line-height: 150%"><strong><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">18.</span></strong><span style="font-size: 12pt; line-height: 150%; font-family: 宋体"> bin/mysql -u root -p</span></p>
<p style="margin-left: 21pt; line-height: 150%"><strong><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">19.</span></strong><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">系统会提示输入密码.由于我们安装时没有设置密码.所以默认密码为空.直接点击回车.</span></p>
<p style="margin-left: 21pt; line-height: 150%"><strong><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">20.</span></strong><span style="font-size: 12pt; line-height: 150%; font-family: 宋体"> usr/bin/mysqladmin -u root password 'new-password'</span></p>
<p style="margin-left: 21pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">格式：mysqladmin -u用户名 -p旧密码 password 新密码<br />
<br />
</span><strong><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">21.</span></strong><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">测试是否修改成功</span></p>
<p style="margin-left: 42pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">1</span><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">）不用密码登录</span></p>
<p style="margin-left: 42pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">[root@test1 local]# mysql</span></p>
<p style="margin-left: 42pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">ERROR 1045: Access denied for user: 'root@localhost' (Using password: NO)</span></p>
<p style="margin-left: 42pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">显示错误，说明密码已经修改。</span></p>
<p style="margin-left: 42pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">2</span><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">）用修改后的密码登录</span></p>
<p style="margin-left: 42pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">[root@test1 local]# mysql -u root -p</span></p>
<p style="margin-left: 42pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">Enter password: (</span><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">输入修改后的密码123456)</span></p>
<p style="margin-left: 42pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">Welcome to the MySQL monitor.</span><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">　Commands end with ; or g.</span></p>
<p style="margin-left: 42pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">Your MySQL connection id is 4 to server version: 4.0.16-standard</span></p>
<p style="margin-left: 42pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">Type 'help;' or 'h' for help. Type 'c' to clear the buffer.</span></p>
<p style="margin-left: 42pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">mysql&gt;</span></p>
<p style="margin-left: 42pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">成功！</span></p>
<p style="line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体"><strong>&nbsp;&nbsp;&nbsp;&nbsp;22.</strong></span><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">在防火墙内打开数据库端口3306</span></p>
<p style="line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; vi /etc/sysconfig/iptables</span><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">（按上面开放80,22端口的形式，加一条3306端口）</span></p>
<p style="line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">打开防火墙和关闭防火墙的指令：</span></p>
<p style="line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1</span><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">）即时生效，重启服务器后失效</span></p>
<p style="margin-left: 21pt; text-indent: 21pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">开启： service iptables start</span></p>
<p style="margin-left: 21pt; text-indent: 21pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">关闭： service iptables stop</span></p>
<p style="margin-left: 21pt; text-indent: 21pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">2</span><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">）重启服务器后生效</span></p>
<p style="margin-left: 21pt; text-indent: 21pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">开启： chkconfig iptables on</span></p>
<p style="margin-left: 21pt; text-indent: 21pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">关闭： chkconfig iptables off</span></p>
<p style="line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体"><strong>23.</strong></span><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">分配远程连接数据库的权限</span></p>
<p style="line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; </span><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">进入MySQL,创建一个新用户xuys:&nbsp;&nbsp;&nbsp; </span></p>
<p style="line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">格式: grant 权限 on 数据库名.表名用户@登录主机 identified by "用户密码";</span></p>
<p style="line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;grant select,update,insert,delete on *.* to xuys@192.168.88.234 identified by "xuys1234";</span></p>
<p style="text-indent: 18pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">查看结果,执行:</span></p>
<p style="line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;use mysql;</span></p>
<p style="line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;select host,user,password from user;</span></p>
<p style="line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">可以看到在user表中已有刚才创建的xuys用户,host字段表示登录的主机,其值可以用IP,也可用主机名,将host字段的值改为%就表示在任何客户端机器上能以xuys用户登录到MySQL服务器,建议在开发时设为%.</span></p>
<p style="line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;update user set host = '%' where user = 'xuys';<br />
</span><span style="font-size: 12pt; line-height: 150%; font-family: 宋体"><strong>&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp; 24.</strong></span><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">修改my.cnf配置文件（解决关于linux中mysql中编码的问题(UTF-8)）</span></p>
<p style="margin-left: 21pt; text-indent: 21pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">#linux my.cnf</span><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">文件的放置位置</span></p>
<p style="margin-left: 42pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">/etc/my.cnf</span></p>
<p style="margin-left: 42pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">*************************************************************</span></p>
<p style="margin-left: 42pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">不管什么时候，编码一定要统一，这是保证数据能正确入库的前提。</span></p>
<p style="margin-left: 42pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">首先要配置你的mysql的默认编码方式为UTF-8。</span></p>
<p style="margin-left: 42pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">其次mysql语句区分大小写，对此也需要进行修改。</span></p>
<p style="margin-left: 42pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">具体看my.cnf的配置.</span></p>
<p style="margin-left: 42pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体"># vi /etc/my.cnf</span></p>
<p style="margin-left: 42pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">#</span><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">下面是很重要的=====================================</span></p>
<p style="margin-left: 42pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">[client]</span></p>
<p style="margin-left: 42pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">#password&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = your_password</span></p>
<p style="margin-left: 42pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">port&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 3306</span></p>
<p style="margin-left: 42pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">socket&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = /tmp/mysql.sock</span></p>
<p style="margin-left: 42pt; line-height: 150%"><span style="font-size: 12pt; color: red; line-height: 150%; font-family: 宋体">default-character-set = utf8</span></p>
<p style="margin-left: 42pt; line-height: 150%"><span style="font-size: 12pt; color: red; line-height: 150%; font-family: 宋体">lower_case_table_names=1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -----</span><span style="font-size: 12pt; color: red; line-height: 150%; font-family: 宋体">不区别大小写</span></p>
<p style="margin-left: 42pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">[mysqld]</span></p>
<p style="margin-left: 42pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">port&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 3306</span></p>
<p style="margin-left: 42pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">socket&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = /tmp/mysql.sock</span></p>
<p style="margin-left: 42pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">skip-locking</span></p>
<p style="margin-left: 42pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">key_buffer = 16M</span></p>
<p style="margin-left: 42pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">max_allowed_packet = 1M</span></p>
<p style="margin-left: 42pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">table_cache = 64</span></p>
<p style="margin-left: 42pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">sort_buffer_size = 512K</span></p>
<p style="margin-left: 42pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">net_buffer_length = 8K</span></p>
<p style="margin-left: 42pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">read_buffer_size = 256K</span></p>
<p style="margin-left: 42pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">read_rnd_buffer_size = 512K</span></p>
<p style="margin-left: 42pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">myisam_sort_buffer_size = 8M</span></p>
<p style="margin-left: 42pt; line-height: 150%"><span style="font-size: 12pt; color: red; line-height: 150%; font-family: 宋体">default-character-set = utf8</span></p>
<p style="margin-left: 42pt; line-height: 150%"><span style="font-size: 12pt; color: red; line-height: 150%; font-family: 宋体">lower_case_table_names=1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -----</span><span style="font-size: 12pt; color: red; line-height: 150%; font-family: 宋体">不区别大小写</span></p>
<p style="margin-left: 42pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">#*************************************************************</span></p>
<p style="line-height: 150%"><span style="font-size: 12pt; color: red; line-height: 150%; font-family: 宋体">&nbsp;&nbsp;&nbsp; </span><strong><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">25.</span></strong><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">启动和关闭、重启mysql数据库指令</span></p>
<p style="text-indent: 36pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">/etc/rc.d/init.d/mysqld stop (</span><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">停止mysql)</span></p>
<p style="text-indent: 36pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">/etc/rc.d/init.d/mysqld start (</span><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">启动mysql)</span></p>
<p style="text-indent: 36pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">/etc/init.d/mysqld restart (</span><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">重启mysql)</span></p>
</span>
<img src ="http://www.blogjava.net/hyint/aggbug/256882.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hyint/" target="_blank">苦瓜</a> 2009-02-26 19:34 <a href="http://www.blogjava.net/hyint/articles/256882.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>不同的Object在不同层面上的应用</title><link>http://www.blogjava.net/hyint/articles/256077.html</link><dc:creator>苦瓜</dc:creator><author>苦瓜</author><pubDate>Sun, 22 Feb 2009 11:00:00 GMT</pubDate><guid>http://www.blogjava.net/hyint/articles/256077.html</guid><wfw:comment>http://www.blogjava.net/hyint/comments/256077.html</wfw:comment><comments>http://www.blogjava.net/hyint/articles/256077.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hyint/comments/commentRss/256077.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hyint/services/trackbacks/256077.html</trackback:ping><description><![CDATA[<p><span style="font-size: 18pt; color: red; font-family: 宋体"><strong><span style="font-size: 12pt; font-family: 宋体">1</span><span style="font-size: 12pt; font-family: 宋体">、PO:persistant object</span></strong></span></p>
<p style="background: white; text-indent: 24pt; text-align: left" align="left"><span style="font-size: 12pt; font-family: 宋体">持久对象,可以看成是与数据库中的表相映射的java对象。最简单的PO就是对应数据库中某个表中的一条记录，多个记录可以用PO的集合。PO中应该不包含任何对数据库的操作. 最形象的理解就是一个PO就是数据库中的一条记录。好处是可以把一条记录作为一个对象处理，可以方便的转为其它对象。<br />
<br />
</span></p>
<p style="background: white; text-align: left" align="left"><span style="font-size: 12pt; font-family: 宋体"><span style="color: red"><strong style="font-size: 18pt"><span style="font-size: 12pt; font-family: 宋体">2</span><span style="font-size: 12pt; font-family: 宋体">、VO。</span></strong></span></span></p>
<p style="background: white; text-indent: 18pt; text-align: left" align="left"><span style="font-size: 12pt; font-family: 宋体">2.1 value object</span><span style="font-size: 12pt; font-family: 宋体">值对象。</span></p>
<p style="background: white; text-indent: 24pt; text-align: left" align="left"><span style="font-size: 12pt; font-family: 宋体">通常用于业务层之间的数据传递，和PO一样也是仅仅包含数据而已。但应是抽象出的业务对象,可以和表对应,也可以不,这根据业务的需要.个人觉得同DTO(数据传输对象),在web上传递.<br />
&nbsp;&nbsp;&nbsp; 2.2 View Object表现层对象：主要对应界面显示的数据对象。对于一个WEB页面，或者SWT、SWING的一个界面，用一个VO对象对应整个界面的值。<br />
<br />
</span></p>
<p style="background: white; text-align: left" align="left"><span style="font-size: 12pt; font-family: 宋体"><span style="font-size: 18pt; color: red"><strong><span style="font-size: 12pt; font-family: 宋体">3</span><span style="font-size: 12pt; font-family: 宋体">、DAO</span></strong></span></span><span style="font-size: 12pt; font-family: 宋体"><span style="font-size: 18pt"><span style="font-family: 宋体"><strong style="color: red">:data access object</strong></span></span>数据访问对象，此对象用于访问数据库。</span></p>
<p style="background: white; text-indent: 24pt; text-align: left" align="left"><span style="font-size: 12pt; font-family: 宋体">通常和PO结合使用，DAO中包含了各种数据库的操作方法。通过它的方法,结合PO对数据库进行相关的操作. 通过它可以把POJO持久化为PO，用PO组装出来VO、DTO<br />
<br />
</span></p>
<p style="background: white; text-align: left" align="left"><span style="font-size: 12pt; font-family: 宋体"><span style="color: red"><strong><span style="font-size: 12pt; font-family: 宋体">4</span><span style="font-size: 12pt; font-family: 宋体">、BO:business object</span></strong></span></span><span style="font-size: 12pt; font-family: 宋体">业务对象。</span></p>
<p style="background: white; text-indent: 18pt; text-align: left" align="left"><span style="font-size: 12pt; font-family: 宋体">封装业务逻辑的java对象,通过调用DAO方法,结合PO,VO进行业务操作; 主要作用是把业务逻辑封装为一个对象。这个对象可以包括一个或多个其它的对象。</span></p>
<p style="background: white; text-indent: 18pt; text-align: left" align="left"><span style="font-size: 12pt; font-family: 宋体"><br />
<span style="font-size: 18pt; color: red"><strong style="font-size: 18pt; font-family: 宋体"><span style="font-size: 12pt; font-family: 宋体"><span style="font-size: 18pt"><span style="color: red"><strong style="font-family: 宋体"><span style="font-family: 宋体">5</span><span style="font-family: 宋体">、POJO:</span></strong></span></span></span><span style="font-size: 12pt; font-family: 宋体"><span style="font-size: 18pt">pure old java object or plain ordinary java object.</span></span></strong></span></span><span style="font-size: 12pt; font-family: 宋体">古老的Java对象。我个人觉得它和其他不是一个层面上的东西,VO和PO应该都属于它.比如一个简历，有教育经历、工作经历、社会关系等等。<br />
&nbsp;&nbsp;&nbsp; 我们可以把教育经历对应一个PO，工作经历对应一个PO，社会 关系对应一个PO。建立一个对应简历的BO对象处理简历，每个BO包含这些PO。<br />
这样处理业务逻辑时，我们就可以针对BO去处理。<br />
<br />
<span style="font-size: 18pt; color: red"><strong style="font-size: 14pt; font-family: 宋体">6、DTO:Data Transfer Object</strong></span>数据传输对象<br />
&nbsp;&nbsp;&nbsp;&nbsp; 主要用于远程调用等需要大量传输对象的地方。比如我们一张表有100个字段，那么对应的PO就有100个属性。但是我们界面上只要显示10个字段，客户端用WEB service来获取数据，没有必要把整个PO对象传递到客户端，<br />
这时我们就可以用只有这10个属性的DTO来传递结果到客户端，这样也不会暴露服务端表结构.到达客户端以后，如果用这个对象来对应界面显示，那此时它的身份就转为VO</span></p>
<p style="background: white; text-indent: 18pt; text-align: left" align="left">&nbsp;<span style="font-size: 12pt; font-family: 宋体">总结下我认为一个对象究竟是什么O要看具体环境，在不同的层、不同的应用场合，对象的身份也不一样，而且对象身份的转化也是很自然的。设计这些概念的初衷不是为了唬人而是为了更好的理解和处理各种逻辑，让大家能更好的去用面向对象的方式处理问题. </span></p>
<img src ="http://www.blogjava.net/hyint/aggbug/256077.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hyint/" target="_blank">苦瓜</a> 2009-02-22 19:00 <a href="http://www.blogjava.net/hyint/articles/256077.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring 存在的意义--- 我之见</title><link>http://www.blogjava.net/hyint/articles/256075.html</link><dc:creator>苦瓜</dc:creator><author>苦瓜</author><pubDate>Sun, 22 Feb 2009 10:47:00 GMT</pubDate><guid>http://www.blogjava.net/hyint/articles/256075.html</guid><wfw:comment>http://www.blogjava.net/hyint/comments/256075.html</wfw:comment><comments>http://www.blogjava.net/hyint/articles/256075.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hyint/comments/commentRss/256075.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hyint/services/trackbacks/256075.html</trackback:ping><description><![CDATA[1、为什么要用Spring.<br />
<wbr style="line-height: 1.8em"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 因为只要是OOP开发的应用，都是由对象与对象之间进行协作进行工作的，那么对象与对象之间的关系管理（依赖关系）如果需要自己用代码进行维护很麻烦。用了Spring就可以省去这麻烦的工作了。<br />
<br />
2、用了Spring有什么好处和坏处？<br />
<wbr style="line-height: 1.8em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 好处多了去了。除了最核心的DI容器功能外，比较突出的好处主要有:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;一、在Spring环境下进行AOP的开发是非常轻松的；<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 二、可以使用Spring提供的容器事务支持，让万恶的手工事务代码死一边去；<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 三、Spring简直就像小叮当的百宝袋，什么好东西都有，有太多的工作类可以简化我们的开发了&#8230;&#8230;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 至于坏处嘛&#8230;&#8230;好像觉得它坏的人，都是用了不正确的方式或思路来使用它嘛。如果非要给它挑刺的话，或许它目前不支持集群，这个可以算它的坏处了。<br />
<br />
3、Spring 中 AOP 这个思想有什么好处？<br />
<br />
<wbr style="line-height: 1.8em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AOP不能说是Spring的东西，Spring只是使用了Aop联盟的标准和AspectJ的代码，在自己的容器内提供了AOP开发方式的支持。不过AOP这东西好处还是很多的，从最抽象的层次来说，AOP是OOP的有效补充，OOP关注的是对象间的协作，AOP关注的是任务/事务的执行过程。简白点说，AOP可以很轻松地在分层架构的层与层之间，甚至可以小到某个类的某个方法调用前后，动态添加要执行的代码。只要你发挥自己的想象力，很多原来用OO方式很难处理的问题用AOP方式实现都是很轻松的。<br />
<br />
4、Spring 是怎么管理事务的，事务等级是什么？<br />
<wbr style="line-height: 1.8em"><br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;4.1 &nbsp;Spring怎么管理事务？<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 偶可没有把Spring的源码全部读完，不过它肯定是通过代码进行管理的，这偶可以肯定。如果你是想问我Spring提供些什么的事务支持，偶<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;倒是可以说一下。Spring提供2类事务支持，声明式和编程式，如果你有自虐倾向，建议使用编程式。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4.2 事务等级<br />
<wbr style="line-height: 1.8em"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 偶是没有听说过这个词，不过倒是听说过两个词事务传播性和隔离级别。在声明式事务中，他们都是枚举值，直接写到事务的注释中就可以了。传播性控制事务的开关，调用的方法以何种方式加入事务。至于隔离级别，这是指数据库的事务隔离级别，所以具体还要看在用的数据库是否支持相应的事务隔离级别，不支持的级别设置了也白搭，主要是解决事务并发时数据的脏读、幻读等问题的！ 
 <img src ="http://www.blogjava.net/hyint/aggbug/256075.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hyint/" target="_blank">苦瓜</a> 2009-02-22 18:47 <a href="http://www.blogjava.net/hyint/articles/256075.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MySql 备份与整理问题</title><link>http://www.blogjava.net/hyint/articles/256073.html</link><dc:creator>苦瓜</dc:creator><author>苦瓜</author><pubDate>Sun, 22 Feb 2009 10:37:00 GMT</pubDate><guid>http://www.blogjava.net/hyint/articles/256073.html</guid><wfw:comment>http://www.blogjava.net/hyint/comments/256073.html</wfw:comment><comments>http://www.blogjava.net/hyint/articles/256073.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/hyint/comments/commentRss/256073.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hyint/services/trackbacks/256073.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 最近想写一个mysql的备份，竟然发现不会写了！现在做个记录。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 首先，设置mysql的环境变量（在path中添加%MYSQL_HOME%\bin），重启电脑。 完整代码： 备份：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1/**&nbsp;*//**&nbsp;...&nbsp;&nbsp;<a href='http://www.blogjava.net/hyint/articles/256073.html'>阅读全文</a><img src ="http://www.blogjava.net/hyint/aggbug/256073.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hyint/" target="_blank">苦瓜</a> 2009-02-22 18:37 <a href="http://www.blogjava.net/hyint/articles/256073.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SOA框架的六个不完美之处</title><link>http://www.blogjava.net/hyint/articles/256069.html</link><dc:creator>苦瓜</dc:creator><author>苦瓜</author><pubDate>Sun, 22 Feb 2009 10:24:00 GMT</pubDate><guid>http://www.blogjava.net/hyint/articles/256069.html</guid><wfw:comment>http://www.blogjava.net/hyint/comments/256069.html</wfw:comment><comments>http://www.blogjava.net/hyint/articles/256069.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hyint/comments/commentRss/256069.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hyint/services/trackbacks/256069.html</trackback:ping><description><![CDATA[<font style="line-height: 1.8em" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 作为一个具有发展前景的应用系统架构，SOA尚处在不断的发展中，肯定存在许多有待改进的地方。Stencil Group咨询公司的Brent Sleeper 在《The five missing pieces of SOA》中列举了SOA在可靠性、安全性、编制、遗留系统支持和语义方面还存在严重不足。<br />
一 : 可靠性(Reliability)<br />
　　SOA还没有完全为事务的最高可靠性——不可否认性(nonrepudiation)、消息一定会被传送且仅传送一次(once-and-only-once delivery)以及事务撤回(rollback)——做好准备，不过等标准和实施技术成熟到可以满足这一需求的程度并不遥远。<br />
二 : 安全性(Security)<br />
　　在过去，访问控制只需要登录和验证; 而在SOA环境中，由于一个应用软件的组件很容易去跟属于不同域的其他组件进行对话，所以确保迥然不同又相互连接的系统之间的安全性就复杂得多了。<br />
三 : 编排 (Orchestration)<br />
　　统一协调分布式软件组件以便构建有意义的业务流程是最复杂的，但它同时也最适合面向服务类型的集成，原因很显然，建立在SOA上面的应用软件可以被设计成可以按需要拆散、重新组装的服务。作为目前业务流程管理(BPM)解决方案的核心，编排功能使IT管理人员能够通过已经部署的套装或自己开发的应用软件的功能，把新的元应用软件(meta-application)连接起来。 事实上，最大的难题不是建立模块化的应用软件，而是改变这些系统表示所处理数据的方法。<br />
四 :遗留系统处理(Legacy support)<br />
　　SOA中提供集成遗留系统的适配器， 遗留应用适配器屏蔽了许多专用性API的复杂性和晦涩性。一个设计良好的适配器的作用好比是一个设计良好的SOA服务：它提供了一个抽象层，把应用基础设施的其余部分与各种棘手问题隔离开来。一些厂商就专门把遗留应用软件&#8220;语义集成&#8221;到基于XML的集成构架中。 但是集成遗留系统的工作始终是一个挑战。<br />
五 : 语义 Semantics<br />
　　定义事务和数据的业务含义，一直是IT管理人员面临的最棘手问题。语义关系是设计良好SOA架构的核心要素。 就目前而言，没有哪一项技术或软件产品能够真正解决语义问题。为针对特定行业和功能的流程定义并实施功能和数据模型是一项繁重的任务，它最终必须由业务和IT管理人员共同承担。不过，预制组件和经过实践证明的咨询技能可以简化许多难题。<br />
　　采用XML技术也许是一个不错的主意。许多公司越来越认识到制定本行业XML标准的重要性。譬如，会计行业已提议用可扩展业务报告语言(XBRL)来描述及审查总账类型的记录。<br />
　　重要的是学会如何以服务来表示基本的业务流程。改变开发方式需要文化变迁，相比之下，解决技术难题只是一种智力操练。<br />
六 :性能(performance)<br />
　　批评SOA的人士经常会提到性能是阻碍其采用的一个障碍，但技术的标准化总需要在速度方面有一些牺牲。这种怀疑观点通常针对两个方面：SOA的分布性质和Web服务协议的开销。<br />
　　不可否认，任何分布式系统的执行速度都不如独立式系统，这完全是因为网络的制约作用造成的。当然，有些应用软件无法容忍网络引起的延迟，例如那些对实时性要求很高的应用软件，所以在应用SOA架构之前，搞清楚它的适用范围就显得很重要了</font><wbr style="line-height: 1.8em"> 
<img src ="http://www.blogjava.net/hyint/aggbug/256069.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hyint/" target="_blank">苦瓜</a> 2009-02-22 18:24 <a href="http://www.blogjava.net/hyint/articles/256069.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tomcat配置 JNDI </title><link>http://www.blogjava.net/hyint/articles/256068.html</link><dc:creator>苦瓜</dc:creator><author>苦瓜</author><pubDate>Sun, 22 Feb 2009 10:23:00 GMT</pubDate><guid>http://www.blogjava.net/hyint/articles/256068.html</guid><wfw:comment>http://www.blogjava.net/hyint/comments/256068.html</wfw:comment><comments>http://www.blogjava.net/hyint/articles/256068.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hyint/comments/commentRss/256068.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hyint/services/trackbacks/256068.html</trackback:ping><description><![CDATA[<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">&nbsp;1</span><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">&lt;!--</span><span style="color: #000000">&nbsp;Context.xml&nbsp;</span><span style="color: #000000">--&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&lt;</span><span style="color: #000000">Resource<br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">jdbcSource_1</span><span style="color: #000000">"</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">javax.sql.DataSource</span><span style="color: #000000">"</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;password</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">we0801</span><span style="color: #000000">"</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;driverClassName</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">oracle.jdbc.driver.OracleDriver</span><span style="color: #000000">"</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maxIdle</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">2</span><span style="color: #000000">"</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maxWait</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">5000</span><span style="color: #000000">"</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;username</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">we0801</span><span style="color: #000000">"</span><span style="color: #000000"><br />
</span><span style="color: #008080">10</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;url</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">jdbc:oracle:thin:@192.168.1.100:1521:booleanlab</span><span style="color: #000000">"</span><span style="color: #000000"><br />
</span><span style="color: #008080">11</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maxActive</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">4</span><span style="color: #000000">"</span><span style="color: #000000">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">12</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">13</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&lt;!--</span><span style="color: #000000">&nbsp;web.xml&nbsp;</span><span style="color: #000000">--&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">14</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">15</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">resource</span><span style="color: #000000">-</span><span style="color: #000000">ref</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">16</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">res</span><span style="color: #000000">-</span><span style="color: #000000">ref</span><span style="color: #000000">-</span><span style="color: #000000">name</span><span style="color: #000000">&gt;</span><span style="color: #000000">jdbcSource_1</span><span style="color: #000000">&lt;/</span><span style="color: #000000">res</span><span style="color: #000000">-</span><span style="color: #000000">ref</span><span style="color: #000000">-</span><span style="color: #000000">name</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">17</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">res</span><span style="color: #000000">-</span><span style="color: #000000">type</span><span style="color: #000000">&gt;</span><span style="color: #000000">javax.sql.DataSource</span><span style="color: #000000">&lt;/</span><span style="color: #000000">res</span><span style="color: #000000">-</span><span style="color: #000000">type</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">18</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&lt;</span><span style="color: #000000">res</span><span style="color: #000000">-</span><span style="color: #000000">auth</span><span style="color: #000000">&gt;</span><span style="color: #000000">Container</span><span style="color: #000000">&lt;/</span><span style="color: #000000">res</span><span style="color: #000000">-</span><span style="color: #000000">auth</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">19</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">resource</span><span style="color: #000000">-</span><span style="color: #000000">ref</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">20</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">21</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&lt;!--</span><span style="color: #000000">&nbsp;获得数据源&nbsp;</span><span style="color: #000000">--&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">22</span><span style="color: #000000"><img id="Codehighlighter1_540_873_Open_Image" onclick="this.style.display='none'; Codehighlighter1_540_873_Open_Text.style.display='none'; Codehighlighter1_540_873_Closed_Image.style.display='inline'; Codehighlighter1_540_873_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_540_873_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_540_873_Closed_Text.style.display='none'; Codehighlighter1_540_873_Open_Image.style.display='inline'; Codehighlighter1_540_873_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;Connection&nbsp;getConnection()</span><span id="Codehighlighter1_540_873_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"  alt="" /></span><span id="Codehighlighter1_540_873_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">23</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;Connection&nbsp;con&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">;<br />
</span><span style="color: #008080">24</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;Context&nbsp;ctx&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">;<br />
</span><span style="color: #008080">25</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;DataSource&nbsp;ds</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">;<br />
</span><span style="color: #008080">26</span><span style="color: #000000"><img id="Codehighlighter1_618_748_Open_Image" onclick="this.style.display='none'; Codehighlighter1_618_748_Open_Text.style.display='none'; Codehighlighter1_618_748_Closed_Image.style.display='inline'; Codehighlighter1_618_748_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_618_748_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_618_748_Closed_Text.style.display='none'; Codehighlighter1_618_748_Open_Image.style.display='inline'; Codehighlighter1_618_748_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span style="color: #000000">&nbsp;</span><span id="Codehighlighter1_618_748_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"  alt="" /></span><span id="Codehighlighter1_618_748_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">27</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;ctx&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;InitialContext();<br />
</span><span style="color: #008080">28</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;ds&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(DataSource)&nbsp;ctx.lookup(</span><span style="color: #000000">"</span><span style="color: #000000">java:comp/env/jdbcSource_1</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">29</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;con&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;ds.getConnection();<br />
</span><span style="color: #008080">30</span><span style="color: #000000"><img id="Codehighlighter1_776_804_Open_Image" onclick="this.style.display='none'; Codehighlighter1_776_804_Open_Text.style.display='none'; Codehighlighter1_776_804_Closed_Image.style.display='inline'; Codehighlighter1_776_804_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_776_804_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_776_804_Closed_Text.style.display='none'; Codehighlighter1_776_804_Open_Image.style.display='inline'; Codehighlighter1_776_804_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">&nbsp;(NamingException&nbsp;e)&nbsp;</span><span id="Codehighlighter1_776_804_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"  alt="" /></span><span id="Codehighlighter1_776_804_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">31</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
</span><span style="color: #008080">32</span><span style="color: #000000"><img id="Codehighlighter1_829_857_Open_Image" onclick="this.style.display='none'; Codehighlighter1_829_857_Open_Text.style.display='none'; Codehighlighter1_829_857_Closed_Image.style.display='inline'; Codehighlighter1_829_857_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_829_857_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_829_857_Closed_Text.style.display='none'; Codehighlighter1_829_857_Open_Image.style.display='inline'; Codehighlighter1_829_857_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">&nbsp;(SQLException&nbsp;e)&nbsp;</span><span id="Codehighlighter1_829_857_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"  alt="" /></span><span id="Codehighlighter1_829_857_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">33</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
</span><span style="color: #008080">34</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">35</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;con;<br />
</span><span style="color: #008080">36</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000">&nbsp;</span></div>
<img src ="http://www.blogjava.net/hyint/aggbug/256068.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hyint/" target="_blank">苦瓜</a> 2009-02-22 18:23 <a href="http://www.blogjava.net/hyint/articles/256068.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tomcat 连接池配置与使用</title><link>http://www.blogjava.net/hyint/articles/256067.html</link><dc:creator>苦瓜</dc:creator><author>苦瓜</author><pubDate>Sun, 22 Feb 2009 10:21:00 GMT</pubDate><guid>http://www.blogjava.net/hyint/articles/256067.html</guid><wfw:comment>http://www.blogjava.net/hyint/comments/256067.html</wfw:comment><comments>http://www.blogjava.net/hyint/articles/256067.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hyint/comments/commentRss/256067.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hyint/services/trackbacks/256067.html</trackback:ping><description><![CDATA[<div id="blogDetailDiv" style="font-size: 12px">首先备份你的$TomcatHome$/conf/server.xml文件（$TomcatHome$是指你的tomcat安装路径）,然后在&lt;Host&gt;节点下添加: <br />
<br />
代码 <br />
<br />
<ol style="list-style-type: decimal"></ol>
    <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">&nbsp;1</span><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">&lt;</span><span style="color: #000000">Context&nbsp;path</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">/pool</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;docBase</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">pool</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
    </span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">Resource&nbsp;name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">jdbc/test</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;scope</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">Shareable</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;type</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">javax.sql.DataSource</span><span style="color: #000000">"</span><span style="color: #000000">/&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
    </span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">ResourceParams&nbsp;name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">jdbc/test</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
    </span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">parameter</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
    </span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">name</span><span style="color: #000000">&gt;</span><span style="color: #000000">factory</span><span style="color: #000000">&lt;/</span><span style="color: #000000">name</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
    </span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">value</span><span style="color: #000000">&gt;</span><span style="color: #000000">org.apache.commons.dbcp.BasicDataSourceFactory</span><span style="color: #000000">&lt;/</span><span style="color: #000000">value</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
    </span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">parameter</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
    </span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&lt;!--</span><span style="color: #000000">&nbsp;DBCP&nbsp;database&nbsp;connection&nbsp;settings&nbsp;</span><span style="color: #000000">--&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
    </span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">parameter</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
    </span><span style="color: #008080">10</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">name</span><span style="color: #000000">&gt;</span><span style="color: #000000">url</span><span style="color: #000000">&lt;/</span><span style="color: #000000">name</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
    </span><span style="color: #008080">11</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">value</span><span style="color: #000000">&gt;</span><span style="color: #000000">jdbc:jtds:sqlserver:</span><span style="color: #008000">//</span><span style="color: #008000">localhost:1433;DatabaseName=pubs&lt;/value&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br />
    </span><span style="color: #008080">12</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">parameter</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
    </span><span style="color: #008080">13</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">parameter</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
    </span><span style="color: #008080">14</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">name</span><span style="color: #000000">&gt;</span><span style="color: #000000">driverClassName</span><span style="color: #000000">&lt;/</span><span style="color: #000000">name</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
    </span><span style="color: #008080">15</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">value</span><span style="color: #000000">&gt;</span><span style="color: #000000">net.sourceforge.jtds.jdbc.Driver</span><span style="color: #000000">&lt;/</span><span style="color: #000000">value</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
    </span><span style="color: #008080">16</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">parameter</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
    </span><span style="color: #008080">17</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">parameter</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
    </span><span style="color: #008080">18</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">name</span><span style="color: #000000">&gt;</span><span style="color: #000000">username</span><span style="color: #000000">&lt;/</span><span style="color: #000000">name</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
    </span><span style="color: #008080">19</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">value</span><span style="color: #000000">&gt;</span><span style="color: #000000">sa</span><span style="color: #000000">&lt;/</span><span style="color: #000000">value</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
    </span><span style="color: #008080">20</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">parameter</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
    </span><span style="color: #008080">21</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">parameter</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
    </span><span style="color: #008080">22</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">name</span><span style="color: #000000">&gt;</span><span style="color: #000000">password</span><span style="color: #000000">&lt;/</span><span style="color: #000000">name</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
    </span><span style="color: #008080">23</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">value</span><span style="color: #000000">&gt;</span><span style="color: #000000">sa</span><span style="color: #000000">&lt;/</span><span style="color: #000000">value</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
    </span><span style="color: #008080">24</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">parameter</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
    </span><span style="color: #008080">25</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&lt;!--</span><span style="color: #000000">&nbsp;DBCP&nbsp;connection&nbsp;pooling&nbsp;options&nbsp;</span><span style="color: #000000">--&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
    </span><span style="color: #008080">26</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">parameter</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
    </span><span style="color: #008080">27</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">name</span><span style="color: #000000">&gt;</span><span style="color: #000000">maxWait</span><span style="color: #000000">&lt;/</span><span style="color: #000000">name</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
    </span><span style="color: #008080">28</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">value</span><span style="color: #000000">&gt;</span><span style="color: #000000">3000</span><span style="color: #000000">&lt;/</span><span style="color: #000000">value</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
    </span><span style="color: #008080">29</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">parameter</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
    </span><span style="color: #008080">30</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">parameter</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
    </span><span style="color: #008080">31</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">name</span><span style="color: #000000">&gt;</span><span style="color: #000000">maxIdle</span><span style="color: #000000">&lt;/</span><span style="color: #000000">name</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
    </span><span style="color: #008080">32</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">value</span><span style="color: #000000">&gt;</span><span style="color: #000000">100</span><span style="color: #000000">&lt;/</span><span style="color: #000000">value</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
    </span><span style="color: #008080">33</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">parameter</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
    </span><span style="color: #008080">34</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">parameter</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
    </span><span style="color: #008080">35</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">name</span><span style="color: #000000">&gt;</span><span style="color: #000000">maxActive</span><span style="color: #000000">&lt;/</span><span style="color: #000000">name</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
    </span><span style="color: #008080">36</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">value</span><span style="color: #000000">&gt;</span><span style="color: #000000">10</span><span style="color: #000000">&lt;/</span><span style="color: #000000">value</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
    </span><span style="color: #008080">37</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">parameter</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
    </span><span style="color: #008080">38</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&lt;/</span><span style="color: #000000">ResourceParams</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
    </span><span style="color: #008080">39</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&lt;/</span><span style="color: #000000">Context</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
    </span><span style="color: #008080">40</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
    <br />
    其中红色部分是你需要修改的。&nbsp;<br />
    <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">1</span><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">&lt;</span><span style="color: #000000">Context&nbsp;path</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">/pool</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;docBase</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">pool</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">这里的pool是指你的项目在tomcat发布目录webapps下的目录路径，这里我的项目目录为：<img src="http://www.blogjava.net/Images/dot.gif"  alt="" />/webapps/pool&nbsp;</span><span style="color: #008000"><br />
    </span><span style="color: #008080">2</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&lt;</span><span style="color: #000000">Resource&nbsp;name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">jdbc/test</span><span style="color: #000000">"</span><span style="color: #000000">..</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">jdbc/test为需要通过jndi调用的数据源名称。&nbsp;</span><span style="color: #008000"><br />
    </span><span style="color: #008080">3</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&lt;</span><span style="color: #000000">value</span><span style="color: #000000">&gt;</span><span style="color: #000000">org.apache.commons.dbcp.BasicDataSourceFactory</span><span style="color: #000000">&lt;/</span><span style="color: #000000">value</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">这里我们用的是dbcp连接池包，这是apache提供的一个免费开源连接池，而且效率和稳定性都不错。如果你使用的是tomcat5x或以上的版本，可以在$TomcatHome$/common/lib目录下找到它。</span></div>
    <br />
    关于数据库的设置，这里就不在多说。&nbsp;&nbsp; <br />
    下面打开web.xml文件，在其根节点下添加数据源的引用设置。 <br />
    <br />
    代码&nbsp;<br />
    <br />
    <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">1</span><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">&lt;</span><span style="color: #000000">resource</span><span style="color: #000000">-</span><span style="color: #000000">ref</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
    </span><span style="color: #008080">2</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">res</span><span style="color: #000000">-</span><span style="color: #000000">ref</span><span style="color: #000000">-</span><span style="color: #000000">name</span><span style="color: #000000">&gt;</span><span style="color: #000000">jdbc</span><span style="color: #000000">/</span><span style="color: #000000">test</span><span style="color: #000000">&lt;/</span><span style="color: #000000">res</span><span style="color: #000000">-</span><span style="color: #000000">ref</span><span style="color: #000000">-</span><span style="color: #000000">name</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
    </span><span style="color: #008080">3</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">res</span><span style="color: #000000">-</span><span style="color: #000000">type</span><span style="color: #000000">&gt;</span><span style="color: #000000">javax.sql.DataSource</span><span style="color: #000000">&lt;/</span><span style="color: #000000">res</span><span style="color: #000000">-</span><span style="color: #000000">type</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;<br />
    </span><span style="color: #008080">4</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">res</span><span style="color: #000000">-</span><span style="color: #000000">auth</span><span style="color: #000000">&gt;</span><span style="color: #000000">Container</span><span style="color: #000000">&lt;/</span><span style="color: #000000">res</span><span style="color: #000000">-</span><span style="color: #000000">auth</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
    </span><span style="color: #008080">5</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&lt;/</span><span style="color: #000000">resource</span><span style="color: #000000">-</span><span style="color: #000000">ref</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;</span></div>
    <br />
    <ol style="list-style-type: decimal"></ol>
        最后我们在代码中从连接池获得Connection对象。 <br />
        <br />
        代码
        <ol style="list-style-type: decimal"></ol>
            <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">1</span><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">Context&nbsp;context&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;InitialContext();&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">获得数据源&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br />
            </span><span style="color: #008080">2</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">DataSource&nbsp;ds&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;context.lookup(</span><span style="color: #000000">"</span><span style="color: #000000">java:comp/env/jdbc/test</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">获取连接&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br />
            </span><span style="color: #008080">3</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">Connection&nbsp;conn&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;ds.getConnection();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
            </span><span style="color: #008080">4</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
            这样我们就在代码中获得了Connection对象，至于剩下的操作，就完全是jdbc操作了。 </div>
  <img src ="http://www.blogjava.net/hyint/aggbug/256067.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hyint/" target="_blank">苦瓜</a> 2009-02-22 18:21 <a href="http://www.blogjava.net/hyint/articles/256067.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WebService视点</title><link>http://www.blogjava.net/hyint/articles/256065.html</link><dc:creator>苦瓜</dc:creator><author>苦瓜</author><pubDate>Sun, 22 Feb 2009 10:12:00 GMT</pubDate><guid>http://www.blogjava.net/hyint/articles/256065.html</guid><wfw:comment>http://www.blogjava.net/hyint/comments/256065.html</wfw:comment><comments>http://www.blogjava.net/hyint/articles/256065.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hyint/comments/commentRss/256065.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hyint/services/trackbacks/256065.html</trackback:ping><description><![CDATA[<span style="font-family: 宋体">&nbsp; </span>
<p style="text-align: left" align="left"><span><span style="font-family: 宋体">摘要：</span></span></p>
<p style="text-indent: 25pt; text-align: left" align="left"><span style="font-family: 宋体"><span style="font-size: 10pt; font-family: 宋体">本文介绍了</span><span style="font-size: 10pt; font-family: Times">Web Services</span><span style="font-size: 10pt; font-family: 宋体">的起源和基本原理，分析了在企业应用中</span><span style="font-size: 10pt; font-family: Times">Web Services</span><span style="font-size: 10pt; font-family: 宋体">带来的冲击和变革，指出了</span><span style="font-size: 10pt; font-family: Times">Web Services</span><span style="font-size: 10pt; font-family: 宋体">的一些优缺点以及如何正确地应用</span><span style="font-size: 10pt; font-family: Times">Web Services. </span></span><span style="font-size: 9pt; font-family: 宋体"><br />
</span><span style="font-family: 宋体"><span style="font-size: 10pt; font-family: 宋体">无论是在计算机杂志还是在</span><span style="font-size: 10pt; font-family: Times">Internet</span><span style="font-size: 10pt; font-family: 宋体">上，目前最热门的话题莫过于&#8220;</span><span style="font-size: 10pt; font-family: Times">Web Services&#8221;</span><span style="font-size: 10pt; font-family: 宋体">。各个平台之间的锋争，各个新产品的发布，众多新标准的制订，大都和</span><span style="font-size: 10pt; font-family: Times">Web Services</span><span style="font-size: 10pt; font-family: 宋体">有关。</span></span><span style="font-size: 9pt; font-family: 宋体"><br />
</span><span style="font-family: 宋体"><span style="font-size: 10pt; font-family: 宋体">我的一些朋友是这样的一些人，他们总是用着最新的平台，尝试着最新的技术，他们喜欢变化，喜欢流行，用他们自己的话说，新技术创造新生活！可是，当我的一个朋友，带领他们一个部门的开发人员，花了两个月的，将他们内部的管理系统用</span><span style="font-size: 10pt; font-family: Times">Web Services</span><span style="font-size: 10pt; font-family: 宋体">重新设计和实现了一遍，却发现在实际使用的情况下，系统性能非常糟糕。他提出了这样一个问题：是不是</span><span style="font-size: 10pt; font-family: Times">Web Services</span><span style="font-size: 10pt; font-family: 宋体">现在还处于实验和市场炒作时期，根本没有进入实用的阶段？简单的回答是：</span><span style="font-size: 10pt; font-family: Times">Web Services</span><span style="font-size: 10pt; font-family: 宋体">不是万能的，它有它的应用范围和优势劣势。</span></span><span style="font-size: 9pt; font-family: 宋体"><br />
<span style="font-family: 宋体">&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体"><span style="font-size: 10pt; font-family: Times">Web Services</span><span style="font-size: 10pt; font-family: 宋体">的起源</span><span style="font-size: 10pt; font-family: Times">Web</span><span style="font-size: 10pt; font-family: 宋体">应用的巨大成功和不断发展，使其渗透到商业领域和个人生活的各个方面。人们只要使用浏览器，就可以享受到各种各样的</span><span style="font-size: 10pt; font-family: Times">Web</span><span style="font-size: 10pt; font-family: 宋体">服务，例如网上购物，网上交易，网络游戏，预定车票，网上聊天和交友等等。与此同时，由于</span><span style="font-size: 10pt; font-family: Times">Web</span><span style="font-size: 10pt; font-family: 宋体">技术所带来的优势（统一的客户端和较好的维护性），使一些传统的应用纷纷转型到</span><span style="font-size: 10pt; font-family: Times">BS</span><span style="font-size: 10pt; font-family: 宋体">结构上。</span></span><span style="font-size: 9pt; font-family: 宋体"><br />
</span><span style="font-family: 宋体"><span style="font-size: 10pt; font-family: 宋体">然而，在发展中，逐步暴露了一些问题。所有这些</span><span style="font-size: 10pt; font-family: Times">Web</span><span style="font-size: 10pt; font-family: 宋体">页面都是为人准备的，是让人去阅读，去输入，去判断。因此各种反映视觉效果的内容占用了大量的网络带宽，例如各种图片，字体信息，文字排版样式等。而真正含有高价值的一些信息，被深深埋在这些显示信息中，很难被其他应用和程序所使用。更重要的是，各种</span><span style="font-size: 10pt; font-family: Times">web</span><span style="font-size: 10pt; font-family: 宋体">服务之间缺少交互和通讯的机制。</span></span><span style="font-size: 9pt; font-family: 宋体"><br />
</span><span style="font-size: 10pt; font-family: 宋体"><span style="font-family: 宋体">程序之间的互相通讯很重要吗？简单举一个例子。</span></span><span style="font-size: 9pt; font-family: 宋体"><br />
<span style="font-family: 宋体">&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 10pt; font-family: 宋体"><span style="font-family: 宋体">假设你经常去国外出差，在你回国以后，第一件事就是费用报销了。而你们公司有这样的财务规定，所有的报销款，都按报销当天的外汇比价进行结算。因此在你填写报销单的时候必须先填写每一笔在各个国家的花消，然后上网查出当天的外汇比价，填写到报销单上。剩下的事情也许不用你做了，你的报销单填写工具会自动进行换算和统计。</span></span><span style="font-size: 9pt; font-family: 宋体"><br />
</span><span style="font-family: 宋体"><span style="font-size: 10pt; font-family: 宋体">觉得有什么不妥吗？作为</span><span style="font-size: 10pt; font-family: Times">IT</span><span style="font-size: 10pt; font-family: 宋体">公司的员工，也许都有一个特点，计算机能做的事情，尽量要计算机去做。外汇比价的查询可以让计算机自动去做嘛！然而，让你的程序自动去网页上查找指定的外汇比价可不是一件容易的事。因为这些网页是给人阅读的，人眼和大脑的反应速度有多快，它们可以从一整页信息中快速定位到你所要的内容，而且无论网页怎样变化和改版都不会带来太大的影响。而应用程序想要做同样的事就差得太远了。因此，现在需要的是专门为应用程序制定的</span><span style="font-size: 10pt; font-family: Times">Web</span><span style="font-size: 10pt; font-family: 宋体">服务。</span></span><span style="font-size: 9pt; font-family: 宋体"><br />
<span style="font-family: 宋体">&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体"><span style="font-size: 10pt; font-family: 宋体">随着应用程序之间通讯的需求越来越大，这就需要制定统一的标准和协议。</span><span style="font-size: 10pt; font-family: Times">HP</span><span style="font-size: 10pt; font-family: 宋体">公司是最先提出这个观点的公司，他们制定了有关&#8220;</span><span style="font-size: 10pt; font-family: Times">e-Speak&#8221;</span><span style="font-size: 10pt; font-family: 宋体">的标准来保证应用程序之间的交互，并声称将成为下一代</span><span style="font-size: 10pt; font-family: Times">Internet</span><span style="font-size: 10pt; font-family: 宋体">信息交互的标准。而随后，</span><span style="font-size: 10pt; font-family: Times">MicroSoft</span><span style="font-size: 10pt; font-family: 宋体">意识到此计划的美好前景，便推出了</span><span style="font-size: 10pt; font-family: Times">.Net</span><span style="font-size: 10pt; font-family: 宋体">战略；</span><span style="font-size: 10pt; font-family: Times">IBM</span><span style="font-size: 10pt; font-family: 宋体">很快就发布了</span><span style="font-size: 10pt; font-family: Times">Web Services Toolkit(WSTK)</span><span style="font-size: 10pt; font-family: 宋体">，和</span><span style="font-size: 10pt; font-family: Times">Web Services Development Environment(WSDE)</span><span style="font-size: 10pt; font-family: 宋体">，申明对</span><span style="font-size: 10pt; font-family: Times">Web Services</span><span style="font-size: 10pt; font-family: 宋体">的全力支持。与此同时，</span><span style="font-size: 10pt; font-family: Times">Oracle</span><span style="font-size: 10pt; font-family: 宋体">也开发出自己的</span><span style="font-size: 10pt; font-family: Times">Dynamic Services</span><span style="font-size: 10pt; font-family: 宋体">，并和</span><span style="font-size: 10pt; font-family: Times">Oracle 8i Release 2</span><span style="font-size: 10pt; font-family: 宋体">集成在一起。在这以后，</span><span style="font-size: 10pt; font-family: Times">W3C</span><span style="font-size: 10pt; font-family: 宋体">统一制定了</span><span style="font-size: 10pt; font-family: Times">Web Services</span><span style="font-size: 10pt; font-family: 宋体">的各种标准。而</span><span style="font-size: 10pt; font-family: Times">SUN</span><span style="font-size: 10pt; font-family: 宋体">公司在宣布了自己的</span><span style="font-size: 10pt; font-family: Times">Web Services</span><span style="font-size: 10pt; font-family: 宋体">的框架以后，将</span><span style="font-size: 10pt; font-family: Times">Web Services</span><span style="font-size: 10pt; font-family: 宋体">的标准溶入</span><span style="font-size: 10pt; font-family: Times">J2EE</span><span style="font-size: 10pt; font-family: 宋体">的环境，使</span><span style="font-size: 10pt; font-family: Times">Web Services</span><span style="font-size: 10pt; font-family: 宋体">有了广泛支持的基础和平台。</span></span><span style="font-size: 9pt; font-family: 宋体"><br />
</span><span style="font-family: 宋体"><span style="font-size: 10pt; font-family: Times">Web Services</span><span style="font-size: 10pt; font-family: 宋体">的基本原理</span><span style="font-size: 10pt; font-family: Times">Web Services </span><span style="font-size: 10pt; font-family: 宋体">是通过一系列标准和协议来保证程序之间的动态连接。其中最基本的协议包括：</span><span style="font-size: 10pt; font-family: Times">SOAP, WSDL, UDDI</span></span></p>
<p style="margin-left: 21pt; text-indent: -21pt; text-align: left; tab-stops: list 9.0pt 21.0pt" align="left"><span style="font-family: 宋体"><span style="font-size: 9pt; font-family: Wingdings">l&nbsp;</span><span style="font-size: 10pt; font-family: Times">SOAP: </span><span style="font-size: 10pt; font-family: 宋体">是&#8220;</span><span style="font-size: 10pt; font-family: Times">Simple Object Access Protocol&#8221;</span><span style="font-size: 10pt; font-family: 宋体">的缩写，</span><span style="font-size: 10pt; font-family: Times">SOAP</span><span style="font-size: 10pt; font-family: 宋体">是消息传递的协议，它规定了</span></span></p>
<p style="text-align: left" align="left"><span style="font-family: 宋体"><span style="font-size: 10pt; font-family: Times">WebServices</span><span style="font-size: 10pt; font-family: 宋体">之间是怎样传递信息的。简单的说，</span><span style="font-size: 10pt; font-family: Times">SOAP</span><span style="font-size: 10pt; font-family: 宋体">规定了：</span></span></p>
<p style="margin-left: 19.05pt; text-indent: -5pt; text-align: left" align="left"><span style="font-family: 宋体"><span style="font-size: 10pt; font-family: Times">1. </span><span style="font-size: 10pt; font-family: 宋体">传递信息的格式为</span><span style="font-size: 10pt; font-family: Times">XML</span><span style="font-size: 10pt; font-family: 宋体">。这就使</span><span style="font-size: 10pt; font-family: Times">Web Services</span><span style="font-size: 10pt; font-family: 宋体">能够在任何平台上，用任何语言进行实.</span></span></p>
<p style="margin-left: 19.05pt; text-indent: -5pt; text-align: left" align="left"><span style="font-family: 宋体"><span style="font-size: 10pt; font-family: Times">2. </span><span style="font-size: 10pt; font-family: 宋体">远程对象方法调用的格式。规定了怎样表示被调用对象以及调用的方法名称和参数类型等</span></span></p>
<p style="margin-left: 19.05pt; text-indent: -5pt; text-align: left" align="left"><span style="font-family: 宋体"><span style="font-size: 10pt; font-family: Times">3. </span><span style="font-size: 10pt; font-family: 宋体">参数类型和</span><span style="font-size: 10pt; font-family: Times">XML</span><span style="font-size: 10pt; font-family: 宋体">格式之间的映射。这是因为，被调用的方法有时候需要传递一个复杂的参</span></span></p>
<p style="margin-left: 19pt; text-indent: 10pt; text-align: left" align="left"><span style="font-family: 宋体"><span style="font-size: 10pt; font-family: 宋体">数，例如，一个</span><span style="font-size: 10pt; font-family: Times">Person</span><span style="font-size: 10pt; font-family: 宋体">对象。怎样用</span><span style="font-size: 10pt; font-family: Times">XML</span><span style="font-size: 10pt; font-family: 宋体">来表示一个对象参数，也是</span><span style="font-size: 10pt; font-family: Times">SOAP</span><span style="font-size: 10pt; font-family: 宋体">所定义的范围</span></span></p>
<p style="text-indent: 15pt; text-align: left" align="left"><span style="font-family: 宋体"><span style="font-size: 10pt; font-family: Times">4. </span><span style="font-size: 10pt; font-family: 宋体">异常处理以及其他的相关信息</span><span style="font-size: 10pt; font-family: Times">.</span></span></p>
<p style="margin-left: 21pt; text-indent: -21pt; text-align: left; tab-stops: list 9.0pt" align="left"><span style="font-family: 宋体"><span style="font-size: 9pt; font-family: Wingdings">l&nbsp;</span><span style="font-size: 10pt; font-family: Times">&nbsp;WSDL:</span><span style="font-size: 10pt; font-family: 宋体">是&#8220;</span><span style="font-size: 10pt; font-family: Times">Web Services Description Language&#8221;</span><span style="font-size: 10pt; font-family: 宋体">的缩写</span><span style="font-size: 10pt; font-family: Times">.</span><span style="font-size: 10pt; font-family: 宋体">意如其名</span><span style="font-size: 10pt; font-family: Times">,WSDL</span><span style="font-size: 10pt; font-family: 宋体">是</span><span style="font-size: 10pt; font-family: Times">Web Services</span><span style="font-size: 10pt; font-family: 宋体">的定义语</span></span></p>
<p style="margin-left: 10.1pt; text-align: left" align="left"><span style="font-family: 宋体"><span style="font-size: 10pt; font-family: 宋体">言。当你实现了某种服务的时候</span><span style="font-size: 10pt; font-family: Times">(</span><span style="font-size: 10pt; font-family: 宋体">如</span><span style="font-size: 10pt; font-family: Times">,</span><span style="font-size: 10pt; font-family: 宋体">股票查询服务</span><span style="font-size: 10pt; font-family: Times">),</span><span style="font-size: 10pt; font-family: 宋体">为了让别的程序调用</span><span style="font-size: 10pt; font-family: Times">,</span><span style="font-size: 10pt; font-family: 宋体">你必须告诉大家你的服务的接口</span><span style="font-size: 10pt; font-family: Times">.</span><span style="font-size: 10pt; font-family: 宋体">例如</span><span style="font-size: 10pt; font-family: Times">,</span><span style="font-size: 10pt; font-family: 宋体">服务名称，服务所在的机器名称，监听端口号，传递参数的类型</span><span style="font-size: 10pt; font-family: Times">,</span><span style="font-size: 10pt; font-family: 宋体">个数和顺序</span><span style="font-size: 10pt; font-family: Times">,</span><span style="font-size: 10pt; font-family: 宋体">返回结果的类型等等</span><span style="font-size: 10pt; font-family: Times">.</span><span style="font-size: 10pt; font-family: 宋体">这样别的应用程序才能调用你的服务。</span><span style="font-size: 10pt; font-family: Times">WSDL</span><span style="font-size: 10pt; font-family: 宋体">协议就是规定了有关</span><span style="font-size: 10pt; font-family: Times">Web Services</span><span style="font-size: 10pt; font-family: 宋体">描述的标准。</span></span></p>
<p style="margin-left: 21pt; text-indent: -21pt; text-align: left; tab-stops: list 21.0pt" align="left"><span style="font-family: 宋体"><span style="font-size: 9pt; font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 10pt; font-family: Times">UDDI: </span><span style="font-size: 10pt; font-family: 宋体">是</span><span style="font-size: 10pt; font-family: Times">Universal Description, Discovery, and Integration</span><span style="font-size: 10pt; font-family: 宋体">的缩写。简单说，</span><span style="font-size: 10pt; font-family: Times">UDDI</span><span style="font-size: 10pt; font-family: 宋体">用于集中存放</span></span></p>
<p style="text-indent: 5pt; text-align: left" align="left"><span style="font-family: 宋体"><span style="font-size: 10pt; font-family: 宋体">和查找</span><span style="font-size: 10pt; font-family: Times">WSDL</span><span style="font-size: 10pt; font-family: 宋体">描述文件，起着目录服务器的作用。</span></span></p>
<p style="text-align: left" align="left"><span style="font-family: 宋体"><span style="font-size: 10pt; font-family: 宋体">如上是一个</span><span style="font-size: 10pt; font-family: Times">Web Services</span><span style="font-size: 10pt; font-family: 宋体">的生命周期是：</span></span></p>
<p style="margin-left: 45pt; text-indent: -18pt; text-align: left; tab-stops: list 45.0pt" align="left"><span style="font-family: 宋体"><span style="font-size: 9pt; font-family: 宋体">1.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 10pt; font-family: 宋体">实现一个</span><span style="font-size: 10pt; font-family: Times">Web Services</span><span style="font-size: 10pt; font-family: 宋体">，使其能够接受和响应</span><span style="font-size: 10pt; font-family: Times">SOAP</span><span style="font-size: 10pt; font-family: 宋体">消息（现在有很多工具都可以帮助实现）</span></span></p>
<p style="margin-left: 45pt; text-indent: -18pt; text-align: left; tab-stops: list 45.0pt" align="left"><span style="font-family: 宋体"><span style="font-size: 9pt; font-family: 宋体">2.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 10pt; font-family: 宋体">撰写一个</span><span style="font-size: 10pt; font-family: Times">WSDL</span><span style="font-size: 10pt; font-family: 宋体">文件用于描述此</span><span style="font-size: 10pt; font-family: Times">Web Services</span><span style="font-size: 10pt; font-family: 宋体">。（现在有很多工具可以自动生成</span><span style="font-size: 10pt; font-family: Times">WSDL</span><span style="font-size: 10pt; font-family: 宋体">文件）。</span></span></p>
<p style="margin-left: 45pt; text-indent: -18pt; text-align: left; tab-stops: list 45.0pt" align="left"><span style="font-family: 宋体"><span style="font-size: 9pt; font-family: 宋体">3.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 10pt; font-family: 宋体">将此</span><span style="font-size: 10pt; font-family: Times">WSDL</span><span style="font-size: 10pt; font-family: 宋体">发布到</span><span style="font-size: 10pt; font-family: Times">UDDI</span><span style="font-size: 10pt; font-family: 宋体">上。</span></span></p>
<p style="margin-left: 45pt; text-indent: -18pt; text-align: left; tab-stops: list 45.0pt" align="left"><span style="font-family: 宋体"><span style="font-size: 9pt; font-family: 宋体">4.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 10pt; font-family: 宋体">其他的应用程序（客户端）从</span><span style="font-size: 10pt; font-family: Times">UDDI</span><span style="font-size: 10pt; font-family: 宋体">上搜索到你的</span><span style="font-size: 10pt; font-family: Times">WSDL</span><span style="font-size: 10pt; font-family: 宋体">。</span></span></p>
<p style="margin-left: 45pt; text-indent: -18pt; text-align: left; tab-stops: list 45.0pt" align="left"><span style="font-family: 宋体"><span style="font-size: 9pt; font-family: 宋体">5.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 10pt; font-family: 宋体">根据你的</span><span style="font-size: 10pt; font-family: Times">WSDL</span><span style="font-size: 10pt; font-family: 宋体">，客户端可以编写程序（现在有很多工具可以自动生成调用程序）调用你的</span><span style="font-size: 10pt; font-family: Times">Web Services</span><span style="font-size: 10pt; font-family: 宋体">。</span></span></p>
<p style="text-indent: 20pt; text-align: left" align="left"><span style="font-family: 宋体"><span style="font-size: 10pt; font-family: Times">Web Services</span><span style="font-size: 10pt; font-family: 宋体">的缺点由于是基于</span><span style="font-size: 10pt; font-family: Times">XML</span><span style="font-size: 10pt; font-family: 宋体">的应用，</span><span style="font-size: 10pt; font-family: Times">Web Services</span><span style="font-size: 10pt; font-family: 宋体">与生俱来地在拥有</span><span style="font-size: 10pt; font-family: Times">XML</span><span style="font-size: 10pt; font-family: 宋体">带来的一切优势的同时，不可避免地继承了</span><span style="font-size: 10pt; font-family: Times">XML</span><span style="font-size: 10pt; font-family: 宋体">所带来的一些限制。</span></span></p>
<p style="margin-left: 9pt; text-indent: -9pt; text-align: left" align="left"><span style="font-family: 宋体"><span style="font-size: 9pt; font-family: Wingdings">l&nbsp;</span><span style="font-size: 10pt; font-family: Times">Web Services</span><span style="font-size: 10pt; font-family: 宋体">通常需要大量的</span><span style="font-size: 10pt; font-family: Times">CPU</span><span style="font-size: 10pt; font-family: 宋体">资源。因为</span><span style="font-size: 10pt; font-family: Times">XML</span><span style="font-size: 10pt; font-family: 宋体">数据要经过多步处理才能被系统使用。首先是效验（</span><span style="font-size: 10pt; font-family: Times">validate</span><span style="font-size: 10pt; font-family: 宋体">），检查它的格式是否符合</span><span style="font-size: 10pt; font-family: Times">XML</span><span style="font-size: 10pt; font-family: 宋体">的规范，以及根据应用程序定义（</span><span style="font-size: 10pt; font-family: Times">DTD</span><span style="font-size: 10pt; font-family: 宋体">或</span><span style="font-size: 10pt; font-family: Times">Schema</span><span style="font-size: 10pt; font-family: 宋体">）检查是否符合语义上的规范；然后还要进行解析（</span><span style="font-size: 10pt; font-family: Times">parse</span><span style="font-size: 10pt; font-family: 宋体">），从</span><span style="font-size: 10pt; font-family: Times">XML</span><span style="font-size: 10pt; font-family: 宋体">文档分解出单个的元素；最后还要转换成应用程序所需要的二进制表达（例如，把&#8220;</span><span style="font-size: 10pt; font-family: Times">12&#8221;</span><span style="font-size: 10pt; font-family: 宋体">转换成整型</span><span style="font-size: 10pt; font-family: Times">12</span><span style="font-size: 10pt; font-family: 宋体">的二进制表示）。</span></span></p>
<p style="margin-left: 9pt; text-indent: -9pt; text-align: left" align="left"><span style="font-family: 宋体"><span style="font-size: 9pt; font-family: Wingdings">l&nbsp;</span><span style="font-size: 10pt; font-family: Times">Web Services</span><span style="font-size: 10pt; font-family: 宋体">还意味着占用较多的内存资源。在进行</span><span style="font-size: 10pt; font-family: Times">XML</span><span style="font-size: 10pt; font-family: 宋体">解析的时候，会产生大量的临时内存对象。特别是在处理</span><span style="font-size: 10pt; font-family: Times">DOM</span><span style="font-size: 10pt; font-family: 宋体">对象的时候。这些大量的临时对象对于象</span><span style="font-size: 10pt; font-family: Times">JAVA</span><span style="font-size: 10pt; font-family: 宋体">这类自动回收内存的语言和系统其实是一种负担，大量的临时对象将会使系统每隔一段时间就会进行内存回收，从而降低系统的性能。当然，现在有的</span><span style="font-size: 10pt; font-family: Times">Web Services</span><span style="font-size: 10pt; font-family: 宋体">的产品（如</span><span style="font-size: 10pt; font-family: Times">axis</span><span style="font-size: 10pt; font-family: 宋体">）采用了</span><span style="font-size: 10pt; font-family: Times">SAX</span><span style="font-size: 10pt; font-family: 宋体">技术，大大减少了内存的占用量。详细信息请参考：（</span><u><span style="font-size: 10pt; color: blue; font-family: Times"><a href="http://xml.apache.org/axis/index.html">http://xml.apache.org/axis/index.html</a></span></u><span style="font-size: 10pt; font-family: 宋体">）。</span></span></p>
<p style="margin-left: 9pt; text-indent: -9pt; text-align: left" align="left"><span style="font-family: 宋体"><span style="font-size: 9pt; font-family: Wingdings">l&nbsp;</span><span style="font-size: 10pt; font-family: 宋体">网络资源的消耗也是</span><span style="font-size: 10pt; font-family: Times">Web Services</span><span style="font-size: 10pt; font-family: 宋体">应用的一些限制。因为基于</span><span style="font-size: 10pt; font-family: Times">XML</span><span style="font-size: 10pt; font-family: 宋体">数据的传递通常数据量要比二进制的协议（如</span><span style="font-size: 10pt; font-family: Times">RMI/IIOP</span><span style="font-size: 10pt; font-family: 宋体">）要大的多。这种额外的消耗在网络资源比较紧张或网络传输比较频繁的应用中会产生一定的影响。</span></span></p>
<p style="text-align: left" align="left"><span style="font-family: 宋体"><span style="font-size: 10pt; font-family: 宋体">除了</span><span style="font-size: 10pt; font-family: Times">XML</span><span style="font-size: 10pt; font-family: 宋体">带来的限制，</span><span style="font-size: 10pt; font-family: Times">Web Services</span><span style="font-size: 10pt; font-family: 宋体">本身也具有一些缺点：</span></span></p>
<p style="margin-left: 21pt; text-indent: -21pt; text-align: left; tab-stops: list 18.0pt" align="left"><span style="font-family: 宋体"><span style="font-size: 9pt; font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 10pt; font-family: 宋体">到目前为止，</span><span style="font-size: 10pt; font-family: Times">Web Services</span><span style="font-size: 10pt; font-family: 宋体">还可以说是一种无状态（</span><span style="font-size: 10pt; font-family: Times">stateless</span><span style="font-size: 10pt; font-family: 宋体">）的服务。</span></span></p>
<p style="text-indent: 20pt; text-align: left" align="left"><span style="font-family: 宋体"><span style="font-size: 10pt; font-family: 宋体">所谓</span><span style="font-size: 10pt; font-family: Times">stateless</span><span style="font-size: 10pt; font-family: 宋体">就意味着不保存客户端服务调用者的任何信息。这是由</span><span style="font-size: 10pt; font-family: Times">Web Services</span><span style="font-size: 10pt; font-family: 宋体">的本质所决定的。</span><span style="font-size: 10pt; font-family: Times">Web Services</span><span style="font-size: 10pt; font-family: 宋体">在本质上是要为应用程序之间提供数据通讯的标准，为企业应用之间动态地提供大颗粒度的服务，所以</span><span style="font-size: 10pt; font-family: Times">Web Services</span><span style="font-size: 10pt; font-family: 宋体">并不适合于非常精细的基于会话的方法调用以及复杂的事务（</span><span style="font-size: 10pt; font-family: Times">transaction</span><span style="font-size: 10pt; font-family: 宋体">）处理之中。</span></span><span style="font-size: 9pt; font-family: Times"><br />
<span style="font-family: 宋体">&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体"><span style="font-size: 10pt; font-family: 宋体">也许有人会对我这点提出异议！因为，现在有很多</span><span style="font-size: 10pt; font-family: Times">Web Services</span><span style="font-size: 10pt; font-family: 宋体">的产品（如</span><span style="font-size: 10pt; font-family: Times">WASD</span><span style="font-size: 10pt; font-family: 宋体">），不但可以保存</span><span style="font-size: 10pt; font-family: Times">session</span><span style="font-size: 10pt; font-family: 宋体">的信息，使服务成为有状态（</span><span style="font-size: 10pt; font-family: Times">stateful</span><span style="font-size: 10pt; font-family: 宋体">）的服务，而且还实现了</span><span style="font-size: 10pt; font-family: Times">remote interface</span><span style="font-size: 10pt; font-family: 宋体">，可以在</span><span style="font-size: 10pt; font-family: Times">Web Services</span><span style="font-size: 10pt; font-family: 宋体">的会话中传递远程对象的句柄，让客户端可以操纵递远程对象（详细信息请参考：</span><u><span style="font-size: 10pt; color: blue; font-family: Times">http://www.systinet.com</span></u><span style="font-size: 10pt; font-family: 宋体">）。原理上说，这并不难实现，因为在</span><span style="font-size: 10pt; font-family: Times">XML</span><span style="font-size: 10pt; font-family: 宋体">数据中，可以互相传送任何数据，包括</span><span style="font-size: 10pt; font-family: Times">sessionID</span><span style="font-size: 10pt; font-family: 宋体">和</span><span style="font-size: 10pt; font-family: Times">transactionID</span><span style="font-size: 10pt; font-family: 宋体">，有了这些</span><span style="font-size: 10pt; font-family: Times">ID</span><span style="font-size: 10pt; font-family: 宋体">，从技术角度上说，实现有状态（</span><span style="font-size: 10pt; font-family: Times">stateful</span><span style="font-size: 10pt; font-family: 宋体">）的服务和事务处理并不复杂。但是，这样功能缺少标准的支持，当前版本的</span><span style="font-size: 10pt; font-family: Times">WSDL</span><span style="font-size: 10pt; font-family: 宋体">还无法表示这些复杂的服务。在企业内部，你可以任意使用这些特殊的功能，可以自己定义会话状态的交互协议，因为服务者和服务调用者之间的通讯都在你的控制之中；然而要将这些服务发布到</span><span style="font-size: 10pt; font-family: Times">Internet</span><span style="font-size: 10pt; font-family: 宋体">上，其他的应用程序是无法根据标准去识别这些特殊功能。</span></span></p>
<p style="margin-left: 21pt; text-indent: -21pt; text-align: left; tab-stops: list 18.0pt" align="left"><span style="font-family: 宋体"><span style="font-size: 9pt; font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 10pt; font-family: 宋体">数据绑定也存在一些不足。</span></span></p>
<p style="text-indent: 20pt; text-align: left" align="left"><span style="font-family: 宋体"><span style="font-size: 10pt; font-family: 宋体">因为所有的数据传递都用</span><span style="font-size: 10pt; font-family: Times">XML</span><span style="font-size: 10pt; font-family: 宋体">格式，因此，需要在二进制数据和</span><span style="font-size: 10pt; font-family: Times">XML</span><span style="font-size: 10pt; font-family: 宋体">数据之间有个转换。但是，并不是所有的二进制数据都能方便地用</span><span style="font-size: 10pt; font-family: Times">XML</span><span style="font-size: 10pt; font-family: 宋体">来表示，并不是所有的</span><span style="font-size: 10pt; font-family: Times">JAVA</span><span style="font-size: 10pt; font-family: 宋体">对象都能被</span><span style="font-size: 10pt; font-family: Times">XML</span><span style="font-size: 10pt; font-family: 宋体">所表示。因此，经常在转换过程中会出现语义丢失的情况。</span></span></p>
<p style="margin-left: 21pt; text-indent: -21pt; text-align: left; tab-stops: list 21.0pt" align="left"><span style="font-family: 宋体"><span style="font-size: 9pt; font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 10pt; font-family: 宋体">技术要求高，学习曲线较长。</span></span></p>
<p style="text-indent: 25pt; text-align: left" align="left"><span style="font-family: 宋体"><span style="font-size: 10pt; font-family: 宋体">每一个</span><span style="font-size: 10pt; font-family: Times">Web Services</span><span style="font-size: 10pt; font-family: 宋体">的产品，都有丰富的工具，能够根据</span><span style="font-size: 10pt; font-family: Times">Web Services</span><span style="font-size: 10pt; font-family: 宋体">的定义（如</span><span style="font-size: 10pt; font-family: Times">WSDL</span><span style="font-size: 10pt; font-family: 宋体">文件）方便地生成客户端的程序；能够将一般的服务程序，很容易就包装成</span><span style="font-size: 10pt; font-family: Times">Web Services</span><span style="font-size: 10pt; font-family: 宋体">服务。因此，各个</span><span style="font-size: 10pt; font-family: Times">Web Services</span><span style="font-size: 10pt; font-family: 宋体">的产品都声称自己的平台容易使用，根本不需要了解</span><span style="font-size: 10pt; font-family: Times">XML</span><span style="font-size: 10pt; font-family: 宋体">，也不需要了解什么</span><span style="font-size: 10pt; font-family: Times">WSDL</span><span style="font-size: 10pt; font-family: 宋体">，</span><span style="font-size: 10pt; font-family: Times">UDDI</span><span style="font-size: 10pt; font-family: 宋体">，</span><span style="font-size: 10pt; font-family: Times">SOAP</span><span style="font-size: 10pt; font-family: 宋体">就能使用发布</span><span style="font-size: 10pt; font-family: Times">Web Services</span><span style="font-size: 10pt; font-family: 宋体">。特别是一个朋友告诉我，他在什么都不了解的情况下，用</span><span style="font-size: 10pt; font-family: Times">.NET</span><span style="font-size: 10pt; font-family: 宋体">花了</span><span style="font-size: 10pt; font-family: Times">15</span><span style="font-size: 10pt; font-family: 宋体">分钟就发布了一个</span><span style="font-size: 10pt; font-family: Times">Web Services</span><span style="font-size: 10pt; font-family: 宋体">！</span></span><span style="font-family: 宋体"><span style="font-size: 10pt; font-family: Times"> <br />
&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; font-family: 宋体">千万不要醉心于这种简便，这对于简单的</span><span style="font-size: 10pt; font-family: Times">Demo</span><span style="font-size: 10pt; font-family: 宋体">也许是对的，可是对于真正意义上严肃的应用，一定要了解</span><span style="font-size: 10pt; font-family: Times">Web Services</span><span style="font-size: 10pt; font-family: 宋体">的各个方面，设计整体结构和解决方案，还要根据具体的应用调整性能。所有这些都需要对</span><span style="font-size: 10pt; font-family: Times">Web Services</span><span style="font-size: 10pt; font-family: 宋体">知识的全面掌握。</span></span></p>
<p style="text-indent: 20pt; text-align: left" align="left"><span style="font-family: 宋体"><span style="font-size: 10pt; font-family: 宋体">什么应用适合</span><span style="font-size: 10pt; font-family: Times">Web ServicesWeb Services</span><span style="font-size: 10pt; font-family: 宋体">这么多的缺点是不是让你很泄气？其实，已经有很多成功的</span><span style="font-size: 10pt; font-family: Times">Web Services</span><span style="font-size: 10pt; font-family: 宋体">的应用和越来越多的开发商的加盟，证明</span><span style="font-size: 10pt; font-family: Times">Web Services</span><span style="font-size: 10pt; font-family: 宋体">一定会成为新一代</span><span style="font-size: 10pt; font-family: Times">WEB</span><span style="font-size: 10pt; font-family: 宋体">信息通讯的主流。经过不断的发展，</span><span style="font-size: 10pt; font-family: Times">Web Services</span><span style="font-size: 10pt; font-family: 宋体">一定能克服自身的弱点，得到更广泛的应用。但就目前来说，</span><span style="font-size: 10pt; font-family: Times">Web Services</span><span style="font-size: 10pt; font-family: 宋体">比较适合用于下列形式的应用：</span></span></p>
<p style="text-align: left" align="left"><span style="font-family: 宋体"><span style="font-size: 10pt; font-family: 宋体">A. </span><span style="font-size: 10pt; font-family: 宋体">基于</span><span style="font-size: 10pt; font-family: Times">WAN</span><span style="font-size: 10pt; font-family: 宋体">和</span><span style="font-size: 10pt; font-family: Times">Internet</span><span style="font-size: 10pt; font-family: 宋体">的应用</span></span></p>
<p style="text-indent: 20pt; text-align: left" align="left"><span style="font-family: 宋体"><span style="font-size: 10pt; font-family: 宋体">要在</span><span style="font-size: 10pt; font-family: Times">Internet</span><span style="font-size: 10pt; font-family: 宋体">上创建基于二进制协议的</span><span style="font-size: 10pt; font-family: Times">RMI/IIOP</span><span style="font-size: 10pt; font-family: 宋体">的应用，一般都会遇上一个大麻烦</span><span style="font-size: 10pt; font-family: Times">--</span><span style="font-size: 10pt; font-family: 宋体">防火墙。客户端浏览器极大可能在</span><span style="font-size: 10pt; font-family: Times">ISP</span><span style="font-size: 10pt; font-family: 宋体">防火墙后，大多数防火墙都只能允许和外部的</span><span style="font-size: 10pt; font-family: Times">HTTP</span><span style="font-size: 10pt; font-family: 宋体">连接，因此想要</span><span style="font-size: 10pt; font-family: Times">ISP</span><span style="font-size: 10pt; font-family: 宋体">防火墙后的客户端能和防火墙外的</span><span style="font-size: 10pt; font-family: Times">RMI/IIOP</span><span style="font-size: 10pt; font-family: 宋体">的应用端口进行连接的话，就要改变</span><span style="font-size: 10pt; font-family: Times">ISP</span><span style="font-size: 10pt; font-family: 宋体">的安全策略，让客户端能够连接除了</span><span style="font-size: 10pt; font-family: Times">80</span><span style="font-size: 10pt; font-family: 宋体">以外的其他端口。可是当运行</span><span style="font-size: 10pt; font-family: Times">RMI/IIOP</span><span style="font-size: 10pt; font-family: 宋体">的应用的服务器为了安全也在防火墙之后的</span><span style="font-size: 10pt; font-family: Times">DMZ</span><span style="font-size: 10pt; font-family: 宋体">中的话，那这个连接就更加复杂了，要跨越两个防火墙。</span></span><span style="font-size: 9pt; font-family: Times"><br />
</span><span style="font-family: 宋体"><span style="font-size: 10pt; font-family: 宋体">而</span><span style="font-size: 10pt; font-family: Times">Web Services</span><span style="font-size: 10pt; font-family: 宋体">由于使用的是</span><span style="font-size: 10pt; font-family: Times">HTTP</span><span style="font-size: 10pt; font-family: 宋体">协议，传递的是纯文本的</span><span style="font-size: 10pt; font-family: Times">XML</span><span style="font-size: 10pt; font-family: 宋体">数据，因此拥有穿透防火墙的良好性能。</span></span></p>
<p style="text-align: left" align="left"><span style="font-family: 宋体"><span style="font-size: 9pt; font-family: 宋体">B</span><span style="font-size: 9pt; font-family: 宋体">． </span><span style="font-size: 10pt; font-family: 宋体">基于异构平台的应用</span></span></p>
<p style="text-align: left" align="left"><span style="font-family: 宋体"><span style="font-size: 10pt; font-family: Times">XML</span><span style="font-size: 10pt; font-family: 宋体">语言本身就是跨平台、跨语言的数据表示方法，在加上通用的</span><span style="font-size: 10pt; font-family: Times">HTTP</span><span style="font-size: 10pt; font-family: 宋体">等协议，使得</span><span style="font-size: 10pt; font-family: Times">Web Services</span><span style="font-size: 10pt; font-family: 宋体">天生就适用于基于异构平台的应用。如果你的客户端包含了各种不同的平台，例如，你希望你的服务即可以被</span><span style="font-size: 10pt; font-family: Times">JAVA</span><span style="font-size: 10pt; font-family: 宋体">程序所调用，又可以由</span><span style="font-size: 10pt; font-family: Times">VB</span><span style="font-size: 10pt; font-family: 宋体">和</span><span style="font-size: 10pt; font-family: Times">COM</span><span style="font-size: 10pt; font-family: 宋体">程序所调用。你有两种选择：一种是为不同的平台提供相应的</span><span style="font-size: 10pt; font-family: Times">API</span><span style="font-size: 10pt; font-family: 宋体">，还要为不同的语言提供</span><span style="font-size: 10pt; font-family: Times">API</span><span style="font-size: 10pt; font-family: 宋体">；如果提供</span><span style="font-size: 10pt; font-family: Times">Web Services</span><span style="font-size: 10pt; font-family: 宋体">，所有平台和语言都可以调用了！</span></span></p>
<p style="text-align: left" align="left"><span style="font-family: 宋体"><span style="font-size: 9pt; font-family: 宋体">C</span><span style="font-size: 9pt; font-family: 宋体">．</span><span style="font-size: 10pt; font-family: 宋体">需要强安全特性的应用</span></span></p>
<p style="text-align: left" align="left"><span style="font-family: 宋体"><span style="font-size: 10pt; font-family: 宋体">很多人都认为，安全性是</span><span style="font-size: 10pt; font-family: Times">Web Services</span><span style="font-size: 10pt; font-family: 宋体">的弱项。其实不然，经过不断的完善和各种新的协议的出台，</span><span style="font-size: 10pt; font-family: Times">Web Services</span><span style="font-size: 10pt; font-family: 宋体">完全可以用于安全性很强的应用环境下。并且，由于</span><span style="font-size: 10pt; font-family: Times">Web Services</span><span style="font-size: 10pt; font-family: 宋体">使用</span><span style="font-size: 10pt; font-family: Times">HTTP</span><span style="font-size: 10pt; font-family: 宋体">协议进行传输，所以可以和容易就使用已经很成熟的基于</span><span style="font-size: 10pt; font-family: Times">HTTP</span><span style="font-size: 10pt; font-family: 宋体">的各种安全技术。</span></span></p>
<p style="text-align: left" align="left"><span style="font-family: 宋体"><span style="font-size: 9pt; font-family: 宋体">Ｄ．</span><span style="font-size: 10pt; font-family: Times">EAI</span><span style="font-size: 10pt; font-family: 宋体">（企业应用集成）</span></span></p>
<p style="text-indent: 20pt; text-align: left" align="left"><span style="font-family: 宋体"><span style="font-size: 10pt; font-family: 宋体">这是目前</span><span style="font-size: 10pt; font-family: Times">Web Services</span><span style="font-size: 10pt; font-family: 宋体">应用最看好的方向之一。大多数企业内部都有着各种各样的应用系统，它们是在不同的领导在任期间，由不同的软件开发商开发，因此运行在不同的平台和系统上，系统的开发语言也各不相同。由于现代企业信息自动化要求的提高，各个系统之间的互动和相互通讯便提到日程上。因此，保护原有投资，重用遗留系统是当前很多中大型企业的重要任务。</span></span><span style="font-size: 9pt; font-family: Times"><br />
<span style="font-family: 宋体">&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体"><span style="font-size: 10pt; font-family: 宋体">由于遗留系统的运行平台是异构环境，因此企业应用集成的代价一般来说是很高的。但如果使用</span><span style="font-size: 10pt; font-family: Times">Web Services</span><span style="font-size: 10pt; font-family: 宋体">作为应用集成的手段，将会大大降低集成的消耗。</span><span style="font-size: 10pt; font-family: Times">Web Services</span><span style="font-size: 10pt; font-family: 宋体">与平台和语言无关的特性，以及各种平台和环境下的开发工具都是企业应用集成的利器。</span></span><span style="font-size: 9pt; font-family: Times"><br />
<span style="font-family: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体"><span style="font-size: 10pt; font-family: 宋体">另外，在开发新的应用系统的时候，仍然需要考虑和其他系统的集成，需要考虑调用其他系统的功能，和被其他系统所调用。使用</span><span style="font-size: 10pt; font-family: Times">Web Services</span><span style="font-size: 10pt; font-family: 宋体">作为系统与外部交流的接口，能够使新的系统和别的系统之间保持松耦合的关系，保持较高的可扩展性。</span></span></p>
<p style="text-align: left" align="left"><span style="font-family: 宋体"><span style="font-size: 9pt; font-family: Times">E</span><span style="font-size: 9pt; font-family: 宋体">．</span><span style="font-size: 10pt; font-family: 宋体">行业内部</span><span style="font-size: 10pt; font-family: Times">B2B</span><span style="font-size: 10pt; font-family: 宋体">应用</span></span></p>
<p style="text-indent: 20pt; text-align: left" align="left"><span style="font-family: 宋体"><span style="font-size: 10pt; font-family: 宋体">行业内部的应用是</span><span style="font-size: 10pt; font-family: Times">Web Services</span><span style="font-size: 10pt; font-family: 宋体">的另外一个方向。因为在一个行业中，商业业务是很相似的，因此在行业内部很容易形成服务的标准，使所有的业内企业共同遵守；但怎样实现服务和使用什么样的系统，决定权在于各个企业自己。例如，电信运营商之间的结算服务，银行之间的转帐服务等都可以形成行业标准，以</span><span style="font-size: 10pt; font-family: Times">WSDL</span><span style="font-size: 10pt; font-family: 宋体">的形式公布出来。各个企业之间可以选择不同的平台进行服务的实现。</span></span></p>
<p style="text-indent: 20pt; text-align: left" align="left"><span style="font-family: 宋体"><span style="font-size: 10pt; font-family: 宋体">提高</span><span style="font-size: 10pt; font-family: Times">Web Services</span><span style="font-size: 10pt; font-family: 宋体">的性能要想提高</span><span style="font-size: 10pt; font-family: Times">Web Services</span><span style="font-size: 10pt; font-family: 宋体">应用的性能，需要对整个系统做全盘的考虑。一般来说，有以下几点需要注意：</span></span></p>
<p style="margin-left: 41pt; text-indent: -21pt; text-align: left; tab-stops: list 41.0pt" align="left"><span style="font-family: 宋体"><span style="font-size: 9pt; font-family: 宋体">1.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 10pt; font-family: Times">Web Services</span><span style="font-size: 10pt; font-family: 宋体">的颗粒度</span></span></p>
<p style="margin-left: 19.95pt; text-indent: 20pt; text-align: left" align="left"><span style="font-family: 宋体"><span style="font-size: 10pt; font-family: 宋体">选择</span><span style="font-size: 10pt; font-family: Times">Web Services</span><span style="font-size: 10pt; font-family: 宋体">的颗粒度是提高</span><span style="font-size: 10pt; font-family: Times">Web Services</span><span style="font-size: 10pt; font-family: 宋体">应用的性能的主要手段。因为</span><span style="font-size: 10pt; font-family: Times">Web Services</span><span style="font-size: 10pt; font-family: 宋体">使用的传输协议为</span><span style="font-size: 10pt; font-family: Times">HTTP</span><span style="font-size: 10pt; font-family: 宋体">或</span><span style="font-size: 10pt; font-family: Times">SMTP</span><span style="font-size: 10pt; font-family: 宋体">等，这些协议都是面向无状态的连接协议，每一个请求都要建立一个新的连接。因此</span><span style="font-size: 10pt; font-family: Times">Web Services</span><span style="font-size: 10pt; font-family: 宋体">的调用不能象数据库</span><span style="font-size: 10pt; font-family: Times">JDBC</span><span style="font-size: 10pt; font-family: 宋体">（</span><span style="font-size: 10pt; font-family: Times">ODBC</span><span style="font-size: 10pt; font-family: 宋体">）接口一样可以进行精细而复杂的方法调用（例如，先获得</span><span style="font-size: 10pt; font-family: Times">Connection</span><span style="font-size: 10pt; font-family: 宋体">，再获得结果集，然后一行一行获取结果）。</span><span style="font-size: 10pt; font-family: Times">Web Services</span><span style="font-size: 10pt; font-family: 宋体">比较适用于大颗粒度的应用，在一个调用中便获得所有的信息（比如说银行之间的转帐，在一次调用中就将包括金额和认证等所有的信息都传输过去）。</span></span></p>
<p style="margin-left: 41pt; text-indent: -21pt; text-align: left; tab-stops: list 41.0pt" align="left"><span style="font-family: 宋体"><span style="font-size: 9pt; font-family: 宋体">2.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 10pt; font-family: 宋体">谨慎使用</span><span style="font-size: 10pt; font-family: Times">XML</span><span style="font-size: 10pt; font-family: 宋体">接口</span></span></p>
<p style="margin-left: 19.95pt; text-indent: 20pt; text-align: left" align="left"><span style="font-family: 宋体"><span style="font-size: 10pt; font-family: 宋体">系统之间的接口可以使用</span><span style="font-size: 10pt; font-family: Times">XML</span><span style="font-size: 10pt; font-family: 宋体">，这样可以增加系统的灵活性；但不要使用</span><span style="font-size: 10pt; font-family: Times">XML</span><span style="font-size: 10pt; font-family: 宋体">作为系统内部的接口，因为这不会带来任何好处，尽量使用二进制作为系统内部的接口，避免不必要的</span><span style="font-size: 10pt; font-family: Times">XML</span><span style="font-size: 10pt; font-family: 宋体">文档的解析和效验；在处理</span><span style="font-size: 10pt; font-family: Times">XML</span><span style="font-size: 10pt; font-family: 宋体">的时候，尽快将</span><span style="font-size: 10pt; font-family: Times">XML</span><span style="font-size: 10pt; font-family: 宋体">转换成内部对象，</span><span style="font-size: 10pt; font-family: Times">XML</span><span style="font-size: 10pt; font-family: 宋体">的传递只会增加系统的开销。</span></span></p>
<p style="margin-left: 41pt; text-indent: -21pt; text-align: left; tab-stops: list 41.0pt" align="left"><span style="font-family: 宋体"><span style="font-size: 9pt; font-family: 宋体">3.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 10pt; font-family: 宋体">最大可能性使用</span><span style="font-size: 10pt; font-family: Times">CACHE</span></span></p>
<p style="margin-left: 19.95pt; text-indent: 20pt; text-align: left" align="left"><span style="font-family: 宋体"><span style="font-size: 10pt; font-family: 宋体">当有些信息是只读的，或者在一段时间内保持不变，就可以使用</span><span style="font-size: 10pt; font-family: Times">CACHE</span><span style="font-size: 10pt; font-family: 宋体">。无论是客户端的</span><span style="font-size: 10pt; font-family: Times">CACHE</span><span style="font-size: 10pt; font-family: 宋体">还是服务器端的</span><span style="font-size: 10pt; font-family: Times">CACHE</span><span style="font-size: 10pt; font-family: 宋体">，都能大大提高系统的性能</span></span></p>
<p style="text-indent: 20pt"><span style="font-family: 宋体"><span style="font-size: 10pt; font-family: 宋体">总结一旦</span><span style="font-size: 10pt; font-family: Times">Web Services</span><span style="font-size: 10pt; font-family: 宋体">得到更加广泛的应用，使得各种服务可以动态查找和定位，这样就提供了不同设备之间各种各样的信息交互方式，将会大大改变商业运做的模式和信息交流的风格。</span></span><span style="font-size: 9pt; font-family: 宋体"><br />
</span><span style="font-family: 宋体"><span style="font-size: 9pt; font-family: 宋体">　　　</span><span style="font-size: 10pt; font-family: 宋体">你可以使用别人已经成熟的功能来使自己提供更好的服务，例如</span><span style="font-size: 10pt; font-family: Times">google</span><span style="font-size: 10pt; font-family: 宋体">，它的搜索引擎可以通过</span><span style="font-size: 10pt; font-family: Times">Web Services</span><span style="font-size: 10pt; font-family: 宋体">来访问。这就意味着在你的系统中可以方便的嵌入使用</span><span style="font-size: 10pt; font-family: Times">google</span><span style="font-size: 10pt; font-family: 宋体">的强大搜索功能，而不论你的系统是运行在什么平台上，使</span><span style="font-size: 10pt; font-family: Times">google</span><span style="font-size: 10pt; font-family: 宋体">的搜索引擎成为你系统的一部分，（请参考</span><em><u><span style="font-size: 10pt; color: blue; font-family: Arial">http://www.google.com/apis/</span></u></em><span style="font-size: 10pt; color: black; font-family: 宋体">）。站在别人的肩膀上，毕竟要看得远些！</span></span><span style="font-size: 9pt; font-family: 宋体"><br />
</span><span style="font-family: 宋体"><span style="font-size: 10pt; color: black; font-family: 宋体">面对</span><span style="font-size: 10pt; font-family: Times">Web Services</span><span style="font-size: 10pt; font-family: 宋体">，<span style="color: black">你现在可以不行动，但你一定要准备好！</span></span></span></p>
<img src ="http://www.blogjava.net/hyint/aggbug/256065.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hyint/" target="_blank">苦瓜</a> 2009-02-22 18:12 <a href="http://www.blogjava.net/hyint/articles/256065.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>XFire 入门</title><link>http://www.blogjava.net/hyint/articles/256060.html</link><dc:creator>苦瓜</dc:creator><author>苦瓜</author><pubDate>Sun, 22 Feb 2009 09:46:00 GMT</pubDate><guid>http://www.blogjava.net/hyint/articles/256060.html</guid><wfw:comment>http://www.blogjava.net/hyint/comments/256060.html</wfw:comment><comments>http://www.blogjava.net/hyint/articles/256060.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hyint/comments/commentRss/256060.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hyint/services/trackbacks/256060.html</trackback:ping><description><![CDATA[<wbr style="line-height: 1.8em"><span style="font-size: 24pt; color: red">XFire 入门</span><br />
<span style="font-size: 18pt">1、轻松将 POJO 发布成 Web 服务</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Java 社区一直试图将 POJO 的作用发挥到极致，降低 Java 应用实现的难度，最近的尝试是将 EJB3.0 建立在 POJO 之上；另一方面，SOA 是目前 Java 社区炙手可热的名词，非常多的企业都在努力应用和实施 SOA；XFire 为这两方面的需求提供了一种魔术般的解决方式，我们很快能够发现使用 XFire 创建和发布 Web 服务可以直接基于 POJO，将烦人的继承关系和一大堆其他可能的约束丢在一边。 <br />
<wbr style="line-height: 1.8em"><br />
<span style="font-size: 18pt">2、POJO、SOA概述 --------&nbsp; 被重新审视的POJO</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; POJO（Plain Old Java Object，简单 Java 对象）是Java 社区中最早的成员（回想您学习 Java 时第一个兴奋的时刻，那个简单的 "Hello World！" 例子），也是最简单、最容易实现的方式。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 然而现实中 Java &nbsp;的发展已经远远超越了 POJO 的范围，成为面向对象技术应用中最成功的编程语言，尤其是继承、多态的应用为我们造就了一大批开发框架（如 Struts）和标准（如 EJB），随之而来的就是实现的复杂化，我们必须面对一大堆继承关系的限制。比如说：要开发一个基于 Struts 的应用，我们必须了解 Struts 特定的继承关系如 ActionForm、ValidateActionForm；要开发一个 EJB 应用，我们必须继承 EJBObject、SessionEJB 等。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 为了抛开这些限制，降低 Java 应用实现的难度，Java 社区开始重新审视 POJO 的价值，试图将 POJO 的作用发挥到极致，最新的努力是 EJB3.0。Java 社区将 EJB3.0 设计为基于 POJO，而不是为他准备更多的继承关系等限制。 <br />
<wbr style="line-height: 1.8em"><br />
<span style="font-size: 18pt">3、让人爱恨交加的 SOA<br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SOA 已经成为了目前 Java 社区中炙手可热的名词，几乎所有的软件厂商都在讨论它，为他提供解决方案和产品支持，大部分的企业也已经在企业内部实施或者正在考虑实施 SOA。 <br />
然而 SOA 在企业内的实施却不是一项简单的任务，即使抛开新建系统直接基于 SOA 架构实施的因素，要把企业已有系统纳入 SOA 框架也不是一件容易的事情。企业必须在对当前架构深入了解的基础上，对已有系统进行大规模的改造才能满足新的要求。如何经济的从原有技术架构切换到 SOA 架构成为很多企业的难题。 <br />
<font style="display: inline-block; filter: glow(color=#CC0000,strength=3); color: #ffffff"></font><wbr style="line-height: 1.8em"><br />
4、XFire 概述<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XFire 是 codeHaus 组织提供的一个开源框架，它构建了 POJO 和 SOA 之间的桥梁，主要特性就是支持将 POJO 通过非常简单的方式发布成 Web 服务，这种处理方式不仅充分发挥了 POJO 的作用，简化了 Java 应用转化为 Web 服务的步骤和过程，也直接降低了 SOA 的实现难度，为企业转向 SOA 架构提供了一种简单可行的方式。<br />
&nbsp;<br />
XFire目前最新的版本是 1.2.2，目前支持的新特性包括：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4.1&nbsp; 支持将 Web 服务绑定到 POJO、XMLBeans、JAXB1.1、JAXB2.0 和 Castor； <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4.2&nbsp;&nbsp; 支持基于 HTTP、JMS、XMPP 等多种协议访问 Web 服务；<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4.3&nbsp;&nbsp; 支持多种 Web 服务业界重要标准如 SOAP、WSDL、Web 服务寻址（WS-Addressing）、Web 服务安全（WS-Security）等； <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4.4&nbsp;&nbsp; 支持 JSR181，可以通过 JDK5 配置 Web 服务；&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4.5&nbsp;&nbsp; 高性能的 SOAP 实现； <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4.6&nbsp;&nbsp; 服务器端、客户端代码辅助生成；<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4.7&nbsp;&nbsp; 对 Spring、Pico、Plexus 等项目的支持等。XFire安装包&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XFire 框架目前的最新版本是 1.2.6，可以访问 xfire.codehaus.org 下载 XFire 框架的安装包，下载时请选择&#8220;全部二进制发布包（Binary Distribution in zip package）&#8221;，而不仅仅是&#8220;XFire jar 文件（Jar of all XFire modules）&#8221;。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 下载完成后，我们可以将下载的 .zip 文件解压缩到任意的文件夹中（后面的章节中使用 % XFIRE_HOME % 表示 XFire 框架的安装目录），解压缩后形成的文件目录结构如下：&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a.&nbsp; &nbsp;API（目录）：&nbsp; API目录是XFire 框架中所有类（class）对应的 API 文档，为开发者使用 XFire完成应用开发提供帮助。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b.&nbsp; examples（目录）：examples 目录中包含了所有随 XFire二进制包发布的实例，包括这些实例的源代码和相关 Web 应用配置内容。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c.&nbsp; lib（目录）：lib 目录中包含 XFire 运行所需要的外部支持类包（.jar文件），可以根据不同项目所需的 XFire 特性选择所需要的支持类包。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;保守的方法是在 Web 项目中包含所有的外部支持类包（.jar文件）。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; d.&nbsp; manual（目录）：manual 目录中包含有 XFire 框架的帮助文档，开发者可以从这些帮助文档中学习更多运用 XFire 框架实现 SOA 的知识和<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 技巧。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.&nbsp; modules（目录）：modules 目录中包含了 XFire 框架根据不同特性分别编译的二进制包文件。发布基于 XFire 框架的 Web 项目时，可以选<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 择使用该目录下的所有 .jar 文件，也可以选择 XFire-all-1.2.6.jar 文件。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; f:&nbsp;&nbsp; XFire-all-1.2.6.jar： XFire框架的二进制包文件，包含了全部的模块（modules）。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g.&nbsp; LICENSE.txt ：LICENSE.txt文件中包含了XFire框架的授权协议。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; h.&nbsp; NOTICE.txt 和 README.txt ：这两个文件中包含了 XFire 发布时代一些有用的信息。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://java.sun.com/" target="_blank">java.sun.com</a><wbr> 网站上下载，如何安装 JDK 请参考 SUN 公司的相关技术文档和 JDK 的帮助文档。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://tomcat.apache.org/" target="_blank">tomcat.apache.org</a><wbr> 网站上下载，如何正确安装 TOMCAT 服务器请参考 TOMCAT 服务器的帮助文档。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://xml.apache.org/" target="_blank">xml.apache.org</a><wbr>，下载 xalan 项目的二进制包。 <br />
<font style="display: inline-block; filter: glow(color=#CC0000,strength=3); color: #ffffff"></font><wbr style="line-height: 1.8em"><br />
<a href="http://www.ibm.com/developerworks/cn/java/j-lo-xfire/#code11" target="_blank">清单 1-1</a><wbr>。 <br />
<ol style="list-style-type: decimal"></ol>
    <br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1、创建 Web 应用目录和基本元素 中所创建的 &#8221;lib&#8221;目录下，将 %XFIRE_HOME%/XFire-all-1.2.6.jar 文件也拷贝到 1、创建 Web 应用目录和基本元素 中所创建的 lib 目录下。将 xalan 安装包中的所有 jar 文件和所需要的支持 jar 文件拷贝到相同的 lib 目录下。 <br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [注] 为了减少拷贝的 jar 文件的数目，开发者可以根据项目的需要选择需要拷贝的 jar 文件，而不是全部拷贝，如何根据需要选择拷贝合适的类包文件请访问 <a href="http://xfire.codehaus.org/Dependency+Guide" target="_blank">XFire 站点</a><wbr>。&nbsp; <br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.1、创建 Web 应用目录和基本元素 <wbr>&nbsp;中创建的 classes 目录下新建目录 &#8221;META-INF\xfire&#8221;； <br />
    <li style="margin: 25px">在步骤 a) 中新建的 &#8221;xfire&#8221;文件目录下创建新文件 services.xml，文件的默认内容如 <a href="http://www.ibm.com/developerworks/cn/java/j-lo-xfire/#code12" target="_blank">清单1-2</a><wbr> 。
    <ol style="list-style-type: decimal"></ol>
        <br />
        <font style="display: inline-block; filter: glow(color=#CC0000,strength=3); color: #ffffff">清单 1-2 WEB-INF\classes\META-INF\xfire\services.xml </font><wbr style="line-height: 1.8em"><br />
        <font style="display: inline-block; filter: glow(color=#CC0000,strength=3); color: #ffffff"></font><wbr style="line-height: 1.8em"><br />
        1、 &lt;beans xmlns="http://XFire.codehaus.org/config/1.0"&gt;2、 &lt;/beans&gt; <br />
        <a href="http://www.ibm.com/developerworks/cn/java/j-lo-xfire/#code13" target="_blank">清单 1-3</a><wbr>。 <br />
        <a href="http://www.ibm.com/developerworks/cn/java/j-lo-xfire/#h1" target="_blank">&#8221;1、创建Web服务接口 ---- HelloWorldService&#8221;</a><wbr> 中创建的 HelloWorldService 接口，并且为它声明的 &#8221;sayHello&#8221;方法提供具体实现： 返回字符串&#8221;Hello World!&#8221;。 &#8221;HelloWorldServiceImpl&#8221;类对应的 Java 文件代码如 <a href="http://www.ibm.com/developerworks/cn/java/j-lo-xfire/#code14" target="_blank">清单 1-4</a><wbr>。 <br />
        <a href="http://xfire.codehaus.org/services.xml+Reference" target="_blank">XFire 站点</a><wbr>。 <br />
        通过上面的三个步骤，我们已经将新创建的HelloWorldService发布成了Web服务，我们可以使用下面的步骤测试一下创建的Web服务是否能够正常运行： <br />
        </li>
        <ol style="list-style-type: decimal">
            <li style="margin: 25px">编译上面的步骤中创建的 Java 接口和类；
            <li style="margin: 25px">启动 TOMCAT 服务器。
            <li style="margin: 25px">等 TOMCAT 服务器完全启动后，打开浏览器，在地址栏中输入 <a href="http://localhost:8080/XFire/services/HelloWorldService?wsdl">http://localhost:8080/XFire/services/HelloWorldService?wsdl</a>。
            <li style="margin: 25px">其中 HelloWorldServcie 是配置文件中 service\name 元素所定义的内容，&#8221;wsdl&#8221;参数表示查看该 Web 服务的 WSDL（Web服务描述语言）文件。 <br />
            如果浏览器中出现如下图所示类似的内容，表示 Web 服务发布成功，我们可以编写客户端访问该 Web 服务从服务器获取返回字符串，本文下载资源中提供的下载文件中包含有可供参考的客户端类 org.vivianj.xfire.pojo.client.HelloWorldServiceClient.</li>
        </ol>
        <p style="margin: 25px">浏览器浏览的结果<br />
        <img style="width: 680px; height: 510px" height="510" alt="" src="http://www.blogjava.net/images/blogjava_net/hyint/fig001.jpg" width="680" border="0" /><br />
        <br />
        &nbsp;&nbsp;&nbsp; 如果浏览器中出现错误提示，请按照上面的步骤和说明检查已经完成的开发、配置过程是否完全正确。<br />
        <br />
        5.&nbsp; 结束语 <br />
        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 本文中作者首先讲解了 XFire 框架的主要特性，XFire 框架的运行环境以及基于 XFire 框架开发 SOA 应用的基本步骤，并且借助于 SOA 环境下的 &#8221;Hello World!&#8221;例子，详细的讲解和演示了如何基于 XFire 框架、经过简单的开发、配置步骤就将一个 POJO 类中包含的方法发布成Web服务。从 &#8221;Hello World!&#8221;例子实现的过程中，我们可以发现 XFire 框架最大化的发挥了 POJO 的作用，减少了 SOA 实施时对框架本身的依赖，降低了 SOA 实施的难度，企业实施 SOA 时并不需要增加太多的投入就可以实现目标。</p>
<img src ="http://www.blogjava.net/hyint/aggbug/256060.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hyint/" target="_blank">苦瓜</a> 2009-02-22 17:46 <a href="http://www.blogjava.net/hyint/articles/256060.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>XFire 之简单开发Webservice</title><link>http://www.blogjava.net/hyint/articles/256058.html</link><dc:creator>苦瓜</dc:creator><author>苦瓜</author><pubDate>Sun, 22 Feb 2009 09:23:00 GMT</pubDate><guid>http://www.blogjava.net/hyint/articles/256058.html</guid><wfw:comment>http://www.blogjava.net/hyint/comments/256058.html</wfw:comment><comments>http://www.blogjava.net/hyint/articles/256058.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/hyint/comments/commentRss/256058.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hyint/services/trackbacks/256058.html</trackback:ping><description><![CDATA[<div id="blogDetailDiv" style="font-size: 14pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在一次偶然的机会，我接触XFire，在接触XFire之前，曾经用过Axis2，总感觉Axis2很麻烦，所以找了XFire。虽然XFire现在已经被CXF取代，但在现在已经开发的项目中，还是有不少使用XFire来实现Web Service的。今天来谈谈用XFire开发客户端。<br />
<br />
一、服务提供者告诉你interface，你可以使用如下三种方式来开发：<br />
YourService即是服务提供者告诉给你的一个interface(当然，也可以根据WSDL的定义，自己定义一个同样的interface)。<br />
1.&nbsp; 简单的方式<br />
<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">1</span><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">Service&nbsp;serviceModel&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ObjectServiceFactory().create(YourService.</span><span style="color: #0000ff">class</span><span style="color: #000000">);<br />
</span><span style="color: #008080">2</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />YourService&nbsp;service&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(YourService)<br />
</span><span style="color: #008080">3</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;XFireProxyFactory().create(serviceModel,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">http://your/remote/url</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
</span><span style="color: #008080">4</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<br />
2.&nbsp; JSR 181注释的方式<br />
<br />
<wbr><!--img--><!--gmi--><wbr>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">1</span><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">Service&nbsp;serviceModel&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;AnnotationServiceFactory().create(YourService.</span><span style="color: #0000ff">class</span><span style="color: #000000">);<br />
</span><span style="color: #008080">2</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />YourService&nbsp;client&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(YourService)</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;XFireProxyFactory().create(serviceModel,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">http://your/remote/url</span><span style="color: #000000">"</span><span style="color: #000000">);</span></div>
<br />
<br />
3.&nbsp; 混合方式<br />
<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; height: 89px; background-color: #eeeeee"><span style="color: #008080">1</span><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">Service&nbsp;serviceModel&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;AnnotationServiceFactory(<br />
</span><span style="color: #008080">2</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Jsr181WebAnnotations(),<br />
</span><span style="color: #008080">3</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;XFireFactory.newInstance().getXFire().getTransportManager(),<br />
</span><span style="color: #008080">4</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;AegisBindingProvider(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;JaxbTypeRegistry())).create(YourService.</span><span style="color: #0000ff">class</span><span style="color: #000000">);<br />
</span><span style="color: #008080">5</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<br />
二，通过WSDL创建一个动态的客户端，如下：<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">&nbsp;1</span><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;test;<br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.net.MalformedURLException;<br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.net.URL;<br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.codehaus.xfire.client.Client;<br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img id="Codehighlighter1_148_511_Open_Image" onclick="this.style.display='none'; Codehighlighter1_148_511_Open_Text.style.display='none'; Codehighlighter1_148_511_Closed_Image.style.display='inline'; Codehighlighter1_148_511_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_148_511_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_148_511_Closed_Text.style.display='none'; Codehighlighter1_148_511_Open_Image.style.display='inline'; Codehighlighter1_148_511_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;DynamicClientTest&nbsp;</span><span id="Codehighlighter1_148_511_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"  alt="" /></span><span id="Codehighlighter1_148_511_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&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 style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;MalformedURLException,<br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img id="Codehighlighter1_244_509_Open_Image" onclick="this.style.display='none'; Codehighlighter1_244_509_Open_Text.style.display='none'; Codehighlighter1_244_509_Closed_Image.style.display='inline'; Codehighlighter1_244_509_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_244_509_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_244_509_Closed_Text.style.display='none'; Codehighlighter1_244_509_Open_Image.style.display='inline'; Codehighlighter1_244_509_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Exception&nbsp;</span><span id="Codehighlighter1_244_509_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"  alt="" /></span><span id="Codehighlighter1_244_509_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">10</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Client&nbsp;client&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Client(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;URL(<br />
</span><span style="color: #008080">11</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">http://localhost:8080/xfiretest/services/TestService?wsdl</span><span style="color: #000000">"</span><span style="color: #000000">));<br />
</span><span style="color: #008080">12</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object[]&nbsp;results&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;client<br />
</span><span style="color: #008080">13</span><span style="color: #000000"><img id="Codehighlighter1_450_462_Open_Image" onclick="this.style.display='none'; Codehighlighter1_450_462_Open_Text.style.display='none'; Codehighlighter1_450_462_Closed_Image.style.display='inline'; Codehighlighter1_450_462_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_450_462_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_450_462_Closed_Text.style.display='none'; Codehighlighter1_450_462_Open_Image.style.display='inline'; Codehighlighter1_450_462_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.invoke(</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_450_462_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"  alt="" /></span><span id="Codehighlighter1_450_462_Open_Text"><span style="color: #000000">{&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">Firends</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;}</span></span><span style="color: #000000">);<br />
</span><span style="color: #008080">14</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(results[</span><span style="color: #000000">0</span><span style="color: #000000">]);<br />
</span><span style="color: #008080">15</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">16</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">17</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">18</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<br />
三，使用ANT工具或命令行通过WSDL生成一个客户端：<br />
1，使用ANT生成客户端，ANT脚本如下：<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">&nbsp;1</span><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">&lt;?</span><span style="color: #000000">xml&nbsp;version</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">1.0</span><span style="color: #000000">"</span><span style="color: #000000">?&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&lt;</span><span style="color: #000000">project&nbsp;name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">wsgen</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">default</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">wsgen</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;basedir</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">.</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">path&nbsp;id</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">classpathId</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">fileset&nbsp;dir</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">./WebRoot/WEB-INF/lib</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">include&nbsp;name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">*.jar</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">fileset</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">path</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">taskdef&nbsp;classpathref</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">classpathId</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">wsgen</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;classname</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">org.codehaus.xfire.gen.WsGenTask</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">taskdef</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">10</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">target&nbsp;name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">wsgen</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;description</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">generate&nbsp;client</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">11</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">wsgen&nbsp;outputDirectory</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">./src/</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;wsdl</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">abc.wsdl</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;binding</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">xmlbeans</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">package</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">com.abc.p</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;overwrite</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">true</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">12</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">target</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">13</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&lt;/</span><span style="color: #000000">project</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">14</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<br />
请注意，脚本中有一个参数binding，可以指定如下两种不同的方式：<br />
(1)&nbsp; jaxb(Java Architecture for XML Binding，<a href="https://jaxb.dev.java.net/" target="_blank"><font style="line-height: 1.8em" color="#1a8bc8">https://jaxb.dev.java.net/</font><wbr style="line-height: 1.8em"></a><wbr>)：使用此种方式时，会自动生成更多的Request和Resopnse类。<br />
(2)xmlbeans<br />
调用方式如下：<br />
<wbr><!--img--><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" border="0"  alt="" />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">1</span><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">AbcServiceClient&nbsp;client&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;AbcServiceClient();<br />
</span><span style="color: #008080">2</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />String&nbsp;url&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">http://localhost:8080/xfireTest/services/TestService</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
</span><span style="color: #008080">3</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />String&nbsp;result&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;client.getAbcPort(url).sayHello(</span><span style="color: #000000">"</span><span style="color: #000000">Robin</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
</span><span style="color: #008080">4</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<!--gmi--><wbr><br />
2，使用命令生成客户端的命令如下：<br />
<wbr><!--img--><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" border="0"  alt="" />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">1</span><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">gpath</span><span style="color: #000000">=</span><span style="color: #000000">xfire</span><span style="color: #000000">-</span><span style="color: #000000">all</span><span style="color: #000000">-</span><span style="color: #000000">1.2</span><span style="color: #000000">-</span><span style="color: #000000">SNAPSHOT.jar:ant</span><span style="color: #000000">-</span><span style="color: #000000">1.6</span><span style="color: #000000">.</span><span style="color: #000000">5</span><span style="color: #000000">.jar:jaxb</span><span style="color: #000000">-</span><span style="color: #000000">api</span><span style="color: #000000">-</span><span style="color: #000000">2</span><span style="color: #000000">.0EA3.jar:stax</span><span style="color: #000000">-</span><span style="color: #000000">api</span><span style="color: #000000">-</span><span style="color: #000000">1.0</span><span style="color: #000000">.</span><span style="color: #000000">1</span><span style="color: #000000">.jar:jdom</span><span style="color: #000000">-</span><span style="color: #000000">1.0</span><span style="color: #000000">.jar:jaxb</span><span style="color: #000000">-</span><span style="color: #000000">impl</span><span style="color: #000000">-</span><span style="color: #000000">2</span><span style="color: #000000">.0EA3.jar\<br />
</span><span style="color: #008080">2</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />:jaxb</span><span style="color: #000000">-</span><span style="color: #000000">xjc</span><span style="color: #000000">-</span><span style="color: #000000">2.0</span><span style="color: #000000">-</span><span style="color: #000000">ea3.jar:wstx</span><span style="color: #000000">-</span><span style="color: #000000">asl</span><span style="color: #000000">-</span><span style="color: #000000">2.9</span><span style="color: #000000">.</span><span style="color: #000000">3</span><span style="color: #000000">.jar:commons</span><span style="color: #000000">-</span><span style="color: #000000">logging</span><span style="color: #000000">-</span><span style="color: #000000">1.0</span><span style="color: #000000">.</span><span style="color: #000000">4</span><span style="color: #000000">.jar:activation</span><span style="color: #000000">-</span><span style="color: #000000">1.1</span><span style="color: #000000">.jar:wsdl4j</span><span style="color: #000000">-</span><span style="color: #000000">1.5</span><span style="color: #000000">.</span><span style="color: #000000">2</span><span style="color: #000000">.jar:XmlSchema</span><span style="color: #000000">-</span><span style="color: #000000">1.0</span><span style="color: #000000">.</span><span style="color: #000000">3</span><span style="color: #000000">.jar:xfire</span><span style="color: #000000">-</span><span style="color: #000000">jsr181</span><span style="color: #000000">-</span><span style="color: #000000">api</span><span style="color: #000000">-</span><span style="color: #000000">1.0</span><span style="color: #000000">-</span><span style="color: #000000">M1.jar;<br />
</span><span style="color: #008080">3</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">4</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />java&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">cp&nbsp;$gpath&nbsp;org.codehaus.xfire.gen.WsGen&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">wsdl&nbsp;http:</span><span style="color: #008000">//</span><span style="color: #008000">localhost:8080/xfire/services/Bookservice?wsdl&nbsp;-o&nbsp;.&nbsp;-p&nbsp;pl.tomeks.client&nbsp;-overwrite&nbsp;true&nbsp;</span></div>
<!--gmi--><wbr></div>
<img src ="http://www.blogjava.net/hyint/aggbug/256058.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hyint/" target="_blank">苦瓜</a> 2009-02-22 17:23 <a href="http://www.blogjava.net/hyint/articles/256058.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ERP 与 Web 的异同</title><link>http://www.blogjava.net/hyint/articles/256052.html</link><dc:creator>苦瓜</dc:creator><author>苦瓜</author><pubDate>Sun, 22 Feb 2009 09:10:00 GMT</pubDate><guid>http://www.blogjava.net/hyint/articles/256052.html</guid><wfw:comment>http://www.blogjava.net/hyint/comments/256052.html</wfw:comment><comments>http://www.blogjava.net/hyint/articles/256052.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hyint/comments/commentRss/256052.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hyint/services/trackbacks/256052.html</trackback:ping><description><![CDATA[1、Web的概述&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Web技术的发展，使得管理系统的开发更方便、功能更强大，在此系统的开发过程中，Web技术起了一个骨架式的支持作用；与此同时组件技术的发展为系统的开放性、集成性提供了便利，有效合理地引入组件技术是当前Web系统开发与发展的一个方向；通过对系统的开发进行建模，形象直观的图形化表示，可以显示系统的流程与功能。选择有效的建模方法，充分利用Web技术与组件技术，提高软件的开发效率，提高的软件的可靠性和可维护性，是每个软件开发人员所关心的问题。&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;UML(Unified Modeling Language) 是基于对象技术的标准建模语言，定义良好、易于表达、功能强大的特点使它在面向对象的分析与设计中更具优势。在基于Web技术和组件技术的系统建模中，它完善的组件建模思想和可视化建模的优势更利于系统开发人员理解程序流程和功能，进一步提高Web系统的开发效率以及Web组件的可重用性和可修复性。&nbsp;<br />
&nbsp;&nbsp;<br />
2、基于Web的应用系统结构 <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 对于基于Web技术的应用系统，用户直接面对的是客户端浏览器，用户在使用系统时，请求之后的事务逻辑处理和数据的逻辑运算由服务器与数据库系统共同完成，对用户而言是完全透明的。运算后得到的结果再通过浏览器的方式返回给用户。这个过程可分成一些子步骤，每一个子步骤的完成可理解为通过一个单独的应用服务器来处理，这些应用服务器在最终得到用户所需的结论之前，相互之间还会进行一定的数据交流和传递。&nbsp;<br />
<br />
3、ERP 概述<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ERP（Enterprise Resource Planning 企业资源计划）是一种企业管理的思想，强调对企业的内部甚至外部的资源进行优化配置、提高利用效率。 <br />
一个由 Gartner Group 开发的概念，描述下一代制造商业系统和制造资源计划（MRP II）软件。它将包含客户/服务架构，使用图形用户接口，应用开放系统制作。除了已有的标准功能，它还包括其它特性，如品质、过程运作管理、以及调整报告等。特别是，ERP采用的基础技术将同时给用户软件和硬件两方面的独立性从而更加容易升级。ERP的关键在于所有用户能够裁剪其应用，因而具有天然的易用性。<br />
<br />
&nbsp;&nbsp; Gartner Group提出ERP具备的功能标准应包括四个方面: <br />
&nbsp;&nbsp;&nbsp; 3.1 &nbsp; 超越MRPⅡ范围的集成功能，包括质量管理;试验室管理;流程作业管理;配方管理;产品数据管理;维护管理;管制报告和仓库管理。 <br />
&nbsp;&nbsp;&nbsp; 3.2&nbsp;&nbsp; 支持混合方式的制造环境，包括既可支持离散又可支持流程的制造环境;按面向对象的业务模型组合业务过程的能力和国际范围内的应用。&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;3.3&nbsp;&nbsp; 支持能动的监控能力,提高业务绩效，包括在整个企业内采用控制和工程方法;模拟功能;决策支持和用于生产及分析的图形能力。 <br />
&nbsp;&nbsp;&nbsp; 3.4&nbsp;&nbsp; 支持开放的客户机/服务器计算环境.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a、包括客户机/服务器体系结构;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b、图形用户界面(GUI);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c、计算机辅助设计工程(CASE),面向对象技术;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; d、使用SQL对关系数据库查询;内部集成的工程系统、商业系统、数据采集和外部集成 ( EDI )。 <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ERP是对MRPⅡ的超越,从本质上看,ERP仍然是以MRPⅡ为核心,但在功能和技术上却超越了传统的MRPⅡ,它是以顾客驱动的、基于时间的、面向整个供应链管理的企业资源计划。&nbsp;<br />
<br />
4、CRM（Customer Relationship Management）就是客户关系管理。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CRM，从字义上看，是指企业用CRM来管理与客户之间的关系。CRM是选择和管理有价值客户及其关系的一种商业策略，CRM要求以客户为中心的商业哲学和企业文化来支持有效的市场营销、销售与服务流程。如果企业拥有正确的领导、策略和企业文化，CRM应用将为企业实现有效的客户关系管理。&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CRM的概念由美国Gartner 集团率先提出。我们认为，CRM是辨识、获取、保持和增加&#8220;可获利客户&#8221;的理论、实践和技术手段的总称。它既是一种国际领先的、以&#8220;客户价值&#8221;为中心的企业管理理论、商业策略和企业运作实践，也是一种以信息技术为手段、有效提高企业收益、客户满意度、雇员生产力的管理软件。&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CRM是一个获取、保持和增加可获利客户的方法和过程，也是企业利用IT技术和互联网技术实现对客户的整合营销，是以客户为核心的企业营销的技术实现和管理的实现。&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CRM是一种技术手段，它的根本目的是通过不断改善客户关系、互动方式、资源调配、业务流程和自动化程度等，达到降低运营成本、提高企业销售收入、客户满意度和员工生产力。企业以追求最大赢利为最终目的，进行好客户关系管理是达到上述目的的手段，从这角度可以不加掩饰的说，CRM的应用是立足企业利益的，同时方便了客户，让客户满意。&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在市场营销和企业管理中，CRM将首当其冲地应用于各企业的销售组织和服务组织，为您带来长久增值和竞争力。 
 <img src ="http://www.blogjava.net/hyint/aggbug/256052.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hyint/" target="_blank">苦瓜</a> 2009-02-22 17:10 <a href="http://www.blogjava.net/hyint/articles/256052.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>CMS 简述</title><link>http://www.blogjava.net/hyint/articles/256048.html</link><dc:creator>苦瓜</dc:creator><author>苦瓜</author><pubDate>Sun, 22 Feb 2009 08:58:00 GMT</pubDate><guid>http://www.blogjava.net/hyint/articles/256048.html</guid><wfw:comment>http://www.blogjava.net/hyint/comments/256048.html</wfw:comment><comments>http://www.blogjava.net/hyint/articles/256048.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hyint/comments/commentRss/256048.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hyint/services/trackbacks/256048.html</trackback:ping><description><![CDATA[<div id="blogDetailDiv" style="font-size: 14pt">关于CMS的简单概述一下。<br />
CMS是Content Management System的缩写，意为&#8220;内容管理系统&#8221;。 <br />
CMS具有许多基于模板的优秀设计，可以加快网站开发的速度和减少开发的成本。 <br />
CMS的功能并不只限于文本处理，它也可以处理图片、Flash动画、声像流、图像甚至电子邮件档案。 <br />
CMS其实是一个很广泛的称呼，从一般的博客程序，新闻发布程序，到综合性的网站管理程序都可以被称为内容管理系统。 <br />
<br />
1、CMS的分类 <br />
&nbsp;&nbsp;&nbsp;&nbsp; 根据不同的需求，CMS有几种不同的分类方法。比如，根据应用层面的不同，可以被划分为： <br />
&nbsp;&nbsp;&nbsp;&nbsp; ○&nbsp;&nbsp; 重视后台管理的CMS <br />
&nbsp;&nbsp;&nbsp;&nbsp; ○&nbsp;&nbsp; 重视风格设计的CMS <br />
&nbsp;&nbsp;&nbsp;&nbsp; ○&nbsp;&nbsp; 重视前台发布的CMS&nbsp;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 就目前已经存在的各种CMS来说，最终界面上都是大同小异，但是在编程风格与管理方式上来讲却是相差万别。就CMS本身被设计出来的出发点来说，应该是方便一些对于各种网络编程语言并不是很熟悉的用户用一种比较简单的方式来管理自己的网站。这虽然是本身的出发点，但由于各个CMS系统的原创者们自己本身的背景与对&#8220;简单&#8221;这两个字的理解程度的不同，就造成了现在没有统一的标准群雄纷争的局面。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 简而言之CMS就是可以让你不需要学习复杂的建站技术，不需要学习太多复杂的HTML语言，你就能够利用CMS构建出一个风格统一功能强大的专业网站。 <br />
<br />
<br />
2、CMS的功能 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CMS具有许多基于模板的优秀设计，可以加快网站开发的速度和减少开发的成本。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CMS的功能并不只限于文本处理，它也可以处理图片、Flash动画、声像流、图像甚至电子邮件档案。 <br />
<br />
3、CMS还分各个平台脚本种类的。 <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 内容管理系统是企业信息化建设和电子政务的新宠，也是一个相对较新的市场，对于内容管理，业界还没有一个统一的定义，不同的机构有不同的理解： <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Gartner Group 认为内容管理从内涵上应该包括企业内部内容管理、Web内容管理、电子商务交易内容管理和企业外部网(Extranet)信息共享内容管理（如CRM和 SCM等），Web内容管理是当前的重点，e-business和XML是推动内容管理发展的源动力。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Merrill Lynch的分析师认为内容管理侧重于企业员工、企业用户、合作伙伴和供应商方便获得非结构化信息的处理过程。内容管理的目的是把非结构化信息出版到intranets, extranets和ITE(Internet Trading Exchanges), 从而使用户可以检索、使用、分析和共享。商业智能系统 (BI)侧重于结构化数据的价值提取，而内容管理则侧重于企业内部和外部非结构化资源的战略价值提取。 Giga Group 认为作为电子商务引擎，内容管理解决方案必须和电子商务服务器紧密集成，从而形成内容生产(Production)、传递(Delivery)以及电子商务端到端系统。 </div>
<img src ="http://www.blogjava.net/hyint/aggbug/256048.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hyint/" target="_blank">苦瓜</a> 2009-02-22 16:58 <a href="http://www.blogjava.net/hyint/articles/256048.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MySQL 锁机制</title><link>http://www.blogjava.net/hyint/articles/255970.html</link><dc:creator>苦瓜</dc:creator><author>苦瓜</author><pubDate>Sat, 21 Feb 2009 09:46:00 GMT</pubDate><guid>http://www.blogjava.net/hyint/articles/255970.html</guid><wfw:comment>http://www.blogjava.net/hyint/comments/255970.html</wfw:comment><comments>http://www.blogjava.net/hyint/articles/255970.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hyint/comments/commentRss/255970.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hyint/services/trackbacks/255970.html</trackback:ping><description><![CDATA[<span style="font-size: 14pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 每一款数据库，最大的问题都面临着解决并发情况下数据的安全。所以锁机制是大部分数据库都拥有的技能。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在一个update和insert操作频繁的表中，少量数据测试的时候运行良好，在实际运营中，因数据量比较大（21万条记录），会出现死锁现象，用show processlist查看，可以看到一个update语句状态是Locked，一个delete语句状态是Sending data。查看了一下参考手册，把锁定相关的资料整理下来，以便自己记录和追踪该问题的解决情况：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MySQL 5.1支持对MyISAM和MEMORY表进行表级锁定，对 BDB 表进行页级锁定，对InnoDB 表进行行级锁定。在许多情况下，可以根据培训猜测应用程序使用哪类锁定类型最好，但一般很难说出某个给出的锁类型就比另一个好。一切取决于应用程序，应用程序的不同部分可能需要不同的锁类型。为了确定是否想要使用行级锁定的存储引擎，应看看应用程序做什么并且混合使用什么样的选择和更新语句。例如，大多数Web应用程序执行许多选择，而很少进行删除，只对关键字的值进行更新，并且只插入少量具体的表。基本MySQL MyISAM 设置已经调节得很好。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在MySQL中对于使用表级锁定的存储引擎，表锁定时不会死锁的。这通过总是在一个查询开始时立即请求所有必要的锁定并且总是以同样的顺序锁定表来管理。<br />
&nbsp;&nbsp;&nbsp;&nbsp;对WRITE，MySQL使用的表锁定方法原理如下： <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ●&nbsp; &nbsp;如果在表上没有锁，在它上面放一个写锁。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ●&nbsp; &nbsp;否则，把锁定请求放在写锁定队列中。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;对READ，MySQL使用的锁定方法原理如下： <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;●&nbsp; &nbsp;如果在表上没有写锁定，把一个读锁定放在它上面。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ●&nbsp;&nbsp; 否则，把锁请求放在读锁定队列中。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 当一个锁定被释放时，锁定可被写锁定队列中的线程得到，然后是读锁定队列中的线程。<br />
这意味着，如果你在一个表上有许多更新，SELECT语句将等待直到没有更多的更新。如果INSERT 语句不冲突，可以自由为MyISAM 表混合并行的INSERT 和SELECT 语句而不需要锁定。<br />
InnoDB 使用行锁定，BDB 使用页锁定。对于这两种存储引擎，都可能存在死锁。这是因为，在SQL语句处理期间，InnoDB 自动获得行锁定，BDB 获得页锁定，而不是在事务启动时获得。<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;<span style="color: red">行级锁定的优点</span>：<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&#183;&nbsp; 当在许多线程中访问不同的行时只存在少量锁定冲突。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#183;&nbsp; 回滚时只有少量的更改。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#183;&nbsp; 可以长时间锁定单一的行。<br />
<br />
<span style="color: red">&nbsp;&nbsp;行级锁定的缺点</span>： <br />
&nbsp;&nbsp;&nbsp; &nbsp;&#183;&nbsp; 比页级或表级锁定占用更多的内存。<br />
&nbsp;&nbsp;&nbsp;&nbsp; &#183;&nbsp; 当在表的大部分中使用时，比页级或表级锁定速度慢，因为你必须获取更多的锁。&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&#183;&nbsp; 如果你在大部分数据上经常进行 GROUP BY 操作或者必须经常扫描整个表，比其它锁定明显慢很多。 <br />
&nbsp;&nbsp;&nbsp;&nbsp; &#183;&nbsp; 用高级别锁定，通过支持不同的类型锁定，你也可以很容易地调节应用程序，因为其锁成本小于行级锁定。 <br />
<br />
&nbsp;&nbsp;在以下情况下，表锁定优先于页级或行级锁定： <br />
&nbsp;&nbsp;&nbsp;&nbsp; &#183;&nbsp; 表的大部分语句用于读取。 <br />
&nbsp;&nbsp;&nbsp;&nbsp; &#183;&nbsp; 对严格的关键字进行读取和更新，你可以更新或删除可以用单一的读取的关键字来提取的一行：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;UPDATE tbl_name SET column = value WHERE unique_key_col = key_value ;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DELETE FROM tbl_name WHERE unique_key_col = key_value ;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#183;&nbsp; SELECT 结合并行的INSERT 语句，并且只有很少的UPDATE或 DELETE 语句&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &#183;&nbsp; 在整个表上有许多扫描或 GROUP BY 操作，没有任何写操作。<br />
<br />
不同于行级或页级锁定的选项：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&#183;&nbsp; 版本(例如，为并行的插入在MySQL中使用的技术)，其中可以一个写操作，同时有许多读取操作。这明数据库或表支持数据依赖的不同视图，&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;取决于访问何时开始。其它共同的术语是&#8220;时间跟踪&#8221;、&#8220;写复制&#8221;或者&#8220;按需复制&#8221;。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&#183;&nbsp; 按需复制在许多情况下优先于页级或行级锁定。然而，在最坏的情况下，它可能比使用<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;常规锁定使用多的内存。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&#183;&nbsp; 除了行级锁定外，你可以使用应用程序级锁定，例如在MySQL中使用GET_LOCK()和RELEASE_LOCK()。这些是建议性锁定，它们只能在运行良好的应用程序中工作。<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;为达到最高锁定速度，除InnoDB 和BDB 之外，对所有存储引擎，MySQL使用表锁定(而不是页、行或者列锁定)。对于InnoDB 和BDB 表，如果你用LOCK TABLES显式锁定表，MySQL只使用表锁定；如果你不使用LOCK TABLES，因为 InnoDB 使用自动行级锁定而BDB 使用页级锁定来保证事务隔离。<br />
&nbsp;&nbsp;&nbsp;&nbsp;但是对于大表，对于大多数应用程序，表锁定比行锁定更好，但存在部分缺陷。表锁定使许多线程同时从一个表中进行读取操作，但如果一个线程想要对表进行写操作，它必须首先获得独占访问。更新期间，所有其它想要访问该表的线程必须等待直到更新完成。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;表更新通常情况认为比表检索更重要，因此给予它们更高的优先级。这应确保更新一个表的活动不能&#8220;饿死&#8221;，即使该表上有很繁重的SELECT 活动。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;表锁定在这种情况下会造成问题，例如当线程正等待，因为硬盘已满并且在线程可以处理之前必须有空闲空间。在这种情况下，所有想要访问出现问题的表的线程也被设置成等待状态，直到有更多的硬盘空间可用。 <br />
<br />
表锁定在下面的情况下也存在问题： <br />
&nbsp;&nbsp;&nbsp;&nbsp;&#183;&nbsp; 一个客户发出长时间运行的查询。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&#183;&nbsp; 然后，另一个客户对同一个表进行更新。该客户必须等待直到SELECT完成。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&#183;&nbsp; 另一个客户对同一个表上发出了另一个 SELECT 语句。因为UPDATE比 SELECT 优先级高，该SELECT 语句等待&nbsp; UPDATE完成，并且等待第1个 SELECT 完成。 <br />
<br />
下面描述了一些方法来避免或减少表锁定造成的竞争：<br />
&nbsp;&nbsp; &#183;&nbsp; 试图使 SELECT 语句运行得更快。可能必须创建一些摘要(summary)表做到这点。 <br />
&nbsp;&nbsp; &#183;&nbsp; 用--low-priority-updates启动mysqld.这将给所有更新(修改)一个表的语句以比 SELECT 语句低的优先级。在这种情况下，在先前情形的第2个SELECT语句将在UPDATE语句前执行，而不需要等候第1个 SELECT 完成。 <br />
&nbsp;&nbsp;&#183;&nbsp; 可以使用SET LOW_PRIORITY_UPDATES=1语句指定具体连接中的所有更新应使用低优先级. <br />
&nbsp;&nbsp;&#183;&nbsp; 可以用LOW_PRIORITY属性给与一个特定的INSERT、UPDATE或DELETE语句较低优先级。<br />
&nbsp;&nbsp;&#183;&nbsp; 可以用HIGH_PRIORITY属性给与一个特定的SELECT语句较高优先级。 <br />
&nbsp;&nbsp;&#183;&nbsp; 为max_write_lock_count系统变量指定一个低值来启动mysqld来强制MySQL在具体数量的插入完成后临时提高所有等待一<br />
&nbsp;&nbsp;&nbsp;&nbsp; 个表的SELECT 语句的优先级。这样允许在一定数量的WRITE锁定后给出READ锁定。<br />
&nbsp;&nbsp;&#183;&nbsp; 如果你有关于INSERT结合SELECT的问题，切换到使用新的MyISAM表，因为它们支持并发的SELECT和INSERT。 <br />
&nbsp;&nbsp;&#183;&nbsp; 如果你对同一个表混合插入和删除，INSERT DELAYED将会有很大的帮助。 <br />
&nbsp;&nbsp;&#183;&nbsp; 如果你对同一个表混合使用 SELECT 和DELETE 语句出现问题，DELETE 的LIMIT 选项可以有所帮助。 <br />
&nbsp;&nbsp;&#183;&nbsp; 对 SELECT 语句使用SQL_BUFFER_RESULT可以帮助使表锁定时间变短。 <br />
&nbsp;&nbsp;&#183;&nbsp; 可以更改mysys/thr_lock.c中的锁代码以使用单一的队列。在这种情况下，写锁定和读锁定将具有相同的优先级，对一些应用程序会有帮助。 <br />
<br />
这里是一些MySQL中表锁定相关的技巧：<br />
&nbsp;&nbsp;&#183;&nbsp; 如果不混合更新与需要在同一个表中检查许多行的选择，可以进行并行操作。&nbsp;&nbsp;<br />
&nbsp;&nbsp;&#183;&nbsp; 可以使用 LOCK TABLES 来提高速度，因为在一个锁定中进行许多更新比没有锁定的更新要快得多。将表中的内容切分为几个表也可以有所帮助。&nbsp;&nbsp;<br />
&nbsp;&nbsp;&#183;&nbsp; 如果在MySQL中表锁定时遇到速度问题，可以将表转换为 InnoDB 或BDB 表来提高性能。</span>
<img src ="http://www.blogjava.net/hyint/aggbug/255970.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hyint/" target="_blank">苦瓜</a> 2009-02-21 17:46 <a href="http://www.blogjava.net/hyint/articles/255970.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>