﻿<?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/scud/</link><description>山谷里鸟语花香,溪水潺潺</description><language>zh-cn</language><lastBuildDate>Sun, 12 Apr 2026 13:39:46 GMT</lastBuildDate><pubDate>Sun, 12 Apr 2026 13:39:46 GMT</pubDate><ttl>60</ttl><item><title>有时候 在 https://blog.cnscud.com 谢谢博文</title><link>http://www.blogjava.net/scud/archive/2020/04/20/435381.html</link><dc:creator>Scud(飞云小侠)</dc:creator><author>Scud(飞云小侠)</author><pubDate>Mon, 20 Apr 2020 03:08:00 GMT</pubDate><guid>http://www.blogjava.net/scud/archive/2020/04/20/435381.html</guid><wfw:comment>http://www.blogjava.net/scud/comments/435381.html</wfw:comment><comments>http://www.blogjava.net/scud/archive/2020/04/20/435381.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/scud/comments/commentRss/435381.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/scud/services/trackbacks/435381.html</trackback:ping><description><![CDATA[有时候 在 <a href="https://blog.cnscud.com">https://blog.cnscud.com</a> 谢谢博文<img src ="http://www.blogjava.net/scud/aggbug/435381.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/scud/" target="_blank">Scud(飞云小侠)</a> 2020-04-20 11:08 <a href="http://www.blogjava.net/scud/archive/2020/04/20/435381.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>2014美西12天自助自驾游</title><link>http://www.blogjava.net/scud/archive/2014/03/26/411528.html</link><dc:creator>Scud(飞云小侠)</dc:creator><author>Scud(飞云小侠)</author><pubDate>Wed, 26 Mar 2014 11:21:00 GMT</pubDate><guid>http://www.blogjava.net/scud/archive/2014/03/26/411528.html</guid><wfw:comment>http://www.blogjava.net/scud/comments/411528.html</wfw:comment><comments>http://www.blogjava.net/scud/archive/2014/03/26/411528.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/scud/comments/commentRss/411528.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/scud/services/trackbacks/411528.html</trackback:ping><description><![CDATA[<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">在那里, 我们微笑着生活~~~~</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">&nbsp;</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; "><a target="_blank" href="http://f2.sjbly.cn/m14/0219/1419/1101dmm_800x534_b.jpg" style="color: #3c84f2;"><img alt="点击查看大图" src="http://f2.sjbly.cn/m14/0219/1419/1101dmm_800x534_m.jpg" style="border: none; max-width: 570px;" /></a></p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">&nbsp;</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">&nbsp;</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">索引:</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">*&nbsp;<a target="_blank" href="http://www.shijiebang.com/u1101/blog-14591/" style="color: #3c84f2;">旧金山</a></p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">*&nbsp;<a target="_blank" href="http://www.shijiebang.com/u1101/blog-14595/" style="color: #3c84f2;">旧金山见闻摘录</a><br />
*&nbsp;<a target="_blank" href="http://www.shijiebang.com/u1101/blog-14596/" style="color: #3c84f2;">一号公路: 美</a>不胜收<br />
*&nbsp;<a target="_blank" href="http://www.shijiebang.com/u1101/blog-14946/" style="color: #3c84f2;">洛杉矶: &nbsp;游荡, 环球影城, 奥特莱斯</a><br />
*&nbsp;<a target="_blank" href="http://www.shijiebang.com/u1101/blog-15034/" style="color: #3c84f2;">佩吉: 路上, 马蹄湾, 羚羊谷</a><br />
*&nbsp;<a target="_blank" href="http://www.shijiebang.com/u1101/blog-15022/" style="color: #3c84f2;">大峡谷: X年一遇的大雪!!??</a><br />
*&nbsp;<a target="_blank" href="http://www.shijiebang.com/u1101/blog-15019/" style="color: #3c84f2;">浅尝拉斯维加斯</a></p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">&nbsp;</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">&nbsp;</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; "><span style="line-height: 1.7;">天数1: 当地12天, 包括往返 13天.</span></p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; "><span style="line-height: 1.7;">天数2: 14天</span></p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">&nbsp;</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">出发0: 2014.1.27 &nbsp;北京/上海</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">返回1: 2014.2.8, 2.9北京落地</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">返回2: 2014.2.10, 2.11上海落地</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">&nbsp;</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">去程机票1: &nbsp;北京-&gt;西雅图-&gt;旧金山, &nbsp; 返程机票1: 拉斯维加斯-&gt;西雅图-&gt;北京</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">去程机票2: &nbsp;上海-&gt;温哥华-&gt;旧金山, &nbsp; 返程机票1: 拉斯维加斯-&gt;温哥华-&gt;北京</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">&nbsp;</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">&nbsp;</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">行程路线:&nbsp;</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">1. 到达旧金山, 附近闲逛 (因为晚点, 所以没逛)</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">2.&nbsp;旧金山两天 (2天): 经典景点+"硅谷+斯坦福" +伯克利</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">3. 一号公路2天 : 无敌太平洋, 卡梅尔, 17公里, 丹麦村, 莫罗湾, 马里布</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">4. 洛杉矶3天: 经典景点, 环球影城, 奥特莱斯购物</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">5. 洛杉矶-&gt;拉斯维加斯 1天 : 路上, 各种繁华赌城</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">6. 拉斯维加斯-&gt;佩吉-&gt;大峡谷-&gt;拉斯维加斯 3天 : 鲍威尔湖, 马蹄湾, 羚羊谷, 大峡谷</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">7. 部分: 拉斯维加斯2天 : 纸醉金迷</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">8. 拉斯维加斯返程</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">&nbsp;</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; "><a target="_blank" href="http://f2.sjbly.cn/m14/0318/1157/1101vja_645x432_b.jpg" style="color: #3c84f2;"><img alt="点击查看大图" src="http://f2.sjbly.cn/m14/0318/1157/1101vja_645x432_m.jpg" style="border: none; max-width: 570px;" /></a><br />
<br />
&nbsp;</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">&nbsp;</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">队友: 四个人, 两家人, 两人会开车, 一个人外语相对好, 一个人功课做的比较多</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">&nbsp;</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">行程设计: 由世界邦旅行网 ( www.shijiebang.com )&nbsp;<span style="line-height: 1.7;">的达人 荔枝 全程提供设计并多次改进</span></p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; "><a target="_blank" href="http://f2.sjbly.cn/m14/0219/1439/1101kdy_310x266_b.jpg" style="color: #3c84f2;"><img alt="点击查看大图" src="http://f2.sjbly.cn/m14/0219/1439/1101kdy_310x266_m.jpg" style="border: none; max-width: 570px;" /></a><br />
<a target="_blank" href="http://f2.sjbly.cn/m14/0219/1439/1101zwf_900x704_b.jpg" style="color: #3c84f2;"><img alt="点击查看大图" src="http://f2.sjbly.cn/m14/0219/1439/1101zwf_900x704_m.jpg" style="border: none; max-width: 570px;" /></a><br />
&nbsp;</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">&nbsp;</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; "><span style="line-height: 1.7;">归来的行程体会: 比较顺利的行程, 心情略有紧张, 收获非常多, 都不想回来了~~~ 哈哈</span></p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">&nbsp;</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; "><u><span style="font-weight: 700;"><span style="line-height: 1.7;">在那里, 我们永远应该微笑着生活~~~~</span></span></u></p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">&nbsp;</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">&nbsp;</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; "><u><span style="font-weight: 700;">先说从北京去旧金山, 从西雅图转机的过程</span></u></p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">主要的注意事项有<br />
1. 熟悉北京首都机场, 主要是为了免税店购物, 其他什么的不用担心, 毕竟还在国内, 只要不带危险品就没什么问题, 刀啊液体啊什么的走托运<br />
2. 熟悉西雅图机场, 因为西雅图是美国入境, 要过移民官, 海关, TSA什么的, 耗费时间可能会比较多<br />
&nbsp; &nbsp; 如果是第一次去, 中转时间还是多留点好, 毕竟对流程以及机场都不熟悉的</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">&nbsp;</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">贴下西雅图机场的转机流程: &nbsp;(全文在此: http://www.hnair.com/HNAIRNETDOCS/PRODUCT/SpecialOffer/xyt_zzlc.html )</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">&nbsp;</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">我只贴我们的:&nbsp;<u style="color: #000000; font-size: 12px; line-height: 18px;">行李条上除了标明到西雅图，还标明到最终目的站的转机路线</u><span style="color: #000000; font-size: 12px; line-height: 18px;">：</span></p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; "><span style="color: #000000; font-size: 12px; line-height: 18px;">&nbsp;&nbsp;&nbsp; 旅客下机&#8594;接受移民局检查&#8594;提取托运行李&#8594;接受海关检查&#8594;<span style="font-weight: 700;">左转将行李递交中转服务人员</span>&#8594;TSA安全检查&#8594;到中转显示屏（查看联程段航班号及登机口）&#8594;前往中转登机口（S登机区）或乘电车到达中转登机口（除S登机区以外的其他登机口）&#8594;登机口办理联程航段登机牌&#8594;登机。</span></p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">&nbsp;</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; "><u>大家注意这个 "左转将行李递交中转服务人员"</u>&nbsp;, 其实这个不一定有的, 特别是晚点或者入境时间比较长的情况下, 我们因为晚点(中国航空,你懂得, 没事就晚点) &nbsp;是问了一下, 自己把行李放到中转行李的传送带上的. &nbsp;(此处收获 "自助游" 经验500点 :P &nbsp;)&nbsp;</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">&nbsp;</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">西雅图机场: &nbsp;因为我们改签, 所以多了4个小时,把机场的A B C D N S逛了个遍, 小火车做了好多次, 一点都不麻烦 哈哈</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">&nbsp;</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; "><a target="_blank" href="http://f2.sjbly.cn/m14/0219/1411/1101hbs_900x675_b.jpg" style="color: #3c84f2;"><img alt="点击查看大图" src="http://f2.sjbly.cn/m14/0219/1411/1101hbs_900x675_m.jpg" style="border: none; max-width: 570px;" /></a></p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">&nbsp;</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">西雅图机场地图: (网上来的, 我也照了)&nbsp;</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; "><a target="_blank" href="http://f2.sjbly.cn/m14/0219/1413/1101wdt_522x358_b.jpg" style="color: #3c84f2;"><img alt="点击查看大图" src="http://f2.sjbly.cn/m14/0219/1413/1101wdt_522x358_m.jpg" style="border: none; max-width: 570px;" /></a><br />
<br />
&nbsp;</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">&nbsp;</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">&nbsp;</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">我们是乘坐海南航空公司的 HU495 航班到达西雅图, 然后原计划做&nbsp;Alaska AS318 去旧金山的, 因为晚点, 本来有3个小时的中转时间, 但我们只有一个小时了, 因为入境海关, 以及转航站楼, 时间来不及.&nbsp;&nbsp;最终去&nbsp;Alaska 的柜台改签了下一班飞机 (4个半小时后), 所以要尽量安排好缓冲时间, 避免酒店和落地后的交通出现问题, 我们因为是旧金山乘坐公共交通, 所以一切还好.</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">&nbsp;</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">到了旧金山, 因为功课做的足, 我们乘坐机场轻轨, 然后做了BART, 然后转F路公交车, 顺利到达渔人码头喜来登酒店. &nbsp;(此处收获 "自助游" 经验3000点 :P &nbsp;)&nbsp;</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">&nbsp;</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">BART其实很容易买票的, 我觉得他就是针对工程师思维设计的 (毕竟是硅谷), 所以我用起来很容易就买了俩张票. so easy. &nbsp;(此处收获 "自助游" 经验500点 :P &nbsp;)&nbsp;</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">&nbsp;</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">BART的地图:&nbsp;</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; "><a target="_blank" href="http://f2.sjbly.cn/m14/0219/1414/1101wur_600x445_b.jpg" style="color: #3c84f2;"><img alt="点击查看大图" src="http://f2.sjbly.cn/m14/0219/1414/1101wur_600x445_m.jpg" style="border: none; max-width: 570px;" /></a><br />
&nbsp;</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">&nbsp;</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">&nbsp;</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">期间12天单写文章再说.........&nbsp;<u><span style="font-weight: 700;">再说说从拉斯维加斯经过西雅图返回北京</span></u>:</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">&nbsp;</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">&nbsp;</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">我们在拉斯维加斯定了一个接送的车, 其实在拉斯维加斯打车到机场非常容易, 出租车非常多 24小时都很多的 (当然价格稍贵), 我们接送的车凌晨3:50如约到达, 轻松对上"暗号", 20分钟不到就到达了机场, 因为从拉斯维加斯到西雅图机场是美国国内航段, 我们无聊地在机场呆了2个多小时, 也没有免税店....... 早知道多睡一会了~~~</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">&nbsp;</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">美国国内的航班没事不会晚点, 所以我们就顺利到了西雅图, 在西雅图..................... 啥也没干........ (没有出境, 没有海关, 没有再次安检) &nbsp;就等海南航空的 HU496 了...........&nbsp;</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">&nbsp;</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">说起海南航空(或者说中国的航班) 真是无语啊, 可能是因为只有一个航班的原因, 实力太弱了, 连个柜台也没有, 目前是和达美航空合作使用柜台的(可能一段时间变一次), 但是连个牌子也没有, 我们足足边等边逛了90分钟, 才敢确认是在S1柜台换登机牌, 海南航空的服务意识简直就是.........了 , 去问他们的服务人员, 就是...那个牌子啊是应该有的啊.....但是........ 总之浪费时间 &nbsp; (此处收获 "吐槽" 经验1000点 :P &nbsp;) &nbsp;&nbsp;</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">&nbsp;</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; "><u><span style="font-weight: 700;">标准流程</span></u>:&nbsp;旅客下机&#8594;海航中转旅客前往S登机口（非S区域下机旅客可乘电车前往S登机区域）&#8594;到达S登机口&#8594;在S登机口办理西雅图-北京的登机牌，确认中转行李&#8594;旅客登机。</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">&nbsp;</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">&nbsp;</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">西雅图机场的免税店有6个小航站楼, 因为不太确认登机牌的事情, 也就简单逛了一下免税店, 买了一些东西...... &nbsp; 买东西是需要看护照和登机牌的, 店员会把你买的东西送到登机口的, 登机的时候别忘了取........ &nbsp;(此处收获 "自助游" 经验500点 :P &nbsp;)&nbsp;</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">&nbsp;</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">对了, 我们在西雅图机场还吃了一顿中餐..... google maps 又立功了 &nbsp;(此处收获 "自助游" 经验1000点 :P &nbsp;)&nbsp;</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">&nbsp;</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">然后登机, 机上用餐 看电影, .....熬过10个小时, 顺利到达北京.......</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">&nbsp;</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">接受中国的检疫, 边防, 海关........... &nbsp;海关因为人太多, 所以是抽检的, 本来还担心买了ipad要不要上税, 结果也没人查我.....就顺利过关了...... 我后面的女生就去检查包了......good luck</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">&nbsp;</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">拿行李, 发现丢了一个TSA的锁.....那也就算了....几毛钱的事情...... 行李里塞了一张TSA安全检查的通知, 也就是说你的包被检查了........</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">&nbsp;</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">&nbsp;</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">然后啊 逛机场的免税店, 可以买巧克力 烟酒 &nbsp;手表 &nbsp;化妆品......好多人在买 ..... 抢手的东西(例如化妆品)要狠稳准, 否则可能一会就没了........... 或者要排很长的队伍去结账.......&nbsp;</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">&nbsp;</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">免税店买东西要出示登机牌的, 否则........还是可以买巧克力的......</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">&nbsp;</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; "><a target="_blank" href="http://f2.sjbly.cn/m14/0219/1414/1101agc_900x675_b.jpg" style="color: #3c84f2;"><img alt="点击查看大图" src="http://f2.sjbly.cn/m14/0219/1414/1101agc_900x675_m.jpg" style="border: none; max-width: 570px;" /></a><br />
&nbsp;</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">&nbsp;</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">出机场, 打车, 见到路边的中文字.......</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">&nbsp;</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">兴奋? 又吸到雾霾了</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">&nbsp;</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">&nbsp;</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">何时再去美国? for ever 不回来 &nbsp;(此处收获 "梦想" 累积值10000点 :P &nbsp;)&nbsp;</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">&nbsp;</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">&nbsp;</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">&nbsp;</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">&nbsp;</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">祝各位马年马上成功</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">&nbsp;</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; "><a target="_blank" href="http://f2.sjbly.cn/m14/0219/1418/1101occ_900x600_b.jpg" style="color: #fb6a00;"><img alt="点击查看大图" src="http://f2.sjbly.cn/m14/0219/1418/1101occ_900x600_m.jpg" style="border: none; max-width: 570px;" /></a></p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">&nbsp;</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">&nbsp;</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">&nbsp;</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">&nbsp;</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">游记索引:<br />
</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; "><a target="_blank" href="http://www.shijiebang.com/u1101/blog-14591/" style="color: #3c84f2;">旧金山</a></p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; "><a target="_blank" href="http://www.shijiebang.com/u1101/blog-14595/" style="color: #3c84f2;">旧金山见闻摘录</a><br />
<a target="_blank" href="http://www.shijiebang.com/u1101/blog-14596/" style="color: #3c84f2;">一号公路: 美</a>不胜收<br />
<a target="_blank" href="http://www.shijiebang.com/u1101/blog-14946/" style="color: #3c84f2;">洛杉矶: &nbsp;游荡, 环球影城, 奥特莱斯</a><br />
<a target="_blank" href="http://www.shijiebang.com/u1101/blog-15034/" style="color: #3c84f2;">佩吉: 路上, 马蹄湾, 羚羊谷</a><br />
<a target="_blank" href="http://www.shijiebang.com/u1101/blog-15022/" style="color: #3c84f2;">大峡谷: X年一遇的大雪!!??</a><br />
<a target="_blank" href="http://www.shijiebang.com/u1101/blog-15019/" style="color: #3c84f2;">浅尝拉斯维加斯</a></p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">&nbsp;</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">&nbsp;</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">具体行程细节PPT和行程单, 请找我索取, 邮箱 cnscud#gmail.com&nbsp;<br />
</p>
<p style="margin: 0px; padding: 0px; color: #666666; font-family: 'Helvetica Neue', Tahoma, Arial, 'Hiragino Sans GB', 'Hiragino Sans GB W3', 华文黑体, 文泉驿正黑体, 'Microsoft YaHei', sans-serif; line-height: 23.799999237060547px; ">&nbsp;</p><img src ="http://www.blogjava.net/scud/aggbug/411528.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/scud/" target="_blank">Scud(飞云小侠)</a> 2014-03-26 19:21 <a href="http://www.blogjava.net/scud/archive/2014/03/26/411528.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>北京出国自助游旅游网站世界邦高薪招聘 前端, Java, 测试工程师</title><link>http://www.blogjava.net/scud/archive/2013/09/05/403719.html</link><dc:creator>Scud(飞云小侠)</dc:creator><author>Scud(飞云小侠)</author><pubDate>Thu, 05 Sep 2013 08:39:00 GMT</pubDate><guid>http://www.blogjava.net/scud/archive/2013/09/05/403719.html</guid><wfw:comment>http://www.blogjava.net/scud/comments/403719.html</wfw:comment><comments>http://www.blogjava.net/scud/archive/2013/09/05/403719.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/scud/comments/commentRss/403719.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/scud/services/trackbacks/403719.html</trackback:ping><description><![CDATA[<div></div><div>世界邦旅行网（www.shijiebang.com）是一个新型出境自助旅行社区和电子商务开放平台，以提供&#8220;个性化行程定制服务，高性价比、高质量境外自助游&#8221;为目标。</div><div>世界邦的服务宗旨是：更好的服务于出境自助游旅行者，提高亿万国人的旅行质量。</div><div></div><div></div><div>世界邦（北京）信息技术有限公司于2012年底创立，集结国内各大著名互联网公司与出境旅游行业精英，创立伊始便得到国际顶级风投注资。</div><div></div><div>世界邦旅行网（www.shijiebang.com）区别于传统旅游论坛与媒体，致力于打通境外服务提供商与旅行者之间的传统壁垒，搭建帮助千万旅行者实现高性价比、高品质出境自助游的新型旅行社区和电子商务开放平台，从而推动出境游领域的产业升级。世界邦旅行商城&#8220;Travel Mall&#8221;，作为这一全新概念的旅行服务与商品交易平台，本身不直接售卖商品，而是由平台上汇集的数百家境内外商家提供旅行商品和服务，世界邦提供交易平台和第三方交易担保，且提供签证教室、行程设计、甄选比价、随行工具等独特服务，以满足旅行者在出境游咨询、规划行程、产品选购等各方面的需求。</div><div>此外，世界邦旅行网还倾心打造旅行者与旅行达人、旅行机构、旅行服务提供商之间的互动交流平台，共同分享旅行经验、发现旅行精彩！</div><div></div><div></div><div>薪水范围: 向业界看齐, 无上限, 具体面议</div><div>联系邮箱: felixzhang@shijiebang.net &nbsp;qq: 104188</div><div></div><div>福利: 大厨做饭+交通通讯补助+旅游基金</div><div>&nbsp;&nbsp;</div><div>&nbsp;&nbsp;</div><div>职位4: 高级JAVA工程师/架构师</div><div>1.<span style="white-space:pre">	</span> 有互联网网站开发经验最佳(例如人人, 新浪微博, Qzone类似网站)&nbsp;</div><div>2.<span style="white-space:pre">	</span> 有创新能力, 有独立思想&nbsp;</div><div>3.<span style="white-space:pre">	</span>较好的沟通能力, 团队协作能力&nbsp;</div><div>4.<span style="white-space:pre">	</span>非常熟悉互联网网站的开发， 了解整个网站的组织和架构</div><div>5.<span style="white-space:pre">	</span>非常熟悉Java语言中和互联网开发相关的知识</div><div>6.<span style="white-space:pre">	</span>熟悉常用开发框架， 例如Spring Framework或类似框架</div><div>7.<span style="white-space:pre">	</span>熟悉Mysql或类似数据库， 对NOSQL相关领域有了解</div><div>8.<span style="white-space:pre">	</span>对缓存系统Memcache, redis等有一定的使用经验</div><div>9.<span style="white-space:pre">	</span>有钻研精神， 对未知的领域有深入探索，学习的激情</div><div>10.<span style="white-space:pre">	</span> 快速学习，了解业界最新动态，不断提升自我</div><div>11.<span style="white-space:pre">	</span>热爱旅游, 热爱摄影优先考虑&nbsp;</div><div>&nbsp;&nbsp;</div><div></div><div>&nbsp;&nbsp;</div><div>职位3: 高级前端工程师</div><div>&#8226; &nbsp; 有大中型交互性网站产品经验(例如人人, 新浪微博, Qzone类似网站)&nbsp;</div><div>&#8226; &nbsp; 有创新能力, 有独立思想&nbsp;</div><div>&#8226; &nbsp; 较好的沟通能力, 团队协作能力&nbsp;</div><div>&#8226; &nbsp; 非常熟悉互联网网站的JS开发， 能开发相关大中型网站的整个前端架构</div><div>&#8226; &nbsp; 非常熟悉互联网网站的CSS开发，页面制作， 对浏览器兼容性有深刻认识</div><div>&#8226; &nbsp; 对整个网站的前端开发工作有统筹规划的经验</div><div>&#8226; &nbsp; 热爱旅游, 热爱摄影优先考虑&nbsp;</div><div></div><div></div><div>想了解详细信息, 可以加我QQ详聊.</div><img src ="http://www.blogjava.net/scud/aggbug/403719.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/scud/" target="_blank">Scud(飞云小侠)</a> 2013-09-05 16:39 <a href="http://www.blogjava.net/scud/archive/2013/09/05/403719.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux-自搭网关</title><link>http://www.blogjava.net/scud/archive/2013/01/10/394044.html</link><dc:creator>Scud(飞云小侠)</dc:creator><author>Scud(飞云小侠)</author><pubDate>Wed, 09 Jan 2013 16:01:00 GMT</pubDate><guid>http://www.blogjava.net/scud/archive/2013/01/10/394044.html</guid><wfw:comment>http://www.blogjava.net/scud/comments/394044.html</wfw:comment><comments>http://www.blogjava.net/scud/archive/2013/01/10/394044.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/scud/comments/commentRss/394044.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/scud/services/trackbacks/394044.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 在有外网机器上#启动iptablesservice iptables startchkconfig iptables on&nbsp;&nbsp;#伪装请求iptables -t nat -A POSTROUTING -s 10.1.0.0/16 -j MASQUERADE#保存规则, 避免重启丢失/etc/init.d/iptables save&nbsp;&nbsp;#设置允许转发sysctl...&nbsp;&nbsp;<a href='http://www.blogjava.net/scud/archive/2013/01/10/394044.html'>阅读全文</a><img src ="http://www.blogjava.net/scud/aggbug/394044.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/scud/" target="_blank">Scud(飞云小侠)</a> 2013-01-10 00:01 <a href="http://www.blogjava.net/scud/archive/2013/01/10/394044.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>过滤访问日志里的无效ip和robot</title><link>http://www.blogjava.net/scud/archive/2013/01/09/394043.html</link><dc:creator>Scud(飞云小侠)</dc:creator><author>Scud(飞云小侠)</author><pubDate>Wed, 09 Jan 2013 15:56:00 GMT</pubDate><guid>http://www.blogjava.net/scud/archive/2013/01/09/394043.html</guid><wfw:comment>http://www.blogjava.net/scud/comments/394043.html</wfw:comment><comments>http://www.blogjava.net/scud/archive/2013/01/09/394043.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/scud/comments/commentRss/394043.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/scud/services/trackbacks/394043.html</trackback:ping><description><![CDATA[定期更新ip的脚本:
<br />
<br />
<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->#!/bin/sh<br />
#定时更新公司IP,&nbsp;以用来过滤<br />
#author:&nbsp;Felix&nbsp;Zhang<br />
#date:&nbsp;2012-12-29<br />
<br />
filedir=/opt/logdata/companyip<br />
<br />
adate=$(date&nbsp;-d&nbsp;"today"&nbsp;+"%Y%m%d")<br />
filename="${filedir}/ip.${adate}"<br />
ip=`/usr/bin/host&nbsp;yourcompany.3322.org|awk&nbsp;'{print&nbsp;$4}'`<br />
<span style="color: #0000FF; ">if</span>&nbsp;[&nbsp;''&nbsp;!=&nbsp;"`grep&nbsp;$ip&nbsp;${filename}`"&nbsp;];&nbsp;then<br />
&nbsp;&nbsp;&nbsp;&nbsp;exit&nbsp;0<br />
fi<br />
<br />
echo&nbsp;"$ip"&nbsp;&gt;&gt;&nbsp;${filename}<br />
<br />
<br />
#Set&nbsp;how&nbsp;<span style="color: #0000FF; ">long</span>&nbsp;you&nbsp;want&nbsp;to&nbsp;save<br />
save_days=30<br />
<br />
#delete&nbsp;30&nbsp;days&nbsp;ago&nbsp;nginx&nbsp;log&nbsp;files<br />
find&nbsp;${filedir}&nbsp;-mtime&nbsp;+${save_days}&nbsp;-exec&nbsp;rm&nbsp;-rf&nbsp;{}&nbsp;\;&nbsp;<br />
</div>
<br />
分析日志的脚本:
<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><br />
<br />
#!/bin/sh<br />
ipdir=/opt/logdata/companyip<br />
adate=$(date&nbsp;-d&nbsp;"today"&nbsp;+"%Y%m%d")<br />
ipfile="${ipdir}/ip.${adate}"<br />
ipreg="127.0.0.1"<br />
<span style="color: #0000FF; ">if</span>&nbsp;[&nbsp;-e&nbsp;${ipfile}&nbsp;];&nbsp;then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ipreg=`cat&nbsp;${ipfile}&nbsp;|sed&nbsp;':a&nbsp;N;s/\n/|/;ta'`<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"1"<br />
fi<br />
<span style="color: #0000FF; ">if</span>&nbsp;[&nbsp;"${ipreg}"&nbsp;=&nbsp;""&nbsp;&nbsp;];&nbsp;then<br />
&nbsp;&nbsp;&nbsp;ipreg="127.0.0.1"<br />
&nbsp;&nbsp;&nbsp;echo&nbsp;"2"<br />
fi<br />
echo&nbsp;${ipreg}<br />
#cat&nbsp;ip.test&nbsp;|grep&nbsp;-E&nbsp;-v&nbsp;&nbsp;'127.0.0.1|126.23.23.44'<br />
fileName=$1;<br />
echo&nbsp;'分析文件'$fileName<br />
<br />
cat&nbsp;$fileName&nbsp;|&nbsp;egrep&nbsp;&nbsp;-v&nbsp;${ipreg}&nbsp;|awk&nbsp;'{print&nbsp;$7}'</div>
<br />这样分析日志时就可以过滤掉自己公司的IP了.
当然根据机器人的特征也可以过滤机器人, 此处不在多说了, 此处仅给出几个机器人<br /><br /><div>cat ${logfile} |grep -E -v ${ipreg} |grep -E -v "DNSPod-monitor|bot.htm|spider.htm|webmasters.htm" &gt;${cleanlogfile}<br /><br /><br /><br /></div><img src ="http://www.blogjava.net/scud/aggbug/394043.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/scud/" target="_blank">Scud(飞云小侠)</a> 2013-01-09 23:56 <a href="http://www.blogjava.net/scud/archive/2013/01/09/394043.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>创业公司招聘Java工程师, 架构师, 资深前端</title><link>http://www.blogjava.net/scud/archive/2012/09/09/387350.html</link><dc:creator>Scud(飞云小侠)</dc:creator><author>Scud(飞云小侠)</author><pubDate>Sun, 09 Sep 2012 13:04:00 GMT</pubDate><guid>http://www.blogjava.net/scud/archive/2012/09/09/387350.html</guid><wfw:comment>http://www.blogjava.net/scud/comments/387350.html</wfw:comment><comments>http://www.blogjava.net/scud/archive/2012/09/09/387350.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.blogjava.net/scud/comments/commentRss/387350.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/scud/services/trackbacks/387350.html</trackback:ping><description><![CDATA[<div></div><p style="margin: 0px; padding: 0px; color: #444444; font-family: 'Helvetica Neue', Tahoma, Arial, 'Microsoft YaHei', 文泉驿正黑体, sans-serif; line-height: 23px; background-color: #ffffff; text-indent: 2em;">联系邮箱: felixzhang@shijiebang.net &nbsp;qq: 104188<br /><br />世界邦旅行网（www.shijiebang.com）是一个新型出境自助旅行社区和电子商务开放平台，以提供&#8220;个性化行程定制服务，高性价比、高质量境外自助游&#8221;为目标。</p><p style="margin: 0px; padding: 0px; color: #444444; font-family: 'Helvetica Neue', Tahoma, Arial, 'Microsoft YaHei', 文泉驿正黑体, sans-serif; line-height: 23px; background-color: #ffffff; text-indent: 2em;">世界邦的服务宗旨是：更好的服务于出境自助游旅行者，提高亿万国人的旅行质量。</p><br style="color: #444444; font-family: 'Helvetica Neue', Tahoma, Arial, 'Microsoft YaHei', 文泉驿正黑体, sans-serif; line-height: 23px; background-color: #ffffff;" /><p style="margin: 0px; padding: 0px; color: #444444; font-family: 'Helvetica Neue', Tahoma, Arial, 'Microsoft YaHei', 文泉驿正黑体, sans-serif; line-height: 23px; background-color: #ffffff; text-indent: 2em;"><br />世界邦（北京）信息技术有限公司于2012年底创立，集结国内各大著名互联网公司与出境旅游行业精英，创立伊始便得到国际顶级风投注资。<br /><br /></p><p style="margin: 0px; padding: 0px; color: #444444; font-family: 'Helvetica Neue', Tahoma, Arial, 'Microsoft YaHei', 文泉驿正黑体, sans-serif; line-height: 23px; background-color: #ffffff; text-indent: 2em;">世界邦旅行网（www.shijiebang.com）区别于传统旅游论坛与媒体，致力于打通境外服务提供商与旅行者之间的传统壁垒，搭建帮助千万旅行者实现高性价比、高品质出境自助游的新型旅行社区和电子商务开放平台，从而推动出境游领域的产业升级。世界邦旅行商城&#8220;Travel Mall&#8221;，作为这一全新概念的旅行服务与商品交易平台，本身不直接售卖商品，而是由平台上汇集的数百家境内外商家提供旅行商品和服务，世界邦提供交易平台和第三方交易担保，且提供签证教室、行程设计、甄选比价、随行工具等独特服务，以满足旅行者在出境游咨询、规划行程、产品选购等各方面的需求。</p><p style="margin: 0px; padding: 0px; color: #444444; font-family: 'Helvetica Neue', Tahoma, Arial, 'Microsoft YaHei', 文泉驿正黑体, sans-serif; line-height: 23px; background-color: #ffffff; text-indent: 2em;">此外，世界邦旅行网还倾心打造旅行者与旅行达人、旅行机构、旅行服务提供商之间的互动交流平台，共同分享旅行经验、发现旅行精彩！</p><div></div><div></div><div><br />薪水范围: 向业界看齐, 无上限, 具体面议<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;</div><div></div><div><div>职位4: <strong>高级JAVA工程师/架构师</strong></div><div>1.<span style="white-space: pre; ">	</span>&nbsp;有互联网网站开发经验最佳(例如人人, 新浪微博, Qzone类似网站)&nbsp;</div><div>2.<span style="white-space: pre; ">	</span>&nbsp;有创新能力, 有独立思想&nbsp;</div><div>3.<span style="white-space: pre; ">	</span>较好的沟通能力, 团队协作能力&nbsp;</div><div>4.<span style="white-space: pre; ">	</span>非常熟悉互联网网站的开发， 了解整个网站的组织和架构</div><div>5.<span style="white-space: pre; ">	</span>非常熟悉Java语言中和互联网开发相关的知识</div><div>6.<span style="white-space: pre; ">	</span>熟悉常用开发框架， 例如Spring Framework或类似框架</div><div>7.<span style="white-space: pre; ">	</span>熟悉Mysql或类似数据库， 对NOSQL相关领域有了解</div><div>8.<span style="white-space: pre; ">	</span>对缓存系统Memcache, redis等有一定的使用经验</div><div>9.<span style="white-space: pre; ">	</span>有钻研精神， 对未知的领域有深入探索，学习的激情</div><div>10.<span style="white-space: pre; ">	</span>&nbsp;快速学习，了解业界最新动态，不断提升自我</div><div>11.<span style="white-space: pre; ">	</span>热爱旅游, 热爱摄影优先考虑&nbsp;<br />&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;</div><div></div></div><div>职位3: <strong>高级前端工程师</strong></div><div>&#8226; &nbsp; 有大中型交互性网站产品经验(例如人人, 新浪微博, Qzone类似网站)&nbsp;</div><div>&#8226; &nbsp; 有创新能力, 有独立思想&nbsp;</div><div>&#8226; &nbsp; 较好的沟通能力, 团队协作能力&nbsp;</div><div>&#8226; &nbsp; 非常熟悉互联网网站的JS开发， 能开发相关大中型网站的整个前端架构</div><div>&#8226; &nbsp; 非常熟悉互联网网站的CSS开发，页面制作， 对浏览器兼容性有深刻认识</div><div>&#8226; &nbsp; 对整个网站的前端开发工作有统筹规划的经验</div><div>&#8226; &nbsp; 热爱旅游, 热爱摄影优先考虑&nbsp;<br /></div><div></div><div>想了解详细信息, 可以加我QQ详聊.<br /></div><img src ="http://www.blogjava.net/scud/aggbug/387350.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/scud/" target="_blank">Scud(飞云小侠)</a> 2012-09-09 21:04 <a href="http://www.blogjava.net/scud/archive/2012/09/09/387350.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>The 13 Secrets To Facebook's Success (转)</title><link>http://www.blogjava.net/scud/archive/2012/05/20/378620.html</link><dc:creator>Scud(飞云小侠)</dc:creator><author>Scud(飞云小侠)</author><pubDate>Sun, 20 May 2012 08:28:00 GMT</pubDate><guid>http://www.blogjava.net/scud/archive/2012/05/20/378620.html</guid><wfw:comment>http://www.blogjava.net/scud/comments/378620.html</wfw:comment><comments>http://www.blogjava.net/scud/archive/2012/05/20/378620.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/scud/comments/commentRss/378620.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/scud/services/trackbacks/378620.html</trackback:ping><description><![CDATA[<a href="http://www.businessinsider.com/author/henry-blodget" style="text-decoration: none; color: #1d637d; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 16px; text-align: left; ">Henry Blodget</a><span style="font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 16px; text-align: left; background-color: #ffffff; ">	</span><span style="padding: 0px 0.5em; color: #cccccc; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 16px; text-align: left; ">|</span>&nbsp;<span style="font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 16px; text-align: left; "><span format-date"="" rel="1337268660" style="color: #dd4725; ">May 17, 2012, 11:31 AM</span>&nbsp;</span><span style="font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 16px; text-align: left; "><br /><br />Read more:&nbsp;<a href="http://www.businessinsider.com/secrets-to-facebooks-success-2012-5?op=1#ixzz1vOat0585" style="text-decoration: none; color: #003399; ">http://www.businessinsider.com/secrets-to-facebooks-success-2012-5?op=1#ixzz1vOat0585</a></span>&nbsp;<br /><br /><div post-content"="" style="margin: 0px; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 16px; text-align: left; "><p style="margin: 1em 0px 0px; padding: 0px; ">Eight years ago,&nbsp;<a href="http://www.businessinsider.com/blackboard/facebook" style="text-decoration: none; color: #1d637d; ">Facebook</a>&nbsp;was a coding project in Mark Zuckerberg's dorm room.</p><p style="margin: 1em 0px 0px; padding: 0px; ">Now its a global business with $4 billion of revenue that is used by 1/8th of the world's population. And it's worth more than $100 billion.</p><p style="margin: 1em 0px 0px; padding: 0px; ">When Facebook started, there were dozens of other social networks going after the same opportunity.</p><p style="margin: 1em 0px 0px; padding: 0px; ">Facebook won. They lost.</p><p style="margin: 1em 0px 0px; padding: 0px; ">Here are some reasons why--reasons that apply to almost every business.</p></div><br style="clear: both; font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 16px; text-align: left; " /><div style="margin: 18px 0px; padding: 15px; background-color: #ebf1f6; line-height: 20px; font-family: arial, helvetica, sans-serif; font-size: 13px; text-align: left; "><h2>1. Move fast. 快速行动/推进</h2><div slide-content"="" style="margin: -1em 0px 0px; padding-top: 1.125em; overflow: hidden; width: 2234px; clear: both; "><div slide-image"="" style="margin: 1em 0px 10px 18px; line-height: 1.2em; float: right; overflow: hidden; "><img src="http://static7.businessinsider.com/image/4a6afde7152ed40125e913a3-400-300/1-move-fast.jpg" alt="1. Move fast." border="0" style="border: 0px; margin-bottom: 0.25em; " /></div>Mark Zuckerberg built the first version of Facebook in his spare time in his Harvard dorm room.<p style="margin: 1em 0px 0px; padding: 0px; "></p><p style="margin: 1em 0px 0px; padding: 0px; ">He didn't write a business plan.</p><p style="margin: 1em 0px 0px; padding: 0px; ">He didn't endlessly ask friends and advisors what they thought of the idea.</p><p style="margin: 1em 0px 0px; padding: 0px; ">He didn't "research the market," apply for patents or trademarks, assemble focus groups, or do any of the other things that entrepreneurs are supposed to do.</p><p style="margin: 1em 0px 0px; padding: 0px; ">He just built a cool product quickly and launched it.</p><p style="margin: 1em 0px 0px; padding: 0px; ">And Facebook was born.</p></div></div><div style="margin: 18px 0px; padding: 15px; background-color: #ebf1f6; line-height: 20px; font-family: arial, helvetica, sans-serif; font-size: 13px; text-align: left; "><h2>2. Remember that ideas are a dime a dozen--it's all about execution. 有了想法, 还需要执行</h2><div slide-content"="" style="margin: -1em 0px 0px; padding-top: 1.125em; overflow: hidden; width: 2234px; clear: both; "><div slide-image"="" style="margin: 1em 0px 10px 18px; line-height: 1.2em; float: right; overflow: hidden; "><img src="http://static7.businessinsider.com/image/7237544be93ca9474ba25f00-400-300/2-remember-that-ideas-are-a-dime-a-dozen-its-all-about-execution.jpg" alt="2. Remember that ideas are a dime a dozen--it's all about execution." border="0" style="border: 0px; margin-bottom: 0.25em; " /></div>From the moment Facebook was launched, there was a huge fight about whose idea it was.<p style="margin: 1em 0px 0px; padding: 0px; "></p><p style="margin: 1em 0px 0px; padding: 0px; ">Two Harvard seniors, the Winklevosses, said it was their idea--that Mark Zuckerberg had "stolen it."</p><p style="margin: 1em 0px 0px; padding: 0px; ">This led to a legal fight that has lasted for nearly a decade.</p><p style="margin: 1em 0px 0px; padding: 0px; ">Meanwhile, outside the clubby world of Harvard, there were dozens of other entrepreneurs who had similar ideas. And lots of them launched those ideas. But, today, there's only one Facebook.</p><p style="margin: 1em 0px 0px; padding: 0px; ">Why?</p><p style="margin: 1em 0px 0px; padding: 0px; ">Because ideas are a dime a dozen.</p><p style="margin: 1em 0px 0px; padding: 0px; ">What matters is making them happen.</p><p style="margin: 1em 0px 0px; padding: 0px; ">As the fictional Mark Zuckerberg told the fictional Winklevoss brothers in the movie: "If you had invented Facebook, you would have invented Facebook."</p><p style="margin: 1em 0px 0px; padding: 0px; ">Don't waste time congratulating yourself for having a good idea. Just go make it happen.</p></div></div><div style="margin: 18px 0px; padding: 15px; background-color: #ebf1f6; line-height: 20px; font-family: arial, helvetica, sans-serif; font-size: 13px; text-align: left; "><h2>3. Keep it simple (don't overbuild). 保持简单(不要过度建设)</h2><div slide-content"="" style="margin: -1em 0px 0px; padding-top: 1.125em; overflow: hidden; width: 2234px; clear: both; "><div slide-image"="" style="margin: 1em 0px 10px 18px; line-height: 1.2em; float: right; overflow: hidden; "><img src="http://static7.businessinsider.com/image/4fb4d66eeab8ea796500001b-400-300/3-keep-it-simple-dont-overbuild.jpg" alt="3. Keep it simple (don't overbuild)." border="0" style="border: 0px; margin-bottom: 0.25em; " /></div>Many companies get so entranced with all the amazing features they want to build into their products that they make their products so complex that no one can figure out how to use them.<p style="margin: 1em 0px 0px; padding: 0px; "></p><p style="margin: 1em 0px 0px; padding: 0px; ">Or they take so long to develop their products that by the time they come out, they have already been leapfrogged.</p><p style="margin: 1em 0px 0px; padding: 0px; ">The first version of the "thefacebook" was very simple. It did one thing well.</p><p style="margin: 1em 0px 0px; padding: 0px; ">Then Zuckerberg and the Facebook team improved it over time. And, each time, they made sure that the service was still easy to use.</p><p style="margin: 1em 0px 0px; padding: 0px; ">(Okay, the privacy controls are ludicrously complex, but no one pays attention to those).</p></div></div><div style="margin: 18px 0px; padding: 15px; background-color: #ebf1f6; line-height: 20px; font-family: arial, helvetica, sans-serif; font-size: 13px; text-align: left; "><h2>4. Figure out what will kill you... and make sure it doesn't. 找出哪些是可能的致命点, 并预防</h2><div slide-content"="" style="margin: -1em 0px 0px; padding-top: 1.125em; overflow: hidden; width: 2234px; clear: both; "><div slide-image"="" style="margin: 1em 0px 10px 18px; line-height: 1.2em; float: right; overflow: hidden; "><img src="http://static7.businessinsider.com/image/4fb4d718eab8eaaf6e000003-400-300/4-figure-out-what-will-kill-you-and-make-sure-it-doesnt.jpg" alt="4. Figure out what will kill you... and make sure it doesn't." border="0" style="border: 0px; margin-bottom: 0.25em; " /></div>Most people have long since forgotten, but Facebook was far from the first social network.<p style="margin: 1em 0px 0px; padding: 0px; "></p><p style="margin: 1em 0px 0px; padding: 0px; ">There were several other college networks in existence before Facebook launched in 2004, including at Columbia and Stanford.</p><p style="margin: 1em 0px 0px; padding: 0px; ">(The latter, called Club Nexus, had been around since 2001. But, in violation of Facebook Success Secret No. 3, it was too complex. So it never really took off.)</p><p style="margin: 1em 0px 0px; padding: 0px; ">Out in the real world, meanwhile, Friendster and MySpace were taking the world by storm.</p><p style="margin: 1em 0px 0px; padding: 0px; ">But then Friendster committed suicide.</p><p style="margin: 1em 0px 0px; padding: 0px; ">How?</p><p style="margin: 1em 0px 0px; padding: 0px; ">By failing to restrict usage until it had the back-end infrastructure in place to support it.</p><p style="margin: 1em 0px 0px; padding: 0px; ">Demand for Friendster became so intense that the service slowed to a crawl. By the time the company finally fixed the back-end, a year later, most of Friendster's U.S. users had defected to other networks.</p><p style="margin: 1em 0px 0px; padding: 0px; ">When Zuckerberg and his co-founders rolled out Facebook, they carefully controlled new registrations. They added one school at a time, waiting until they were certain that their infrastructure could handle it. Thus, Facebook always "worked."</p><p style="margin: 1em 0px 0px; padding: 0px; ">In other words, Zuckerberg correctly identified one of the things that could kill Facebook--and he made certain not to fall prey to it.</p></div></div><div style="margin: 18px 0px; padding: 15px; background-color: #ebf1f6; line-height: 20px; font-family: arial, helvetica, sans-serif; font-size: 13px; text-align: left; "><h2>5. Make your primary focus the product, not the "business" or "shareholder value." 产品第一, 不是商业, 也不是股东利益</h2><div slide-content"="" style="margin: -1em 0px 0px; padding-top: 1.125em; overflow: hidden; width: 2234px; clear: both; "><div slide-image"="" style="margin: 1em 0px 10px 18px; line-height: 1.2em; float: right; overflow: hidden; "><div style="margin: 0px; "><img src="http://static6.businessinsider.com/image/4fa2f37769bedd482c000015-400-300/5-make-your-primary-focus-the-product-not-the-business-or-shareholder-value.jpg" alt="5. Make your primary focus the product, not the &quot;business&quot; or &quot;shareholder value.&quot;" border="0" style="border: 0px; margin-bottom: 0.25em; " /></div><p style="margin: -0.25em 0px 0px 1em; padding: 0px; font-style: italic; font-size: 12px; color: #999999; float: right; ">Facebook Roadshow</p></div>Mark Zuckerberg was famously uninterested in Facebook's business in the early days. Instead, he focused all of his energy on Facebook's product.<p style="margin: 1em 0px 0px; padding: 0px; "></p><p style="margin: 1em 0px 0px; padding: 0px; ">This product obsession went so far that Zuckerberg continually turned away advertising clients, because he didn't want ads to muck up the service. Ads weren't cool. Zuckerberg wanted Facebook to be cool.</p><p style="margin: 1em 0px 0px; padding: 0px; ">As Facebook grew, Zuckerberg retained his focus on the product. He then hired senior executives--Sheryl Sandberg and David Ebersman--to run the company's business and finances.</p><p style="margin: 1em 0px 0px; padding: 0px; ">As Facebook prepared to go public, Zuckerberg wrote a letter to shareholders in which he stated the company's intention to focus on its "social mission" first and its business second.</p><p style="margin: 1em 0px 0px; padding: 0px; ">On Wall Street, not surprisingly, this is heresy. In Wall Street's view, companies are supposed to focus all of their efforts on creating value for their shareholders (translation: making the stock price go up.)</p><p style="margin: 1em 0px 0px; padding: 0px; ">As Amazon and other companies have demonstrated, however, one of the best ways to create huge amounts of shareholder value over the long-term is to focus obsessively on the your product and your customers. If you do that, the business will follow. And you won't make the mistake that a lot of companies make, which is to focus on the business at the expense of the product. Nothing exposes you to the risk of disruption or mediocrity like emphasizing "business" and neglecting the product.</p></div></div><div style="margin: 18px 0px; padding: 15px; background-color: #ebf1f6; line-height: 20px; font-family: arial, helvetica, sans-serif; font-size: 13px; text-align: left; "><h2>6. Get really really good at hiring... and really really good at firing. 擅长招人, 也擅长开人</h2><div slide-content"="" style="margin: -1em 0px 0px; padding-top: 1.125em; overflow: hidden; width: 2234px; clear: both; "><div slide-image"="" style="margin: 1em 0px 10px 18px; line-height: 1.2em; float: right; overflow: hidden; "><div style="margin: 0px; "><img src="http://static8.businessinsider.com/image/4fb1030269bedd3027000010-400-300/6-get-really-really-good-at-hiring-and-really-really-good-at-firing.jpg" alt="6. Get really really good at hiring... and really really good at firing." border="0" style="border: 0px; margin-bottom: 0.25em; " /></div><p style="margin: -0.25em 0px 0px 1em; padding: 0px; font-style: italic; font-size: 12px; color: #999999; float: right; ">Dylan Love</p></div>The strength of a company has nothing to do with its technology or current products. It has to do with its people.<p style="margin: 1em 0px 0px; padding: 0px; "></p><p style="margin: 1em 0px 0px; padding: 0px; ">(Why? Because technology and products change. Quickly.)</p><p style="margin: 1em 0px 0px; padding: 0px; ">Even Steve Jobs was quick to admit that no one can do it alone.</p><p style="margin: 1em 0px 0px; padding: 0px; ">So if you want to build a great company, you have to build a great team. And building a great team means two things:</p><ul style="margin: 1em 1em 0px 0px; padding: 0px 0px 0px 16px; position: relative; left: 1em; "><li style="margin: 0px; padding: 0px; list-style: none url(http://static5.businessinsider.com/assets/images/dot-black.png); background-image: none !important; background-position: initial initial !important; background-repeat: initial initial !important; ">Hiring well, and</li><li style="margin: 0px; padding: 0px; list-style: none url(http://static5.businessinsider.com/assets/images/dot-black.png); background-image: none !important; background-position: initial initial !important; background-repeat: initial initial !important; ">Firing well.</li></ul><p style="margin: 1em 0px 0px; padding: 0px; ">It's easy to understand how to hire well: You have to find the best people for each position and then persuade them to join the company.</p><p style="margin: 1em 0px 0px; padding: 0px; ">Firing well, meanwhile, is critical for two reasons: First, no matter how careful you are, you're going to make hiring mistakes, and you need to fix them quickly. Secondly, if your company is growing rapidly, it will eventually outgrow some of your early executives--and you'll need to replace them. In short, if you don't "fire well," your company will slip into mediocrity.</p><p style="margin: 1em 0px 0px; padding: 0px; ">In Facebook's early days, the company made lots of hiring mistakes, but it addressed them quickly. Facebook was also good at replacing executives as the company outgrew them.</p></div></div><div style="margin: 18px 0px; padding: 15px; background-color: #ebf1f6; line-height: 20px; font-family: arial, helvetica, sans-serif; font-size: 13px; text-align: left; "><h2>7. Maintain control. 控制权</h2><div slide-content"="" style="margin: -1em 0px 0px; padding-top: 1.125em; overflow: hidden; width: 2234px; clear: both; "><div slide-image"="" style="margin: 1em 0px 10px 18px; line-height: 1.2em; float: right; overflow: hidden; "><div style="margin: 0px; "><img src="http://static5.businessinsider.com/image/4eae9a6069bedd7b40000007-400-300/7-maintain-control.jpg" alt="7. Maintain control." border="0" style="border: 0px; margin-bottom: 0.25em; " /></div><p style="margin: -0.25em 0px 0px 1em; padding: 0px; font-style: italic; font-size: 12px; color: #999999; float: right; ">Courtesy of Wikipedia</p></div>Every company has three main constituencies:<p style="margin: 1em 0px 0px; padding: 0px; "></p><ul style="margin: 1em 1em 0px 0px; padding: 0px 0px 0px 16px; position: relative; left: 1em; "><li style="margin: 0px; padding: 0px; list-style: none url(http://static5.businessinsider.com/assets/images/dot-black.png); background-image: none !important; background-position: initial initial !important; background-repeat: initial initial !important; ">Customers</li><li style="margin: 0px; padding: 0px; list-style: none url(http://static5.businessinsider.com/assets/images/dot-black.png); background-image: none !important; background-position: initial initial !important; background-repeat: initial initial !important; ">Employees</li><li style="margin: 0px; padding: 0px; list-style: none url(http://static5.businessinsider.com/assets/images/dot-black.png); background-image: none !important; background-position: initial initial !important; background-repeat: initial initial !important; ">Shareholders</li></ul><p style="margin: 1em 0px 0px; padding: 0px; ">The best companies balance the interests of all three of them.</p><p style="margin: 1em 0px 0px; padding: 0px; ">Weaker companies, meanwhile, emphasize the interests of one constituency at the expense of the others. They pay employees too little to make ends meet, for example. Or they try to save on manufacturing costs and produce crappy products. Or they pay their managers so much for mediocre work that they lose their edge.</p><p style="margin: 1em 0px 0px; padding: 0px; ">One of the reasons some companies fall into this trap is that they end up controlled by short-term shareholders who have very different interests than the company's customers and employees.</p><p style="margin: 1em 0px 0px; padding: 0px; ">If Facebook had been controlled by its venture capitalists, it is likely that the company would have sold out long before now. If, as a public company, Facebook were beholden to the short-term needs of public shareholders, it might be tempted to cut research and development costs or take other shortcuts to meet its quarterly numbers.</p><p style="margin: 1em 0px 0px; padding: 0px; ">But Facebook has always been controlled by Mark Zuckerberg. And Zuckerberg has always been more focused on building his long-term vision than on capitalizing on short-term financial rewards.</p><p style="margin: 1em 0px 0px; padding: 0px; ">One way to ensure that your company won't get pulled off course, therefore, is to maintain control of it. If not by owning complete voting control, the way Mark Zuckerberg does, by having key shareholders who support your vision.</p></div></div><div style="margin: 18px 0px; padding: 15px; background-color: #ebf1f6; line-height: 20px; font-family: arial, helvetica, sans-serif; font-size: 13px; text-align: left; "><h2>8. Don't endlessly "focus group"--just roll out new features and adapt to the screams. 不要止步于目标客户, 不停推出新功能并成为焦点 --- 用户不知道他们要什么</h2><div slide-content"="" style="margin: -1em 0px 0px; padding-top: 1.125em; overflow: hidden; width: 2234px; clear: both; "><div slide-image"="" style="margin: 1em 0px 10px 18px; line-height: 1.2em; float: right; overflow: hidden; "><img src="http://static6.businessinsider.com/image/4fb513d16bb3f7305d000001-400-300/8-dont-endlessly-focus-group-just-roll-out-new-features-and-adapt-to-the-screams.jpg" alt="8. Don't endlessly &quot;focus group&quot;--just roll out new features and adapt to the screams." border="0" style="border: 0px; margin-bottom: 0.25em; " /></div>Steve Jobs also famously said that customers don't know what they want.<p style="margin: 1em 0px 0px; padding: 0px; "></p><p style="margin: 1em 0px 0px; padding: 0px; ">It was Apple's job, Jobs continued, to figure out what the customers would want--and then give it to them.</p><p style="margin: 1em 0px 0px; padding: 0px; ">Facebook has always operated the same way.</p><p style="margin: 1em 0px 0px; padding: 0px; ">Instead of "focus-grouping" new features, Facebook has just rolled them out. Sometimes, these new features have been met with outrage and screams. Facebook has then adapted or killed the new features based on what it learns from the screams.</p><p style="margin: 1em 0px 0px; padding: 0px; ">In the case of "News Feed," for example, Facebook kept the feature but tweaked it to address some of its users' concerns. And this feature, which was initially hated, has gone on to become one of Facebook's most important features.</p><p style="margin: 1em 0px 0px; padding: 0px; ">In the case of "Beacon," meanwhile, Facebook ultimately withdrew the feature completely.</p><p style="margin: 1em 0px 0px; padding: 0px; ">Each time Facebook has rolled out a product that was greeted with screams, some observers of the company have concluded that the company "made a mistake." Although in a limited sense, these features might have included "mistakes," the process itself is deliberate. And it works.</p></div></div><div style="margin: 18px 0px; padding: 15px; background-color: #ebf1f6; line-height: 20px; font-family: arial, helvetica, sans-serif; font-size: 13px; text-align: left; "><h2>9. Cultivate smart advisors and learn everything you can from them. &nbsp;聚集聪明的顾问并向他们学习</h2><div slide-content"="" style="margin: -1em 0px 0px; padding-top: 1.125em; overflow: hidden; width: 2234px; clear: both; "><div slide-image"="" style="margin: 1em 0px 10px 18px; line-height: 1.2em; float: right; overflow: hidden; "><img src="http://static7.businessinsider.com/image/4e8d177ceab8eac01d000012-400-300/9-cultivate-smart-advisors-and-learn-everything-you-can-from-them.jpg" alt="9. Cultivate smart advisors and learn everything you can from them." border="0" style="border: 0px; margin-bottom: 0.25em; " /></div>Leadership and management are skills.<p style="margin: 1em 0px 0px; padding: 0px; "></p><p style="margin: 1em 0px 0px; padding: 0px; ">As such, they can (and have to be) learned.</p><p style="margin: 1em 0px 0px; padding: 0px; ">As venture capitalist Ben Horowitz puts it, CEOs are made, not born.</p><p style="margin: 1em 0px 0px; padding: 0px; ">Mark Zuckerberg's skill as a CEO, which is now prodigious, was deliberately acquired.</p><p style="margin: 1em 0px 0px; padding: 0px; ">Early in Facebook's development, Zuckerberg was such a lousy leader that one of his executives cornered him to tell him he needed "CEO lessons."</p><p style="margin: 1em 0px 0px; padding: 0px; ">From then on, Zuckerberg dedicated himself to learning as much and as fast as he could.</p><p style="margin: 1em 0px 0px; padding: 0px; ">To help with this, he cultivated a group of advisors, including some of the best entrepreneurs, investors, and executives in the country. This group included Steve Jobs, VC Marc Andreessen, investor Peter Thiel, Jim Breyer of Accel Partners, Warren Buffett, Donald Graham of the Washington Post, and many others. Zuckerberg learned as much as he could from each of these men, as well as from many of the executives he recruited to Facebook. And, gradually, he became a great leader.</p><p style="margin: 1em 0px 0px; padding: 0px; ">No one has all the answers. And the more talented people you surround yourself with, the more likely you'll be to be exposed to some good ones.</p></div></div><div style="margin: 18px 0px; padding: 15px; background-color: #ebf1f6; line-height: 20px; font-family: arial, helvetica, sans-serif; font-size: 13px; text-align: left; "><h2>10. Grow skin as thick as a pachyderm's. 越成功的人受到的非议越多, 脸皮要厚?</h2><div slide-content"="" style="margin: -1em 0px 0px; padding-top: 1.125em; overflow: hidden; width: 2234px; clear: both; "><div slide-image"="" style="margin: 1em 0px 10px 18px; line-height: 1.2em; float: right; overflow: hidden; "><div style="margin: 0px; "><img src="http://static8.businessinsider.com/image/4f7ddb6f69bedda10d000005-400-300/10-grow-skin-as-thick-as-a-pachyderms.jpg" alt="10. Grow skin as thick as a pachyderm's." border="0" style="border: 0px; margin-bottom: 0.25em; " /></div><p style="margin: -0.25em 0px 0px 1em; padding: 0px; font-style: italic; font-size: 12px; color: #999999; float: right; ">Na Son Nguyen/AP</p></div>If you're doing something hard, innovative, or interesting--in short, something worth doing--you're going to get criticized.<p style="margin: 1em 0px 0px; padding: 0px; "></p><p style="margin: 1em 0px 0px; padding: 0px; ">The more successful you are, the more this criticism will increase.</p><p style="margin: 1em 0px 0px; padding: 0px; ">You don't have to enjoy the criticism, but you do have to learn to tolerate it. Because there's absolutely nothing you can do to stop it.</p><p style="margin: 1em 0px 0px; padding: 0px; ">People will be jealous. They will be angry. They won't understand. They will have agendas (the media, competitors). They will be frustrated at the way they were treated (ex-employees). They will want money and credit.</p><p style="margin: 1em 0px 0px; padding: 0px; ">In short, they will lob no end of hell-fire your way. And, sometimes, the criticism will be accurate.</p><p style="margin: 1em 0px 0px; padding: 0px; ">Some of the immense amount of criticism directed at Mark Zuckerberg over the years has been accurate. In the beginning, he&nbsp;<em>was</em>&nbsp;a lousy leader. He&nbsp;<em>has</em>&nbsp;made many mistakes. He&nbsp;<em>did</em>&nbsp;do some things (very early on) that were questionable ethically. He pissed a lot of people off.</p><p style="margin: 1em 0px 0px; padding: 0px; ">This criticism had to have hurt.&nbsp; How could it not?&nbsp; But Mark Zuckerberg never let it derail his desire to continue to build Facebook. And he never let it get to him to the point where he quit.</p><p style="margin: 1em 0px 0px; padding: 0px; ">No matter what you do in life, if you're successful, people are going to throw rocks at you. If you're going to keep succeeding, you have to grow skin thick enough that they'll just bounce off.</p></div></div><div style="margin: 18px 0px; padding: 15px; background-color: #ebf1f6; line-height: 20px; font-family: arial, helvetica, sans-serif; font-size: 13px; text-align: left; "><h2>11. If you ever think that you're done--you're done. 如果你觉得你已经搞定了, 那你就完了</h2><div slide-content"="" style="margin: -1em 0px 0px; padding-top: 1.125em; overflow: hidden; width: 2234px; clear: both; "><div slide-image"="" style="margin: 1em 0px 10px 18px; line-height: 1.2em; float: right; overflow: hidden; "><div style="margin: 0px; "><img src="http://static8.businessinsider.com/image/4e034ca54bd7c8d460230000-400-300/11-if-you-ever-think-that-youre-done-youre-done.jpg" alt="11. If you ever think that you're done--you're done." border="0" style="border: 0px; margin-bottom: 0.25em; " /></div><p style="margin: -0.25em 0px 0px 1em; padding: 0px; font-style: italic; font-size: 12px; color: #999999; float: right; "><a href="http://www.flickr.com/photos/thomaspurves/4730780976/sizes/l/in/photostream/" style="text-decoration: none; color: #1d637d; ">Thomas Purves via Flickr</a></p></div>When Facebook finally blew past the collapsing MySpace a few years ago, it "won" the social-media race.<p style="margin: 1em 0px 0px; padding: 0px; "></p><p style="margin: 1em 0px 0px; padding: 0px; ">At that point, it could have settled back and congratulated itself for a job well done.</p><p style="margin: 1em 0px 0px; padding: 0px; ">Fortunately for everyone at the company--and its users and shareholders--it didn't.</p><p style="margin: 1em 0px 0px; padding: 0px; ">Facebook kept running as fast and hard as it could, putting as much distance between itself and its competitors as possible. It kept poaching talent from competitors and would-be competitors. Every time a new startup invented something cool, Facebook copied it. It kept its progress in perspective: Mark Zuckerberg is fond of saying that the company is only 1% done. And so on.</p><p style="margin: 1em 0px 0px; padding: 0px; ">Andy Grove famously said that "only the paranoid survive." In most businesses, that's accurate. If you ever think that you're done, you're done.</p></div></div><div style="margin: 18px 0px; padding: 15px; background-color: #ebf1f6; line-height: 20px; font-family: arial, helvetica, sans-serif; font-size: 13px; text-align: left; "><h2>12. Ignore Wall Street and other would-be deal-makers (unless you really want to make a deal). 别让那些...来烦你</h2><div slide-content"="" style="margin: -1em 0px 0px; padding-top: 1.125em; overflow: hidden; width: 2234px; clear: both; "><div slide-image"="" style="margin: 1em 0px 10px 18px; line-height: 1.2em; float: right; overflow: hidden; "><img src="http://static8.businessinsider.com/image/4cfe6047cadcbb0c56020000-400-300/12-ignore-wall-street-and-other-would-be-deal-makers-unless-you-really-want-to-make-a-deal.jpg" alt="12. Ignore Wall Street and other would-be deal-makers (unless you really want to make a deal)." border="0" style="border: 0px; margin-bottom: 0.25em; " /></div>If things are going well, your doors will be knocked down by people who want to meet with you to see how you can "work together" or "learn more about where you're headed."<p style="margin: 1em 0px 0px; padding: 0px; "></p><p style="margin: 1em 0px 0px; padding: 0px; ">These potential partners and service-providers will include consultants, bankers, investors, potential acquirers, and competitors. They'll also include any number of other folks who want to sell you things.</p><p style="margin: 1em 0px 0px; padding: 0px; ">Some of these people will be extremely smart, rich, and powerful. They'll talk a great game. And they'll talk your ears off.</p><p style="margin: 1em 0px 0px; padding: 0px; ">Some of the these people may also actually be able to help--doing favors, providing information and suggestions, making introductions, etc.</p><p style="margin: 1em 0px 0px; padding: 0px; ">But what these folks won't do is help you produce a better product or service. And mostly they'll just distract you and waste your time.</p><p style="margin: 1em 0px 0px; padding: 0px; ">If you ever need bankers or other service providers, they won't be hard to find. Pick up the phone, and dozens of highly qualified ones will instantly appear at your door.</p><p style="margin: 1em 0px 0px; padding: 0px; ">The same goes for most other would-be partners and service providers.</p><p style="margin: 1em 0px 0px; padding: 0px; ">There are only 12-16 hours in a day and 365 days in a year. If you let would-be partners and service providers drive your agenda, they'll take all that time and then some. So don't let them. Focus on your product and your customers. Let would-be partners and service providers "learn where you're headed" by watching you.</p></div></div><div style="margin: 18px 0px; padding: 15px; background-color: #ebf1f6; line-height: 20px; font-family: arial, helvetica, sans-serif; font-size: 13px; text-align: left; "><h2>13. Focus on the long term. 关注远景</h2><div slide-content"="" style="margin: -1em 0px 0px; padding-top: 1.125em; overflow: hidden; width: 2234px; clear: both; "><div slide-image"="" style="margin: 1em 0px 10px 18px; line-height: 1.2em; float: right; overflow: hidden; "><div style="margin: 0px; "><img src="http://static5.businessinsider.com/image/4dff6d8accd1d56357150000-400-300/13-focus-on-the-long-term.jpg" alt="13. Focus on the long term." border="0" style="border: 0px; margin-bottom: 0.25em; " /></div><p style="margin: 0.5em 0px 0px; padding: 0px; font-style: italic; font-size: 12px; color: #222222; font-weight: bold; ">Ignore them. It's just noise.</p></div>If you read the financial media, you could be forgiven for assuming that success is all about "months" and "quarters."<p style="margin: 1em 0px 0px; padding: 0px; "></p><p style="margin: 1em 0px 0px; padding: 0px; ">Every quarter, every public company goes through a ridiculous ritual in which announces that it has either "beaten expectations" or "missed estimates." And its stock then soars or plummets. And the media then trashes or applauds it. And so on.</p><p style="margin: 1em 0px 0px; padding: 0px; ">In case you don't realize it yet, these quarterly rituals are usually staged rituals: Companies issue "guidance" to analysts, publicly or privately. The "guidance" is designed to set expectations so low that even a mediocre quarter will "beat expectations." Investors know this and therefore have "whisper numbers" that represent their real expectations. And that's why stocks often go down even when companies "beat expectations."</p><p style="margin: 1em 0px 0px; padding: 0px; ">Meanwhile, some companies get so focused on "making the quarter" that they begin to warp their sales processes and pricing just to meet this random time hurdle. Customers soon learn that if they wait until the end of the quarter to sign their deal, they'll get a much better deal. And, soon, no one signs anything until the end of the quarter.</p><p style="margin: 1em 0px 0px; padding: 0px; ">So the short-term quarterly game isn't just about wasting time managing investor expectations...it also hurts the business.</p><p style="margin: 1em 0px 0px; padding: 0px; ">The best approach to this whole quarterly game is to minimize it as much as possible. No great companies are built by obsessing about quarters. Great companies are built by focusing on a vision that will create many years or even decades to create. In addition to Facebook, think Walmart, Google, Apple, and Amazon.</p><p style="margin: 1em 0px 0px; padding: 0px; ">Put differently, it's a marathon, not a sprint. And you should obsess about getting to the finish line in the marathon, not about each "beating expectations" with each individual mile-time.</p></div></div><span style="font-family: arial, helvetica, sans-serif; font-size: 13px; line-height: 16px; text-align: left; "><br /><br />Read more:&nbsp;<a href="http://www.businessinsider.com/secrets-to-facebooks-success-2012-5?op=1#ixzz1vOb2ypOD" style="text-decoration: none; color: #003399; ">http://www.businessinsider.com/secrets-to-facebooks-success-2012-5?op=1#ixzz1vOb2ypOD</a></span>&nbsp;<br /><img src ="http://www.blogjava.net/scud/aggbug/378620.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/scud/" target="_blank">Scud(飞云小侠)</a> 2012-05-20 16:28 <a href="http://www.blogjava.net/scud/archive/2012/05/20/378620.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>&lt;门后的秘密&gt; 读后点滴摘录</title><link>http://www.blogjava.net/scud/archive/2012/04/24/376508.html</link><dc:creator>Scud(飞云小侠)</dc:creator><author>Scud(飞云小侠)</author><pubDate>Tue, 24 Apr 2012 12:33:00 GMT</pubDate><guid>http://www.blogjava.net/scud/archive/2012/04/24/376508.html</guid><wfw:comment>http://www.blogjava.net/scud/comments/376508.html</wfw:comment><comments>http://www.blogjava.net/scud/archive/2012/04/24/376508.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/scud/comments/commentRss/376508.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/scud/services/trackbacks/376508.html</trackback:ping><description><![CDATA[<div><br />熟悉团队: <br />&nbsp;&nbsp; &nbsp;了解每一个成员的情况, 需求<br />&nbsp;&nbsp; &nbsp;面谈了解别人的情况, 态度, 问题<br />&nbsp;&nbsp; &nbsp;定期一对一面谈, 更新状况<br />&nbsp;&nbsp; &nbsp;<br />团队工作情况<br />&nbsp;&nbsp; &nbsp;了解所有进行的项目<br />&nbsp;&nbsp;&nbsp; 每周都列出工作内容<br />&nbsp;&nbsp; &nbsp;明确团队工作的目标<br />&nbsp;&nbsp; &nbsp;任务的优先级和重要性<br />&nbsp;&nbsp; &nbsp;可视化工作内容<br />&nbsp;&nbsp; &nbsp;项目组合管理<br />&nbsp;&nbsp; &nbsp;不要给员工同时分配多项任务<br /><br />工作相关<br />&nbsp;&nbsp; &nbsp;提供合适的工作环境<br />&nbsp;&nbsp; &nbsp;积极听取反馈, 作出调整<br />&nbsp;&nbsp; &nbsp;给成员及时的反馈, 让其了解<br />&nbsp;&nbsp; &nbsp;新员工如何快速融入团队<br />&nbsp;&nbsp; &nbsp;不要吝啬你的赞扬<br /><br />技术发展 (自己补充的)<br />&nbsp;&nbsp; &nbsp;简单, 清晰<br />&nbsp;&nbsp; &nbsp;提供统一的基础框架并积极改进<br />&nbsp;&nbsp; &nbsp;提供推荐的标准开发流程<br />&nbsp;&nbsp; &nbsp;<br /><br />个人发展<br />&nbsp;&nbsp; &nbsp;为每个人制定个人目标<br />&nbsp;&nbsp; &nbsp;为成员提供指导<br />&nbsp;&nbsp; &nbsp;帮助别人<br />&nbsp;&nbsp; &nbsp;站在别人的立场<br />&nbsp;&nbsp; &nbsp;培训, 指导<br />&nbsp;&nbsp; &nbsp;不要阻碍员工的发展<br /><br />解决问题<br />&nbsp;&nbsp; &nbsp;收集实际情况, 全面了解, 不要责备<br />&nbsp;&nbsp; &nbsp;问题的优先级如何决定?<br />&nbsp;&nbsp; &nbsp;提出3种解决方案以讨论<br />&nbsp;&nbsp; &nbsp;利用团队力量寻找解决方案<br />&nbsp;&nbsp; &nbsp;制定实际的执行计划, 执行人<br /><br />分配工作<br />&nbsp;&nbsp; &nbsp;学会分配, 不要凡事躬亲<br />&nbsp;&nbsp; &nbsp;策略性工作可以分派<br />&nbsp;&nbsp; &nbsp;信赖他人, 结果导向?<br /><br />自我管理<br />&nbsp;&nbsp; &nbsp;控制情绪<br />&nbsp;&nbsp; &nbsp;积极学习<br /><br />管理外部变化<br />&nbsp;&nbsp; &nbsp;控制外部变化, 不折腾<br />&nbsp;&nbsp; &nbsp;了解变化的底层原因<br />&nbsp;&nbsp; &nbsp;主动迎接变化, 而不是被动接受<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<br />团队建设<br />&nbsp;&nbsp; &nbsp;活动<br />&nbsp;&nbsp; &nbsp;招聘<br />&nbsp;&nbsp; &nbsp;内部培训, 分享<br />&nbsp;&nbsp; &nbsp;技术专家?<br />&nbsp;&nbsp; &nbsp;外部口碑?</div><img src ="http://www.blogjava.net/scud/aggbug/376508.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/scud/" target="_blank">Scud(飞云小侠)</a> 2012-04-24 20:33 <a href="http://www.blogjava.net/scud/archive/2012/04/24/376508.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>已经使用ant的项目如何利用maven来管理依赖</title><link>http://www.blogjava.net/scud/archive/2010/11/06/337399.html</link><dc:creator>Scud(飞云小侠)</dc:creator><author>Scud(飞云小侠)</author><pubDate>Sat, 06 Nov 2010 03:50:00 GMT</pubDate><guid>http://www.blogjava.net/scud/archive/2010/11/06/337399.html</guid><wfw:comment>http://www.blogjava.net/scud/comments/337399.html</wfw:comment><comments>http://www.blogjava.net/scud/archive/2010/11/06/337399.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/scud/comments/commentRss/337399.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/scud/services/trackbacks/337399.html</trackback:ping><description><![CDATA[<br />
<br />
maven对于管理大型项目来说是不错的东西, 当然也可以仅用它来做依赖管理 (类似的有IVY), 不过我们有一些项目已经使用了ant来构建, 那么如何能二者兼得? 对ant的build.xml做小小的改动就可以同时支持使用maven来做依赖管理, 也可以使用ant来做构建. --- 当然简单的构建其实不需要ant, maven完全可以胜任.<br />
<br />
<br />
<strong>Maven的一些特性</strong><br />
<ul>
    <li>&nbsp; 可以方便进行依赖管理</li>
    <li>&nbsp; 提供了标准的目录结构, 保证大家统一. (也可以覆盖默认设置)</li>
    <li>&nbsp; 利用profile解决测试, 生产环境的配置问题</li>
    <li>&nbsp; 提供了标准的构建任务, 不需要自己写</li>
    <li>&nbsp; 多个项目可以集中管理, 可以树状结构管理, 一目了然. 可以快速建立起开发环境. 基本上几步就可以编译项目了, 相反手动方式下, 每个项目都要配置依赖就要累死了.</li>
    <li>&nbsp; 基于约定的方式, 对于特殊情况处理起来有一些麻烦, 一些情况下ant更灵活方便.</li>
</ul>
<br />
<br />
<br />
<strong>我们的目标</strong><br />
<br />
1. 对喜欢maven的人, 能快速利用maven创建新的项目, 而不用痛苦地去一个一个找依赖, 作为普通开发者可以不关心复杂的build.xml, 或者直接用maven构建<br />
2. 对原本使用ant脚本的项目, 在要求兼容maven的情况下, 仅仅添加maven的依赖管理, 同时可以为ant提供依赖包的自动收集, 不需要手动自己找.<br />
3. 推行maven的使用, 快速创建开发环境. <br />
4. subversion不在保存一堆一堆巨大的jar包<br />
<br />
<br />
本文的内容主要是针对上面的第二条, 当然最终是希望推行maven, 方便管理.<br />
<br />
首先我们要安装好ant, maven2, 配置好环境变量, 修改maven的缓存路径. <br />
<br />
然后安装 http://maven.apache.org/ant-tasks/index.html 包, 可以直接放在ant的lib目录下, 当然还有其他方式, 例如在build.xml里指定路径.<br />
<br />
<br />
<strong>准备pom.xml</strong>, 针对本文所说情况, 只需要写基本信息和依赖包配置即可.<br />
<br />
举例:<br />
<br />
<br />
<br />
<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">&lt;?</span><span style="color: #ff00ff;">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"</span><span style="color: #0000ff;">?&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">project&nbsp;</span><span style="color: #ff0000;">xmlns</span><span style="color: #0000ff;">="http://maven.apache.org/POM/4.0.0"</span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xmlns:xsi</span><span style="color: #0000ff;">="http://www.w3.org/2001/XMLSchema-instance"</span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xsi:schemaLocation</span><span style="color: #0000ff;">="http://maven.apache.org/POM/4.0.0&nbsp;http://maven.apache.org/xsd/maven-4.0.0.xsd"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">modelVersion</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">4.0.0</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">modelVersion</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">groupId</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">com.test</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">groupId</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">artifactId</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">maventest</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">artifactId</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">name</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">Maven&nbsp;Test</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">name</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">version</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">1.0</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">version</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">build</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">plugins</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">plugin</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">groupId</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">org.apache.maven.plugins</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">groupId</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">artifactId</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">maven-compiler-plugin</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">artifactId</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">configuration</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">source</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">1.6</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">source</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">target</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">1.6</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">target</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">configuration</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">plugin</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">plugins</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">build</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">dependencies</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">dependency</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">groupId</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">org.jgroups</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">groupId</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">artifactId</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">jgroups</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">artifactId</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">version</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">2.10.0.GA</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">version</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">dependency</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">dependency</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">groupId</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">commons-lang</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">groupId</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">artifactId</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">commons-lang</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">artifactId</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">version</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">2.5</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">version</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">dependency</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">dependency</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">groupId</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">junit</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">groupId</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">artifactId</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">junit</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">artifactId</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">version</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">3.8.1</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">version</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">scope</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">test</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">scope</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">dependency</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">dependencies</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
<br />
</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">project</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span></div>
<br />
<br />
如果有本地仓库, 还可以配置repository. (推荐优先使用本地服务器), 这个文件内容很少, 主要是依赖包的信息, 也是我们最关注的信息.<br />
<br />
<br />
下面我们来修改我们的build.xml, 为ant提供依赖服务:<br />
<br />
<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">project&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="jgroups"</span><span style="color: #ff0000;">&nbsp;basedir</span><span style="color: #0000ff;">="."</span><span style="color: #ff0000;">&nbsp;xmlns:artifact&nbsp;</span><span style="color: #0000ff;">="urn:maven-artifact-ant"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">&nbsp;存放依赖包的目录&nbsp;</span><span style="color: #008000;">--&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">property&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="build.lib.dir"</span><span style="color: #ff0000;">&nbsp;location</span><span style="color: #0000ff;">="./lib"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">&nbsp;find&nbsp;maven-ant-tasks,&nbsp;you&nbsp;can&nbsp;use&nbsp;classpathref&nbsp;to&nbsp;specify&nbsp;the&nbsp;jar,&nbsp;or&nbsp;just&nbsp;copy&nbsp;the&nbsp;jar&nbsp;to&nbsp;ant/lib&nbsp;&nbsp;</span><span style="color: #008000;">--&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">typedef&nbsp;&nbsp;</span><span style="color: #ff0000;">resource&nbsp;</span><span style="color: #0000ff;">="org/apache/maven/artifact/ant/antlib.xml"</span><span style="color: #ff0000;">&nbsp;&nbsp;uri</span><span style="color: #0000ff;">="urn:maven-artifact-ant"</span><span style="color: #ff0000;">&nbsp;&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">&nbsp;maven的文件&nbsp;</span><span style="color: #008000;">--&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">artifact:pom&nbsp;&nbsp;</span><span style="color: #ff0000;">id&nbsp;</span><span style="color: #0000ff;">="maven.project"</span><span style="color: #ff0000;">&nbsp;&nbsp;file&nbsp;</span><span style="color: #0000ff;">="pom.xml"</span><span style="color: #ff0000;">&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">artifact:dependencies&nbsp;</span><span style="color: #ff0000;">filesetId</span><span style="color: #0000ff;">="deps.fileset.compile"</span><span style="color: #ff0000;">&nbsp;useScope</span><span style="color: #0000ff;">="compile"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">&lt;pom&nbsp;file="pom.xml"/&gt;</span><span style="color: #008000;">--&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">pom&nbsp;</span><span style="color: #ff0000;">refid</span><span style="color: #0000ff;">="maven.project"</span><span style="color: #ff0000;">&nbsp;&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">artifact:dependencies</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">artifact:dependencies&nbsp;</span><span style="color: #ff0000;">filesetId</span><span style="color: #0000ff;">="deps.fileset.test"</span><span style="color: #ff0000;">&nbsp;scopes</span><span style="color: #0000ff;">="test"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">pom&nbsp;</span><span style="color: #ff0000;">refid</span><span style="color: #0000ff;">="maven.project"</span><span style="color: #ff0000;">&nbsp;&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">artifact:dependencies</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">artifact:dependencies&nbsp;</span><span style="color: #ff0000;">filesetId</span><span style="color: #0000ff;">="deps.fileset.provide"</span><span style="color: #ff0000;">&nbsp;scopes</span><span style="color: #0000ff;">="provide"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">pom&nbsp;</span><span style="color: #ff0000;">refid</span><span style="color: #0000ff;">="maven.project"</span><span style="color: #ff0000;">&nbsp;&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">artifact:dependencies</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">target&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="lib.init"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">copy&nbsp;</span><span style="color: #ff0000;">todir</span><span style="color: #0000ff;">="${build.lib.dir}/compile"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">fileset&nbsp;</span><span style="color: #ff0000;">refid</span><span style="color: #0000ff;">="deps.fileset.compile"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">mapper&nbsp;</span><span style="color: #ff0000;">type</span><span style="color: #0000ff;">="flatten"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">copy</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">copy&nbsp;</span><span style="color: #ff0000;">todir</span><span style="color: #0000ff;">="${build.lib.dir}/test"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">fileset&nbsp;</span><span style="color: #ff0000;">refid</span><span style="color: #0000ff;">="deps.fileset.test"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">mapper&nbsp;</span><span style="color: #ff0000;">type</span><span style="color: #0000ff;">="flatten"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">copy</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">copy&nbsp;</span><span style="color: #ff0000;">todir</span><span style="color: #0000ff;">="${build.lib.dir}/provide"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">fileset&nbsp;</span><span style="color: #ff0000;">refid</span><span style="color: #0000ff;">="deps.fileset.test"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">mapper&nbsp;</span><span style="color: #ff0000;">type</span><span style="color: #0000ff;">="flatten"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">copy</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">target</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">&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="" />..&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">--&gt;</span><span style="color: #000000;"><br />
<br />
<br />
</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">project</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span></div>
<br />
<br />
<br />
主要增加了一个target, 就是把maven中定义的依赖包复制到指定目录下, 而不需要自己准备或者从subversion下载.<br />
<br />
(ant的其他target也可使用定义的几个变量作为classpath)<br />
<br />
一般依赖分三种, 请注意区分, 否则把servlet等jar包发布到服务器, 一般会出错:<br />
<ul>
    <li>&nbsp; compile: 编译, 用于运行时和编译时, 打包发布要包含</li>
    <li>&nbsp; provide: 容器提供的类, 主要用于编译, 打包发布时不包含, 例如servlet-api</li>
    <li>&nbsp; test: 仅用于编译和运行测试用例, 打包时不包含.</li>
</ul>
<br />
<br />
<br />
<strong>使用方法</strong>:<br />
<ul>
    <li>&nbsp; checkout项目</li>
    <li>&nbsp; 使用ide的方式导入maven项目. 如果需要手动: 运行ant lib.init&nbsp;&nbsp; (如果下载jar时包出错, 注意检查groupId, artifactId和版本号.)</li>
    <li>&nbsp; 手动创建项目, 指定library, 就不需要一个一个找了. (如果导入maven项目的方式, 则一切自动会配置好)</li>
</ul>
<br />
<br />
<br />
<br />
<br />
<strong>参考网页</strong>: <br />
http://book.51cto.com/art/201001/177845.htm<br />
http://skydream.javaeye.com/blog/437938<br />
http://maven.apache.org/ant-tasks/examples/dependencies.html<br />
<br />
<br />
<br />
<img src ="http://www.blogjava.net/scud/aggbug/337399.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/scud/" target="_blank">Scud(飞云小侠)</a> 2010-11-06 11:50 <a href="http://www.blogjava.net/scud/archive/2010/11/06/337399.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MAVEN:如何为开发和生产环境建立不同的配置文件 --我的简洁方案</title><link>http://www.blogjava.net/scud/archive/2010/10/27/336326.html</link><dc:creator>Scud(飞云小侠)</dc:creator><author>Scud(飞云小侠)</author><pubDate>Wed, 27 Oct 2010 14:31:00 GMT</pubDate><guid>http://www.blogjava.net/scud/archive/2010/10/27/336326.html</guid><wfw:comment>http://www.blogjava.net/scud/comments/336326.html</wfw:comment><comments>http://www.blogjava.net/scud/archive/2010/10/27/336326.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/scud/comments/commentRss/336326.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/scud/services/trackbacks/336326.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 其实也是最近才看Maven, 以前都是用ant+ivy, 对于轻量级的项目来说足够了, 而且非常灵活.看了看Maven, 约定.... 现在编程都说约定, 约定是挺好, 问题是超出约定的事情太多了, 到头来还要依赖其他东西, 真不想用maven啊.以前我们开发环境和生产环境的配置文件都是单独分开目录存放的, ant脚本搞个变量就自动打包不同的文件了. 我觉得管理起来也很容易, 所以...&nbsp;&nbsp;<a href='http://www.blogjava.net/scud/archive/2010/10/27/336326.html'>阅读全文</a><img src ="http://www.blogjava.net/scud/aggbug/336326.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/scud/" target="_blank">Scud(飞云小侠)</a> 2010-10-27 22:31 <a href="http://www.blogjava.net/scud/archive/2010/10/27/336326.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用ZooKeeper为CXF或其他服务动态更新服务器信息</title><link>http://www.blogjava.net/scud/archive/2010/10/16/335301.html</link><dc:creator>Scud(飞云小侠)</dc:creator><author>Scud(飞云小侠)</author><pubDate>Sat, 16 Oct 2010 11:37:00 GMT</pubDate><guid>http://www.blogjava.net/scud/archive/2010/10/16/335301.html</guid><wfw:comment>http://www.blogjava.net/scud/comments/335301.html</wfw:comment><comments>http://www.blogjava.net/scud/archive/2010/10/16/335301.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/scud/comments/commentRss/335301.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/scud/services/trackbacks/335301.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 使用ZooKeeper为CXF的负载均衡提供动态更新服务器列表. 也可以用于其他服务, 只要事先接口即可.<br><br>&nbsp;&nbsp;<a href='http://www.blogjava.net/scud/archive/2010/10/16/335301.html'>阅读全文</a><img src ="http://www.blogjava.net/scud/aggbug/335301.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/scud/" target="_blank">Scud(飞云小侠)</a> 2010-10-16 19:37 <a href="http://www.blogjava.net/scud/archive/2010/10/16/335301.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>扩展CXF, 支持LoadBalance负载均衡</title><link>http://www.blogjava.net/scud/archive/2010/10/15/335224.html</link><dc:creator>Scud(飞云小侠)</dc:creator><author>Scud(飞云小侠)</author><pubDate>Fri, 15 Oct 2010 05:01:00 GMT</pubDate><guid>http://www.blogjava.net/scud/archive/2010/10/15/335224.html</guid><wfw:comment>http://www.blogjava.net/scud/comments/335224.html</wfw:comment><comments>http://www.blogjava.net/scud/archive/2010/10/15/335224.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/scud/comments/commentRss/335224.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/scud/services/trackbacks/335224.html</trackback:ping><description><![CDATA[转载请注明作者和出处 http://scud.blogjava.net<br />
<br />
<br />
CXF是一个比较流行的Web Service框架. ( 当然如果追求更高效, 还可以去搜索ice, thrift, protobuff之类的)<br />
<br />
近一个月, 断断续续地又好好看了看CXF的一些代码, CXF的文档还是很欠缺,特别是关于内部实现的东西. 从我的感觉来说, 内部实现还是挺复杂的. Inteceptor, Feature, ConduitSelector 这些概念一大堆, 又差不多可以做类似的事情, 真是让人头晕.<br />
<br />
<br />
CXF本身提供了一个FailoverFeature, 可以在调用服务出错时切换到其他服务器, 但是无法做到负载均衡, 我研究了几天, 在FailoverFeature的基础上改出来一个LoadBalanceFeature, 当然也同时支持Failover.<br />
<br />
首先我们来看看如何使用CXF的FailoverFeature: (下载示例中包括使用xml和代码两种方式, 当然CXF自己还提供了使用wsdl内部定义的方式)<br />
<br />
&nbsp;&nbsp; &nbsp;我们需要先准备一个HelloService, 非常简单的一个Web Service, 这里不在贴出, 具体可以看下载包<br />
&nbsp;&nbsp; &nbsp;调用代码示例: <br />
<br />
<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><span style="color: #0000ff;">package</span><span style="color: #000000;">&nbsp;org.javascud.extensions.cxf.testfailover;<br />
<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;org.apache.cxf.clustering.FailoverFeature;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;org.apache.cxf.clustering.RandomStrategy;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;org.apache.cxf.feature.AbstractFeature;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;org.apache.cxf.jaxws.JaxWsProxyFactoryBean;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;org.javascud.extensions.cxf.service.Hello;<br />
<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;java.util.ArrayList;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;java.util.List;<br />
<br />
</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;HelloServiceFailOverClient<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;main(String[]&nbsp;args)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;helloFirst&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/service/Hello</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;helloSecond&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">http://localhost:8081/service/Hello</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;helloThird&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">http://localhost:8082/service/Hello</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;helloFour&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">http://localhost:8083/service/Hello</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">String</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;serviceList&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;ArrayList</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">String</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;serviceList.add(helloFirst);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;serviceList.add(helloSecond);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;serviceList.add(helloThird);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">serviceList.add(helloFour);</span><span style="color: #008000;"><br />
</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RandomStrategy&nbsp;strategy&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;RandomStrategy();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strategy.setAlternateAddresses(serviceList);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FailoverFeature&nbsp;ff&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;FailoverFeature();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ff.setStrategy(strategy);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JaxWsProxyFactoryBean&nbsp;factory&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;JaxWsProxyFactoryBean();<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">AbstractFeature</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;features&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;ArrayList</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">AbstractFeature</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;features.add(ff);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;factory.setFeatures(features);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;factory.initFeatures();<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;factory.setServiceClass(Hello.</span><span style="color: #0000ff;">class</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">factory.setAddress("</span><span style="color: #008000; text-decoration: underline;">http://localhost</span><span style="color: #008000;">:8080/service/Hello");</span><span style="color: #008000;"><br />
</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Hello&nbsp;client&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(Hello)&nbsp;factory.create();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;result&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;client.sayHello(</span><span style="color: #000000;">"</span><span style="color: #000000;">felix</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">result&nbsp;is:&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;result);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
</span></div>
<br />
<br />
在遇到错误时可以自动使用下一个服务器, 但是必须要自己设置一个地址, 如果不设置的话也可以, 但是会出错然后failover. <br />
<br />
<br />
<strong>下面我们自己来看看我们的 LoadBalanceFeature</strong><br />
<br />
1. 首先我们创建一个LoadBalanceFeature (完全和FailoverFeature一样)<br />
<br />
&nbsp;&nbsp; Feature是用来定制Server, Client, Bus的一个组件, 具体可以查看AbstractFeature, 我们使用initialize方法来定制Client, 修改Client的Conduit选择器达到负载均衡的目的.<br />
<br />
&nbsp;&nbsp; LoadBalanceFeature代码如下:<br />
<br />
<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><span style="color: #008000;">/**</span><span style="color: #008000;"><br />
&nbsp;*&nbsp;This&nbsp;feature&nbsp;may&nbsp;be&nbsp;applied&nbsp;to&nbsp;a&nbsp;Client&nbsp;so&nbsp;as&nbsp;to&nbsp;enable<br />
&nbsp;*&nbsp;load&nbsp;balance&nbsp;,&nbsp;use&nbsp;any&nbsp;compatible&nbsp;endpoint&nbsp;for&nbsp;the&nbsp;target&nbsp;service.<br />
&nbsp;*<br />
&nbsp;*&nbsp;</span><span style="color: #808080;">@author</span><span style="color: #008000;">&nbsp;Felix&nbsp;Zhang&nbsp;&nbsp;&nbsp;Date:2010-10-3&nbsp;22:58<br />
&nbsp;*&nbsp;</span><span style="color: #808080;">@see</span><span style="color: #008000;">&nbsp;org.apache.cxf.clustering.FailoverFeature<br />
&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;LoadBalanceFeature&nbsp;</span><span style="color: #0000ff;">extends</span><span style="color: #000000;">&nbsp;AbstractFeature&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;LoadBalanceStrategy&nbsp;loadBalanceStrategy;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;initialize(Client&nbsp;client,&nbsp;Bus&nbsp;bus)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LoadBalanceTargetSelector&nbsp;selector&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;LoadBalanceTargetSelector();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;selector.setEndpoint(client.getEndpoint());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;selector.setStrategy(getStrategy());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;client.setConduitSelector(selector);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;setStrategy(LoadBalanceStrategy&nbsp;strategy)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;loadBalanceStrategy&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;strategy;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;LoadBalanceStrategy&nbsp;getStrategy()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;loadBalanceStrategy;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
}<br />
</span></div>
<br />
<br />
<br />
<br />
2. 定制一个LoadBalanceStrategy 负载均衡策略<br />
负载均衡策略有很多种, 例如随机选择, 顺序选择等, FailoverFeature提供了三种策略, 总之很简单, 我们在这里就先实现随机策略, 其他的策略都很简单, 几行代码就可以实现了.<br />
<br />
&nbsp;&nbsp; &nbsp;这个类主要用来设置/获取所有的提供服务的地址列表, 为了方便控制, 我新增了2个选项:<br />
&nbsp;&nbsp; &nbsp;A: alwaysChangeEndpoint 是否每次请求都切换地址:　如果只有一个客户端, 可以分担负载. 缺省为true<br />
&nbsp;&nbsp; &nbsp;B: removeFailedEndpoint 是否从全局的地址列表中移除失败服务地址 -- 如果你没有监测服务器状态的程序<br />
<br />
&nbsp;&nbsp; 关于动态增删服务地址<br />
<ul>
    <li>可以使用zookeeper等服务实时监测服务器状态, 或者自己写程序实现, 调用strategy.setAlternateAddresses即可.</li>
    <li>removeFailedEndpoint 如果设置为true, 但没有监测服务器状态的程序, 新增的或者复活的服务器则无法被恢复到地址列表中.</li>
    <li>考虑到效率和支持failover, 设置地址列表, 移除地址等没有同步锁.</li>
    <li>自动移除失败服务地址时, 目前仅支持手动地址列表, 没有考虑wsdl中的多服务地址.</li>
    <li>后续我会写一个使用zookeeper增删服务地址列表的示例. (最近也在看zookeeper)</li>
</ul>
<br />
<br />
&nbsp;&nbsp; 主要的代码都在AbstractLoadBalanceStrategy 中, 基本和 AbstractStaticFailoverStrategy 一样, 添加了一个removeAlternateAddress 用于移除失败的服务地址.<br />
<br />
&nbsp;&nbsp; &nbsp;LoadBalanceStrategy 接口的代码如下:<br />
<br />
<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><span style="color: #008000;">/**</span><span style="color: #008000;"><br />
&nbsp;*&nbsp;Supports&nbsp;pluggable&nbsp;strategies&nbsp;for&nbsp;alternate&nbsp;endpoint&nbsp;selection&nbsp;on<br />
&nbsp;*&nbsp;load&nbsp;balance.<br />
&nbsp;*&nbsp;&lt;p/&gt;<br />
&nbsp;*&nbsp;Random,&nbsp;Retries,&nbsp;Mod&nbsp;(later)<br />
&nbsp;*&nbsp;&lt;p/&gt;<br />
&nbsp;*&nbsp;1.&nbsp;support&nbsp;load&nbsp;balance&nbsp;&nbsp;2.support&nbsp;fail&nbsp;over.<br />
&nbsp;*<br />
&nbsp;*&nbsp;</span><span style="color: #808080;">@author</span><span style="color: #008000;">&nbsp;Felix&nbsp;Zhang&nbsp;&nbsp;&nbsp;Date:2010-10-1&nbsp;18:14<br />
&nbsp;*&nbsp;</span><span style="color: #808080;">@see</span><span style="color: #008000;">&nbsp;org.apache.cxf.clustering.FailoverStrategy<br />
&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">interface</span><span style="color: #000000;">&nbsp;LoadBalanceStrategy&nbsp;{<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/**</span><span style="color: #008000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Get&nbsp;the&nbsp;alternate&nbsp;endpoints&nbsp;for&nbsp;this&nbsp;invocation.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080;">@param</span><span style="color: #008000;">&nbsp;exchange&nbsp;the&nbsp;current&nbsp;Exchange<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080;">@return</span><span style="color: #008000;">&nbsp;a&nbsp;failover&nbsp;endpoint&nbsp;if&nbsp;one&nbsp;is&nbsp;available<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;List</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">Endpoint</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;getAlternateEndpoints(Exchange&nbsp;exchange);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/**</span><span style="color: #008000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Select&nbsp;one&nbsp;of&nbsp;the&nbsp;alternate&nbsp;endpoints&nbsp;for&nbsp;a&nbsp;retried&nbsp;invocation.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080;">@param</span><span style="color: #008000;">&nbsp;alternates&nbsp;List&nbsp;of&nbsp;alternate&nbsp;endpoints&nbsp;if&nbsp;available<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080;">@return</span><span style="color: #008000;">&nbsp;the&nbsp;selected&nbsp;endpoint<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;Endpoint&nbsp;selectAlternateEndpoint(List</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">Endpoint</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;alternates);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/**</span><span style="color: #008000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Get&nbsp;the&nbsp;alternate&nbsp;addresses&nbsp;for&nbsp;this&nbsp;invocation.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;These&nbsp;addresses&nbsp;over-ride&nbsp;any&nbsp;addresses&nbsp;specified&nbsp;in&nbsp;the&nbsp;WSDL.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080;">@param</span><span style="color: #008000;">&nbsp;exchange&nbsp;the&nbsp;current&nbsp;Exchange<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080;">@return</span><span style="color: #008000;">&nbsp;a&nbsp;failover&nbsp;endpoint&nbsp;if&nbsp;one&nbsp;is&nbsp;available<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;List</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">String</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;getAlternateAddresses(Exchange&nbsp;exchange);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/**</span><span style="color: #008000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Select&nbsp;one&nbsp;of&nbsp;the&nbsp;alternate&nbsp;addresses&nbsp;for&nbsp;a&nbsp;retried&nbsp;invocation.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080;">@param</span><span style="color: #008000;">&nbsp;addresses&nbsp;List&nbsp;of&nbsp;alternate&nbsp;addresses&nbsp;if&nbsp;available<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080;">@return</span><span style="color: #008000;">&nbsp;the&nbsp;selected&nbsp;address<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;selectAlternateAddress(List</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">String</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;addresses);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/**</span><span style="color: #008000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;should&nbsp;remove&nbsp;failed&nbsp;endpoint&nbsp;or&nbsp;not.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;only&nbsp;work&nbsp;for&nbsp;user&nbsp;defined&nbsp;addresses&nbsp;list.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080;">@return</span><span style="color: #008000;">&nbsp;true&nbsp;or&nbsp;false<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">boolean</span><span style="color: #000000;">&nbsp;isRemoveFailedEndpoint();<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/**</span><span style="color: #008000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;change&nbsp;endpoint&nbsp;every&nbsp;time&nbsp;or&nbsp;not.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080;">@return</span><span style="color: #008000;">&nbsp;boolean<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">boolean</span><span style="color: #000000;">&nbsp;isAlwaysChangeEndpoint();<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/**</span><span style="color: #008000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;remove&nbsp;failed&nbsp;address&nbsp;from&nbsp;list.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080;">@param</span><span style="color: #008000;">&nbsp;address&nbsp;the&nbsp;failed&nbsp;address<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;removeAlternateAddress(String&nbsp;address);<br />
}<br />
</span></div>
<br />
<br />
<br />
&nbsp;&nbsp; &nbsp;RandomLoadBalanceStrategy继承自 AbstractLoadBalanceStrategy, 和 RandomStrategy的区别就是获取下一个服务地址时并不从列表中移除此地址, 否则就做不到负载均衡了.<br />
<br />
<br />
3. 最重要的 LoadBalanceTargetSelector<br />
&nbsp;&nbsp; &nbsp;A: 这个类比较复杂, 我们为了实现负载均衡, 修改了<strong>prepare</strong>来动态设置调用的endpoint, 替换策略取决于LoadBalanceStrategy<br />
&nbsp;&nbsp; &nbsp;主要代码如下:<br />
<br />
<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">boolean</span><span style="color: #000000;">&nbsp;existsEndpoint&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">false</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">check&nbsp;current&nbsp;endpoint&nbsp;is&nbsp;not&nbsp;null</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Endpoint&nbsp;theEndpoint&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;exchange.get(Endpoint.</span><span style="color: #0000ff;">class</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(theEndpoint.getEndpointInfo().getAddress()&nbsp;</span><span style="color: #000000;">!=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">null</span><span style="color: #000000;">)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;existsEndpoint&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">true</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Endpoint&nbsp;nextEndpoint;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(getStrategy().isAlwaysChangeEndpoint()&nbsp;</span><span style="color: #000000;">||</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">!</span><span style="color: #000000;">existsEndpoint)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">get&nbsp;a&nbsp;endpoint&nbsp;and&nbsp;set&nbsp;to&nbsp;current&nbsp;endpoint</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Endpoint&nbsp;loadBalanceTarget&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;getLoadBalanceTarget(exchange);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(loadBalanceTarget&nbsp;</span><span style="color: #000000;">!=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">null</span><span style="color: #000000;">)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logger.info(</span><span style="color: #000000;">"</span><span style="color: #000000;">switch&nbsp;to&nbsp;next&nbsp;target:&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;loadBalanceTarget.getEndpointInfo().getAddress());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setEndpoint(loadBalanceTarget);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">update&nbsp;exchange.org.apache.cxf.message.Message.ENDPOINT_ADDRESS&nbsp;---&nbsp;不设置这个就用上次的<img src="../../Images/dot.gif" alt="" />奇怪</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message.put(Message.ENDPOINT_ADDRESS,&nbsp;loadBalanceTarget.getEndpointInfo().getAddress());<br />
&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nextEndpoint&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;loadBalanceTarget;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;">&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">use&nbsp;current&nbsp;endpoint</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nextEndpoint&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;theEndpoint;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span></div>
<br />
<br />
<br />
<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp; &nbsp;B:为了和原有Failover特性兼容, 我们修改了 <strong>getFailoverTarget</strong>函数, 在此函数中要移除失败的服务地址, 因为在之前我们修改了LoadBalanceStrategy, 它在获取地址时不再移除当前地址, 所以我们需要手动移除.<br />
<br />
&nbsp;&nbsp; &nbsp;部分代码如下:&nbsp;&nbsp;&nbsp; <br />
<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;currentAddress&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;getEndpoint().getEndpointInfo().getAddress();<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">failover&nbsp;should&nbsp;remove&nbsp;current&nbsp;endpoint&nbsp;first,&nbsp;then&nbsp;get&nbsp;next&nbsp;--&nbsp;根据定义的策略来决定是否从全局地址列表中移除</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(getStrategy().isRemoveFailedEndpoint())&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logger.warn(</span><span style="color: #000000;">"</span><span style="color: #000000;">remove&nbsp;current&nbsp;failed&nbsp;address:&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;currentAddress);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">remove&nbsp;for&nbsp;client,&nbsp;not&nbsp;for&nbsp;current&nbsp;invocation&nbsp;--&nbsp;没有同步锁</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getStrategy().removeAlternateAddress(currentAddress);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">remove&nbsp;for&nbsp;current&nbsp;invocation:&nbsp;当前请求中总是移除失败服务地址</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alternateAddresses.remove(currentAddress);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;alternateAddress&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getStrategy().selectAlternateAddress(alternateAddresses);<br />
<br />
<br />
</span></div>
<br />
<br />
<br />
4. 调用实例:<br />
<br />
&nbsp;&nbsp; 此处我们采用XML定义方式:<br />
<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><span style="color: #0000ff;">&lt;?</span><span style="color: #ff00ff;">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"</span><span style="color: #0000ff;">?&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">beans&nbsp;</span><span style="color: #ff0000;">xmlns</span><span style="color: #0000ff;">="http://www.springframework.org/schema/beans"</span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xmlns:xsi</span><span style="color: #0000ff;">="http://www.w3.org/2001/XMLSchema-instance"</span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xmlns:jaxws</span><span style="color: #0000ff;">="http://cxf.apache.org/jaxws"</span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xmlns:clustering</span><span style="color: #0000ff;">="http://cxf.apache.org/clustering"</span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xmlns:util</span><span style="color: #0000ff;">="http://www.springframework.org/schema/util"</span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xsi:schemaLocation</span><span style="color: #0000ff;">="<br />
http://cxf.apache.org/jaxws&nbsp;http://cxf.apache.org/schemas/jaxws.xsd<br />
http://www.springframework.org/schema/beans&nbsp;http://www.springframework.org/schema/beans/spring-beans.xsd<br />
http://www.springframework.org/schema/util&nbsp;http://www.springframework.org/schema/util/spring-util.xsd"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">util:list&nbsp;</span><span style="color: #ff0000;">id</span><span style="color: #0000ff;">="addressList"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">value</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">http://localhost:8081/service/Hello</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">value</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">value</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">http://localhost:8082/service/Hello</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">value</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">value</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">http://localhost:8083/service/Hello</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">value</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">value</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">http://localhost:8086/service/Hello</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">value</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">value</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">http://localhost:8087/service/Hello</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">value</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">value</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">http://localhost:8088/service/Hello</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">value</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">util:list</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">bean&nbsp;</span><span style="color: #ff0000;">id</span><span style="color: #0000ff;">="SequentialAddresses"</span><span style="color: #ff0000;">&nbsp;class</span><span style="color: #0000ff;">="org.apache.cxf.clustering.SequentialStrategy"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">property&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="alternateAddresses"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">ref&nbsp;</span><span style="color: #ff0000;">bean</span><span style="color: #0000ff;">="addressList"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">property</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">bean</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">bean&nbsp;</span><span style="color: #ff0000;">id</span><span style="color: #0000ff;">="randomAddresses"</span><span style="color: #ff0000;">&nbsp;class</span><span style="color: #0000ff;">="org.javascud.extensions.cxf.RandomLoadBalanceStrategy"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">property&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="alternateAddresses"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">ref&nbsp;</span><span style="color: #ff0000;">bean</span><span style="color: #0000ff;">="addressList"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">property</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">property&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="removeFailedEndpoint"</span><span style="color: #ff0000;">&nbsp;value</span><span style="color: #0000ff;">="true"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">bean</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">bean&nbsp;</span><span style="color: #ff0000;">id</span><span style="color: #0000ff;">="loadBalanceFeature"</span><span style="color: #ff0000;">&nbsp;class</span><span style="color: #0000ff;">="org.javascud.extensions.cxf.LoadBalanceFeature"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">property&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="strategy"</span><span style="color: #ff0000;">&nbsp;ref</span><span style="color: #0000ff;">="randomAddresses"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">bean</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">jaxws:client&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="helloClient"</span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;serviceClass</span><span style="color: #0000ff;">="org.javascud.extensions.cxf.service.Hello"</span><span style="color: #ff0000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">jaxws:features</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">ref&nbsp;</span><span style="color: #ff0000;">bean</span><span style="color: #0000ff;">="loadBalanceFeature"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">jaxws:features</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">jaxws:client</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
<br />
<br />
</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">beans</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span></div>
&nbsp; <br />
8081, 8082, 8083是实际存在的服务, 其他的不存在.<br />
<br />
<br />
调用的Java代码:<br />
<br />
<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><span style="color: #0000ff;">package</span><span style="color: #000000;">&nbsp;org.javascud.extensions.cxf.loadbalance;<br />
<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;org.apache.cxf.endpoint.Client;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;org.apache.cxf.frontend.ClientProxy;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;org.javascud.extensions.cxf.LoadBalanceStrategy;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;org.javascud.extensions.cxf.service.Hello;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;org.springframework.context.support.ClassPathXmlApplicationContext;<br />
<br />
<br />
</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;HelloLoadBalanceAndFailOverClientByXML<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;main(String[]&nbsp;args)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ClassPathXmlApplicationContext&nbsp;context<br />
&nbsp;&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;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;ClassPathXmlApplicationContext(</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;String[]<br />
&nbsp;&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;">org/javascud/extensions/cxf/loadbalance/loadbalance_fail.xml</span><span style="color: #000000;">"</span><span style="color: #000000;">});<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Hello&nbsp;client&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(Hello)&nbsp;context.getBean(</span><span style="color: #000000;">"</span><span style="color: #000000;">helloClient</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LoadBalanceStrategy&nbsp;strategy&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(LoadBalanceStrategy)&nbsp;context.getBean(</span><span style="color: #000000;">"</span><span style="color: #000000;">randomAddresses</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Client&nbsp;myclient&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;ClientProxy.getClient(client);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;address&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;myclient.getEndpoint().getEndpointInfo().getAddress();<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(address);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</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;">=</span><span style="color: #000000;">1</span><span style="color: #000000;">;&nbsp;i</span><span style="color: #000000;">&lt;=</span><span style="color: #000000;">20</span><span style="color: #000000;">;&nbsp;i</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;result1&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;client.sayHello(</span><span style="color: #000000;">"</span><span style="color: #000000;">Felix</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">i);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">Call&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;i&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">"</span><span style="color: #000000;">:&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;result1);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;left&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;strategy.getAlternateAddresses(</span><span style="color: #0000ff;">null</span><span style="color: #000000;">).size();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">==================&nbsp;left&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;left&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;===========================</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
</span></div>
<br />
&nbsp;&nbsp;&nbsp; 此处仅仅为模拟测试. <br />
<br />
<br />
5. 关于测试用例<br />
&nbsp;&nbsp; &nbsp;没想好如何写单元测试, test里面目前都是随意测试的代码, 基本照顾到所有功能.<br />
<br />
&nbsp;&nbsp; &nbsp;<br />
<br />
6. 下载<br />
代码下载: http://cnscud.googlecode.com/files/extensions-cxf_20101015.zip<br />
源码位置: http://cnscud.googlecode.com/svn/trunk/extensions/&nbsp; 其中cxf目录是此文章相关的源码.<br />
<br />
7. 有任何问题请留言.<br />
<br />
<br />
转载请注明作者和出处 http://scud.blogjava.net<br />
<br />
<br />
<br />
<img src ="http://www.blogjava.net/scud/aggbug/335224.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/scud/" target="_blank">Scud(飞云小侠)</a> 2010-10-15 13:01 <a href="http://www.blogjava.net/scud/archive/2010/10/15/335224.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQL: 选择前10条记录, 不用limit, top....有什么方法哪?</title><link>http://www.blogjava.net/scud/archive/2010/09/09/331486.html</link><dc:creator>Scud(飞云小侠)</dc:creator><author>Scud(飞云小侠)</author><pubDate>Thu, 09 Sep 2010 03:33:00 GMT</pubDate><guid>http://www.blogjava.net/scud/archive/2010/09/09/331486.html</guid><wfw:comment>http://www.blogjava.net/scud/comments/331486.html</wfw:comment><comments>http://www.blogjava.net/scud/archive/2010/09/09/331486.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/scud/comments/commentRss/331486.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/scud/services/trackbacks/331486.html</trackback:ping><description><![CDATA[用cursor? 那也不是sql啊....

谁知道.... 
<img src ="http://www.blogjava.net/scud/aggbug/331486.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/scud/" target="_blank">Scud(飞云小侠)</a> 2010-09-09 11:33 <a href="http://www.blogjava.net/scud/archive/2010/09/09/331486.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>监测localhost 本地服务的网络工具 socketsniff</title><link>http://www.blogjava.net/scud/archive/2010/09/05/331102.html</link><dc:creator>Scud(飞云小侠)</dc:creator><author>Scud(飞云小侠)</author><pubDate>Sun, 05 Sep 2010 14:30:00 GMT</pubDate><guid>http://www.blogjava.net/scud/archive/2010/09/05/331102.html</guid><wfw:comment>http://www.blogjava.net/scud/comments/331102.html</wfw:comment><comments>http://www.blogjava.net/scud/archive/2010/09/05/331102.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/scud/comments/commentRss/331102.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/scud/services/trackbacks/331102.html</trackback:ping><description><![CDATA[以前一直用它的兄弟 smsniff, 但是无法监测localhost的服务
<br />
<br />
1. 查了半天, 终于发现 socketsniff可以, 不过也有缺点, 就是只能检测一个进程, 不过大部分情况下也够了.<br />
<br />
<br />
2. 当然如果用本地代理的方式也可以检测, 不过需要修改调用程序, 比较麻烦. (Fiddle, Charles等)<br />
<br />
3. 商业产品, 例如 commView, 不过查看方式不太好......可以试用30天.<br />
<br />
<br />
<img src ="http://www.blogjava.net/scud/aggbug/331102.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/scud/" target="_blank">Scud(飞云小侠)</a> 2010-09-05 22:30 <a href="http://www.blogjava.net/scud/archive/2010/09/05/331102.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>天顶的彩虹</title><link>http://www.blogjava.net/scud/archive/2010/08/27/330085.html</link><dc:creator>Scud(飞云小侠)</dc:creator><author>Scud(飞云小侠)</author><pubDate>Fri, 27 Aug 2010 10:28:00 GMT</pubDate><guid>http://www.blogjava.net/scud/archive/2010/08/27/330085.html</guid><wfw:comment>http://www.blogjava.net/scud/comments/330085.html</wfw:comment><comments>http://www.blogjava.net/scud/archive/2010/08/27/330085.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/scud/comments/commentRss/330085.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/scud/services/trackbacks/330085.html</trackback:ping><description><![CDATA[<img src="/CuteSoft_Client/CuteEditor/images/emsmiled.gif" align="absmiddle" border="0"  alt="" /><br />
<br />
<img alt="" src="http://www.blogjava.net/images/blogjava_net/scud/rainbow/DSC_3229.JPG" height="600" width="437" /><br />
<br />
2. <br />
<img alt="" src="http://www.blogjava.net/images/blogjava_net/scud/rainbow/DSC_3233.JPG" height="600" width="399" /><br />
<br />
3. <br />
<br />
<img alt="" src="http://www.blogjava.net/images/blogjava_net/scud/rainbow/DSC_3239.JPG" height="399" width="600" /><br />
<br />
呵呵 bless<br />
<img src ="http://www.blogjava.net/scud/aggbug/330085.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/scud/" target="_blank">Scud(飞云小侠)</a> 2010-08-27 18:28 <a href="http://www.blogjava.net/scud/archive/2010/08/27/330085.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>