<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>IT民工</title>
    <description></description>
    <link>http://lovevirus.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>Identity Map</title>
        <author>lovevirus</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lovevirus.javaeye.com">lovevirus</a>&nbsp;
          链接：<a href="http://lovevirus.javaeye.com/blog/110503" style="color:red;">http://lovevirus.javaeye.com/blog/110503</a>&nbsp;
          发表时间: 2007年08月09日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp; </p>
<p><span style="mso-hansi-font-family: 宋体; mso-bidi-font-family: 宋体">概念<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoPlainText"><span style="mso-hansi-font-family: 宋体; mso-bidi-font-family: 宋体">通过在<span lang="EN-US">map</span>中保存所有的加载对象，确保对象只加载一次，每次查找对象都先去<span lang="EN-US">map</span>中查找是否有这个对象，如果有就返回，没有才去加载<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoPlainText"><span style="mso-hansi-font-family: 宋体; mso-bidi-font-family: 宋体">场景<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoPlainText"><span lang="EN-US" style="mso-hansi-font-family: 宋体; mso-bidi-font-family: 宋体">1</span><span style="mso-hansi-font-family: 宋体; mso-bidi-font-family: 宋体">、管理从数据库加载的对象，使之持久对象在内存中始终唯一<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoPlainText"><span lang="EN-US" style="mso-hansi-font-family: 宋体; mso-bidi-font-family: 宋体">2</span><span style="mso-hansi-font-family: 宋体; mso-bidi-font-family: 宋体">、作为从数据库加载对象的缓存器，可以避免每次读数据时候都要从数据库加载<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoPlainText"><span style="mso-hansi-font-family: 宋体; mso-bidi-font-family: 宋体">应用<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoPlainText"><span style="mso-hansi-font-family: 宋体; mso-bidi-font-family: 宋体">单数据库简单用法：对每个表都有一个对应的<span lang="EN-US">map</span>，当需要从数据库中加载一个对象的时候，你首先核实一下<span lang="EN-US">map</span>，如果<span lang="EN-US">map</span>中存在一个和你所需要加载的对象相等的一个对象，直接返回这个对象，如果没有，查找数据库，并且把加载出来的对象放到<span lang="EN-US">map</span>中。<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoPlainText"><span style="mso-hansi-font-family: 宋体; mso-bidi-font-family: 宋体">注意点<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoPlainText"><span lang="EN-US" style="mso-hansi-font-family: 宋体; mso-bidi-font-family: 宋体">1</span><span style="mso-hansi-font-family: 宋体; mso-bidi-font-family: 宋体">、关键字的选择<span lang="EN-US">:</span>以表名作为<span lang="EN-US">map</span>的关键字，以主键作为<span lang="EN-US">map</span>中各个对象的关键字<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoPlainText"><span lang="EN-US" style="mso-hansi-font-family: 宋体; mso-bidi-font-family: 宋体">2</span><span style="mso-hansi-font-family: 宋体; mso-bidi-font-family: 宋体">、<span lang="EN-US">Explicit or Generic</span>：<span lang="EN-US">Generic</span>是对每类对象都采用一个方法，比如<span lang="EN-US">find(&quot;Person&quot;, 1)</span>，其中一个输入参数制定是什么类型的对象，好处在新增加一个<span lang="EN-US">map</span>不需要重新些一个方法。<span lang="EN-US">Explicit</span>是对每类对象分别采用不同的方法，比如：<span lang="EN-US">findPerson(1)</span>，好处比较直观，如果通过泛型来做的，也可以做到新增一个<span lang="EN-US">map</span>不用重新一个方法。<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoPlainText"><span lang="EN-US" style="mso-hansi-font-family: 宋体; mso-bidi-font-family: 宋体">3</span><span style="mso-hansi-font-family: 宋体; mso-bidi-font-family: 宋体">、<span lang="EN-US">map</span>的数量：每类对象对应一个<span lang="EN-US">map</span>，如果不同类的每个对象都有一种标识能区别的，可以用次方法，有利于管理<span lang="EN-US">map</span>，而且增加一类对象的时候也不需要在家<span lang="EN-US">map</span>；整个<span lang="EN-US">session</span>对应一个<span lang="EN-US">map</span>，比较符合数据库的设计，每个<span lang="EN-US">map</span>用表名作为<span lang="EN-US">key</span>，比较清晰，但是比较难处理的是继承树的处理。<span lang="EN-US"><o:p></o:p></span></span></p>
<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-hansi-font-family: 宋体; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">4</span><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-ascii-font-family: 'Times New Roman'">、存放位置：如果存放在</span><span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-hansi-font-family: 宋体; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">processContext</span><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-ascii-font-family: 'Times New Roman'">，必须关注的是必须确保不同</span><span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-hansi-font-family: 宋体; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">session</span><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-ascii-font-family: 'Times New Roman'">只能得到他自己的对象。还有就是对</span><span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-hansi-font-family: 宋体; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">map</span><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-ascii-font-family: 'Times New Roman'">要进行事务性的保护，其中涉及到两个问题，第一个就是尽管你是用关系型数据库来保存数据，但是你必须把加载的数据作为对象放在事务性缓存中，第二个是那些只读对象，因为不需要进行修改，所以可以在整个</span><span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-hansi-font-family: 宋体; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">processContext</span><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-ascii-font-family: 'Times New Roman'">中都可以使用，有种方法是只读对象的</span><span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-hansi-font-family: 宋体; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">map</span><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-ascii-font-family: 'Times New Roman'">放在</span><span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-hansi-font-family: 宋体; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">processContext</span><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-ascii-font-family: 'Times New Roman'">中，可修改对象的</span><span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-hansi-font-family: 宋体; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">map</span><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-ascii-font-family: 'Times New Roman'">放在</span><span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-hansi-font-family: 宋体; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">session</span><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-ascii-font-family: 'Times New Roman'">中。</span>
          <br/>
          <span style="color:red;">
            <a href="http://lovevirus.javaeye.com/blog/110503#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/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 09 Aug 2007 11:30:23 +0800</pubDate>
        <link>http://lovevirus.javaeye.com/blog/110503</link>
        <guid>http://lovevirus.javaeye.com/blog/110503</guid>
      </item>
      <item>
        <title>UseCase</title>
        <author>lovevirus</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lovevirus.javaeye.com">lovevirus</a>&nbsp;
          链接：<a href="http://lovevirus.javaeye.com/blog/107299" style="color:red;">http://lovevirus.javaeye.com/blog/107299</a>&nbsp;
          发表时间: 2007年07月31日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p class="MsoNormal" style="line-height: 150%;"><span lang="EN-US" style="line-height: 150%; font-family: 宋体;">Usecase</span><span style="line-height: 150%; font-family: 宋体;">的概念<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal" style="text-indent: 21pt; line-height: 150%;"><span lang="EN-US" style="line-height: 150%; font-family: 宋体;">Usecase</span><span style="line-height: 150%; font-family: 宋体;">功能：反映了系统的功能性需求。描述了系统的活动者和系统的交互情况。<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal" align="left" style="text-align: left; line-height: 150%;"><span style="line-height: 150%; font-family: 宋体;">一个<span lang="EN-US">Usecase</span>表示一组具有共同使用目标的消息序列（</span><strong><span lang="EN-US" style="line-height: 150%; font-family: 宋体;">scenario</span></strong><span style="line-height: 150%; font-family: 宋体;">），其中消息序列指的是描述活动者与系统交互的一组有序的步骤。消息序列包括两种：一个主要成功消息序列（</span><strong><span lang="EN-US" style="line-height: 150%; font-family: 宋体;">main success scenario</span></strong><span style="line-height: 150%; font-family: 宋体;">）和多个例外（</span><strong><span lang="EN-US" style="line-height: 150%; font-family: 宋体;">extensions</span></strong><span style="line-height: 150%; font-family: 宋体;">）。</span><span lang="EN-US" style="line-height: 150%; font-family: 宋体;"><o:p></o:p></span></p>
<p class="MsoNormal" style="line-height: 150%;"><span lang="EN-US" style="line-height: 150%; font-family: 宋体;">Usecase</span><span style="line-height: 150%; font-family: 宋体;">图<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal" style="line-height: 150%;"><span lang="EN-US" style="line-height: 150%; font-family: 宋体;"><span style="">&nbsp;&nbsp;&nbsp; </span>Usecase</span><span style="line-height: 150%; font-family: 宋体;">图只是简单地描述每一个用例的交互情况，主要目的是明确用例与活动者的关系和系统的边界，一般包括如下两个方面：<span lang="EN-US">1</span>、用例是和那些活动者交互；<span lang="EN-US">2</span>、用例包括那些其他的用例。<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal" style="line-height: 150%;"><span lang="EN-US" style="line-height: 150%; font-family: 宋体;">Usecase</span><span style="line-height: 150%; font-family: 宋体;">描述<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal" style="line-height: 150%;"><span lang="EN-US" style="line-height: 150%; font-family: 宋体;"><span style="">&nbsp;&nbsp;&nbsp; </span></span><span style="line-height: 150%; font-family: 宋体;">主要描述</span><strong><span lang="EN-US" style="line-height: 150%; font-family: 宋体;">main success scenario</span></strong><span style="line-height: 150%; font-family: 宋体;">和<strong><span lang="EN-US">extensions</span>，</strong>其中<strong><span lang="EN-US">main success scenario</span></strong>由一些具有数字序号标识的步骤组成，每一步只是简单陈诉一下，但是必须指定这一步是谁执行的，一般来说不是活动者就是系统。其中<strong><span lang="EN-US">extensions</span></strong>描述的是<span lang="EN-US">MSS</span>中的某一步在一定的条件不能执行这一步的后续步骤，反而直接转入的额外的活动者与系统的交互步骤。一般是由<span lang="EN-US">MSS</span>中的数字序号标识开头。</span><span lang="EN-US" style="line-height: 150%; font-family: 宋体;"><o:p></o:p></span></p>
<p class="MsoNormal" style="line-height: 150%;"><span lang="EN-US">Usecase</span><span style="font-family: 宋体;">与</span><span lang="EN-US">Usestory</span><span style="font-family: 宋体;">的区别</span></p>
<p class="MsoNormal" style="line-height: 150%;"><span lang="EN-US">User Story</span><span style="font-family: 宋体;">描述了迭代中的某一块小特征，应该</span><span lang="EN-US">Small</span><span style="font-family: 宋体;">（小规模），</span><span lang="EN-US">Testable</span><span style="font-family: 宋体;">（可测试），</span><span lang="EN-US">Valuable</span><span style="font-family: 宋体;">（有价值）。</span></p>
<p class="MsoNormal" style="line-height: 150%;"><span lang="EN-US">Valuable</span><span style="font-family: 宋体;">是说</span><span lang="EN-US">User Story</span><span style="font-family: 宋体;">能够给利益相关人员提供明确的商业价值。往往表现为满足了用户某方面的预期。</span></p>
<p class="MsoNormal" style="line-height: 150%;"><span lang="EN-US">Testable</span><span style="font-family: 宋体;">是说</span><span lang="EN-US">User Story</span><span style="font-family: 宋体;">可以给验收标准提供明确的上下文。也就是说这个</span><span lang="EN-US">User Story</span><span style="font-family: 宋体;">能够对程序的外部行为产生影响，比如界面，日志文件等用户看得见摸得着的东西。</span></p>
<p class="MsoNormal" style="line-height: 150%;"><span lang="EN-US">Small</span><span style="font-family: 宋体;">是说</span><span lang="EN-US">User Story</span><span style="font-family: 宋体;">应该足够小，在商业过程中也就一步或者相关联的几步。小的目的是更好地符合迭代式开发的风格，能够在一个迭代内完成。</span></p>
<p class="MsoNormal" style="line-height: 150%;"><span style="font-family: 宋体;">这三个特性直接支撑了敏捷开发的一些核心价值：给客户提供价值（对应</span><span lang="EN-US">valuable</span><span style="font-family: 宋体;">），保证质量（对应</span><span lang="EN-US">testable</span><span style="font-family: 宋体;">）和快速响应变化（</span><span lang="EN-US">small</span><span style="font-family: 宋体;">）。</span><span lang="EN-US" style="line-height: 150%; font-family: 宋体;"><o:p></o:p></span></p>
<p class="MsoNormal" style="line-height: 150%;"><span lang="EN-US" style="line-height: 150%; font-family: 宋体;">User Story</span><span style="line-height: 150%; font-family: 宋体;">与传统的<span lang="EN-US">Use Case</span>有一些不同。某些<span lang="EN-US">Use Case</span>的书籍中提倡写出不同层次的<span lang="EN-US">Use Case</span>，有<span lang="EN-US">High Level</span>的，有<span lang="EN-US">Medium Level</span>的，也有<span lang="EN-US">Low Level</span>的。从某种程度上来说，<span lang="EN-US">High Level</span>相当于<span lang="EN-US">Goal</span>，<span lang="EN-US">Medium Level</span>相当于<span lang="EN-US">User Story</span>，而<span lang="EN-US">Low Level</span>相当于<span lang="EN-US">Acceptance Criteria</span>。<span lang="EN-US"><o:p></o:p></span></span></p>
          <br/>
          <span style="color:red;">
            <a href="http://lovevirus.javaeye.com/blog/107299#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/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 31 Jul 2007 10:15:24 +0800</pubDate>
        <link>http://lovevirus.javaeye.com/blog/107299</link>
        <guid>http://lovevirus.javaeye.com/blog/107299</guid>
      </item>
      <item>
        <title>《针对Java程序员的UML概述》一书</title>
        <author>lovevirus</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lovevirus.javaeye.com">lovevirus</a>&nbsp;
          链接：<a href="http://lovevirus.javaeye.com/blog/95566" style="color:red;">http://lovevirus.javaeye.com/blog/95566</a>&nbsp;
          发表时间: 2007年06月29日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          &nbsp;
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">看了一下《针对</span><span lang="EN-US" style="mso-bidi-font-size: 10.5pt">Java</span><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">程序员的</span><span lang="EN-US" style="mso-bidi-font-size: 10.5pt">UML</span><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">概述》，突然发现一章讲编程需要注意的原则，列了出来五个原则。</span><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">单一职责原则：一个类应当只有一个改变的原则。这个是初学者很容易犯的毛病，把一个类中放了</span><span lang="EN-US" style="mso-bidi-font-size: 10.5pt">N</span><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">多的方法，也是面向过程遗留下来的毛病，对一开始实现时候是比较爽，所有的逻辑都放在一个类中，比较明了。但是到后来就越来越难查看，简直到崩溃的边缘。</span><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">开放封闭原则：软件实体</span><strong><em><span lang="EN-US" style="mso-bidi-font-size: 10.5pt">(</span></em></strong><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 宋体">类、模块、函数等</span><strong><em><span lang="EN-US" style="mso-bidi-font-size: 10.5pt">)</span></em></strong><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 宋体">应当为扩展而开放，又为修改而封闭。这</span><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">个原则有一个相当详细的定义，但是一个简单的意思是：你应当能够改变一个模块的</span><span style="mso-bidi-font-size: 10.5pt"> </span><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">周边环境而无须改变模块本身。这块关键是使用抽象，比如</span><span lang="EN-US" style="mso-bidi-font-size: 10.5pt">dao</span><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">模式，不能因为数据存取方式的改变而要改变调用者的代码。在文中举了一个</span><span lang="EN-US" style="mso-bidi-font-size: 10.5pt">MVC</span><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的例子，比较经典，可以好好的琢磨一下。</span><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 宋体"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="mso-bidi-font-size: 10.5pt">Liskov</span><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">替换原则</span><span lang="EN-US" style="mso-bidi-font-size: 10.5pt">:</span><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">子类型必须为他们的基类型可替换的。这个原则主要讲述了调用者调用一个基类的派生类时无需知道它们的存在，尽量少用</span><span lang="EN-US" style="mso-bidi-font-size: 10.5pt">instanceof</span><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，让设计的时候充分考虑到基类和派生类的继承关系。继承是</span><span lang="EN-US" style="mso-bidi-font-size: 10.5pt">isA</span><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的关系，所以父类的行为子类也必须有之，反之不应当继承，或者可能是兄弟关系，继承同一个祖先类</span><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">依存关系倒置原则：</span><strong><em><span lang="EN-US" style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: Arial">A</span></em></strong><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 黑体">．高层模块应当不依赖低层模块，它们应当依赖于抽象。 </span><strong><em><span lang="EN-US" style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: Arial">B</span></em></strong><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 黑体">．抽象应当不依赖于细节，细节应当依赖于抽象。 </span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">更好的描述是：不要依赖那些容易变化的具体类</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 黑体">。<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal" style="mso-layout-grid-align: none"><span style="COLOR: black; FONT-FAMILY: 黑体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 黑体">接口隔离原则：</span><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">客户不应当依赖那些它们根本不用的方法。这个原则说明调用者调用业务类，最好是能给调用者展现他能用到的方法，而不是把所有的方法都是显示，这样会造成调用者的迷惑。</span><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-layout-grid-align: none"><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在文中面向接口的思想是特别推崇的，基本所有改进都是建立在其基础上的，还有一点充满了</span><span lang="EN-US" style="mso-bidi-font-size: 10.5pt">XP</span><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的气息，看了参考文献很多都是有关</span><span lang="EN-US" style="mso-bidi-font-size: 10.5pt">XP</span><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的书籍。</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: 黑体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 黑体"><o:p></o:p></span></p>
          <br/>
          <span style="color:red;">
            <a href="http://lovevirus.javaeye.com/blog/95566#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/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 29 Jun 2007 16:29:31 +0800</pubDate>
        <link>http://lovevirus.javaeye.com/blog/95566</link>
        <guid>http://lovevirus.javaeye.com/blog/95566</guid>
      </item>
      <item>
        <title>SaaS小感</title>
        <author>lovevirus</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lovevirus.javaeye.com">lovevirus</a>&nbsp;
          链接：<a href="http://lovevirus.javaeye.com/blog/95373" style="color:red;">http://lovevirus.javaeye.com/blog/95373</a>&nbsp;
          发表时间: 2007年06月29日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">近段时间因为工作需要看了一些有关</span><span lang="EN-US"><font face="Times New Roman">SaaS</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的文档，有支持的也有反对的，支持者指明这是新的软件销售模式，反对者把他于</span><span lang="EN-US"><font face="Times New Roman">ASP</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">相比较，我还是偏向于支持一方的。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 36pt; TEXT-INDENT: -36pt; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt"><span lang="EN-US" style="mso-bidi-font-family: 宋体"><span style="mso-list: Ignore"><font face="Times New Roman"><font size="3">第一、</font><span new="" times="" style="FONT-WEIGHT: normal; FONT-SIZE: 7pt; LINE-HEIGHT: normal; FONT-STYLE: normal; FONT-VARIANT: normal">&nbsp;&nbsp; </span></font></span></span><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">长尾效应。微软推崇的长尾效应的确需要</span><span lang="EN-US"><font face="Times New Roman">ISV</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">能象提供水电一样提供软件服务，针对于中小企业不能负担软件采购、部署、维护等工作，</span><span lang="EN-US"><font face="Times New Roman">SaaS</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">可以减少信息化的成本。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 36pt; TEXT-INDENT: -36pt; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt"><font face="Times New Roman"><span lang="EN-US" style="mso-bidi-font-family: 宋体"><span style="mso-list: Ignore"><font size="3">第二、</font><span new="" times="" style="FONT-WEIGHT: normal; FONT-SIZE: 7pt; LINE-HEIGHT: normal; FONT-STYLE: normal; FONT-VARIANT: normal">&nbsp;&nbsp; </span></span></span><span lang="EN-US"><font size="3">ISV</font></span></font><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">自身的需要。由于软件的可重复性，对所有客户的软件都是一个版本，就产生了规模经济，这样可以节省</span><span lang="EN-US"><font face="Times New Roman">ISV</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的运行成本。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 36pt; TEXT-INDENT: -36pt; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt"><span lang="EN-US" style="mso-bidi-font-family: 宋体"><span style="mso-list: Ignore"><font face="Times New Roman"><font size="3">第三、</font><span new="" times="" style="FONT-WEIGHT: normal; FONT-SIZE: 7pt; LINE-HEIGHT: normal; FONT-STYLE: normal; FONT-VARIANT: normal">&nbsp;&nbsp; </span></font></span></span><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">企业客户的需要。企业信息化的高投入长见效使得企业在软件选型上小心翼翼，现在</span><span lang="EN-US"><font face="Times New Roman">SaaS</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">推崇先试用后租赁的方式，可以使得企业能减少投入成本和选型风险。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">但是目前情况</span><span lang="EN-US"><font face="Times New Roman">SaaS</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的应用还没有完全的展开，主要是因为信任度的问题，企业把数据放在服务提供商处就很大程度上怀疑其安全性，这也是前几年</span><span lang="EN-US"><font face="Times New Roman">ASP</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">夭折的最大原因。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><span style="mso-tab-count: 1"><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">要做到这点，我觉得要象储蓄一样生产一个&ldquo;数据银行&rdquo;的概念，让企业放心把数据存入到&ldquo;数据银行&rdquo;中，&ldquo;数据银行&rdquo;不一定是服务提供商，可以有专门的机构来负责，这类机构必须具体高权威性和高受信任度。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><font face="Times New Roman"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>SaaS</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">前途是光明的，道路是曲折的，还有很长一段路要走。</span></font></p>
          <br/>
          <span style="color:red;">
            <a href="http://lovevirus.javaeye.com/blog/95373#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/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 29 Jun 2007 09:11:00 +0800</pubDate>
        <link>http://lovevirus.javaeye.com/blog/95373</link>
        <guid>http://lovevirus.javaeye.com/blog/95373</guid>
      </item>
      <item>
        <title>回帖被指为隐藏帖，被扣十分</title>
        <author>lovevirus</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lovevirus.javaeye.com">lovevirus</a>&nbsp;
          链接：<a href="http://lovevirus.javaeye.com/blog/95203" style="color:red;">http://lovevirus.javaeye.com/blog/95203</a>&nbsp;
          发表时间: 2007年06月29日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>由于语文水平不是很好，一直以来都是看看未回帖，好不容易有了兴致回了一个帖子，被指为隐藏帖，扣了十分，郁闷。</p>
<p>回头看看积分规则、博客服务使用条例，论坛使用规则和提问的智慧。</p>
<p>学习中......................</p>
          <br/>
          <span style="color:red;">
            <a href="http://lovevirus.javaeye.com/blog/95203#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/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 29 Jun 2007 09:11:00 +0800</pubDate>
        <link>http://lovevirus.javaeye.com/blog/95203</link>
        <guid>http://lovevirus.javaeye.com/blog/95203</guid>
      </item>
      <item>
        <title>[转贴]做好个人时间管理</title>
        <author>lovevirus</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lovevirus.javaeye.com">lovevirus</a>&nbsp;
          链接：<a href="http://lovevirus.javaeye.com/blog/53470" style="color:red;">http://lovevirus.javaeye.com/blog/53470</a>&nbsp;
          发表时间: 2007年02月09日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div class="postcontent">
<p><font face="Arial">新的一年做的最有意义的第一件事就是学习了&ldquo;时间管理&rdquo;。之所以想起来学习一下时间管理，是因为在过去的一年中自己迷失了目标，浪费了许多的好时光；因此痛定思痛，决定在这一年中利用好所有自己的时间，实现自己年度目标。 <br />
<strong>一、&nbsp; 为什么要进行时间管理？</strong></font> </p>
<p><font face="Arial">时间是财富！想想吧，如果你每天都收到86400美元，而要求你每天必须把它用完，那你会如何运用？天下真有如此的好事？事实上，有。那就是时间。我们每个人每天都有86400秒进帐，合理的利用他们，你就可以创造财富，爱情，成功，健康等。人生最宝贵的两项资产，一项是头脑，一项是时间。无论你做什么事情，即使不用脑子，也要花费时间。因此，管理时间的水平高低，会决定你事业和生活的成败。每个星期有168 个小时，其中56 个小时在睡眠中度过，21 个小时在吃饭和休息中度过，剩下的91 个小时则由你来决定做什么&mdash;&mdash;每天13 个小时。如何根据你的价值观和目标管理时间，是一项重要的技巧。它使你能控制生活，善用时间，朝自己的方向前进，而不致在忙乱中迷失方向。</font> </p>
<p><font face="Arial"><strong>二、&nbsp; 我为什么浪费时间？</strong> </font></p>
<p><font face="Arial">原因很多，有主观的原因，也有客观的原因。主观原因是一个人浪费时间的根源，因此我们看一下主观原因：<br />
</font><font face="Arial">（1）做事目标不明确；<br />
（2）作风拖拉；<br />
（3）缺乏优先顺序，抓不住重点；<br />
（4）过于注重细节；<br />
（5）做事有头无尾；<br />
（6）没有条理，不简洁，简单事情复杂化；<br />
（7）事必亲躬，不懂得授权；<br />
（8）不会拒绝别人的请求；<br />
（9）消极思考。</font> </p>
<p><font face="Arial"><strong>三、时间管理的十大关键</strong> </font></p>
<p><font face="Arial">（一）时间管理第一大关键是设立明确的目标；成功等于目标，时间管理的目的是让你在最短时间内实现更多你想要实现的目标； 你必须把今年度4到10个目标写出来，找出一个核心目标，并依次排列重要性，然后依照你的目标设定一些详细的计划，你的关键就是依照计划进行。 </font></p>
<p><font face="Arial">（二）第二个时间管理的关键是你要列一张总清单，把今年所要做的每一件事情都列出来，并进行目标切割；1． 年度目标切割成季度目标，列出清单，每一季度要做哪一些事情；2． 季度目标切割成月目标，并在每月初重新再列一遍，碰到有突发事件而更改目标的情形便及时调整过来；3． 每一个星期天，把下周要完成的每件事列出来；4． 每天晚上把第二天要做的事情列出来。</font> </p>
<p><font face="Arial">（三）第三个时间管理的关键是20：80定律；用你80%的时间来做20%最重要的事情，因此你一定要了解，对你来说，哪些事情是最重要的，是最有生产力的。谈到时间管理，有所谓紧急的事情、重要的事情，然而到底应做哪些事情? 当然第一个要做的一定是紧急又重要的事情，通常这些都是一些突发困扰，一些灾难，一些迫不及待要解决的问题。当你天天处理这些事情时，表示你时间管理并不理想。成功者花最多时间在做最重要，可是不紧急的事情，这些都是所谓的高生产力的事情。然而一般人都是做紧急但不重要的事。你必须学会如何把重要的事情变得很紧急，这时你就会立刻开始做高生产力的事情了。</font> </p>
<p><font face="Arial">（四）第四个时间管理的关键就是每天至少要有半小时到1小时的不被干扰时间；假如你能有一个小时完全不受任何人干扰，自己关在自己的房间里面，思考一些事情，或是做一些你认为最重要的事情。这一个小时可以抵过你一天的工作效率，甚至有时候这一小时比你三天工作的效率还要好。</font> </p>
<p><font face="Arial">（五）第五个时间管理的关键是要和你的价值观相吻合，不可以互相矛盾；你一定要确立你个人的价值观，假如价值观不明确，你就很难知道什么对你最重要，当你价值观不明确，时间分配一定不好。时间管理的重点不在管理时间，而在于如何分配时间。你永远没有时间做每件事，但你永远有时间做对你来说最重要的事。 </font></p>
<p><font face="Arial">（六）第六个时间管理关键：每一分钟每一秒做最有效率的事情；你必须思考一下要做好一份工作，到底哪几件事情是对你最有效率的，列下来，分配时间做它做好。（始终直瞄靶心--绩效&lt;=&gt;晋升）</font> </p>
<p><font face="Arial">（七）第七个时间管理的关键要充分地授权；列出你目前生活中所有觉得可以授权的事情，把它们写下来，然后开始找人授权，找适当的人来授权，这样效率会比较好。 </font></p>
<p><font face="Arial">（八）第八个时间管理的关键：同一类的事情最好一次把它做完；假如你在做纸上作业，那段时间都做纸上作业；假如你是在思考，用一段时间只作思考；打电话的话，最好把电话累积到某一时间一次把它打完。当你重复做一件事情时，你会熟能生巧，效率一定会提高。</font> </p>
<p><font face="Arial">（九）第九个时间管理的关键：做好时间日志；你花了多少时间在哪些事情，把它详细地记录下来，每天从刷牙开始，洗澡，早上穿衣花了多少时间，早上搭车的时间，早上出去拜访客户的时间，把每天花的时间一一记录下来，做了哪些事，你会发现浪费了哪些时间。当你找到浪费时间的根源，你才有办法改变。</font> </p>
<p><font face="Arial">（十）第十个时间管理的关键：时间大于金钱，用你的金钱去换取别人的成功经验，一定要跟顶尖人士学习；千万要仔细选择，你所接触的对象，因为这会节省你很多时间，假设与一个成功者在一起，他花了四十年时间成功，你跟十个这样的人一起，你是不是就浓缩了四百年的经验?</font> </p>
<p><font face="Arial"><strong>四、时间管理的一些理论</strong> </font></p>
<p><font face="Arial">第一个是&ldquo;6点优先工作制&rdquo;，就是要求每天全力以赴做6件最重要的事。这个方法是咨询大师艾维利提出的价值2.5万美元的时间管理方法；第二个是帕累托原则，其核心内容是生活中80%的结果几乎是源于20%的活动，即二八理论。根据这一原则，我们应该首先完成那些紧急又重要的工作，其次是重要而非紧急的任务，再次是紧急而非重要的工作，最后是那些既不重要也不紧急的工作。掌握这一点很重要，它可以决定你今晚是看电影还是去写一个报告。第三个理论是莫法特休息法，也就是不要长时间的做同一种工作，而是要经常的做不同内容的工作，保持精神上的兴奋点，进行主动的调剂和放松。第四个是麦肯锡30秒电梯理论，据说麦肯锡曾经丢掉过一个客户，原因是这个客户董事长在电梯里碰到了麦肯锡的项目经理，要求他谈谈项目的结果，可怜的项目经理没有在电梯运行的短短30秒内把结果说清楚。后来麦肯锡就要求员工要表达清楚，直奔主题，凡事要归纳在3条以内。这就是30秒电梯理论，或者电梯演讲。<br />
</font></p>
</div>
          <br/>
          <span style="color:red;">
            <a href="http://lovevirus.javaeye.com/blog/53470#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/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 09 Feb 2007 10:59:10 +0800</pubDate>
        <link>http://lovevirus.javaeye.com/blog/53470</link>
        <guid>http://lovevirus.javaeye.com/blog/53470</guid>
      </item>
      <item>
        <title>hibernate bug</title>
        <author>lovevirus</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lovevirus.javaeye.com">lovevirus</a>&nbsp;
          链接：<a href="http://lovevirus.javaeye.com/blog/44236" style="color:red;">http://lovevirus.javaeye.com/blog/44236</a>&nbsp;
          发表时间: 2007年01月07日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><font face="Arial">java.lang.NoSuchMethodError: com.guotai.po.baseData.MaterialSpecPO.getHibernateLazyInitializer()Lorg/hibernate/proxy/LazyInitializer;</font></p>
<p><font face="Arial">这是Hibernate的一个BUG, 详细请看链接 http://opensource.atlassian.com/projects/hibernate/browse/HHH-1293 </font></p>
<p><font face="Arial">不过这个问题在BUG库中记录的是去年年底提出的, 这么长时间了还没有得到hibernate的解决, 因为最新版是3.2 RC2同样存在相同的问题<br />
实验表明增加-server参数确实可以解决这个问题.<br />
但是大家注意如果是Tomcat的话, 应该仔细检查在catalina.sh哪里增加-server, 重起完用ps检查一下看增加的参数是否有效.<br />
如何加-server参数呢? 最简单的办法是在catalina.sh文件开始位置增加下面一行<br />
JAVA_OPTS=&quot;-server -Xms512m -Xmx512m&quot;<br />
在　tomcat_home/bin/catalina.sh 这个文件里<br />
找到下面：<br />
# ----- Execute The Requested Command -----------------------------------------<br />
echo &quot;Using CATALINA_BASE:&nbsp;&nbsp; $CATALINA_BASE&quot;<br />
echo &quot;Using CATALINA_HOME:&nbsp;&nbsp; $CATALINA_HOME&quot;<br />
echo &quot;Using CATALINA_TMPDIR: $CATALINA_TMPDIR&quot;<br />
echo &quot;Using JAVA_HOME:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $JAVA_HOME&quot;</font></p>
<p><font face="Arial">然后增加一行．．<br />
# ----- Execute The Requested Command -----------------------------------------<br />
JAVA_OPTS=&quot;-server -Xmx512m -Xms128m -Djava.awt.headless=true &quot;<br />
echo &quot;Using CATALINA_BASE:&nbsp;&nbsp; $CATALINA_BASE&quot;<br />
echo &quot;Using CATALINA_HOME:&nbsp;&nbsp; $CATALINA_HOME&quot;<br />
echo &quot;Using CATALINA_TMPDIR: $CATALINA_TMPDIR&quot;<br />
echo &quot;Using JAVA_HOME:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $JAVA_HOME&quot;</font></p>
<p><font face="Arial">最后重启tomcat</font></p>
<p><font face="Arial">hibernate 3.2的下一个版本中即将修复这个功能</font></p>
<p><font face="Arial"></font>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://lovevirus.javaeye.com/blog/44236#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/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 07 Jan 2007 14:38:59 +0800</pubDate>
        <link>http://lovevirus.javaeye.com/blog/44236</link>
        <guid>http://lovevirus.javaeye.com/blog/44236</guid>
      </item>
      <item>
        <title>给任务实例添加附加名称</title>
        <author>lovevirus</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lovevirus.javaeye.com">lovevirus</a>&nbsp;
          链接：<a href="http://lovevirus.javaeye.com/blog/39568" style="color:red;">http://lovevirus.javaeye.com/blog/39568</a>&nbsp;
          发表时间: 2006年12月18日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>前段时间用jbpm做工作流,同事要求能根据实际的流程显示任务详细信息,自己就做了一个actionHandler,放入在task的task-assign事件中.</p>
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span class="keyword">package</span><span>&nbsp;com.guotai.wf.handler; &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span></span><span class="keyword">import</span><span>&nbsp;java.util.ArrayList; &nbsp;&nbsp;</span></li>
    <li class=""><span></span><span class="keyword">import</span><span>&nbsp;java.util.Iterator; &nbsp;&nbsp;</span></li>
    <li class="alt"><span></span><span class="keyword">import</span><span>&nbsp;java.util.List; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span></span><span class="keyword">import</span><span>&nbsp;org.apache.commons.lang.StringUtils; &nbsp;&nbsp;</span></li>
    <li class=""><span></span><span class="keyword">import</span><span>&nbsp;org.apache.log4j.Logger; &nbsp;&nbsp;</span></li>
    <li class="alt"><span></span><span class="keyword">import</span><span>&nbsp;org.jbpm.context.exe.ContextInstance; &nbsp;&nbsp;</span></li>
    <li class=""><span></span><span class="keyword">import</span><span>&nbsp;org.jbpm.graph.def.ActionHandler; &nbsp;&nbsp;</span></li>
    <li class="alt"><span></span><span class="keyword">import</span><span>&nbsp;org.jbpm.graph.exe.ExecutionContext; &nbsp;&nbsp;</span></li>
    <li class=""><span></span><span class="keyword">import</span><span>&nbsp;org.jbpm.graph.exe.Token; &nbsp;&nbsp;</span></li>
    <li class="alt"><span></span><span class="keyword">import</span><span>&nbsp;org.jbpm.taskmgmt.exe.TaskInstance; &nbsp;&nbsp;</span></li>
    <li class=""><span></span><span class="keyword">import</span><span>&nbsp;org.springframework.beans.BeanWrapper; &nbsp;&nbsp;</span></li>
    <li class="alt"><span></span><span class="keyword">import</span><span>&nbsp;org.springframework.beans.BeanWrapperImpl; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span></span><span class="comment">/** </span>&nbsp;</li>
    <li class=""><span><span class="comment">&nbsp;*&nbsp;给任务实例添加名称 </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;*&nbsp;@author&nbsp;sp </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;*&nbsp;@since&nbsp;2006-11-13 </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;* </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span></span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;TaskNameSetterHandler&nbsp;</span><span class="keyword">implements</span><span>&nbsp;ActionHandler&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">/** </span>&nbsp;</li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Logger&nbsp;for&nbsp;this&nbsp;class </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;Logger&nbsp;logger&nbsp;=&nbsp;Logger.getLogger(TaskNameSetterHandler.</span><span class="keyword">class</span><span>); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;String&nbsp;message; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;execute(ExecutionContext&nbsp;executionContext)&nbsp;</span><span class="keyword">throws</span><span>&nbsp;Exception&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String[]&nbsp;arr&nbsp;=&nbsp;pickupMessage(); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;msg&nbsp;=&nbsp;message; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(arr&nbsp;!=&nbsp;</span><span class="keyword">null</span><span>){ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">for</span><span>(</span><span class="keyword">int</span><span>&nbsp;i=</span><span class="number">0</span><span>;i&lt;arr.length;i++){ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object&nbsp;o&nbsp;=&nbsp;getValue(executionContext.getContextInstance(),&nbsp;executionContext.getToken(),&nbsp;arr[i]); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;msg&nbsp;=&nbsp;replaceMessage(msg,arr[i],&nbsp;o); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TaskInstance&nbsp;ti&nbsp;=&nbsp;executionContext.getTaskInstance(); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ti.setName(ti.getName()&nbsp;+&nbsp;</span><span class="string">&quot;:&quot;</span><span>&nbsp;+&nbsp;msg); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">/** </span>&nbsp;</li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;替换message </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;name </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;o </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;String&nbsp;replaceMessage(String&nbsp;msg,String&nbsp;name,Object&nbsp;o){ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;name_find&nbsp;=&nbsp;</span><span class="string">&quot;${&quot;</span><span>&nbsp;+&nbsp;name&nbsp;+&nbsp;</span><span class="string">&quot;}&quot;</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(msg.indexOf(</span><span class="string">&quot;${&quot;</span><span>&nbsp;+&nbsp;name&nbsp;+&nbsp;</span><span class="string">&quot;}&quot;</span><span>)&nbsp;&gt;&nbsp;-</span><span class="number">1</span><span>){ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logger.debug(</span><span class="string">&quot;有其值!&quot;</span><span>); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;str&nbsp;=&nbsp;msg.substring(</span><span class="number">0</span><span>,msg.indexOf(name_find)); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(o&nbsp;!=&nbsp;</span><span class="keyword">null</span><span>){ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;+=&nbsp;o.toString(); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span><span class="keyword">else</span><span>{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;+=&nbsp;</span><span class="string">&quot;&nbsp;&quot;</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;+=&nbsp;msg.substring(msg.indexOf(name_find)+name_find.length(),msg.length()); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;msg&nbsp;=&nbsp;str; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;msg; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">/** </span>&nbsp;</li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;从ContextInstance中根据name得到其值 </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;如果name中间有&quot;.&quot;,说明是一个对象,取其对象的某个属性 </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;contextInstance </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;token </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;name </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;Object&nbsp;getValue(ContextInstance&nbsp;contextInstance,Token&nbsp;token,String&nbsp;name){ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object&nbsp;value&nbsp;=&nbsp;</span><span class="keyword">null</span><span>; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>&nbsp;(name.indexOf(</span><span class="string">&quot;.&quot;</span><span>)&nbsp;&gt;&nbsp;-</span><span class="number">1</span><span>)&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;prename&nbsp;=&nbsp;name.substring(</span><span class="number">0</span><span>,&nbsp;name.indexOf(</span><span class="string">&quot;.&quot;</span><span>)); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;postname&nbsp;=&nbsp;name.substring(name.indexOf(</span><span class="string">&quot;.&quot;</span><span>)&nbsp;+&nbsp;</span><span class="number">1</span><span>,name.length()); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object&nbsp;o&nbsp;=&nbsp;contextInstance.getVariable(prename,&nbsp;token); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">try</span><span>&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value&nbsp;=&nbsp;o; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BeanWrapper&nbsp;bw&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;BeanWrapperImpl(o); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;name_tmp&nbsp;=&nbsp;postname; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value&nbsp;=&nbsp;bw.getPropertyValue(postname); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span class="keyword">catch</span><span>&nbsp;(Exception&nbsp;e)&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logger.error(e); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">throw</span><span>&nbsp;</span><span class="keyword">new</span><span>&nbsp;IllegalArgumentException(</span><span class="string">&quot;convert&nbsp;error&quot;</span><span>); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span class="keyword">else</span><span>&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value&nbsp;=&nbsp;contextInstance.getVariable(name,&nbsp;token); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;value; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">/** </span>&nbsp;</li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;从消息中提取${}包含的值 </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;String[]&nbsp;pickupMessage(){ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>((</span><span class="keyword">this</span><span>.message&nbsp;!=&nbsp;</span><span class="keyword">null</span><span>)&nbsp;&amp;&amp;&nbsp;(</span><span class="keyword">this</span><span>.message.indexOf(</span><span class="string">&quot;${&quot;</span><span>)&nbsp;&gt;&nbsp;-</span><span class="number">1</span><span>)){ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&nbsp;list&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;ArrayList(); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;str&nbsp;=&nbsp;message; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">while</span><span>(str.indexOf(</span><span class="string">&quot;${&quot;</span><span>)&nbsp;&gt;&nbsp;-</span><span class="number">1</span><span>){ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;str_sub&nbsp;=&nbsp;StringUtils.substringBetween(str,&nbsp;</span><span class="string">&quot;${&quot;</span><span>,&nbsp;</span><span class="string">&quot;}&quot;</span><span>); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logger.debug(</span><span class="string">&quot;提取字符串:&quot;</span><span>&nbsp;+&nbsp;str_sub); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list.add(str_sub); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;=&nbsp;StringUtils.substring(str,str.indexOf(</span><span class="string">&quot;${&quot;</span><span>)+</span><span class="number">2</span><span>); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String[]&nbsp;arr&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;String[list.size()]; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">int</span><span>&nbsp;i=</span><span class="number">0</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">for</span><span>(Iterator&nbsp;it=list.iterator();it.hasNext();){ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;arr[i++]&nbsp;=&nbsp;(String)&nbsp;it.next(); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;arr; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;</span><span class="keyword">null</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;String&nbsp;getMessage()&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;message; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setMessage(String&nbsp;message)&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.message&nbsp;=&nbsp;message; &nbsp;&nbsp;</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;</span></li>
</ol>
</div>
<p>&nbsp;</p>
<p>我用的springModule集成jbpm的,所在在参数在spring配置文件中设置,如下</p>
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-xml">
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">bean</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;taskNameSetterAction&quot;</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">&quot;com.guotai.wf.handler.TaskNameSetterHandler&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><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;message&quot;</span><span>&nbsp;</span><span class="attribute">value</span><span>=</span><span class="attribute-value">&quot;名称为${sale.item}数目为${sale.quantity}&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span></span><span class="tag">&lt;/</span><span class="tag-name">bean</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
</ol>
</div>
          <br/>
          <span style="color:red;">
            <a href="http://lovevirus.javaeye.com/blog/39568#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/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 18 Dec 2006 14:45:24 +0800</pubDate>
        <link>http://lovevirus.javaeye.com/blog/39568</link>
        <guid>http://lovevirus.javaeye.com/blog/39568</guid>
      </item>
      <item>
        <title>项目进行中</title>
        <author>lovevirus</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lovevirus.javaeye.com">lovevirus</a>&nbsp;
          链接：<a href="http://lovevirus.javaeye.com/blog/32539" style="color:red;">http://lovevirus.javaeye.com/blog/32539</a>&nbsp;
          发表时间: 2006年11月05日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          又是一个不大不小的项目,又是一个没有人做的项目,每次做项目都是这样,开始觉得要好好的系统设计,好好的构架.到最后呢,连稍微懂懂的人都没有,看看身边都是一些刚毕业的新手,虽然他们也很努力了,但是时间过去了,东西做不出来了,郁闷!!!
          <br/>
          <span style="color:red;">
            <a href="http://lovevirus.javaeye.com/blog/32539#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/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 05 Nov 2006 15:31:35 +0800</pubDate>
        <link>http://lovevirus.javaeye.com/blog/32539</link>
        <guid>http://lovevirus.javaeye.com/blog/32539</guid>
      </item>
      <item>
        <title>jbpm中任务分配的理解</title>
        <author>lovevirus</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lovevirus.javaeye.com">lovevirus</a>&nbsp;
          链接：<a href="http://lovevirus.javaeye.com/blog/26937" style="color:red;">http://lovevirus.javaeye.com/blog/26937</a>&nbsp;
          发表时间: 2006年10月10日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          actorId是指任务的主要负责人,如果这个任务分配给某个人,就指定actorId为这个人,这个任务为个人任务<br />pooledActors是任务的候选人,如果这个若无分配给群组,那pooledActors就为这个群组的成员,相对而言这个任务就是共同任务<br />当一个共同任务指明了要某人去做的话,这个任务就变成个人任务,就指定actorId为这个人.<br /><br />在我们的工作流中,如果分配给角色的,就是共同任务;如果分配给个人,就是个人任务.<br />现在就是一般我们指定的都是一个角色,当这个角色只是一个人的时候,就要衡量一下了<br /><br />"推"这个含义,就是把这个任务推向某个actorId<br />"拉"这个含义,就是把整个可以做这个任务的actorIds拉一个真正完成的actorId
          <br/>
          <span style="color:red;">
            <a href="http://lovevirus.javaeye.com/blog/26937#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/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 10 Oct 2006 13:45:02 +0800</pubDate>
        <link>http://lovevirus.javaeye.com/blog/26937</link>
        <guid>http://lovevirus.javaeye.com/blog/26937</guid>
      </item>
      <item>
        <title>MYSQL添加远程用户</title>
        <author>lovevirus</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lovevirus.javaeye.com">lovevirus</a>&nbsp;
          链接：<a href="http://lovevirus.javaeye.com/blog/26394" style="color:red;">http://lovevirus.javaeye.com/blog/26394</a>&nbsp;
          发表时间: 2006年10月08日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          添加远程用户admin密码为password<br />GRANT ALL PRIVILEGES ON *.* TO admin@localhost IDENTIFIED BY 'password' WITH GRANT OPTION<br />GRANT ALL PRIVILEGES ON *.* TO admin@"%" IDENTIFIED BY 'password' WITH GRANT OPTION
          <br/>
          <span style="color:red;">
            <a href="http://lovevirus.javaeye.com/blog/26394#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/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 08 Oct 2006 18:25:58 +0800</pubDate>
        <link>http://lovevirus.javaeye.com/blog/26394</link>
        <guid>http://lovevirus.javaeye.com/blog/26394</guid>
      </item>
  </channel>
</rss>