<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>daquan198163</title>
    <description>一个快乐的程序员</description>
    <link>http://daquan198163.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>如何为行驶中的汽车换轮子？</title>
        <author>daquan198163</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://daquan198163.javaeye.com">daquan198163</a>&nbsp;
          链接：<a href="http://daquan198163.javaeye.com/blog/198539" style="color:red;">http://daquan198163.javaeye.com/blog/198539</a>&nbsp;
          发表时间: 2008年05月30日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          应用上线后，难免要对其进行修改，如增加功能模块、发布新版本、修改配置参数等等<br />可是以现有的JavaEE技术，无法做到在不停机的情况下完成这些修改动作<br />JBoss的热部署也仅仅是对整个应用来说的，它无法实现对某个模块的“热替换”<br />再加上个平台的类加载机制不同，就更增加了这个问题的复杂性<br /><br />OSGI似乎可以解决这类问题，但问题是OSGI还很少做服务器端软件，<br />那么在集群、并发的情况下，OSGI能否继续胜任就要打个问号了<br /><br />不知各位有何高见？
          <br/>
          <span style="color:red;">
            <a href="http://daquan198163.javaeye.com/blog/198539#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 30 May 2008 09:50:42 +0800</pubDate>
        <link>http://daquan198163.javaeye.com/blog/198539</link>
        <guid>http://daquan198163.javaeye.com/blog/198539</guid>
      </item>
      <item>
        <title>鉴于反复出现讨论hibernate适用性问题的帖子，这次希望有个定论</title>
        <author>daquan198163</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://daquan198163.javaeye.com">daquan198163</a>&nbsp;
          链接：<a href="http://daquan198163.javaeye.com/blog/148055" style="color:red;">http://daquan198163.javaeye.com/blog/148055</a>&nbsp;
          发表时间: 2007年12月13日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          也不仅仅是hibernate一个框架的问题了，其实可以上升到O/R Mapping的应用策略问题<br />几乎每隔几周就会出现类似的讨论，比如<a href="http://www.javaeye.com/topic/10487" target="_blank"> 主题: 有没有Hibernate的成功大型项目实现？</a>、<a href="http://www.javaeye.com/topic/143690" target="_blank">Hibernate，憋脚的ORM框架</a><br />这说明这个问题还是很有讨论的必要。<br /><br />过去的几次比较热烈的讨论我基本都看了，焦点主要集中在这几个方面：<br /><br />1、以数据库为中心建模 VS 以领域模型为中心建模：<br />   老开发人员大多倾向于前者，因为比较符合过去的开发习惯，另外他们强调数据库的生命周期大于App<br />   向我这样的只有几年工作经验的往往会倾向于后者，因为这能更充分发挥ORM的威力，更符合OO，免去很多维护DB的繁琐工作。<br /><br />2、Hibernate VS iBatis/JDBC：<br />   担心失去对SQL待控制权，导致不能做优化，DBA反对<br />   Hibernate是在JDBC之上的又一层框架，因此想当然的认为其性能不如iBatis/JDBC（我认为这个结论不成立，因为引入一个ORM层给了我们更多机会去优化性能，比如一二级缓存、lazyload、查询缓存，并且方式更优雅）。参考<a href="http://robbin.javaeye.com/blog/77338" target="_blank">为什么ORM性能比iBATIS好？</a><br />   担心OpenSessionInView模式有性能问题（http://www.javaeye.com/topic/17501）<br />   Hibernate无法应付复杂查询（我认为这不是问题，HQL和criteria查询能力很强，再不济还可以用SQL啊）<br /><br />3、对Hibernate等ORM框架能否胜任大型项目的怀疑：<br />   其实项目大小不是技术选型的主要考虑，关键看项目类型，OLTP还是OLAP、广而浅型的还是窄而深型的、数据量大小等等，这些因素更能影响结果<br /><br />4、Hibernate学习成本高<br />   不可否认，相对于spring、struts，Hibernate是一个学习曲线陡峭的框架，但是我觉得综合考虑开发效率和长期收益，还是值得学习和采用的<br /><br />其实有一个事实被很多人忽略了——Hibernate只是对JDBC的一个封装，因此它可以跟iBatis/JDBC在同一个项目中并存，就好比突击步枪和狙击步枪的关系，两者都有存在的价值和适用场合，不能互相取代。<br />但是，显然突击步枪是大量装备的通用武器，而狙击步枪是少量装备的特种武器<img src="/images/smiles/icon_lol.gif"/><br /><br />参考帖子：<br /><a href="http://www.javaeye.com/topic/17501" target="_blank">OpenSessionInView会不会影响性能？</a><br /><a href="http://robbin.javaeye.com/blog/24529" target="_blank">选择Hibernate还是iBatis?</a><br /><a href="http://www.javaeye.com/topic/20429" target="_blank">选择Hibernate还是iBatis?</a><br /><a href="http://www.javaeye.com/topic/41720" target="_blank">我为什么选择 iBatis 而不是 Hibernate(对于正在选型的人的建议)</a><br /><a href="http://www.javaeye.com/topic/143690" target="_blank">Hibernate，憋脚的ORM框架</a><br /><a href="http://www.javaeye.com/topic/113101" target="_blank">对迷茫于Hibernate/JPA的人提一些建议。</a><br /><a href="http://robbin.javaeye.com/blog/77338" target="_blank">为什么ORM性能比iBATIS好？</a>
          <br/>
          <span style="color:red;">
            <a href="http://daquan198163.javaeye.com/blog/148055#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 13 Dec 2007 11:54:31 +0800</pubDate>
        <link>http://daquan198163.javaeye.com/blog/148055</link>
        <guid>http://daquan198163.javaeye.com/blog/148055</guid>
      </item>
      <item>
        <title>都别装了，难道你们不想交流一下薪资问题？</title>
        <author>daquan198163</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://daquan198163.javaeye.com">daquan198163</a>&nbsp;
          链接：<a href="http://daquan198163.javaeye.com/blog/140570" style="color:red;">http://daquan198163.javaeye.com/blog/140570</a>&nbsp;
          发表时间: 2007年11月14日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          在公司里有制度限制，不能泄露薪资情况，在论坛里就都别再拘束了！<br />前段时间javaeye的调查也没什么下文了，我们自己来吧，我带个头<br />上海|2003年6月开始工作|本科|目前职位：SE|J2EE|民企|13薪税前8k|<br /><br />希望大家都按以上格式详细填写<img src="/images/smiles/icon_smile.gif"/><br /><br />不愿暴露身份的发消息给我，我帮你贴在主帖里<br />----------------------------------------------<br />某javaeye会员 等级: 5星会员<br />北京|2002年2月开始工作|本科|目前职位：SE|J2EE|架构|民企|12薪税前10k+奖金|<br /><br />某javaeye会员 等级: 3星会员<br />因为周围的朋友和同事都知道我的ID,恳请千万不要发我id,谢谢.都在论坛混的,就不用马甲去发了...<br />成都|2005年6月开始工作|专科|目前职位：SE|J2EE|外企|13薪税前4k|季度奖<br />特别注明:今年跳槽前税前2K,无任何其他收入,刚毕业出来1.2K做了整整一年,真不是人待的地方...<br /><br />javaeye某老人儿爆料<br />东京|2005开始工作|本科|目前职位：XI顾问|SAP|外企|年薪40W|<br />大连|2004开始工作|本科|目前职位：developer|SAP-XI|外企|13薪税前9K|<br />北京|2005开始工作|本科|目前职位：CRM顾问|SAP|外企|14薪税前15k|<br /><br />javaeye某2钻会员<br />上海|2005年7月开始工作|本科|目前职位：SE|J2EE|民企|12薪税前8.5k|
          <br/>
          <span style="color:red;">
            <a href="http://daquan198163.javaeye.com/blog/140570#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 14 Nov 2007 17:27:51 +0800</pubDate>
        <link>http://daquan198163.javaeye.com/blog/140570</link>
        <guid>http://daquan198163.javaeye.com/blog/140570</guid>
      </item>
      <item>
        <title>[转帖]为了忘却的纪念--税院人自己的篮球小说</title>
        <author>daquan198163</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://daquan198163.javaeye.com">daquan198163</a>&nbsp;
          链接：<a href="http://daquan198163.javaeye.com/blog/128426" style="color:red;">http://daquan198163.javaeye.com/blog/128426</a>&nbsp;
          发表时间: 2007年09月30日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <span class="bold">这是我一个好哥们儿在大学时代的篮球故事，作者是他的大学同学，<br />
他就是里面那个王同学，在</span><span class="bold">这个故事里虽然</span><span class="bold">不算主角，但在他们学校的球场上是superstar了</span><br />
<br />
<p><font color="#333333"><font face="宋体">--我的大学一个朋友写的，写的还算真实，老论坛的帖子，现在SOMEONE还在，哈哈<br />
<br />
</font></font> </p>
<p>　　<font face="宋体, MS Song"> </font>大一来的时候<font face="宋体, MS Song">,</font>到学校比较晚<font face="宋体, MS Song"> </font>大概是十月中旬了<font face="宋体, MS Song">.</font>那时候住在一舍<font face="宋体, MS Song">,</font>和法学系的师哥</p>
<p>住在一起<font face="宋体, MS Song">,</font>初到税院<font face="宋体, MS Song"> </font>觉得这里的篮球水平不过是泛泛而已<font face="宋体, MS Song">,</font>后来才知道是法学的水平比较</p>
<p>差自己才这样认为的<font face="宋体, MS Song">.</font>大一那年是会计第一年的夺冠<font face="宋体, MS Song">,</font>据说主要是靠<font face="宋体, MS Song">96</font>打的天下<font face="宋体, MS Song">,</font>邓波以一</p>
<p>敌五杀入对方阵营的英姿我没看到<font face="宋体, MS Song">,</font>不过我和他打过球<font face="宋体, MS Song"> ,</font>邓波身材不高<font face="宋体, MS Song">,</font>大概<font face="宋体, MS Song">175</font>左右<font face="宋体, MS Song">,</font>四川</p>
<p>人<font face="宋体, MS Song">,</font>极壮实<font face="宋体, MS Song">,</font>他的习惯动作一般是用臀部将对手顶开<font face="宋体, MS Song">,</font>在撤步或者这届的跳投<font face="宋体, MS Song">.</font>他篮极准<font face="宋体, MS Song">,</font>虽</p>
<p>然动作朴实<font face="宋体, MS Song"> </font>却极难防<font face="宋体, MS Song">,</font>很感激他的<font face="宋体, MS Song"> </font>一点是他告诉我跳投的重要<font face="宋体, MS Song">.</font>可以在突然性上给对手以</p>
<p>致命的打击<font face="宋体, MS Song">.</font>现在看<font face="宋体, MS Song">,</font>或者邓波就是一个标尺<font face="宋体, MS Song">,</font>决定了会计的球风永远都是实用第一<font face="宋体, MS Song">,</font>比赛<font face="宋体, MS Song">,</font></p>
<p>只有胜利<font face="宋体, MS Song">,</font>最后的胜利才是最关键的<font face="宋体, MS Song">.<br />
</font></p>
<p>我大一的时候<font face="宋体, MS Song">.</font>金融在学校还算强队<font face="宋体, MS Song">,</font>传统的四强包括金融<font face="宋体, MS Song"> </font>会计<font face="宋体, MS Song"> </font>税务<font face="宋体, MS Song"> </font>和信息<font face="宋体, MS Song">.</font>其他系就弱</p>
<p>多了<font face="宋体, MS Song">.</font>当时参加的系内最后一次甲级联赛<font face="宋体, MS Song">.</font>以当时甲级队的水平<font face="宋体, MS Song">,</font>赢一些所谓的小系<font face="宋体, MS Song">(</font>四强以</p>
<p>外的<font face="宋体, MS Song">)</font>都没什么问题<font face="宋体, MS Song">.</font>也是那次甲级联赛<font face="宋体, MS Song">,</font>让我认识到大学篮球和高中篮球的区别<font face="宋体, MS Song">.<br />
</font></p>
<p>大学篮球和高中篮球　在于对抗的激烈<font face="宋体, MS Song">,</font>战术的贯彻<font face="宋体, MS Song">,</font>临场的气势和裁判的水平<font face="宋体, MS Song">.</font>在大二开</p>
<p>始后　我在很长时间都是作为裁判出现在篮球场上<font face="宋体, MS Song">,</font>其主要原因在于大一的那次联赛<font face="宋体, MS Song">.</font>我们</p>
<p>班身材极矮<font face="宋体, MS Song"> </font>我还算是高的<font face="宋体, MS Song">.</font>但矮又矮的优势<font face="宋体, MS Song">,</font>就是速度和灵活<font face="宋体, MS Song">,</font>大一的时候体力又好<font face="宋体, MS Song">,</font>不象</p>
<p>以后在诸如游戏女子烟酒之中荒废了身子<font face="宋体, MS Song">.</font>那时打的很快<font face="宋体, MS Song">,</font>和我们班交手的球队应该留有印</p>
<p>象<font face="宋体, MS Song">,</font>我们是以一种快速的全场或半场紧逼的防守姿态出现的<font face="宋体, MS Song">,</font>那时候对<font face="宋体, MS Song">03.</font>对方明显跟不上</p>
<p>我们的节奏<font face="宋体, MS Song">,</font>比赛剩一分多<font face="宋体, MS Song">,</font>领先<font face="宋体, MS Song">7</font>分<font face="宋体, MS Song">.<br />
</font></p>
<p>我方进攻时<font face="宋体, MS Song">,</font>一名队员眼角受伤<font face="宋体, MS Song">,</font>我们整个都愣住了<font face="宋体, MS Song">,</font>我们看到自己的同学眼里在出血<font face="宋体, MS Song">,</font>对方</p>
<p>断球<font face="宋体, MS Song"> ,</font>上篮<font face="宋体, MS Song"> </font>哨声响<font face="宋体, MS Song"> ,</font>两分算<font face="宋体, MS Song">.</font>大家整个都蒙了<font face="宋体, MS Song">,</font>那是高中的篮球所没有的<font face="宋体, MS Song">.</font>在那场比赛前<font face="宋体, MS Song">,</font></p>
<p>同样是这位裁判<font face="宋体, MS Song">,</font>吹了我们对<font face="宋体, MS Song">04</font>的一场球<font face="宋体, MS Song">,</font>天啊<font face="宋体, MS Song"> ,</font>他们简直是在踢足球<font face="宋体, MS Song">,</font>起码我们若干个人</p>
<p>的衣服被硬生生的拉坏了<font face="宋体, MS Song">.</font>于是<font face="宋体, MS Song">,</font>对<font face="宋体, MS Song">03</font>的那一场<font face="宋体, MS Song">,</font>我们又输了<font face="宋体, MS Song">,</font>输的不明不白<font face="宋体, MS Song">.</font>或许那时候人</p>
<p>比较年轻<font face="宋体, MS Song"> </font>太冲动<font face="宋体, MS Song">.</font>到现在或许会好很多<font face="宋体, MS Song">,</font>裁判如果不能一碗水端平<font face="宋体, MS Song">,</font>那就不是个水平的问</p>
<p>题<font face="宋体, MS Song">.</font>这位裁判出自税务系<font face="宋体, MS Song">,</font>他们班拿了<font face="宋体, MS Song">39</font>的一次冠军<font face="宋体, MS Song">.<br />
</font></p>
<p>话说回来<font face="宋体, MS Song">,</font>生气是难免的<font face="宋体, MS Song">,</font>不过裁判和<font face="宋体, MS Song">03</font>都是<font face="宋体, MS Song">97</font>的<font face="宋体, MS Song">,</font>于是知道税院有照顾老生的传统<font face="宋体, MS Song">,</font>就算在</p>
<p>院里比赛里<font face="宋体, MS Song">,</font>我不太过火的动作一般不会招致裁判的判罚<font face="宋体, MS Song">.</font>而每次进攻<font face="宋体, MS Song">,</font>只要有稍微的身体</p>
<p>的接触<font face="宋体, MS Song">.</font>裁判都会判对方的犯规<font face="宋体, MS Song">,</font>所以<font face="宋体, MS Song"> </font>从这件事情我们可以看出<font face="宋体, MS Song">,</font>和裁判搞好关系是多么的</p>
<p>必要<font face="宋体, MS Song">.</font>这也算是大学篮球的一个特点吧<br />
</p>
<p>大一打的比赛<font face="宋体, MS Song"> </font>不多<font face="宋体, MS Song">.</font>开始的时候在系里不熟<font face="宋体, MS Song">,</font>和法学在一起打<font face="宋体, MS Song">,</font>那时候<st1>许风</st1>老师在法学搞了</p>
<p>三个队<font face="宋体, MS Song">,</font>我作为外援出场<font face="宋体, MS Song">,</font>一场可以砍下<font face="宋体, MS Song">40</font>多分<font face="宋体, MS Song">,</font>当然对抗非常的差<font face="宋体, MS Song">.</font>在税院四年<font face="宋体, MS Song"> </font>或者是<font face="宋体, MS Song">99</font></p>
<p>一界<font face="宋体, MS Song">,</font>应该说在篮球方面是出了不少人才的<font face="宋体, MS Song">,</font>大一的时候很狂<font face="宋体, MS Song">,</font>几乎不把其他的队放在眼里<font face="宋体, MS Song">,</font></p>
<p>班级里打了许多的比赛<font face="宋体, MS Song">,</font>只输了其中的一场<font face="宋体, MS Song">,</font>各个班各个系基本是都打过了<font face="宋体, MS Song">,</font>其实那次输比</p>
<p>赛<font face="宋体, MS Song">,</font>不如说是次在不公平的条件下进行的一场比赛<font face="宋体, MS Song">.</font>开始的比赛是我找班里的女生写的海</p>
<p>报<font face="宋体, MS Song">,</font>很有些嗷头<font face="宋体, MS Song">,</font>那阵子正好是决战紫金之颠上演<font face="宋体, MS Song">,</font>于是我们的海报上这样写<font face="宋体, MS Song">:</font>决战篮球之</p>
<p>颠<font face="宋体, MS Song">:</font>会计系<font face="宋体, MS Song">99</font>最强之<font face="宋体, MS Song">9950</font>挑战税务系<font face="宋体, MS Song">9939.39</font>班很强<font face="宋体, MS Song">,</font>主要强在一个人身上<font face="宋体, MS Song">.</font>在学校的时候<font face="宋体, MS Song">,</font></p>
<p>无论是公开或者私下<font face="宋体, MS Song">,</font>我都认为<font face="宋体, MS Song">.W./</font>是我<font face="宋体, MS Song">,</font>我们班<font face="宋体, MS Song">,</font>我们系<font face="宋体, MS Song">.</font>在税务学院唯一的对手<font face="宋体, MS Song">.</font>场下<font face="宋体, MS Song">W</font>人</p>
<p>很好<font face="宋体, MS Song">.</font>也很义气<font face="宋体, MS Song">,</font>场下我们是朋友<font face="宋体, MS Song">;39</font>班的很多人我也认识<font face="宋体, MS Song">,</font>和我也算是不错的朋友<font face="宋体, MS Song">.</font>但<font face="宋体, MS Song">,</font>在那</p>
<p>个集体中<font face="宋体, MS Song">,</font>并不是所有的人都可以令人满意<font face="宋体, MS Song">,</font>反正我也离开税院<font face="宋体, MS Song">,</font>大可不必有什么忌讳的东</p>
<p>西了<font face="宋体, MS Song">.<br />
</font></p>
<p>那次比赛是我们班提出来的<font face="宋体, MS Song">,</font>因为连胜了几个系的<font face="宋体, MS Song">99</font>冠军球队<font face="宋体, MS Song">,</font>觉得对内的气氛很好<font face="宋体, MS Song">,</font>对比</p>
<p>赛也很有信心<font face="宋体, MS Song">,</font>大家憋足了尽和<font face="宋体, MS Song">39</font>一战<font face="宋体, MS Song">,39</font>开始可能是出于各种各样的原因没有迎战<font face="宋体, MS Song">,</font>甚至</p>
<p>有人<font face="宋体, MS Song">,(</font>我知道这个人是谁<font face="宋体, MS Song">,)</font>撕下了我们的海报<font face="宋体, MS Song">,</font>我觉得那是种不礼貌的行为<font face="宋体, MS Song">,</font>后来<font face="宋体, MS Song">,</font>有人窜</p>
<p>改了我们的海报<font face="宋体, MS Song">,</font>并借以刺激<font face="宋体, MS Song">W</font>同学<font face="宋体, MS Song">.</font>正在这时<font face="宋体, MS Song">,</font>我们班的阿<font face="宋体, MS Song">R</font>踢足球时受伤了<font face="宋体, MS Song">,</font>膝关节和肘关</p>
<p>节都有伤<font face="宋体, MS Song">,39</font>有人得到了消息<font face="宋体, MS Song">,</font>于是写出了一张刺激的海报约我们一战<font face="宋体, MS Song">.</font>据说策划写海报的</p>
<p>正是<font face="宋体, MS Song">S</font>某人<font face="宋体, MS Song">,</font>他可能想借此确定他在<font face="宋体, MS Song">39</font>的地位吧<font face="宋体, MS Song">,</font>只是我不明白<font face="宋体, MS Song">,</font>阿<font face="宋体, MS Song">R</font>在<font face="宋体, MS Song">39</font>住的时候<font face="宋体, MS Song">,</font>算是对他</p>
<p>极好<font face="宋体, MS Song">,</font>他却以这种方式乘人之危<font face="宋体, MS Song">,</font>真是不可思议<font face="宋体, MS Song">.<br />
</font></p>
<p>对于所有的男人来讲<font face="宋体, MS Song">,</font>面子是很重要的事情<font face="宋体, MS Song">,</font>于是<font face="宋体, MS Song">,</font>这场在不公平条件下进行的比赛就开始</p>
<p>了<font face="宋体, MS Song">.</font>结果我们输的很惨<font face="宋体, MS Song">,</font>其实也很正常<font face="宋体, MS Song">,</font>我们的平均身高不到<font face="宋体, MS Song">172,39</font>的高度高过我们太多<font face="宋体, MS Song">,</font>阿</p>
<p><font face="宋体, MS Song">R</font>受伤后根本跟不上<font face="宋体, MS Song">W</font>同学的节奏<font face="宋体, MS Song">,</font>而<font face="宋体, MS Song">S</font>更为的卑鄙无耻<font face="宋体, MS Song">,</font>他竟然试图用脚去踩<font face="宋体, MS Song">R</font>的踝关节内</p>
<p>侧<font face="宋体, MS Song">,</font>打篮球的人都知道<font face="宋体, MS Song">,</font>那意味着什么<font face="宋体, MS Song">,</font>或许我的记述有误<font face="宋体, MS Song">,</font>或许我的话会得罪一些人<font face="宋体, MS Song">.</font>但这</p>
毕竟是我记忆里一个不能磨灭的事情了<font face="宋体, MS Song">.<br />
</font>
<p>其实就算在公平的条件下比赛<font face="宋体, MS Song">,</font>我们也赢不了<font face="宋体, MS Song">39,</font>因为我承认<font face="宋体, MS Song">39</font>是<font face="宋体, MS Song">99</font>界最强的班级<font face="宋体, MS Song">.</font>他们练</p>
<p>的很苦比赛也极有掌法<font face="宋体, MS Song">,</font>这归功于<font face="宋体, MS Song">W</font>同学的精心操练<font face="宋体, MS Song">,</font>这可能也是税务可以最后从会计手中</p>
<p>拿走冠军的原因吧<font face="宋体, MS Song">.</font>说实话<font face="宋体, MS Song">,</font>除掉对他们中间有些人的蔑视之情我还是很喜欢他们这样的集</p>
<p>体的<font face="宋体, MS Song">,</font>团结而有活力<font face="宋体, MS Song">.</font>只是辉煌也好<font face="宋体, MS Song">,</font>沉默也罢<font face="宋体, MS Song">.39</font>或者<font face="宋体, MS Song">50 </font>都泯灭在历史里了<br />
</p>
<p>上次说到<font face="宋体, MS Song">w</font>同学<font face="宋体, MS Song">.</font>应该说他是税院最好的后卫<font face="宋体, MS Song">,</font>在当时<font face="宋体, MS Song">.</font>如果打长春市的比赛的话<font face="宋体, MS Song">.</font>他肯定是</p>
<p>当仁不让的首发控球<font face="宋体, MS Song">,</font>和他打球极舒服<font face="宋体, MS Song">,</font>他可以恰如其分的突破后把球分到舒服的位置<font face="宋体, MS Song">,</font>作</p>
<p>为射手<font face="宋体, MS Song">,</font>你只要做好最后一投<font face="宋体, MS Song">.W</font>对体育几乎样样在行<font face="宋体, MS Song">,</font>夸张点的说他简直就是个体育疯子<font face="宋体, MS Song">,</font></p>
<p>当然这里只有赞美没有讽刺<font face="宋体, MS Song">.</font>希望我回长春<font face="宋体, MS Song"> </font>可以和<font face="宋体, MS Song">W</font>找个小酒馆坐坐<font face="宋体, MS Song"> .<br />
</font></p>
<p>我们输给<font face="宋体, MS Song">39,</font>还因为我们没有可以替换的人<font face="宋体, MS Song">,</font>我们班的先发只有<font face="宋体, MS Song">5</font>个人<font face="宋体, MS Song">,</font>基本无人可换<font face="宋体, MS Song">,</font>我不</p>
<p>到<st1:chmetcnv tcsc="0" hasspace="False" sourcevalue="1" negative="False" numbertype="1" w:st="on" unitname="米"><font face="宋体, MS Song">1</font>米</st1:chmetcnv><font face="宋体, MS Song">8</font>的身高却要行中锋之职<font face="宋体, MS Song">,</font>那天进攻篮板基本没有<font face="宋体, MS Song">,</font>防守篮板也强不过对方<font face="宋体, MS Song">,</font>加之阿<font face="宋体, MS Song">B</font>的</p>
<p>状态也不好<font face="宋体, MS Song">.</font>想到阿<font face="宋体, MS Song">B,</font>对<font face="宋体, MS Song">39</font>那次可能是他第一次发挥失常<font face="宋体, MS Song">,</font>不知道他是不是每天还座着<font face="宋体, MS Song">13</font></p>
<p>路<font face="宋体, MS Song">,</font>往返于西校和本部之间<font face="宋体, MS Song">,</font>有没有时间打球了<font face="宋体, MS Song">,</font>下面会有专门的章节论述税院当年著名的</p>
<p>射手阿<font face="宋体, MS Song">B</font>的篮球生涯<font face="宋体, MS Song">.</font>如果阿<font face="宋体, MS Song">B</font>上网看到了<font face="宋体, MS Song">,</font>那就等我回去准备好地方打麻将吧<font face="宋体, MS Song"> </font>省的你们总</p>
<p>说是三缺一<font face="宋体, MS Song">.{</font>未完待序<font face="宋体, MS Song">}</font>[em05]</p>
          <br/>
          <span style="color:red;">
            <a href="http://daquan198163.javaeye.com/blog/128426#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 30 Sep 2007 11:00:37 +0800</pubDate>
        <link>http://daquan198163.javaeye.com/blog/128426</link>
        <guid>http://daquan198163.javaeye.com/blog/128426</guid>
      </item>
      <item>
        <title>步履维艰的XFire配置过程</title>
        <author>daquan198163</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://daquan198163.javaeye.com">daquan198163</a>&nbsp;
          链接：<a href="http://daquan198163.javaeye.com/blog/70005" style="color:red;">http://daquan198163.javaeye.com/blog/70005</a>&nbsp;
          发表时间: 2007年04月11日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          1、拷贝xfire相关的jar到classpath；<br />
2、在web.xml配置xfire的servlet及其url映射<br />
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-xml" start="1">
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">servlet</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">servlet-name</span><span class="tag">&gt;</span><span>xfire</span><span class="tag"><!--</span--><span class="tag-name">servlet-name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">servlet-class</span><span class="tag">&gt;</span><span>org.springframework.web.servlet.DispatcherServlet</span><span class="tag"><!--</span--><span class="tag-name">servlet-class</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">init-param</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">param-name</span><span class="tag">&gt;</span><span>contextConfigLocation</span><span class="tag"><!--</span--><span class="tag-name">param-name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">param-value</span><span class="tag">&gt;</span><span>classpath:xfire-servelet.xml</span><span class="tag"><!--</span--><span class="tag-name">param-value</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag"><!--</span--><span class="tag-name">init-param</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class=""><span><span class="tag"><!--</span--><span class="tag-name">servlet</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
</ol>
</div>
3、新建xfire-servelet.xml<br />
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-xml" start="1">
    <li class="alt"><span><span class="tag"><span class="tag-name">xml</span><span>&nbsp;</span><span class="attribute">version</span><span>=</span><span class="attribute-value">&quot;1.0&quot;</span><span>&nbsp;</span><span class="attribute">encoding</span><span>=</span><span class="attribute-value">&quot;UTF-8&quot;</span><span class="tag">?&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class=""><span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">beans</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">import</span><span>&nbsp;</span><span class="attribute">resource</span><span>=</span><span class="attribute-value">&quot;classpath:org/codehaus/xfire/spring/xfire.xml&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">bean</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">&quot;org.springframework.web.servlet.handler.SimpleUrlHandlerMapping&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;urlMap&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">map</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">entry</span><span>&nbsp;</span><span class="attribute">key</span><span>=</span><span class="attribute-value">&quot;/SAService&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">ref</span><span>&nbsp;</span><span class="attribute">bean</span><span>=</span><span class="attribute-value">&quot;SAServiceWS&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag"><!--</span--><span class="tag-name">entry</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">entry</span><span>&nbsp;</span><span class="attribute">key</span><span>=</span><span class="attribute-value">&quot;/BulletinService&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">ref</span><span>&nbsp;</span><span class="attribute">bean</span><span>=</span><span class="attribute-value">&quot;BulletinServiceWS&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag"><!--</span--><span class="tag-name">entry</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag"><!--</span--><span class="tag-name">map</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag"><!--</span--><span class="tag-name">property</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag"><!--</span--><span class="tag-name">bean</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">bean</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;SAServiceWS&quot;</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">&quot;org.codehaus.xfire.spring.remoting.XFireExporter&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;serviceFactory&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">ref</span><span>&nbsp;</span><span class="attribute">bean</span><span>=</span><span class="attribute-value">&quot;xfire.serviceFactory&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag"><!--</span--><span class="tag-name">property</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;xfire&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">ref</span><span>&nbsp;</span><span class="attribute">bean</span><span>=</span><span class="attribute-value">&quot;xfire&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag"><!--</span--><span class="tag-name">property</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;serviceBean&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">ref</span><span>&nbsp;</span><span class="attribute">bean</span><span>=</span><span class="attribute-value">&quot;SAService&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag"><!--</span--><span class="tag-name">property</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;serviceClass&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">value</span><span class="tag">&gt;</span><span>net.gbicc.sa.service.SAService</span><span class="tag"><!--</span--><span class="tag-name">value</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag"><!--</span--><span class="tag-name">property</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag"><!--</span--><span class="tag-name">bean</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">bean</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;BulletinServiceWS&quot;</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">&quot;org.codehaus.xfire.spring.remoting.XFireExporter&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;serviceFactory&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">ref</span><span>&nbsp;</span><span class="attribute">bean</span><span>=</span><span class="attribute-value">&quot;xfire.serviceFactory&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag"><!--</span--><span class="tag-name">property</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;xfire&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">ref</span><span>&nbsp;</span><span class="attribute">bean</span><span>=</span><span class="attribute-value">&quot;xfire&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag"><!--</span--><span class="tag-name">property</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;serviceBean&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">ref</span><span>&nbsp;</span><span class="attribute">bean</span><span>=</span><span class="attribute-value">&quot;bulletinService&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag"><!--</span--><span class="tag-name">property</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;serviceClass&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">value</span><span class="tag">&gt;</span><span>net.gbicc.swm.service.BulletinService</span><span class="tag"><!--</span--><span class="tag-name">value</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag"><!--</span--><span class="tag-name">property</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag"><!--</span--><span class="tag-name">bean</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class="alt"><span><span class="tag"><!--</span--><span class="tag-name">beans</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
</ol>
</div>
4、至此，算是把spring组件发布成webservice了，运气好的话访问http://localhost:8880/swm/services/SAService?wsdl可以看到xfire为我们生成的漂亮而复杂的WSDL。<br />
5、可是，一般情况下不会这么顺利的（参考http://wiki.springside.org.cn/display/springside/XFire的2.3），我们还需要为那些返回值为集合类型的方法以及包含集合属性的model做一些特殊配置：<br />
在SAService.java同一目录新建SAService.aegis.xml<br />
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-xml" start="1">
    <li class="alt"><span><span class="tag"><span class="tag-name">xml</span><span>&nbsp;</span><span class="attribute">version</span><span>=</span><span class="attribute-value">&quot;1.0&quot;</span><span>&nbsp;</span><span class="attribute">encoding</span><span>=</span><span class="attribute-value">&quot;utf-8&quot;</span><span class="tag">?&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class=""><span><span class="tag">&lt;</span><span class="tag-name">mappings</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">mapping</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">method</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;getPrivileges&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">return-type</span><span>&nbsp;</span><span class="attribute">componentType</span><span>=</span><span class="attribute-value">&quot;net.gbicc.sa.domain.Privilege&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag"><!--</span--><span class="tag-name">method</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">method</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;getDepts&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">return-type</span><span>&nbsp;</span><span class="attribute">componentType</span><span>=</span><span class="attribute-value">&quot;net.gbicc.sa.domain.Department&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag"><!--</span--><span class="tag-name">method</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">method</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;getRoles&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">return-type</span><span>&nbsp;</span><span class="attribute">componentType</span><span>=</span><span class="attribute-value">&quot;net.gbicc.sa.domain.Role&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag"><!--</span--><span class="tag-name">method</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">method</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;getUsers&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">return-type</span><span>&nbsp;</span><span class="attribute">componentType</span><span>=</span><span class="attribute-value">&quot;net.gbicc.sa.domain.User&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag"><!--</span--><span class="tag-name">method</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">method</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;getUsersByDept&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">return-type</span><span>&nbsp;</span><span class="attribute">componentType</span><span>=</span><span class="attribute-value">&quot;net.gbicc.sa.domain.User&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag"><!--</span--><span class="tag-name">method</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">method</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;getUsersByRole&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">return-type</span><span>&nbsp;</span><span class="attribute">componentType</span><span>=</span><span class="attribute-value">&quot;net.gbicc.sa.domain.User&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag"><!--</span--><span class="tag-name">method</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag"><!--</span--><span class="tag-name">mapping</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class=""><span><span class="tag"><!--</span--><span class="tag-name">mappings</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
</ol>
</div>
在User.java同一目录新建User.aegis.xml<br />
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-xml" start="1">
    <li class="alt"><span><span class="tag"><span class="tag-name">xml</span><span>&nbsp;</span><span class="attribute">version</span><span>=</span><span class="attribute-value">&quot;1.0&quot;</span><span>&nbsp;</span><span class="attribute">encoding</span><span>=</span><span class="attribute-value">&quot;utf-8&quot;</span><span class="tag">?&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class=""><span><span class="tag">&lt;</span><span class="tag-name">mappings</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">mapping</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;roles&quot;</span><span>&nbsp;</span><span class="attribute">ignore</span><span>=</span><span class="attribute-value">&quot;true&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag"><!--</span--><span class="tag-name">mapping</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class=""><span><span class="tag"><!--</span--><span class="tag-name">mappings</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
</ol>
</div>
6、再次启动服务，如果运气不是特别差的话，访问http://localhost:8880/swm/services/SAService?wsdl可以看到xfire为我们生成的漂亮而复杂的WSDL了。<br />
7、可是，能够生成WSDL并不意味着程序已经可以访问这个Webservice，还要用单元测试来验证一下：<br />
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-j" start="1">
    <li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;WSTest&nbsp;</span><span class="keyword">extends</span><span>&nbsp;AbstractXFireSpringTest&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">private</span><span>&nbsp;Log&nbsp;log&nbsp;=&nbsp;LogFactory.getLog(WSTest.</span><span class="keyword">class</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">protected</span><span>&nbsp;ApplicationContext&nbsp;createContext()&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">return</span><span>&nbsp;</span><span class="keyword">new</span><span>&nbsp;ClassPathXmlApplicationContext(</span><span class="keyword">new</span><span>&nbsp;String[]&nbsp;{&nbsp;</span><span class="string">&quot;classpath*:applicationContext*.xml&quot;</span><span>,&nbsp;</span><span class="string">&quot;classpath*:xfire-servelet.xml&quot;</span><span>&nbsp;});&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;testSAWS()&nbsp;</span><span class="keyword">throws</span><span>&nbsp;Exception&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Service&nbsp;serviceModel&nbsp;=&nbsp;<span class="keyword">new</span><span>&nbsp;ObjectServiceFactory().create(SAService.</span><span class="keyword">class</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XFireProxyFactory&nbsp;factory&nbsp;=&nbsp;<span class="keyword">new</span><span>&nbsp;XFireProxyFactory(getXFire());&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SAService&nbsp;service&nbsp;=&nbsp;(SAService)&nbsp;factory.create(serviceModel,&nbsp;<span class="string">&quot;xfire.local://SAService&quot;</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&nbsp;list&nbsp;=&nbsp;service.getPrivileges();&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;assertNotNull(list);&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>}&nbsp;&nbsp;</span></li>
</ol>
</div>
<br />
因为继承了xfire提供的测试基类<span><span>AbstractXFireSpringTest，使得我们可以不起服务就能测这个webservice。<br />
8、如果运气不太差，应该可以看见绿条庆祝胜利了，可是，我却遇到了一个</span></span>奇怪错误：org.codehaus.xfire.fault.XFireFault: No write method for property {http://domain.swm.gbicc.net}especialPrompt in class net.gbicc.swm.domain.Bulletin<br />
而事实上Bulletin里并没有especialPrompt属性。。。。这令我很困惑，一度怀疑是Model继承导致的<br />
后来终于找到症结所在&mdash;&mdash;Bulletin里面的一些boolean isxxx方法把xfire骗了，为他们新建一些对应的setxxx(boolean)就没问题了，绿条如约出现。<br />
<br />
整个过程虽然有些艰难，但是其实配置量还是很少的，再看看xfire替我们生成的一大堆WSDL，也就释然了，谁教咱程序员以&ldquo;懒惰&rdquo;为美德呢？
          <br/>
          <span style="color:red;">
            <a href="http://daquan198163.javaeye.com/blog/70005#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 11 Apr 2007 11:31:19 +0800</pubDate>
        <link>http://daquan198163.javaeye.com/blog/70005</link>
        <guid>http://daquan198163.javaeye.com/blog/70005</guid>
      </item>
      <item>
        <title>Re: 这样是一种浮躁吗?我该怎么办才好?</title>
        <author>daquan198163</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://daquan198163.javaeye.com">daquan198163</a>&nbsp;
          链接：<a href="http://daquan198163.javaeye.com/blog/48115" style="color:red;">http://daquan198163.javaeye.com/blog/48115</a>&nbsp;
          发表时间: 2007年01月17日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          培养出兴趣 优于 勤奋刻苦 寻找一条平滑的学习曲线 优于 从难从严 结合实践学以致用 优于 钻研理论知识和艰深技术  虽然我认为后者也其有价值，但是前者更有可能取得成功 前者可以称为&ldquo;敏捷学习方法&rdquo;，后者更像瀑布型
          <br/>
          <span style="color:red;">
            <a href="http://daquan198163.javaeye.com/blog/48115#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 17 Jan 2007 16:45:58 +0800</pubDate>
        <link>http://daquan198163.javaeye.com/blog/48115</link>
        <guid>http://daquan198163.javaeye.com/blog/48115</guid>
      </item>
      <item>
        <title>离开公司前写给在一起奋斗了半年多的兄弟们</title>
        <author>daquan198163</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://daquan198163.javaeye.com">daquan198163</a>&nbsp;
          链接：<a href="http://daquan198163.javaeye.com/blog/28684" style="color:red;">http://daquan198163.javaeye.com/blog/28684</a>&nbsp;
          发表时间: 2006年10月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><span class="pagetitle" style="margin: 0px; padding: 0px; text-decoration: none;">看了</span>      <span class="topictitle2">                               <a href="http://www.javaeye.com/topic/37706" class="topictitle2">     我的第一个真正意义上的测试</a></span>，觉得有必要把这篇博客贴出来</p>
<div align="center"><strong><span class="pagetitle" style="margin: 0px; padding: 0px; text-decoration: none;">                                         对敏捷软件开发方法的一些体会</span></strong><br />
</div>
<p> 我觉得推行一个新技术最大的阻力还是来自程序员自身<br />
管理层一般不会关心开发方法和技术细节的问题<br />
struts的流行恐怕主要也是技术人员发自内心的认可和推崇造成的吧<br />
毕竟这牵涉到他的切身利益（工作效率、成就感、乐趣。。。）<br />
同样的道理，单元测试和其他敏捷方法也要首先打动技术人员的心，然后想不流行都难<br />
目前的情况与这两种技术本身的特点也有关，单元测试是阳春白雪，struts是下里巴人</p>
<h3><a name="我对敏捷软件开发方法的一些体会-初次接触，本能的抗拒"></a>初次接触，本能的抗拒</h3>
<p>我自己的经历就是这样：03年中期时，我们技术总监让我研究一下junit和eclipse<br />
那时候我用struts和jbuilder用的正爽，瞟了一眼觉得eclipse太简陋了（其实是自己被jb这种傻瓜相机惯坏了）<br />
junit就更无法接受，那时觉得程序员写业务代码天经地义，写测试就是自虐<br />
于是就丢在一边不再看了（可是如今，这两样东西已经是我工作中最重要的工具了）</p>
<h3><a name="我对敏捷软件开发方法的一些体会-大多数人都走过的弯路"></a>大多数人都走过的弯路</h3>
<p>现在每次看到缺少测试的代码以及还在不停制造这种代码的程序员，我就会感叹前几年自己走的弯路：<br />
04年我经历了一个项目，20人在客户现场开发，到了后期的时候，整个项目就像一座沙子堆起的巨大城堡，稍有不慎就会跨塌<br />
于是，程序员们开始变得消极、焦虑、易怒、神经质。。。。（似乎还没有人到更年期 ）</p>
<ul>
    <li>消极：不愿意修改bug，不愿意改代码以满足用户新提出的需求</li>
    <li>焦虑：担心刚刚修改的代码会破坏已有功能，对下一个版本能否正常工作毫无信心，梦到测试人员报告其大量bug</li>
    <li>易怒：经常对测试mm发火，私下里诅咒客户，抱怨别人弄坏了自己的程序</li>
    <li>神经质：系统偶尔出现奇怪行为就胡乱猜测，改了不该改的地方导致更多奇怪现象出现</li>
    <li>那段日子简直不堪回首，是对程序员身心的双重折磨！</li>
</ul>
<h3><a name="我对敏捷软件开发方法的一些体会-走上敏捷之路，相见恨晚 "></a>走上敏捷之路，相见恨晚&nbsp;</h3>
<p>时间到了2005年的春天，单元测试（连带着轻量级架构Spring和敏捷方法）真正走进了我的世界<br />
从那以后，我发现我变得快乐了并且再也离不开它了<br />
编程不再是一件痛苦的事，至少不那么痛苦了，反而增添了很多乐趣和满足感，秘密就在于：</p>
<ul>
    <li>勇气：单元测试是自动化的回归测试，她让我对自己的代码充满自信，每一个测试就像攀岩者钉在峭壁上的一个楔子，没有了程序衰退的担心，于是我可以大胆的重构、积极的拥抱变化；</li>
    <li><strong>快速反馈</strong>：每写一段代码，我都可以在几秒钟之内看到他的运行效果，免去了打包、部署、重起server以及在一堆日志里找结果的工作，开发的效率极大提高；</li>
    <li>测试驱动设计：通过编写测试可以准确的理解需求、发现问题、发现接口，在不知不觉间做出最合理的设计；</li>
    <li>文档：测试是最好的详细设计文档，不会过时、可运行。</li>
</ul>
<p>对于新事物的怀疑总是不可避免的，很多人最主要的是担心写测试会降低开发效率------写测试代码时间+写功能代码时间〉〉写功能代码时间<br />
对于这个问题，marting有过回答，大致的意思是：如果软件开发的主要工作是敲键盘的话，那个命题是成立的。<br />
事实大家都知道，这个敲键盘的时间只占很小比例，但毕竟也是多用了，那么在哪儿又节省了呢，答案就是<strong>快速反馈</strong>。<br />
快速反馈：每写一段代码，我都可以在几秒钟之内看到他的运行效果，免去了打包、重新部署以及在一堆日志里找结果的工作；<br />
写测试3+写代码3+跑测试看结果1=7<br />
写代码3+打包2+重新部署10+用ie访问程序2+在一堆日志里找结果并确认5=22<br />
我一点也没夸张，那个was5重新部署一次真的很慢，有时还需要重起服务。</p>
<h3><a name="我对敏捷软件开发方法的一些体会-不断实践，终获回报 "></a>不断实践，终获回报&nbsp;</h3>
<p>来到e-ma以后，我继续在工作中实践着敏捷方法</p>
<p>包括在技术论证阶段极力推荐Spring框架； 在编码开始之前做了项目原型和开发模板；配置luntbuild持续集成服务器；提倡编写单元测试。。。</p>
<p>经过国检项目的考验，我更加坚信：敏捷方法是快速开发高质量软件的一把钥匙，因为它所承诺的那些好处全都得到了兑现：</p>
<p>我所开发的支付、冲正、清单模块全都按时完成，并且bug很少</p>
<p>虽然需求、接口一改再改，但是有密集的单元测试作保证，我总能毫无顾忌的快速的去调整程序</p>
<p>像国检项目这样的系统结构复杂、通信方式多种多样、需求变化频繁、质量要求高、工期紧张的分布式系统，对于任何开发方法都是个严峻的挑战，</p>
<p>但是我惊讶的发现，相比那种简单的本地数据库应用，敏捷方法在这样的系统里能够更充分的发挥出威力 ，看看它是如何应对这些挑战的：</p>
<ul>
    <li>&nbsp;系统结构复杂：TDD正好可以产生一个简单、松耦合、可测试的设计，极大的降低系统复杂度，防止过度设计</li>
    <li>&nbsp;分布式系统、通信方式多种多样：这对程序员是个巨大挑战，但是mock单元测试让事情变得简单许多，mock可以轻松模拟任何外部资源和接口</li>
    <li>需求变化频繁：敏捷的口号就是&quot;拥抱变化&quot;，有单元测试作保障，让变化来的更多些吧</li>
    <li>质量要求高：有单元测试作保障，每一段代码都有一个测试用例守护，同一个bug不会出现两次或以上</li>
    <li>工期紧张：还记得&quot;<strong>快速反馈</strong>&quot;吧</li>
</ul>
<h3><a name="我对敏捷软件开发方法的一些体会-敏捷方法很简单"></a>敏捷方法很简单</h3>
<p>它不是软件天才专用的难以理解和掌握的神秘方法，它只是一些普遍原理和经验的总结、一种理念和一组最佳实践。</p>
<p>&nbsp;&quot;I'm not a great programmer; I'm just a good programmer with great habits&quot;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ------Kent Beck<br />
&nbsp;</p>
<h3><a name="我对敏捷软件开发方法的一些体会-结语"></a>结语</h3>
<p>&nbsp;经过了那么多没日没夜加班的日子，我们建立了深厚的战斗友谊，也都被折磨得身心俱疲：）</p>
<p>我始终坚信，软件开发是一项伟大的、创造性的劳动，它应该是一件充满乐趣的事，同时给我们带来成就感和体面的收入；</p>
<p>程序员应该是一群快乐的家伙，每天享受着自己喜欢的工作，有足够的时间去打篮球、跟哥们儿喝啤酒、陪女朋友看电影；</p>
<p>虽然现实还与此相去甚远， 但这是我们要努力达到的境界，希望这篇文章介绍的方法能有所帮助。</p>
<p>最后，祝你们身体健康、编程快乐！ </p>
<br />
<br />
<p id="TBPingURL">&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://daquan198163.javaeye.com/blog/28684#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 16 Oct 2006 15:07:00 +0800</pubDate>
        <link>http://daquan198163.javaeye.com/blog/28684</link>
        <guid>http://daquan198163.javaeye.com/blog/28684</guid>
      </item>
      <item>
        <title>分享一个通用数据库分页方案</title>
        <author>daquan198163</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://daquan198163.javaeye.com">daquan198163</a>&nbsp;
          链接：<a href="http://daquan198163.javaeye.com/blog/24772" style="color:red;">http://daquan198163.javaeye.com/blog/24772</a>&nbsp;
          发表时间: 2006年09月21日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          subversion地址如下：<br />https://svn.sourceforge.net/svnroot/powerstone/ps_paging<br />技术架构：<br />web层可以是任意的MVC框架，目前只实现了SpringMVC和Struts的版本(Struts版已经在weblogic7下跑通，tomcat5还不行)；<br />dao层也没有任何限制，只要按照范例中的模式来做既可；<br />最终页面上用一个标签来显示翻页按钮等。<br />btw：谁有兴趣想写个webwork版本的，可以和我联系，或直接发个patch给我<br />---------------------------------<br />工作原理:想法很简单,就是应用设计模式里的"模板方法模式",把分页计算的逻辑封装在一个抽象父类(PagingController)里面,留下三个抽象方法：doHandleRequest（处理请求）、getTotalRecordsNumber（计算总记录数）、makeSearchCriteria（构造查询条件，可选）供子类型重写，使得子类型尽量的简单，让我们可以专注于业务逻辑而不需要处理分页逻辑。示例如下：<pre name="code" class="java">public class UserPagingController extends PagingController {
	private final Logger logger = Logger.getLogger(this.getClass());
	private UserDAO userDAO;
	protected ModelAndView doHandleRequest(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		Map map = super.getSearchCriteria(request);
		int beginNo = super.computeRecordsBeginNo(request);
		int recordsNumber = super.computeRecordsNumberToRead(request);
		List usersList = userDAO.findUsers(map, beginNo, recordsNumber);
		logger.debug(usersList);
		return new ModelAndView("usersList", "usersList", usersList);
	}
	protected int getTotalRecordsNumber(HttpServletRequest request) {
		int result = userDAO.countUsers(super.getSearchCriteria(request));
		logger.debug("users number================:" + result);
		return result;
	}
	protected Map makeSearchCriteria(HttpServletRequest request) {
		HashMap map = new HashMap();
		String firstName = request.getParameter("firstName");
		if (firstName != null && firstName.trim().length() > 0) {
			map.put("firstName", firstName);
		}
		logger.debug(map);
		return map;
	}
	public void setUserDAO(UserDAO userDAO) {
		this.userDAO = userDAO;
	}
}</pre><br />Struts版原理相同。<br />在页面显示翻页链接只需一行代码：<br /><pre name="code" class="java">&lt;page:pagebar url="/user_query.html?" bordercolor="#F4F9FF" bgcolor="#F4F9FF"/></pre>
          <br/>
          <span style="color:red;">
            <a href="http://daquan198163.javaeye.com/blog/24772#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 21 Sep 2006 14:51:48 +0800</pubDate>
        <link>http://daquan198163.javaeye.com/blog/24772</link>
        <guid>http://daquan198163.javaeye.com/blog/24772</guid>
      </item>
      <item>
        <title>你能说服你的同事写单元测试吗？</title>
        <author>daquan198163</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://daquan198163.javaeye.com">daquan198163</a>&nbsp;
          链接：<a href="http://daquan198163.javaeye.com/blog/22273" style="color:red;">http://daquan198163.javaeye.com/blog/22273</a>&nbsp;
          发表时间: 2006年09月05日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          我把单元测试的好处都阐述了一遍，可是大家仍然有很多疑虑，其中最主要的是担心写测试会降低开发效率——写测试代码+写功能代码〉〉写功能代码<br /><br />最终由于这个项目工期很紧，否决了我的建议！<br /><br />daquan198163     2006-09-28 18:13<br />根据自己三年多来的开发经历谈些感受：<br />我觉得最大的阻力还是来自程序员自身<br />管理层一般不会关心开发方法和技术细节的问题<br />struts的流行恐怕主要也是技术人员发自内心的认可和推崇造成的吧<br />毕竟这牵涉到他的切身利益（工作效率、成就感、乐趣。。。）<br /><br />同样的道理，单元测试和其他敏捷方法也要首先打动技术人员的心，然后想不流行都难<br />目前的情况与这两种技术本身的特点也有关，单元测试是阳春白雪，struts是下里巴人<br /><br />我自己的经历就是这样：03年中时，我们经理让我研究一下junit和eclipse<br />那时候我用struts和jbuilder用的正爽，瞟了一眼觉得eclipse太简陋了（其实是自己被jb这种傻瓜相机惯坏了）<br />junit就更无法接受，那时觉得程序员写业务代码天经地义，写测试就是自虐<br />于是就丢在一边不再看了（可是如今，这两样东西已经是我工作中最重要的工具了）<br /><br />daquan198163     2006-09-28 18:48<br />每次看到缺少测试的代码以及还在不停制造这种代码的程序员，我就会感叹前几年走的弯路：<br /><br />04年我经历了一个项目，20人在客户现场开发，开发到后期时，整个项目就像一座沙子堆起的城堡，稍有不慎就会跨塌<br />于是，程序员们开始变得消极、焦虑、易怒、神经质。。。。（更年期？？ ）<br /><br />消极体现在：不愿意修改bug，不愿意改代码以满足用户新的需求<br />焦虑：担心刚刚修改的代码会破坏已有功能，对下一个版本能否正常工作毫无信心，梦到测试人员发现其大量bug<br />易怒：经常对测试mm发火，私下里诅咒客户，抱怨别人弄坏了自己的程序<br />神经质：系统偶尔出现奇怪行为就胡乱猜测，改了不该改的地方导致更多奇怪现象出现<br /><br />那段日子简直不堪回首，是对程序员身心的双重折磨<br /><br />daquan198163     2006-09-28 19:06<br />自从单元测试（连带着轻量级架构和敏捷）走进我的世界，我发现我变得快乐了<br />编成不再是一件痛苦的事——至少不那么痛苦了——反而增添了很多乐趣和满足感<br /><br />勇气：单元测试是自动化的回归测试，她让我对自己的代码充满自信，每一个测试就像攀岩者钉在峭壁上的一个楔子，没有了程序衰退的担心，于是我可以大胆的重构、积极的拥抱变化；<br /><br />快速反馈：每写一段代码，我都可以在几秒钟之内看到他的运行效果，免去了打包、部署、重起server以及在一堆日志里找结果的工作，开发的效率极大提高；<br /><br />测试驱动设计：通过编写测试可以准确的理解需求、发现问题、发现接口，在不知不觉间做出最合理的设计；<br /><br />文档：测试是最好的详细设计文档，不会过时、可运行。<br />daquan198163     2006-09-28 19:31<br /><br />前面我提到，很多人最主要的是担心写测试会降低开发效率——写测试代码时间+写功能代码时间〉〉写功能代码时间<br />对于这个问题，论坛里以前有人讨论过了，marting也说明过，大致的意思是：如果软件开发的主要工作是敲键盘的话，那个命题是成立的。<br /><br />事实大家都知道，这个时间只占很小比例，但毕竟也是多用了，那么在哪儿又节省了呢，答案就是快速反馈。<br />快速反馈：每写一段代码，我都可以在几秒钟之内看到他的运行效果，免去了打包、重新部署以及在一堆日志里找结果的工作；<br /><br />写测试3+写代码3+跑测试看结果1=7<br />写代码3+打包2+重新部署10+用ie访问程序2+在一堆日志里找结果并确认5=22<br /><br />我一点也没夸张，那个was5重新部署一次真的很慢，有时还需要重起服务
          <br/>
          <span style="color:red;">
            <a href="http://daquan198163.javaeye.com/blog/22273#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 05 Sep 2006 14:32:35 +0800</pubDate>
        <link>http://daquan198163.javaeye.com/blog/22273</link>
        <guid>http://daquan198163.javaeye.com/blog/22273</guid>
      </item>
      <item>
        <title>项目中的一次典型TDD实践</title>
        <author>daquan198163</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://daquan198163.javaeye.com">daquan198163</a>&nbsp;
          链接：<a href="http://daquan198163.javaeye.com/blog/28687" style="color:red;">http://daquan198163.javaeye.com/blog/28687</a>&nbsp;
          发表时间: 2006年09月02日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          ##解决账单生成的一些需求和设计上的变化<br /><br />修改测试testIsReconFinished：对账可能跨天，以TransTime为准；<br /><br />增加测试testGenerateVOU101ReallyWithAReconFailure：只对对账成功（recon_status='2'）的交易生成清单；<br /><br />修改测试testFindReceivableVoucherTxesByRecons：查出对账对应的应收交易（只包括那些收款行在系统内的，并且是对账成功的）；<br /><br />修改VoucherSQL.xml使测试通过；<br /><br />&nbsp;&nbsp; &nbsp;<br /><br />##解决&ldquo;报文&lt;Payee_Subsidiary_Code&gt;&lt;/Payee_Subsidiary_Code&gt;是空的&rdquo;的问题<br />修改测试testFindReceivableVoucherTxesByRecons，断言p.getPayeeBankSubsidaryCode()不为空：<br />&nbsp;&nbsp;&nbsp; Assert.assertTrue(&quot;PayeeBankSubsidaryCode not null or blank&quot;,<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; p.getPayeeBankSubsidaryCode()!=null&amp;&amp;p.getPayeeBankSubsidaryCode().length()&gt;0);<br />修改VoucherSQL.xml使测试通过：把payeeBankSubsidiaryCode改成payeeBankSubsidaryCode&nbsp;<br />&nbsp;<br /><br /><p id="TBPingURL"></p>
          <br/>
          <span style="color:red;">
            <a href="http://daquan198163.javaeye.com/blog/28687#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 02 Sep 2006 00:45:00 +0800</pubDate>
        <link>http://daquan198163.javaeye.com/blog/28687</link>
        <guid>http://daquan198163.javaeye.com/blog/28687</guid>
      </item>
      <item>
        <title>拥抱敏捷</title>
        <author>daquan198163</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://daquan198163.javaeye.com">daquan198163</a>&nbsp;
          链接：<a href="http://daquan198163.javaeye.com/blog/28688" style="color:red;">http://daquan198163.javaeye.com/blog/28688</a>&nbsp;
          发表时间: 2006年09月02日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          &nbsp;&nbsp;&nbsp;&nbsp; 在我进入软件开发这个行业的第三个年头，我终于可以自信的说我是一名合格的程序员了，因为我确信我已经找到了开发高质量软件的那把钥匙&mdash;&mdash;敏捷方法。 <br />&nbsp;&nbsp;&nbsp;&nbsp;在这个从来不缺少新概念的软件世界里，它是与众不同的。敏捷方法不是那种能极大满足程序员好奇心和成就感的时髦技术，它是一种软件工艺、一种能让你高效率的写出高质量软件的开发方法；对于公司，它是一种务实的技术，能给公司、项目和客户带来直接效益和长远利益；对于程序员，它是一种专业高效的工作方法，能够获得真正的提升。 <br />&nbsp;&nbsp;&nbsp;&nbsp;现在，敏捷方法已经融入到了我每天的工作中，成为一种工作习惯和思维方式，并且每天都在发挥着强大的威力，以至于我觉得自己已经离不开它，如果现在让我改用.NET技术的话，我要做的第一件事就是搜索NUnit/NAnt/NMock/Spring.net等.NET领域里的敏捷工具和技术。<br /><br /><p id="TBPingURL"></p>
          <br/>
          <span style="color:red;">
            <a href="http://daquan198163.javaeye.com/blog/28688#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 02 Sep 2006 00:42:00 +0800</pubDate>
        <link>http://daquan198163.javaeye.com/blog/28688</link>
        <guid>http://daquan198163.javaeye.com/blog/28688</guid>
      </item>
      <item>
        <title>讨论《不要把Mock当作你的设计利器》</title>
        <author>daquan198163</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://daquan198163.javaeye.com">daquan198163</a>&nbsp;
          链接：<a href="http://daquan198163.javaeye.com/blog/21630" style="color:red;">http://daquan198163.javaeye.com/blog/21630</a>&nbsp;
          发表时间: 2006年08月02日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          ThoughtWorks李晓的这篇文章大家都看了吧，咋没人说点啥呢？<a href="http://news.csdn.net/n/20060726/93003.html" target="_blank">http://news.csdn.net/n/20060726/93003.html</a><br /><br />前些日子在这里讨论的很激烈的两个帖子——<br /><a href="http://forum.javaeye.com/viewtopic.php?t=20063" target="_blank">什么是“测试驱动开发”</a>和<a href="http://forum.javaeye.com/viewtopic.php?t=20035" target="_blank">再论要不要全程MockObject</a>，在这篇文章里似乎给出了一些回答，请参与过那两个讨论的相关人员发表下最新的观点！
          <br/>
          <span style="color:red;">
            <a href="http://daquan198163.javaeye.com/blog/21630#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 02 Aug 2006 16:01:02 +0800</pubDate>
        <link>http://daquan198163.javaeye.com/blog/21630</link>
        <guid>http://daquan198163.javaeye.com/blog/21630</guid>
      </item>
      <item>
        <title>持续集成（持续构建）服务器luntbuild的一些配置细节</title>
        <author>daquan198163</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://daquan198163.javaeye.com">daquan198163</a>&nbsp;
          链接：<a href="http://daquan198163.javaeye.com/blog/28689" style="color:red;">http://daquan198163.javaeye.com/blog/28689</a>&nbsp;
          发表时间: 2006年07月08日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          &nbsp; 安装（官方文档参见http://luntbuild.javaforge.com/docs/installguide/installguide.html#installer）：<br /><br />1、下载一份luntbuild-xxx-installer.jar，然后java -jar luntbuild-xxx-installer.jar 运行安装向导；<br /><br />2、安装过程中指定数据库属性、deploy位置，应该不会有问题；<br /><br />3、到lunt_home\db找到对应数据库的脚本，建库、建表；<br /><br />4、启动tomcat(如果第二步中没有指定部署位置，这时需要先copy lunt_home\luntbuild.war到tomcat\webapps)；<br /><br />5、启动后，你应该可以访问http://localhost:8080/luntbuild了，用户名/秘码都是luntbuild<br /><br />配置：<br /><br />6、登录进去后，点&ldquo;Users&rdquo;页签，新建一些用户，用户名最好和CVS一样，这样就免得设置luntbuild登录用户与CVS用户的对应关系了；<br /><br />7、登录进去后，点&ldquo;Projects&rdquo;页签，新建一个项目，没什么好说的，填个名字就可以，其他的后面在惠来设置；<br /><br />8、选中刚建好的项目，点&ldquo; VCS adaptors&rdquo;页签，新建一个CVS适配器，仿照如下填写<br /><br />Cvs root=&quot;:pserver:vli@192.168.0.140:/ciq_epayment&quot;<br /><br />Cvs password=&quot;****&quot;<br /><br />Is cygwin cvs?=&quot; yes'<br /><br />Disable &quot;-S&quot; option for log command?=&quot; yes&quot;<br /><br />Disable history command?=&quot; yes&quot;<br /><br />Path for cvs executable=&quot; C:\Program Files\GNU\WinCvs 1.3&quot;<br /><br />9、新建modules如下：<br /><br />Source path=&quot;ciq_epayment/src/ciq&quot;<br /><br />10、点&ldquo; Builders&rdquo;页签，新建一个Ant Builder，仿照如下填写：<br /><br />Build script path=&quot;ciq_epayment\src\ciq\build.xml&quot;<br /><br />11、点&ldquo;Schedules&rdquo;页签，新建一个Ant Builder，仿照如下填写：<br /><br />Next build version：Project1-${#currentDay=system.(year+&quot;-&quot;+month+&quot;-&quot;+dayOfMonth), #lastDay=project.var[&quot;day&quot;].setValue(#currentDay), #dayIterator=project.var[&quot;dayIterator&quot;].intValue, project.var[&quot;dayIterator&quot;].setIntValue(#currentDay==#lastDay?#dayIterator+1:1), #currentDay}.${project.var[&quot;dayIterator&quot;]}<br /><br />Trigger type=&quot;simple&quot;<br /><br />Repeat interval(minutes)=&quot;10&quot;<br /><br />Build necessary condition=&quot;vcsModified or dependencyNewer&quot;<br /><br />Associated builders:选择刚建好的builder<br /><br />Label strategy:选&quot;lable if success&quot;<br /><br />其他属性都用缺省的；<br /><br />12、点&quot;Properties&quot;页签，设置系统属性：<br /><br />Url to access luntbuild servlet：http://192.168.0.1:8080/luntbuild/app.do<br /><br />SMTP user、SMTP password、Email address of the sender都设置好，系统就可以发诱奸通知了，前面的url将出现在正文中，所以需要根据你的网络拓扑酌情设置；<br /><br />其他属性都可以顾名思义，可以不设；<br />--------------------------------------------------------------------------------<br /><br />发不出邮件的问题：<br />When a build finishes, you get the following error message:<br />NoSuchProviderException: smtp...<br /><br />This can be solved by removing activation.jar and mail.jar from common/lib directory. After removing the two files, you will need to restart JIRA.<br /><br />这是google到的解决JIRA类似问题的办法，这里也适用。<br /><br /><p id="TBPingURL"></p>
          <br/>
          <span style="color:red;">
            <a href="http://daquan198163.javaeye.com/blog/28689#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 08 Jul 2006 18:22:00 +0800</pubDate>
        <link>http://daquan198163.javaeye.com/blog/28689</link>
        <guid>http://daquan198163.javaeye.com/blog/28689</guid>
      </item>
      <item>
        <title>工作流的一些想法</title>
        <author>daquan198163</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://daquan198163.javaeye.com">daquan198163</a>&nbsp;
          链接：<a href="http://daquan198163.javaeye.com/blog/28690" style="color:red;">http://daquan198163.javaeye.com/blog/28690</a>&nbsp;
          发表时间: 2006年03月22日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>亮点：任务分类、任务预览、</p><p>缺点：</p><p>工作流系统与业务系统互操作性差，难以同步（数据）</p><p>工作流定义的更新、版本控制、平滑过渡问题</p><p>改进：</p><p>流程仿真：使得用户设计出一个流程后，不需要编写驱动就可以对其进行调试，验证流程的正确性；</p><p>支持动态语言：如脚本语言（BeanShell或Groovy），进一步提高业务的可配置性、简化驱动；</p><p>新的驱动架构：去除对特定Web框架的绑定，方便驱动开发；</p><p>支持BPEL：方便集成外部和遗留应用，使其成为EAI工具和SOA平台。</p><p>**</p><p>把业务数据序列化，存储为流程相关数据，来简化设计。<br /></p><br /><br /><p id="TBPingURL"></p>
          <br/>
          <span style="color:red;">
            <a href="http://daquan198163.javaeye.com/blog/28690#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 22 Mar 2006 20:52:00 +0800</pubDate>
        <link>http://daquan198163.javaeye.com/blog/28690</link>
        <guid>http://daquan198163.javaeye.com/blog/28690</guid>
      </item>
      <item>
        <title>给同事们讲单元测试</title>
        <author>daquan198163</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://daquan198163.javaeye.com">daquan198163</a>&nbsp;
          链接：<a href="http://daquan198163.javaeye.com/blog/28691" style="color:red;">http://daquan198163.javaeye.com/blog/28691</a>&nbsp;
          发表时间: 2006年03月22日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>构思了一天，只写出一页word提纲(如下)，不过心里还是有了些把握。</p><h2 style="margin: 13pt 0cm;"><span style="font-family: 黑体;">什么是单元测试？</span></h2><p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt; text-indent: -21pt; line-height: 150%;"><span lang="EN-US" style="font-size: 12pt; font-family: Wingdings;">l</span><span new="" times="" mso-hansi-font-family="" roman="" style="font-size: 12pt; font-family: 宋体;">单元测试是对<strong>一个独立的工作单元</strong>进行的测试</span><span lang="EN-US" style="font-size: 12pt;"></span></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt; text-indent: -21pt; line-height: 150%;"><span lang="EN-US" style="font-size: 12pt; font-family: Wingdings;">l</span><span new="" times="" mso-hansi-font-family="" roman="" style="font-size: 12pt; font-family: 宋体;">单元测试是测试其它程序的程序，由开发人员编写</span><span lang="EN-US" style="font-size: 12pt;"></span></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt; text-indent: -21pt; line-height: 150%;"><span lang="EN-US" style="font-size: 12pt; font-family: Wingdings;">l<font face="宋体">JUnit</font></span><span new="" times="" mso-hansi-font-family="" roman="" style="font-size: 12pt; font-family: 宋体;">是编写</span><span lang="EN-US" style="font-size: 12pt;"><font face="Times New Roman">java</font></span><span new="" times="" mso-hansi-font-family="" roman="" style="font-size: 12pt; font-family: 宋体;">单元测试的标准框架</span></p><h2 style="margin: 13pt 0cm;"><span style="font-family: 黑体;">为什么要进行&ldquo;烦人&rdquo;的单元测试？</span></h2><p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt; text-indent: -21pt; line-height: 150%;"><span lang="EN-US" style="font-size: 12pt; font-family: Wingdings;">l</span><span new="" times="" mso-hansi-font-family="" roman="" style="font-size: 12pt; font-family: 宋体;">具有很高的测试覆盖度</span><span lang="EN-US" style="font-size: 12pt;"></span></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt; text-indent: -21pt; line-height: 150%;"><span lang="EN-US" style="font-size: 12pt; font-family: Wingdings;">l</span><span new="" times="" mso-hansi-font-family="" roman="" style="font-size: 12pt; font-family: 宋体;">回归测试，保护你的程序，防止她衰退、被破坏</span><span lang="EN-US" style="font-size: 12pt;"></span></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt; text-indent: -21pt; line-height: 150%;"><span lang="EN-US" style="font-size: 12pt; font-family: Wingdings;">l</span><span new="" times="" mso-hansi-font-family="" roman="" style="font-size: 12pt; font-family: 宋体;">给你修改、重构你的程序的勇气，提高团队士气</span><span lang="EN-US" style="font-size: 12pt;"></span></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt; text-indent: -21pt; line-height: 150%;"><span lang="EN-US" style="font-size: 12pt; font-family: Wingdings;">l</span><span new="" times="" mso-hansi-font-family="" roman="" style="font-size: 12pt; font-family: 宋体;">帮助你做出好的设计</span><span lang="EN-US" style="font-size: 12pt;"></span></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt; text-indent: -21pt; line-height: 150%;"><span lang="EN-US" style="font-size: 12pt; font-family: Wingdings;">l</span><span new="" times="" mso-hansi-font-family="" roman="" style="font-size: 12pt; font-family: 宋体;">是最好的文档</span></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt; text-indent: -21pt; line-height: 150%;"><span new="" times="" mso-hansi-font-family="" roman="" style="font-size: 12pt; font-family: 宋体;"></span></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt; text-indent: -21pt; line-height: 150%;"><span new="" times="" mso-hansi-font-family="" roman="" style="font-size: 12pt; font-family: 宋体;"></span></p><p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt; text-indent: -21pt; line-height: 150%;"><span new="" times="" mso-hansi-font-family="" roman="" style="font-size: 12pt; font-family: 宋体;"></span><span new="" ar-sa="" zh-cn="" mso-ansi-language="" mso-bidi-language="" mso-ascii-font-family="" times="" en-us="" mso-hansi-font-family="" roman="" style="font-size: 12pt; font-family: 宋体;" mso-fareast-language=""><span lang="EN-US" style="font-size: 12pt; font-family: Wingdings;">l</span>非常有趣、</span><span lang="EN-US" 宋="" mso-fareast-font-family="" mso-font-kerning="" ar-sa="" mso-bidi-language="" mso-fareast-language="" mso-ansi-language="" en-us="" zh-cn="" roman="" times="" new="" style="font-size: 12pt;">TDD</p><p><span lang="EN-US" 宋="" mso-fareast-font-family="" mso-font-kerning="" ar-sa="" mso-bidi-language="" mso-fareast-language="" mso-ansi-language="" en-us="" zh-cn="" roman="" times="" new="" style="font-size: 12pt;">上午等到会议室空出来后，就开始准备设备，然后通知大伙，没想到好多人都来听了。</p><p>于是开始按照提纲展开话题，由于他们对这个都了解很少，短时间理解起来还是有问题的，我就尽量的联系实际、运用比喻，好多人的表情也从开始的凝重变成了微笑，这招果然见效了。</p><p>讲完了大家开始提问，爱文上来提出一些对单元测试的质疑，这个最不好回答，因为问题本身不太具体，我用了感觉好，但这么解释感觉自己是搞推销的：）</p><p>关姐提出是否由不同的人写测试效果会更好，我基本持给了否定态度。不过从这个问题看出她对单元测试有些见解的。</p><p>果然，会后她先给了我夸奖和鼓励，然后提出了两条很好的建议。</p><p>低估她了：）</p><br /><br /><p id="TBPingURL"></p>
          <br/>
          <span style="color:red;">
            <a href="http://daquan198163.javaeye.com/blog/28691#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 22 Mar 2006 20:51:00 +0800</pubDate>
        <link>http://daquan198163.javaeye.com/blog/28691</link>
        <guid>http://daquan198163.javaeye.com/blog/28691</guid>
      </item>
      <item>
        <title>迎接挑战：把系统迁移到Java5平台</title>
        <author>daquan198163</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://daquan198163.javaeye.com">daquan198163</a>&nbsp;
          链接：<a href="http://daquan198163.javaeye.com/blog/28692" style="color:red;">http://daquan198163.javaeye.com/blog/28692</a>&nbsp;
          发表时间: 2006年03月05日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>上午在CSDN上看了《<strong>迎接挑战：沃尔玛网站如何迁移到Java 1.5平台</strong>》<a href="http://news.csdn.net/news/newstopic/22/22233.shtml">http://news.csdn.net/news/newstopic/22/22233.shtml</a></p><p>碰巧又有个人在自己的blog里面宣称《<a href="http://blog.csdn.net/liigo/archive/2005/06/15/395223.aspx">多家权威机构、几十篇权威证据证明：Java比C++更快。如果反对，请举反证。</a> <script language="javascript" type="text/javascript"></script> 》<a href="http://blog.csdn.net/liigo/archive/2005/06/15/395223.aspx">http://blog.csdn.net/liigo/archive/2005/06/15/395223.aspx</a>，里面提到：根据SUN的数据显示，j2se1.5在各种单项性能上平均比j2se1.4.2高出10%到30%，而在复杂程序的综合性能上则是j2se1.4的三倍左右，于是我也有了迁移的想法，说干就干！</p><p>到sun的网站下载了jdk5.0，</p><p>安装以后修改环境变量JAVA_HOME指向jdk5.0安装目录，</p><p>然后修改我的build.xml，把两处target=&quot;1.4&quot;替换程target=&quot;1.5&quot;</p><p>运行命令：ant compile，报错说jre/lib下的一个jar包是坏的&hellip;&hellip;&hellip;&hellip;</p><p>折腾半天也没办法解决，天哪，我的普通代码没有用jdk1.4的特殊功能呀，难道sun把jdk改得面目全非了？不太可能！</p><p>问老麻，他又是想都没想决一大堆原因，语气还非常肯定，总之就是简单的程序也可能不能兼容。</p><p>对于他的说法我表示了怀疑，然后去吃饭！</p><p>到了兵工，看见chen姐和tangjia在那里等面呢，哈哈，两个美女与我共进午餐，心情一下好了起来，迁移jdk1.5的事儿一下子抛到九霄云外了（虽然今天的拉面很难吃：）</p><p>回来以后冷静思考了一下，不可能是我的程序问题，决定重装JDK（因为刚才装的时候为了节省空间值选了一部分组建），这次完全按照默认选项来，结果还真的运行正常了，跑同一个测试还真比jdk1.4.2快了几十秒。看来sun的安装程序做的有问题！</p><p>只是编译时有提示信息：</p><p>注意： 某些输入文件使用了未经检查或不安全的操作。<br />注意： 要了解详细信息，请使用 -Xlint:unchecked 重新编译</p><p>虽然不影响运行，但是看着不爽。根据编译器的提示信息，应该给javac架一个参数-Xlint:unchecked就行了，可是在build.xml里怎么加呢，又折腾了半天，最后终以试通了</p><p><strong>&lt;target name=&quot;compile&quot; description=&quot;Compile main source tree java files&quot;&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;mkdir dir=&quot;${build.dir}/classes&quot;/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;javac destdir=&quot;${build.dir}/classes&quot; target=&quot;1.5&quot; srcdir=&quot;${src.dir}&quot; debug=&quot;true&quot;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; deprecation=&quot;false&quot; optimize=&quot;false&quot; failonerror=&quot;true&quot;&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#ff3366">&lt;compilerarg value=&quot;-Xlint:unchecked&quot;/&gt;</font><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;sourcepath path=&quot;${src.dir}&quot;/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;classpath refid=&quot;classpath&quot;/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/javac&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- compile tests --&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;mkdir dir=&quot;${test.dir}/classes&quot;/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;javac destdir=&quot;${test.dir}/classes&quot; target=&quot;1.5&quot; debug=&quot;true&quot;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; deprecation=&quot;false&quot; optimize=&quot;false&quot; failonerror=&quot;true&quot;&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;src path=&quot;${test.src}&quot;/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;classpath&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;path refid=&quot;classpath&quot;/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;path location=&quot;${build.dir}/classes&quot;/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/classpath&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/javac&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- Copy hibernate mapping files to ${build.dir}/classes --&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;copy todir=&quot;${build.dir}/classes&quot;&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;fileset dir=&quot;${src.dir}&quot; includes=&quot;**/*.hbm.xml&quot;/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/copy&gt;<br />&nbsp;&lt;/target&gt;</strong></p><p>原来这样加参数，看来明天要对ant彻底的研究一下了，哈哈</p><br /><br /><p id="TBPingURL"></p>
          <br/>
          <span style="color:red;">
            <a href="http://daquan198163.javaeye.com/blog/28692#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 05 Mar 2006 21:38:00 +0800</pubDate>
        <link>http://daquan198163.javaeye.com/blog/28692</link>
        <guid>http://daquan198163.javaeye.com/blog/28692</guid>
      </item>
      <item>
        <title>解决dao层单元测试问题</title>
        <author>daquan198163</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://daquan198163.javaeye.com">daquan198163</a>&nbsp;
          链接：<a href="http://daquan198163.javaeye.com/blog/28693" style="color:red;">http://daquan198163.javaeye.com/blog/28693</a>&nbsp;
          发表时间: 2006年03月05日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>其实问题已经存在很久，自从使用了Open Session In Test模式后，dao的单元测试就出现了奇怪行为&mdash;&mdash;数据的修改操作不能提交事务，由此导致了一些&quot;违反唯一约束条件&quot;的错误。</p><p>由于当时只有一个测试报了错，我就偷懒把它屏蔽掉了。</p><p>由于最近老给同事们讲单元测试、要求他们严格测试，越发觉得心虚了，于是决定把欠下的账还上。</p><p>昨天下午一直鼓捣到8点多了，越改越乱，还是找不到原因，情绪很低落。</p><p>今天重新振作精神，一个小时就搞定了，哈哈哈哈</p><p>原来，事情是这样的：</p><p>protected void setUp() throws Exception {<br />&nbsp;&nbsp;&nbsp; log = LogFactory.getLog(WorkflowDriverDAOTest.class);<br />&nbsp;&nbsp;&nbsp; super.setUp();</p><p>&nbsp;&nbsp;&nbsp; dao = (WorkflowDriverDAO) ctx.getBean(&quot;workflowDriverDAO&quot;);</p><p>&nbsp;&nbsp;&nbsp; ............</p><p>&nbsp;&nbsp;&nbsp; dao.saveWorkflowDriver(wd);<br />}</p><p>protected void tearDown() throws Exception {<br />&nbsp;&nbsp;&nbsp; try {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong>dao.removeWorkflowDriver(wd.getFlowDriverID());<br /></strong>&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp; catch (Throwable d) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log.error(&quot;&gt;&gt;&gt;&gt;&gt;&quot; + d.getMessage());<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; super.tearDown();<br />&nbsp;&nbsp;&nbsp; dao = null;<br />}</p><p>黑体字那句话总是不能提交事务，结果就是插入的多个WorkflowDriver的WriteURL重复了，导致&quot;违反唯一约束条件&quot;错误。</p><p>可是更奇怪的是，并不是每个测试都错，而且报错位置总在一个查询方法调用处，我灵机一动：难道查询的操作会导致之前的那些更新操作提交？</p><p>一试验，果然如此，于是我在tearDown里面的删除操作后面加了一个查询的操作，问题就解决了。</p><p>protected void tearDown() throws Exception {<br />&nbsp;&nbsp;&nbsp; try {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dao.removeWorkflowDriver(wd.getFlowDriverID());</p><p><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log.debug(&quot;Drivers num[&quot; + dao.getAllWorkflowDrivers().size() +&nbsp;&quot;]&quot;);<br /></strong>&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp; catch (Throwable d) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log.error(&quot;&gt;&gt;&gt;&gt;&gt;&quot; + d.getMessage());<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; super.tearDown();<br />&nbsp;&nbsp;&nbsp; dao = null;<br />}</p><br /><br /><p id="TBPingURL"></p>
          <br/>
          <span style="color:red;">
            <a href="http://daquan198163.javaeye.com/blog/28693#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 05 Mar 2006 21:36:00 +0800</pubDate>
        <link>http://daquan198163.javaeye.com/blog/28693</link>
        <guid>http://daquan198163.javaeye.com/blog/28693</guid>
      </item>
      <item>
        <title>解决了Hibernate+Spring+Struts架构使用OpenSessionInView的问题</title>
        <author>daquan198163</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://daquan198163.javaeye.com">daquan198163</a>&nbsp;
          链接：<a href="http://daquan198163.javaeye.com/blog/28694" style="color:red;">http://daquan198163.javaeye.com/blog/28694</a>&nbsp;
          发表时间: 2006年03月05日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>昨天caosq向我报告他的OpenSessionInView过滤器不起作用，我检查了半天，配置、编码没有一点问题，真是一筹莫展！</p><p>中 午回来看见huangsongsheng在给他们做同样的检查，了解到zhengping也遇到同样的问题，唯独小黄没事，原来他和我一样用了 SpringMVC，难道问题出在struts上？那yangshaoyan的ERM怎么没出错呢，仔细询问之下才知道，她根本没用上这个特性，还用着笨招<img src="http://www.blogdriver.com/jsp/face/2.gif" alt="" />。</p><p>马上google了一下，哈哈我真是个天才，一下就被我找到了7天前robbin发的帖子，他分析了原因并且给出了一个修改spring代码的解决办法，更绝的是后边的回帖给出了一个只要改配置文件就ok的办法</p><p><a href="http://forum.javaeye.com/viewtopic.php?p=88868#88868">http://forum.javaeye.com/viewtopic.php?p=88868#88868</a></p><p>马上让老曹试验了一下，果然好使。</p><p>最后，办法就是：不要在ContextLoaderPlugIn里面加入applicationContext.xml，只要加入你的action-servlet.xml。</p><br /><br /><p id="TBPingURL"></p>
          <br/>
          <span style="color:red;">
            <a href="http://daquan198163.javaeye.com/blog/28694#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 05 Mar 2006 21:34:00 +0800</pubDate>
        <link>http://daquan198163.javaeye.com/blog/28694</link>
        <guid>http://daquan198163.javaeye.com/blog/28694</guid>
      </item>
      <item>
        <title>发现springmodules validation的问题</title>
        <author>daquan198163</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://daquan198163.javaeye.com">daquan198163</a>&nbsp;
          链接：<a href="http://daquan198163.javaeye.com/blog/28695" style="color:red;">http://daquan198163.javaeye.com/blog/28695</a>&nbsp;
          发表时间: 2006年03月05日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          the solution for the error &quot;does not support command class&quot; error is that your validator xml form name does not match the class name (w/lower case 1st letter) <br />My redux redux is: <br />for a domain/entity class named SomeDumbClass: <br />?	The commandClass in the Spring servlet config is com.foo.bar.SomeDumbClass <br />?	The form name in the validation file must be someDumbClass <br />?	The form name in the &lt;v:javascript&gt; tag in the JSP must be someDumbClass <br />? The name in the HTML form tag must be someDumbClassForm and th