<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>tomkoo</title>
    <description>好像没有编程的天赋，却始终在编程，靠编程养家糊口，希望勤能补拙的Coder！</description>
    <link>http://tomkoo.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>页面“长时间”操作引起的Session过期</title>
        <author>tomkoo</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://tomkoo.javaeye.com">tomkoo</a>&nbsp;
          链接：<a href="http://tomkoo.javaeye.com/blog/131046" style="color:red;">http://tomkoo.javaeye.com/blog/131046</a>&nbsp;
          发表时间: 2007年10月11日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          在Servlet Specification 2.4中对Session的过期有这样的一句描述：<br /><div class="quote_title">引用</div><div class="quote_div"><br />The session invalidation will not take effect until all servlets using that session have exited the service method.<br /></div><br /><br />所以，如果client跟server没有交互，那么session过期时间就开始计算了。<br /><br />但是在实际应用中，我遇到了这样的问题：<br /><br />客户要求系统5分钟不操作Session就过期。但是我们有一项功能“银企对账”，需要在页面上对2000多条数据进行勾选，这个勾选完全是页面的操作，同Server没有任何交互，但是由于数据量大，勾选的时间远远超过5分钟，当勾选完后执行操作时，Session已经过期了。<br /><br />这样的矛盾如何解决？设置自动同Server交互以维持Session？Or Other？
          <br/>
          <span style="color:red;">
            <a href="http://tomkoo.javaeye.com/blog/131046#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>Thu, 11 Oct 2007 13:31:49 +0800</pubDate>
        <link>http://tomkoo.javaeye.com/blog/131046</link>
        <guid>http://tomkoo.javaeye.com/blog/131046</guid>
      </item>
      <item>
        <title>List数据对比筛选，如何才能达到最佳效率？</title>
        <author>tomkoo</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://tomkoo.javaeye.com">tomkoo</a>&nbsp;
          链接：<a href="http://tomkoo.javaeye.com/blog/131040" style="color:red;">http://tomkoo.javaeye.com/blog/131040</a>&nbsp;
          发表时间: 2007年10月11日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          在实际的开发中，经常会晕倒这样的问题，有两个List的数据，需要对这两个List的数据进行对比，然后筛选出需要的对象。<br /><br />例如：财务中的对账,数据源一个是银行日记账（aList），一个是银行对帐单（bList），业务操作就是把两个List里面金额相同的记录筛选掉，剩下金额不相等的。<br /><br />在实际开发中我目前知道有两个方式（假设两个List各有1000条数据）：<br /><br />1、最简单的就是用双重循环进行比较，虽然简单，但是如果两个List的数据量都很大，那么运行时间将成数量级增长。循环次数为1000*1000<br /><br />2、把一个List通过循环放入Map中，把需要比较的字段作为Map的Key，然后循环另外一个List，到Map里面去匹配。<br /><br /><pre name="code" class="java">
for(A a : aList){
   map.put(a.amount,a);
}

for(B b : bList){
   A a = map.get(b.amount);
   if(a==null){
      //a==null则说明没有同b匹配的项
   }else{
      //a!=null则说明匹配上了
   }
}
</pre><br /><br />由于在Map中取数非常快，主要的耗时就在业务处理和循环上。循环次数为1000*2<br /><br />但是第2种方法还是有不足的地方：<br /><br />1、当比较的值有相同的时候，由于Key必须唯一，所以后面的值会覆盖掉前面的数据<br />2、当比较的内容比较复杂，或者是多项的时候，就比较难处理<br /><br /><br />我想在平时开发中大家应该都会遇到这样的问题吧，不知道大家有没有更好的方法来解决这个问题！！
          <br/>
          <span style="color:red;">
            <a href="http://tomkoo.javaeye.com/blog/131040#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>Thu, 11 Oct 2007 13:18:27 +0800</pubDate>
        <link>http://tomkoo.javaeye.com/blog/131040</link>
        <guid>http://tomkoo.javaeye.com/blog/131040</guid>
      </item>
      <item>
        <title>烦心！</title>
        <author>tomkoo</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://tomkoo.javaeye.com">tomkoo</a>&nbsp;
          链接：<a href="http://tomkoo.javaeye.com/blog/130883" style="color:red;">http://tomkoo.javaeye.com/blog/130883</a>&nbsp;
          发表时间: 2007年10月10日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          房子买了，装修了，也住进去了，感觉有了个家，还是个自己喜欢的家。<br />谁知道没住两个月，出差！<br /><br />这一出差就是3个月了，还没完，老板说做完项目才能回去，那还得最少2个月，唉！<br /><br />-----------------------------<br /><br />老婆打电话说卫生间有点渗水，可能是防水没有做好，唉，又是一个烦心事！<br />老婆说我就是瞎烦心，遇到了事儿，烦心也一样，让我不要烦！<br /><br />我倒是想不烦，可是我就是那眼里不能有半点沙子的人，能不烦心吗？<br /><br />唉！总之最近可以用一个字来形容，“烦心”！
          <br/>
          <span style="color:red;">
            <a href="http://tomkoo.javaeye.com/blog/130883#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>Wed, 10 Oct 2007 21:45:29 +0800</pubDate>
        <link>http://tomkoo.javaeye.com/blog/130883</link>
        <guid>http://tomkoo.javaeye.com/blog/130883</guid>
      </item>
      <item>
        <title>什么是坚持！</title>
        <author>tomkoo</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://tomkoo.javaeye.com">tomkoo</a>&nbsp;
          链接：<a href="http://tomkoo.javaeye.com/blog/127694" style="color:red;">http://tomkoo.javaeye.com/blog/127694</a>&nbsp;
          发表时间: 2007年09月27日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          什么是坚持？<br /><br />说起来很简单，做起来却很难。就说这小小的Blog吧，说好了要坚持写下去，记录自己的点点滴滴。可以一转眼，我有6个月的时间没有写了。这让我明白了什么是坚持！原来失败并不是因为做的事有多么的难（有如写Blog），难的是那一份经久不衰的坚持。
          <br/>
          <span style="color:red;">
            <a href="http://tomkoo.javaeye.com/blog/127694#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>Thu, 27 Sep 2007 18:14:23 +0800</pubDate>
        <link>http://tomkoo.javaeye.com/blog/127694</link>
        <guid>http://tomkoo.javaeye.com/blog/127694</guid>
      </item>
      <item>
        <title>一个复杂的“预算”模板设计</title>
        <author>tomkoo</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://tomkoo.javaeye.com">tomkoo</a>&nbsp;
          链接：<a href="http://tomkoo.javaeye.com/blog/65581" style="color:red;">http://tomkoo.javaeye.com/blog/65581</a>&nbsp;
          发表时间: 2007年03月26日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          一个企业有一个“预算模板”，但是这个“预算模板”不是固定的，而是可以定义的，并且分单位级别进行部分自定义。<br /><br />例如：公司总部定义了一个“预算模板”的初始模板（预算模板为表格，这里以简单线条表示）<br /><br />-------------------------------------<br />项目<span style="color: white">-------------------</span>金额<br />-------------------------------------<br />1、生产成本		<br />2、制造费用	<br />3、人力资源费用	<br />-------------------------------------<br /><br />但是这个只是总公司的一个总的预算项目，到了下级部门，需要对这个预算模板进行细化，但是大项只能是上级本门已经存在的预算项目。<br /><br />例如：一级分公司的模板可以是这样<br />-------------------------------------<br />项目<span style="color: white">-------------------</span>金额<br />-------------------------------------<br />1、生产成本	<br /><span style="color: white">---</span>1.1、原材料	<br /><span style="color: white">---</span>1.2、磨损费用	<br />2、制造费用	<br />3、人力资源费用	<br />-------------------------------------<br /><br />以此类推，每一级都可以根据自己的上级“预算模板”定制自己的更加“细化”的“预算模板”。<br /><br />然后在企业电子流程填报预算的时候根据自己的模板从下级逐级向上填报，然后在最顶级形成公司的总的预算报表。预算金额计算基本的公式是：上级项目 = Sum（下级项目），结合上面的表格举例就是：生产成本 = 原材料 + 磨损费用。<br /><br />现在我的设计中有几个问题<br />1、系统中可以支持N套模板，用户选择使用哪一套<br />2、如果用户更改模板，那么所有的下级单位都要从新设计下级模板，很麻烦<br />3、业务数据（这里就是预算金额）怎么样很好的和模板结合，使取数更简单<br /><br />想听听大家的意见，这样的模板如何设计更加合理一些。
          <br/>
          <span style="color:red;">
            <a href="http://tomkoo.javaeye.com/blog/65581#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>Mon, 26 Mar 2007 15:51:00 +0800</pubDate>
        <link>http://tomkoo.javaeye.com/blog/65581</link>
        <guid>http://tomkoo.javaeye.com/blog/65581</guid>
      </item>
      <item>
        <title>在Spring+Hibernate的环境中如何通过编程模式来实现数据库连接？</title>
        <author>tomkoo</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://tomkoo.javaeye.com">tomkoo</a>&nbsp;
          链接：<a href="http://tomkoo.javaeye.com/blog/59595" style="color:red;">http://tomkoo.javaeye.com/blog/59595</a>&nbsp;
          发表时间: 2007年03月13日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          在Spring+Hibernate的环境中如何通过编程模式来实现数据库连接？<br /><br /><pre name="code" class="java">public class LocalSessionFactoryBeanTest {


	public static DataSource getDataSource(){
		
		BasicDataSource ds = new BasicDataSource();
		ds.setDriverClassName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
		ds.setUrl("jdbc:microsoft:sqlserver://192.168.0.100:1433;DatabaseName=CMCS3");
		ds.setUsername("sa");
		ds.setPassword("developer");
		
		return (DataSource)ds;
		
	}

	public static SessionFactory getSessionFactory(DataSource ds) {
		
		LocalSessionFactoryBean factory = new LocalSessionFactoryBean();
		
		
		Properties p = new Properties();
		p.put("hibernate.dialect", "org.hibernate.dialect.SQLServerDialect");
		p.put("hibernate.show_sql", "true");
		
		
		Properties p1 = new Properties();
		ArrayList&lt;String> list = new ArrayList&lt;String>();
		list.add("classpath*:com/sky/frame/domain/*.hbm.xml");
		p1.put("mappingLocations", list);
		
		factory.setDataSource(ds);
		factory.setHibernateProperties(p);

		return (SessionFactory)factory.getObject();
	}
	
	public static void main(String[] args){
		DataSource ds = getDataSource();
		SessionFactory sf = getSessionFactory(ds);
		Session session = sf.openSession();
		System.out.println(session.toString());
		session.close();
	}</pre><br /><br />似乎这样可以，但是最是不能通过factory.getObject()获得SessionFactory,而是得到Null。哪里有问题？大家给看看。
          <br/>
          <span style="color:red;">
            <a href="http://tomkoo.javaeye.com/blog/59595#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, 13 Mar 2007 18:45:53 +0800</pubDate>
        <link>http://tomkoo.javaeye.com/blog/59595</link>
        <guid>http://tomkoo.javaeye.com/blog/59595</guid>
      </item>
      <item>
        <title>买房？</title>
        <author>tomkoo</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://tomkoo.javaeye.com">tomkoo</a>&nbsp;
          链接：<a href="http://tomkoo.javaeye.com/blog/57390" style="color:red;">http://tomkoo.javaeye.com/blog/57390</a>&nbsp;
          发表时间: 2007年03月05日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          算一算毕业也已经有3年了，也都结婚了，似乎也已经到了应该买房的时候了。可是父母都是老实巴交的农民，也没有积蓄，所以一切都得靠自己的努力。好不容易有了点积蓄准备看看房子的时候，深圳的新房均价已经过了12000了。<br /><br />所以，算了，看看二手房吧，好歹得便宜点吧。经过好久的“精挑细选”，终于看中了一套60平左右的房子，55W实收。虽然还是贵，但是小区和房子都不错，地段在南头，也还可以。所以一狠心，决定买下来。于是交了1W的定金，准备第二天签合同（因为业主在外地）。回到家里心里也停高兴，不管怎么样也快有自己的房子了。<br /><br />第二天，和老婆高高兴兴的去逛街，准备着签合同。谁知道接到中介的电话，叫我们过去一趟。我们以为是业主回来了，可以去签合同了。谁知道过去了才知道，业主是回来了，但是要涨价，由55W涨到了65W！！！65W啊！！<br /><br />我没有语言，只好和老婆回家了。我动摇了！我还是租房吧，至少少了些烦恼！可是老婆还是想买房。我只好看看我们的工资单，默默发愁……
          <br/>
          <span style="color:red;">
            <a href="http://tomkoo.javaeye.com/blog/57390#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>Mon, 05 Mar 2007 13:33:00 +0800</pubDate>
        <link>http://tomkoo.javaeye.com/blog/57390</link>
        <guid>http://tomkoo.javaeye.com/blog/57390</guid>
      </item>
      <item>
        <title>Spring同Hibernate整合时，对LocalSessionFactoryBean的不解</title>
        <author>tomkoo</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://tomkoo.javaeye.com">tomkoo</a>&nbsp;
          链接：<a href="http://tomkoo.javaeye.com/blog/39014" style="color:red;">http://tomkoo.javaeye.com/blog/39014</a>&nbsp;
          发表时间: 2006年12月14日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          用Spring+Hibernate+struts的组合已经很久了，但是一直都没有很深入的去研究一下他们，也就是这样的按着一贯的模式去做。直到今天，我需要用程序自动创建数据库表（同志们，提供一个方案啊）。我需要用到Hibernate的配置，也就是Configuration了，在Hibernate中倒是容易，但是和Spring整合后，我就需要从LocalSessionFactoryBean中去获得，因为这个类是同Hibernate整合的关键类，从配置文件就可以看得出来。<br /><br /> <pre name="code" class="java">
	&lt;bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
		&lt;property name="dataSource" ref="dataSource" />

		&lt;property name="hibernateProperties">
			&lt;props>
				&lt;prop key="hibernate.dialect">
					org.hibernate.dialect.SQLServerDialect
				&lt;/prop>
				&lt;prop key="hibernate.show_sql">true&lt;/prop>
				&lt;prop key="hibernate.cache.use_query_cache">true&lt;/prop>
				&lt;prop key="hibernate.cache.provider_class">
					org.hibernate.cache.EhCacheProvider
				&lt;/prop>
			&lt;/props>
		&lt;/property>

		&lt;property name="mappingLocations">
			&lt;list>
				&lt;value>classpath*:com/sky/frame/domain/*.hbm.xml&lt;/value>
				&lt;value>classpath*:com/sky/business/domain/*.hbm.xml&lt;/value>
				&lt;value>classpath*:com/sky/plugin/jbpm/bean/*.hbm.xml&lt;/value>
				&lt;value>classpath*:org/jbpm/**/*.hbm.xml&lt;/value>
			&lt;/list>
		&lt;/property>
	&lt;/bean>
</pre><br /><br /> 但是问题就在这里出来了，配置文件中的sessionFactory按照道理说，应该是LocalSessionFactoryBean的实例，但是实际上却不是，而是SessionFactory的实例，百思不得其解，看了看源代码也没有什么帮助。<br /><br />郁闷！
          <br/>
          <span style="color:red;">
            <a href="http://tomkoo.javaeye.com/blog/39014#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, 14 Dec 2006 12:42:42 +0800</pubDate>
        <link>http://tomkoo.javaeye.com/blog/39014</link>
        <guid>http://tomkoo.javaeye.com/blog/39014</guid>
      </item>
      <item>
        <title>JBPM @ Net 成员达到20人！</title>
        <author>tomkoo</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://tomkoo.javaeye.com">tomkoo</a>&nbsp;
          链接：<a href="http://tomkoo.javaeye.com/blog/38805" style="color:red;">http://tomkoo.javaeye.com/blog/38805</a>&nbsp;
          发表时间: 2006年12月13日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>自从<a href="mailto:JBPM@Net">JBPM@Net</a>成立到现在，在今天早上，成员数已经突破20人大关。<img src="/javascripts/fckeditor/editor/images/smiley/msn/wink_smile.gif" alt="" /></p>
<p>但是我们的Blog数量还少得可怜，不过还是有少量有质量的帖子，比如：</p>
<p>&nbsp;<a href="http://jeffen2006.javaeye.com/">jeffen2006</a>&nbsp; 《JBPM的调度应用系列》</p>
<p>各位同志，为了让这个圈子热闹起来，大家都要加油啊！也需要各位的出谋划策，怎么样才能把这个圈子建设好，让大家在付出的同时能有所收获。</p>
<p>等待你的建议！</p>
          <br/>
          <span style="color:red;">
            <a href="http://tomkoo.javaeye.com/blog/38805#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>Wed, 13 Dec 2006 09:19:00 +0800</pubDate>
        <link>http://tomkoo.javaeye.com/blog/38805</link>
        <guid>http://tomkoo.javaeye.com/blog/38805</guid>
      </item>
      <item>
        <title>暂停Blog两周</title>
        <author>tomkoo</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://tomkoo.javaeye.com">tomkoo</a>&nbsp;
          链接：<a href="http://tomkoo.javaeye.com/blog/36655" style="color:red;">http://tomkoo.javaeye.com/blog/36655</a>&nbsp;
          发表时间: 2006年11月30日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          项目开发已经进入第二阶段，并且时间也越来越少了，于是只好暂定Blog两周了。
          <br/>
          <span style="color:red;">
            <a href="http://tomkoo.javaeye.com/blog/36655#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>Thu, 30 Nov 2006 09:07:36 +0800</pubDate>
        <link>http://tomkoo.javaeye.com/blog/36655</link>
        <guid>http://tomkoo.javaeye.com/blog/36655</guid>
      </item>
      <item>
        <title>“顾磊，我想辞职！”</title>
        <author>tomkoo</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://tomkoo.javaeye.com">tomkoo</a>&nbsp;
          链接：<a href="http://tomkoo.javaeye.com/blog/36188" style="color:red;">http://tomkoo.javaeye.com/blog/36188</a>&nbsp;
          发表时间: 2006年11月27日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>李兰&mdash;&mdash;我们开发部唯一的女孩子，今年的应届毕业生。真的还不错的一个女孩子，一个来公司面试时，我问她要求的工资，她却问我：&ldquo;我应该要求多少啊？&rdquo;的女孩子。用我们一个同事的话来说就&ldquo;李兰，我发现你天真中还带点幼稚。&rdquo;。哈哈，就是这样的一个女孩子。</p>
<p>我当初招她近来的理由就是：用很公正的笔迹，答对了我出的题目的90%。这也足够让我招她进公司了。</p>
<p>今天上班的时候，她突然跑到我的办公桌前，要对我说什么，可以好像不好开口似的。</p>
<p>&ldquo;有什么事？&rdquo;<br />
&ldquo;顾磊，我想......辞职。&rdquo;</p>
<p>其实当时我真的还挺意外的，因为她转正的时候，我还为她争取到一份对应届生来说还不错的待遇。她为为什么要走呢？当我问了她很多遍以后，她才说：&ldquo;你上次分配给我的任务我这个星期还是完成不了，他们（另外的同事）都已经完成了。我压力很大。&rdquo;</p>
<p>其实谁没有压力呢，整个项目现在的进度已经滞后了很多，我的压力更大，但是我们不能一走了之，因为我们起码要对自己和公司发的那一份工资负责。跟她聊了很久以后她也觉得自己这样的行为是对自己的不负责任，说要留下来。我也就当没有发生这件事。</p>
<p>在做很多事的时候，我们总是会想到放弃，但是我们只要再坚持一下也许我们就成功了，成果就是再坚持一下！</p>
<p>李兰，希望你可以坚持下去，等到真的你有了新的发展方向的时候，你再来向我辞职，我会不要理由的让你离开。</p>
<p>因为有新的发展就是最好的理由！</p>
<p align="right">2006年11月24日</p>
          <br/>
          <span style="color:red;">
            <a href="http://tomkoo.javaeye.com/blog/36188#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, 27 Nov 2006 15:08:40 +0800</pubDate>
        <link>http://tomkoo.javaeye.com/blog/36188</link>
        <guid>http://tomkoo.javaeye.com/blog/36188</guid>
      </item>
      <item>
        <title>把JBPM运用到实际项目中（1）</title>
        <author>tomkoo</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://tomkoo.javaeye.com">tomkoo</a>&nbsp;
          链接：<a href="http://tomkoo.javaeye.com/blog/35747" style="color:red;">http://tomkoo.javaeye.com/blog/35747</a>&nbsp;
          发表时间: 2006年11月23日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <h4>序言</h4>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JBPM在国内使用的人还不是很多，所以关于JBPM的中文资料非常的少。就算是E文不错的同志也不会经常上国外的论坛、社区，所以在JBPM的资料上基本就是一本官方的Reference。虽然上面的内容是面面俱到，但是深度都是一点都没有，对于所有的知识点和技术基本上都是点到即止。这所有的一切使得我们想把JBPM运用到实际项目中来有很大的难度。</p>
<p>&nbsp;&nbsp;&nbsp; &nbsp; 《<font face="Arial">把JBPM运用到实际项目中</font>》序列文章是我在把JBPM使用到项目中的一些心得和经验，在这里把她记下来，希望可以给研究JBPM的朋友一些提示。</p>
<h4>&nbsp;提出问题</h4>
<ol>
    <li>如何运行Jbpm的示例程序？如何部署Jbpm？如何安装Jbpm流程设计器？ </li>
    <li>如何把JBPM和Spring整合在一起？ </li>
    <li>如何实现会签会办？（参见文章<a href="http://tomkoo.javaeye.com/blog/34204">《JBPM流程通过Action动态创建TaskInstance来实现&ldquo;会签&rdquo;（续）》</a>） </li>
    <li>如何把JBPM和自建系统的用户模型结合在一起？ </li>
    <li>如何跟踪流程执行路径使流程打回时回到前一个执行者？ </li>
    <li>如何实现对流程以及流程节点的授权？ </li>
    <li>如何把流程和业务表单绑定？ </li>
    <li>如何实现流程的回退？ </li>
    <li>如何生成流程实例图？ </li>
    <li>如何管理（挂起\暂停\中断）流程？ </li>
</ol>
<p>暂时列出这10个方面的主题（有的也不能算是主题了，不过也都是一个实际要解决的问题），以后再不断的完善。哈哈，有了这个列表就是有了目标。把Jbpm进行到底！！</p>
          <br/>
          <span style="color:red;">
            <a href="http://tomkoo.javaeye.com/blog/35747#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>Thu, 23 Nov 2006 22:20:59 +0800</pubDate>
        <link>http://tomkoo.javaeye.com/blog/35747</link>
        <guid>http://tomkoo.javaeye.com/blog/35747</guid>
      </item>
      <item>
        <title>同网友交流JBPM纪录（1）</title>
        <author>tomkoo</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://tomkoo.javaeye.com">tomkoo</a>&nbsp;
          链接：<a href="http://tomkoo.javaeye.com/blog/35423" style="color:red;">http://tomkoo.javaeye.com/blog/35423</a>&nbsp;
          发表时间: 2006年11月22日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><font face="Arial"><font color="#339966" face="Arial"><strong></strong></font></font></p>
<p><font face="Arial"><font color="#339966" face="Arial"><strong>&nbsp;Tom就是我了，zmyliyu是一位研究JBPM的网友</strong></font></font></p>
<p><font face="Arial"><font face="Arial">zmyliyu&nbsp; Tom&nbsp;&nbsp;&nbsp; 问一个问题，一个审核的TASKNODE审核不通过后，可以直接返回以前的TASKNODE么 <br />
&nbsp;Tom&nbsp; zmyliyu&nbsp;&nbsp;&nbsp; 如果你需要审批不通过返还的话，那么你应该有一条从审批Node--〉递交审批Node的路径transition <br />
&nbsp;zmyliyu&nbsp; Tom&nbsp;&nbsp;&nbsp; 是，这个没有问题。 <br />
&nbsp;zmyliyu&nbsp; Tom&nbsp;&nbsp;&nbsp; 原来的TASKNODE是不是就会生成一个新的TASKINSTANCE呢。 <br />
&nbsp;Tom&nbsp; zmyliyu&nbsp;&nbsp;&nbsp; of cours <br />
&nbsp;Tom&nbsp; zmyliyu&nbsp;&nbsp;&nbsp; e <br />
&nbsp;zmyliyu&nbsp; Tom&nbsp;&nbsp;&nbsp; 恩，好的。 <br />
&nbsp;zmyliyu&nbsp; Tom&nbsp;&nbsp;&nbsp; 你好，忙不忙呀。 <br />
&nbsp;Tom&nbsp; zmyliyu&nbsp;&nbsp;&nbsp; ?? <br />
&nbsp;zmyliyu&nbsp; Tom&nbsp;&nbsp;&nbsp; 我象问几个JBPM方面的问题。 <br />
&nbsp;Tom&nbsp; zmyliyu&nbsp;&nbsp;&nbsp; 你说 <br />
&nbsp;zmyliyu&nbsp; Tom&nbsp;&nbsp;&nbsp; 就是setPooledActors你门用了么。 <br />
&nbsp;Tom&nbsp; zmyliyu&nbsp;&nbsp;&nbsp; yes <br />
&nbsp;zmyliyu&nbsp; Tom&nbsp;&nbsp;&nbsp; 是怎么使用的呢？ <br />
&nbsp;zmyliyu&nbsp; Tom&nbsp;&nbsp;&nbsp; 我觉得对于角色的来说，这是个好办法。 <br />
&nbsp;Tom&nbsp; zmyliyu&nbsp;&nbsp;&nbsp; 其实如果你是使用自己的用户模型的话，PooledActors既可以是你的用户，也可以是用户角色，这个取决于</font></font><font face="Arial"><font face="Arial">你想如何去用 <br />
&nbsp;zmyliyu&nbsp; Tom&nbsp;&nbsp;&nbsp; 还有一种想法，就是只用ACTORID来做。 <br />
&nbsp;zmyliyu&nbsp; Tom&nbsp;&nbsp;&nbsp; 因为任务最后都要落实到人的。 <br />
&nbsp;zmyliyu&nbsp; Tom&nbsp;&nbsp;&nbsp; 不是使用：PooledActors <br />
&nbsp;zmyliyu&nbsp; Tom&nbsp;&nbsp;&nbsp; 任务授权的确是一个比较麻烦的事情。 <br />
&nbsp;Tom&nbsp; zmyliyu&nbsp;&nbsp;&nbsp; yes，你说的很多，在分配任务的时候用pooledactors，这样可以保证任务的1：n的分配，但是在真正执行任务的时候，用actor这个用可以保证任务完成得唯一性（除了会签） <br />
&nbsp;Tom&nbsp; zmyliyu&nbsp;&nbsp;&nbsp; 你说的很对 <br />
&nbsp;zmyliyu&nbsp; Tom&nbsp;&nbsp;&nbsp; 对了。如何将TASK与功能也面对应起来呢。 <br />
&nbsp;Tom&nbsp; zmyliyu&nbsp;&nbsp;&nbsp; 这个也是一个比较棘手的问题，我是使用自定义表，然后把task和表单（处理action）建立关系 <br />
&nbsp;zmyliyu&nbsp; Tom&nbsp;&nbsp;&nbsp; 恩，我也是这样想的，但是，具体的业务信息怎么办呢。 <br />
&nbsp;zmyliyu&nbsp; Tom&nbsp;&nbsp;&nbsp; 比如，我一个采购流程的处理。 <br />
&nbsp;zmyliyu&nbsp; Tom&nbsp;&nbsp;&nbsp; 我需要连接功能，同时需要知道表单号 <br />
&nbsp;Tom&nbsp; zmyliyu&nbsp;&nbsp;&nbsp; hoho，你说的是把每一个订单和你的订单流程关联起来吧？ <br />
&nbsp;zmyliyu&nbsp; Tom&nbsp;&nbsp;&nbsp; 其实是一个定单呵一个定单的流程实例关联起来。 <br />
&nbsp;Tom&nbsp; zmyliyu&nbsp;&nbsp;&nbsp; yes，订单和流程实例关联起来 <br />
&nbsp;Tom&nbsp; zmyliyu&nbsp;&nbsp;&nbsp; hoho <br />
&nbsp;zmyliyu&nbsp; Tom&nbsp;&nbsp;&nbsp; 如：一个采购人员填写，这个是一个节点，关联到采购单填写PAGE；然后交审核 ，审核人员从任务列表里头，只能看到TASK，但是不知道这个采购员填写了哪个单据。 <br />
&nbsp;zmyliyu&nbsp; Tom&nbsp;&nbsp;&nbsp; 这怎么办呢。 <br />
&nbsp;Tom&nbsp; zmyliyu&nbsp;&nbsp;&nbsp; 我现在有3种，两类方法来处理这个问题 <br />
&nbsp;zmyliyu&nbsp; Tom&nbsp;&nbsp;&nbsp; 往不吝赐教呀。 <br />
&nbsp;zmyliyu&nbsp; Tom&nbsp;&nbsp;&nbsp; 望 <br />
&nbsp;Tom&nbsp; zmyliyu&nbsp;&nbsp;&nbsp; 其实最简单的就是在你的单据表添加一个字段，用来在你启动流程的时候，把流程实例ID纪录下来，这样你就可以知道单据在哪里了。不过这样就是耦合高了点，让流程和订单细节联系到一起了 <br />
&nbsp;zmyliyu&nbsp; Tom&nbsp;&nbsp;&nbsp; 恩，是的。但是这个是必然的。也是合理的。 <br />
&nbsp;zmyliyu&nbsp; Tom&nbsp;&nbsp;&nbsp; 还有更好的办法么。 <br />
&nbsp;Tom&nbsp; zmyliyu&nbsp;&nbsp;&nbsp; 当然，你还有另外一个办法 <br />
&nbsp;zmyliyu&nbsp; Tom&nbsp;&nbsp;&nbsp; 不过，审核人员怎么知道我审核的是哪个定单呢。 <br />
&nbsp;Tom&nbsp; zmyliyu&nbsp;&nbsp;&nbsp; 这个方法应该会比较好一点，耦合小一些 <br />
&nbsp;zmyliyu&nbsp; Tom&nbsp;&nbsp;&nbsp; 因为审核的TASK和填写的TASK是不一样的。 <br />
&nbsp;zmyliyu&nbsp; Tom&nbsp;&nbsp;&nbsp; 恩。还有什么方法呀。 <br />
&nbsp;Tom&nbsp; zmyliyu&nbsp;&nbsp;&nbsp; 先回答你上面一个问题，你做的关联是processInstanceId和订单Id，所以这个跟哪个task没有关系，只要是同一个ProcessInstance就可以了 <br />
&nbsp;zmyliyu&nbsp; Tom&nbsp;&nbsp;&nbsp; 哦。 这个是可以的。 <br />
&nbsp;zmyliyu&nbsp; Tom&nbsp;&nbsp;&nbsp; ProcessInstance里头去配置一些自己的表，因为我觉得去设置一些流程变量的话，不便于以后升级。 <br />
&nbsp;Tom&nbsp; zmyliyu&nbsp;&nbsp;&nbsp; ？ <br />
&nbsp;Tom&nbsp; zmyliyu&nbsp;&nbsp;&nbsp; ProcessInstance里头去配置一些自己的表？什么意思 <br />
&nbsp;zmyliyu&nbsp; Tom&nbsp;&nbsp;&nbsp; 就是建立一个自己的表，和ProcessInstance做关联，存储一些流程公用信息。 <br />
&nbsp;Tom&nbsp; zmyliyu&nbsp;&nbsp;&nbsp; 嗯，是这样 <br />
&nbsp;Tom&nbsp; zmyliyu&nbsp;&nbsp;&nbsp; 不会给升级带来什么麻烦啊 <br />
&nbsp;zmyliyu&nbsp; Tom&nbsp;&nbsp;&nbsp; 恩。现在也只能那么处理了。 <br />
&nbsp;Tom&nbsp; zmyliyu&nbsp;&nbsp;&nbsp; 不然，还有一个办法，就是所以的信息都用流程变量来保存，这样就不用见表了 <br />
&nbsp;zmyliyu&nbsp; Tom&nbsp;&nbsp;&nbsp; 是的。但是这样就可能增加了系统偶合。 <br />
&nbsp;zmyliyu&nbsp; Tom&nbsp;&nbsp;&nbsp; 毕竟这个是流程相关数据，和流程本生来说没有关系。而且偏应用数据。 <br />
&nbsp;Tom&nbsp; zmyliyu&nbsp;&nbsp;&nbsp; 你要把订单和流程实例联系在一起，本身就是一种耦合，如果不然，就成了两个没有关系的东西了，适当的耦合是必须也是必要的 <br />
&nbsp;zmyliyu&nbsp; Tom&nbsp;&nbsp;&nbsp; 所以，个人认为建立表比较合适，如果要影响流程流转的，考虑用变量方式去处理比较合适的。 <br />
&nbsp;zmyliyu&nbsp; Tom&nbsp;&nbsp;&nbsp; 对。就是一些接口处理的。 <br />
&nbsp;Tom&nbsp; zmyliyu&nbsp;&nbsp;&nbsp; 嗯，我现在就使建表的 <br />
&nbsp;zmyliyu&nbsp; Tom&nbsp;&nbsp;&nbsp; 我现在正在设计表。呵呵。 <br />
&nbsp;zmyliyu&nbsp; Tom&nbsp;&nbsp;&nbsp; 现在正头痛呢。 <br />
&nbsp;zmyliyu&nbsp; Tom&nbsp;&nbsp;&nbsp; 对了。我不想使用POOLEDACTOR，感觉那个东西把事情搞麻烦了。 <br />
&nbsp;Tom&nbsp; zmyliyu&nbsp;&nbsp;&nbsp; hoho，是阿，有很多的细节的问题需要考虑。我现在也还有很多的细节要处理 <br />
&nbsp;zmyliyu&nbsp; Tom&nbsp;&nbsp;&nbsp; 因为分派任务来说，最后一定是给一个人处理。 <br />
&nbsp;Tom&nbsp; zmyliyu&nbsp;&nbsp;&nbsp; 但是如果你不用的话，你就不能实现用户和任务N：1的关系。 <br />
&nbsp;zmyliyu&nbsp; Tom&nbsp;&nbsp;&nbsp; ACTORID可以存放角色信息。然后通过角色分派给用户来处理。 <br />
&nbsp;zmyliyu&nbsp; Tom&nbsp;&nbsp;&nbsp; 可以的。 <br />
&nbsp;zmyliyu&nbsp; Tom&nbsp;&nbsp;&nbsp; 或则通过用户来获取角色任务。这个问题就解决了。 <br />
&nbsp;zmyliyu&nbsp; Tom&nbsp;&nbsp;&nbsp; 一般来说，一个任务不会分给多个角色来处理。 <br />
&nbsp;Tom&nbsp; zmyliyu&nbsp;&nbsp;&nbsp; 虽然是一个人处理，但是有可以是N个人都可以处理这个任务，所以，虽然最后都是一个人处理，但是在TaskList中必须要N个人都能看到Task <br />
&nbsp;zmyliyu&nbsp; Tom&nbsp;&nbsp;&nbsp; 恩，是的。这个是没有问题的。可以通过角色列表看到的。 <br />
&nbsp;Tom&nbsp; zmyliyu&nbsp;&nbsp;&nbsp; hoho，如果你的系统不存在N个角色处理一个任务的情况，那么你可以只用Actor来处理 <br />
&nbsp;zmyliyu&nbsp; Tom&nbsp;&nbsp;&nbsp; 恩，是的。这样我感觉不错的。 <br />
&nbsp;Tom&nbsp; zmyliyu&nbsp;&nbsp;&nbsp; 但是你还是必须面对一个问题，就是你如果使用Actor来处理，你必须在一个人完成这个Task的时候，把这个Task的Actor改称实际处理人的userId，而不是角色，否则，你跟踪审批信息的时候，就会有不知道究竟是谁处理了这个Task的麻烦了。 <br />
&nbsp;zmyliyu&nbsp; Tom&nbsp;&nbsp;&nbsp; 不过SWIMLANE，的确是一个更为妥善的解决办法的。 <br />
&nbsp;zmyliyu&nbsp; Tom&nbsp;&nbsp;&nbsp; 考虑到以后升级，呵呵。JBPM里头的表还真不敢乱放信息。呵呵。 <br />
&nbsp;Tom&nbsp; zmyliyu&nbsp;&nbsp;&nbsp; 嗯，我基本是不考虑去改动JBPM自身的表 <br />
&nbsp;zmyliyu&nbsp; Tom&nbsp;&nbsp;&nbsp; 我也是的。自己增加表，然后增加补充定义是个好办法。 <br />
&nbsp;Tom&nbsp; zmyliyu&nbsp;&nbsp;&nbsp; bingo <br />
&nbsp;zmyliyu&nbsp; Tom&nbsp;&nbsp;&nbsp; ？？？呵呵。什么意思哦。 <br />
&nbsp;Tom&nbsp; zmyliyu&nbsp;&nbsp;&nbsp; yes！好！正确！等等，挺复杂的，就是表示因为做对什么事情而激动 <br />
&nbsp;zmyliyu&nbsp; Tom&nbsp;&nbsp;&nbsp; 我现在定义了一部分了。好多问题还在想。 <br />
&nbsp;zmyliyu&nbsp; Tom&nbsp;&nbsp;&nbsp; 对了。关于委托，还有就是回退处理，你是怎么考虑的呢。 <br />
&nbsp;Tom&nbsp; zmyliyu&nbsp;&nbsp;&nbsp; 会退基本还是使用fork来处理，至于委托，我是想在自己的系统中实现，也就相当于自己定义，实现 <br />
&nbsp;Tom&nbsp; zmyliyu&nbsp;&nbsp;&nbsp; 会退基本还是使用fork来处理，至于委托，我是想在自己的系统中实现，也就相当于自己定义，实现&nbsp; <br />
&nbsp;zmyliyu&nbsp; Tom&nbsp;&nbsp;&nbsp; 对的。你提到的，比如审核返回，然后需要返回给处理者本人的。这个也许需要考虑的。很合理，但是不知道怎么实现好。 <br />
&nbsp;Tom&nbsp; zmyliyu&nbsp;&nbsp;&nbsp; 恩，这个我已经实现了，hoho，这个主题我会写道blog上面去的，你要是有兴趣，可以去看看，就这两天吧，我就写上去;) <br />
&nbsp;zmyliyu&nbsp; Tom&nbsp;&nbsp;&nbsp; 恩，好的。需要加其他表，么。 <br />
&nbsp;zmyliyu&nbsp; Tom&nbsp;&nbsp;&nbsp; 我想联系流程实例ID，然后就是TASKID然后做一个记录，基本就够了。 <br />
&nbsp;zmyliyu&nbsp; Tom&nbsp;&nbsp;&nbsp; 但是细节还需要好好考虑的。 <br />
&nbsp;Tom&nbsp; zmyliyu&nbsp;&nbsp;&nbsp; 不需要多加表 <br />
&nbsp;Tom&nbsp; zmyliyu&nbsp;&nbsp;&nbsp; 嗯，你的思路也可以，不过加太多表也不是个办法 <br />
&nbsp;zmyliyu&nbsp; Tom&nbsp;&nbsp;&nbsp; 恩，是的。 <br />
&nbsp;zmyliyu&nbsp; Tom&nbsp;&nbsp;&nbsp; 我加了流程分类表。 <br />
&nbsp;zmyliyu&nbsp; Tom&nbsp;&nbsp;&nbsp; 然后加了5个左右的表。 <br />
&nbsp;Tom&nbsp; zmyliyu&nbsp;&nbsp;&nbsp; 我加了3个 <br />
&nbsp;zmyliyu&nbsp; Tom&nbsp;&nbsp;&nbsp; 流程分类你怎么处理的呢。 <br />
&nbsp;Tom&nbsp; zmyliyu&nbsp;&nbsp;&nbsp; 不好意思，手头上有点活，下次聊？ <br />
&nbsp;zmyliyu&nbsp; Tom&nbsp;&nbsp;&nbsp; 好的。要得哈。 <br />
&nbsp;Tom&nbsp; zmyliyu&nbsp;&nbsp;&nbsp; 嗯！下次聊！拜拜 <br />
&nbsp;zmyliyu&nbsp; Tom&nbsp;&nbsp;&nbsp; S Y <br />
</font></font></p>
          <br/>
          <span style="color:red;">
            <a href="http://tomkoo.javaeye.com/blog/35423#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>Wed, 22 Nov 2006 09:16:55 +0800</pubDate>
        <link>http://tomkoo.javaeye.com/blog/35423</link>
        <guid>http://tomkoo.javaeye.com/blog/35423</guid>
      </item>
      <item>
        <title>JBPM流程通过Aciton动态创建TaskInstance来实现“会签”（续）</title>
        <author>tomkoo</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://tomkoo.javaeye.com">tomkoo</a>&nbsp;
          链接：<a href="http://tomkoo.javaeye.com/blog/34204" style="color:red;">http://tomkoo.javaeye.com/blog/34204</a>&nbsp;
          发表时间: 2006年11月14日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          前面写过一篇文章《JBPM流程通过Aciton动态创建TaskInstance来实现“会签”》，不过那篇文章可以说是一个大体思路的简单实现，并不完整，也有不少朋友提出了不少的问题。因为做事要善始善终，所以再次贴出这一主题，把会签进行到底。<br /><br /><span style="color: green"><strong>参考文章：</strong></span><br /><a href="http://tomkoo.javaeye.com/blog/24690" target="_blank">JBPM流程通过Aciton动态创建TaskInstance来实现“会签”</a><br /><a href="http://tomkoo.javaeye.com/blog/34142" target="_blank">JBPM通过AssignmentHandler绑定自定义用户模型实现用户授权（1）</a><br /><br />第一步还是给出一个新的ProcessDefinition.xml流程定义文件：<br /><br /><pre name="code" class="java">&lt;?xml version="1.0" encoding="UTF-8"?>

&lt;process-definition xmlns="urn:jbpm.org:jpdl-3.1" name="资金归集">

	&lt;start-state name="启动">
		&lt;transition name="" to="制单">&lt;/transition>
	&lt;/start-state>

	&lt;task-node name="制单">
		&lt;task name="制单">
			&lt;assignment actor-id="#{processStarter}">&lt;/assignment>
		&lt;/task>
		&lt;transition name="送复核" to="复核">&lt;/transition>
	&lt;/task-node>

	&lt;task-node name="复核">
		&lt;task name="复核">
			&lt;assignment class="com.sky.plugin.jbpm.def.ActorsHandel">
			&lt;/assignment>
		&lt;/task>
		&lt;transition name="拒绝复核" to="制单">&lt;/transition>
		&lt;transition name="提交审批" to="审批">&lt;/transition>
	&lt;/task-node>

	&lt;task-node name="审批" signal="last-wait" create-tasks="false" end-tasks="true">
		&lt;task name="审批">

		&lt;/task>
		&lt;event type="node-enter">
			&lt;action name="createInstance"
				class="com.sky.plugin.jbpm.def.DynamicCreateTaskInstance">
			&lt;/action>
		&lt;/event>

		&lt;event type="task-end">
			&lt;action name="createInstance"
				class="com.sky.plugin.jbpm.def.ConuntersignActionHandler">
			&lt;/action>
		&lt;/event>

		&lt;transition name="同意" to="结束">
			&lt;action name="createInstance"
				class="com.sky.plugin.jbpm.def.TestActionHandel">
			&lt;/action>
		&lt;/transition>
		&lt;transition name="拒绝到复核人" to="复核">&lt;/transition>
	&lt;/task-node>

	&lt;end-state name="结束">&lt;/end-state>


&lt;/process-definition></pre><br /><br />这里除了“文章1”说到要注意的地方外，还要注意的两个地方是：<br /><ul><br /><br />1. &lt;event type="node-enter"> <br />   进入流程节点的时候，执行ActionHandler类com.sky.plugin.jbpm.def.DynamicCreateTaskInstance，用来动态生成TaskInstance。<br />2. &lt;event type="task-end"><br />Task结束的时候调用com.sky.plugin.jbpm.def.ConuntersignActionHandler进行会签处理。判断会签路径来决定会签的执行和走向。<br /></ul><br /><br /><span style="color: brown"><strong>com.sky.plugin.jbpm.def.DynamicCreateTaskInstance</strong></span><br /><pre name="code" class="java">
public class DynamicCreateTaskInstance implements ActionHandler {
	
	private static final long serialVersionUID = 1L;

	public void execute(ExecutionContext context) throws Exception {
		
		ProcessDefinition processDefinition = context.getProcessDefinition();

		TaskNode taskNode = (TaskNode) context.getNode();
		Task task = (Task)taskNode.getTasks().iterator().next();

		Long processDefinitionId = processDefinition.getId();
		Long taskId = task.getId();
		
		Token token = context.getToken();
		TaskMgmtInstance tmi = context.getTaskMgmtInstance();
		
		//获取自定义的进行会签的人员
		ServiceFactory serviceFactory = ServiceFactory.getInstance();
		ProcessService ps = serviceFactory.getProcessService();
		String[] actors = ps.loadTaskActors(processDefinitionId, taskId);
		
		//根据会签人员，每人创建一个TaskInstance
		for(String actor : actors){
			tmi.createTaskInstance(task, token).setActorId(actor);
		}
	}
}
</pre><br /><br /><strong><span style="color: brown">com.sky.plugin.jbpm.def.ConuntersignActionHandler</span></strong><br /><pre name="code" class="java">
public class ConuntersignActionHandler implements ActionHandler {

	private static final long serialVersionUID = 1L;

	@SuppressWarnings("unchecked")
	public void execute(ExecutionContext context) throws Exception {

		Token token = context.getToken();

		TaskMgmtInstance tmi = context.getTaskMgmtInstance();

		Collection&lt;TaskInstance> unfinishedTasks = tmi
				.getUnfinishedTasks(token);

		Object variable = context.getVariable("selectedTransition");
		String selectedTransition;
		if (variable == null) {
			throw new RuntimeException(
					"Jbpm transition error: user selected transition is null!");
		} else {
			// 获取当前TaskInstance选择的路径
			selectedTransition = variable.toString();
		}

		// 如果用户选择的路径是流程定义中制定的不通过的路径，则自动完成余下所有的会签Task并转到相应路径
		if (selectedTransition.equals("拒绝到复核人")) {
			for (TaskInstance unfinishedTaskInstance : unfinishedTasks) {
				// 把被结束的没有完成的TaskInstance的ActorId改为automatic complete
				if (!unfinishedTaskInstance.hasEnded()) {
					unfinishedTaskInstance.setActorId("automatic complete");
					unfinishedTaskInstance.end("拒绝到复核人");
				}
			}
		}
	}

}
</pre><br /><br />这个类对于会签是至关重要的，要通过这个Action来判断会签的情况。在这个Action中有这样几句代码：<br /><pre name="code" class="java">
Object variable = context.getVariable("selectedTransition");
		String selectedTransition;
		if (variable == null) {
			throw new RuntimeException(
					"Jbpm transition error: user selected transition is null!");
		} else {
			// 获取当前TaskInstance选择的路径
			selectedTransition = variable.toString();
		}
</pre><br />其中的selectedTransition是用户选择的路径，也就是通过这个来判断会签的用户选择了“同意”或者“拒绝到复核人”，你可以通过流程变量的形式来保存。<br /><br />如果“同意”，则继续下去，直到该TaskNode中所有的TaskInstance完成以后，通过会签，继续下去，如果选择“拒绝到复核人”，则会自动完成余下的所有TaskInstance，然后转到Transition“拒绝到复核人”，会签不通过。<br />其中有一句,设置所有自动完成的TaskInstance的Actor为“automatic complete”，这个可以解决在“以办事务”中出现自动完成的任务（TaskInstance）<br /><pre name="code" class="java">unfinishedTaskInstance.setActorId("automatic complete");</pre><br /><br />到这里整个会签的实现都在这里了，行文有点乱。哈哈！
          <br/>
          <span style="color:red;">
            <a href="http://tomkoo.javaeye.com/blog/34204#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, 14 Nov 2006 12:08:00 +0800</pubDate>
        <link>http://tomkoo.javaeye.com/blog/34204</link>
        <guid>http://tomkoo.javaeye.com/blog/34204</guid>
      </item>
      <item>
        <title>JBPM通过AssignmentHandler绑定自定义用户模型实现用户授权（1）</title>
        <author>tomkoo</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://tomkoo.javaeye.com">tomkoo</a>&nbsp;
          链接：<a href="http://tomkoo.javaeye.com/blog/34142" style="color:red;">http://tomkoo.javaeye.com/blog/34142</a>&nbsp;
          发表时间: 2006年11月14日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          在JBPM中定义了一个简单的？Role-〉User的用户模型。但是在实际项目中，我们的用户模型可能远比这个模型复杂，或者有很大的差异。所以也就有了这篇文章的主题。<br /><br /><strong><span style="color: brown">这篇文章是受一名QQ昵称为“老结赖”的朋友的托付写的，希望可以帮到他。</span></strong><br /><br />言归正传，在JBPM中是通过Actor和PooledActor来对任务进行授权的。其中也牵涉到了Swimlane的概念（具体概念会在另一片文章中说明）。由于在JBPM中并没有把Task的授权强行跟Actor和PooledActor进行关联，这也就让我们嵌入自己的用户模型成为了可能。<br /><br />废话少说，先给出一个示例流程：<br /><br /><pre name="code" class="java">

&lt;?xml version="1.0" encoding="UTF-8"?>

&lt;process-definition xmlns="urn:jbpm.org:jpdl-3.1" name="资金归集">

	&lt;start-state name="启动">
		&lt;transition name="" to="制单">&lt;/transition>
	&lt;/start-state>

	&lt;task-node name="制单">
		&lt;task name="制单">
			&lt;assignment actor-id="#{processStarter}">&lt;/assignment>
		&lt;/task>
		&lt;transition name="送复核" to="复核">&lt;/transition>
	&lt;/task-node>

	&lt;task-node name="复核">
		&lt;task name="复核">
			&lt;assignment class="com.sky.plugin.jbpm.def.ActorsHandel">
			&lt;/assignment>
		&lt;/task>
		&lt;transition name="拒绝复核" to="制单">&lt;/transition>
		&lt;transition name="提交审批" to="审批">&lt;/transition>
	&lt;/task-node>

	&lt;task-node name="审批">
		&lt;task name="审批">
			&lt;assignment class="com.sky.plugin.jbpm.def.ActorsHandel">
			&lt;/assignment>
		&lt;/task>
		&lt;transition name="同意" to="结束">
		&lt;transition name="拒绝到复核人" to="复核">&lt;/transition>
	&lt;/task-node>
	
	&lt;end-state name="结束">&lt;/end-state>
	
&lt;/process-definition>

</pre><br /><br />其中有几点地方是我们要注意到的，也就是我们实现自定义用户模型需要做到的地方。在这里先提一下，然后再一一解释。<br /><ul><br />1. &lt;assignment actor-id="#{processStarter}">&lt;/assignment> 确定流程的发起者<br />2. &lt;assignment class="com.sky.plugin.jbpm.def.ActorsHandel"> 通过AssignHandler动态的对流程实例定义Actor<br /></ul><br /><br />流程中，通过一个变量#{processStarter}来对整个流程的第一个Task进行授权，那么这个授权是在启动流程的时候一起进行的。也就是说这个#{processStarter}的值应该是系统中启动流程的当前用户。<br /><br />启动流程代码如下：<br /><pre name="code" class="java">
	public Long startProcess(final Long processDefinitionId,
			final String username) {
		return (Long)jbpmTemplate.execute(new JbpmCallback() {

			public Object doInJbpm(JbpmContext jbpmContext)
					throws JbpmException {
				GraphSession graphSession = jbpmContext.getGraphSession();
				ProcessDefinition processDefinition = graphSession
						.loadProcessDefinition(processDefinitionId);

				ProcessInstance processInstance = new ProcessInstance(
						processDefinition);
				//设置流程发起人
				processInstance.getContextInstance().setVariable("processStarter",username);
				
				processInstance.signal();
				TaskInstance taskInstance = (TaskInstance) processInstance
						.getTaskMgmtInstance().getTaskInstances().iterator()
						.next();
				taskInstance.setActorId(username);
				taskInstance.setVariable("processStarter",username);

				// taskInstance.end();
				// Save the process instance along with the task instance
				jbpmContext.save(processInstance);
				
				return processInstance.getId();
			}

		});
	}</pre><br />注：其中processInstance.getContextInstance().setVariable("processStarter",username);则是把系统当前用户设置到流程中。<strong>这里有一点跟别的地方不一样的地方，那就是这个流程没有&lt;startTask>&lt;/startTask>，而是用一个TaskNode作为startTask，这里是由于我的系统中有特殊的要求。如果你不需要的话，你可以用startTask代替，都是一样的处理。</strong><br /><br />接着，进入最关键的部分，也就是真正实现Task的用户可配置，这样的话，需要额外的维护一张Task和自定义用户模型中user的映射表。<br /><br />映射表结构如下：<br /><br />id---processDefinitionId---taskId---taskName---actors<br />1----------1--------------------------1--------制单--------1001<br />2----------1--------------------------2--------复核--------1002,1003<br />3----------1--------------------------3--------审批--------1004,1005,1006<br /><br />其它字段的意思就不用说了，其中actors字段就是你用户模型中的用户名或者userId。[b<u><strong>当然这里是很灵活的，如果你要和你系统中的Role绑定，也同样可以这样实现，只要变通一点就OK了，这里就不罗嗦了。</strong></u><br /><br /><strong><span style="color: brown">下面进入最重要的部分，也就是通过AssignHandler进行动态授权。代码如下：</span></strong><br /><pre name="code" class="java">package com.sky.plugin.jbpm.def;

public class ActorsHandel implements AssignmentHandler {

	private static final long serialVersionUID = 1L;

	public void assign(Assignable assignable, ExecutionContext context)
			throws Exception {

		ProcessDefinition processDefinition = context.getProcessDefinition();
		TaskInstance taskInstance = context.getTaskInstance();
		Task task = taskInstance.getTask();

		Long processDefinitionId = processDefinition.getId();
		Long taskId = task.getId();
		
		//读取数据库该任务的授权，分配给该任务Task,也就是前面那张表中的记录
		//ps.loadTaskActors(processDefinitionId, taskId)是自定义方法用来读取
		//授权信息
		
		ServiceFactory serviceFactory = ServiceFactory.getInstance();
		ProcessService ps = serviceFactory.getProcessService();
		String[] actors = ps.loadTaskActors(processDefinitionId, taskId);
		assignable.setPooledActors(actors);
	}
}</pre><br /><br />这样就完成了Jbpm同自定义用户模型的绑定，以后就是处理Task了，但是这里只是简单的实现，还有很多的东西需要注意。比如：流程被打回（审批不通过），只能回到前一个提交的人那里，而不是第一次流程定义的所有的actors等等问题。这个问题我将在“<strong>JBPM通过AssignmentHandler绑定自定义用户模型实现用户授权（2）</strong>”中进行说明。<br /><br /><span style="color: brown"><strong>“老结赖”，这篇我冒生命危险，花了1个小时的上班时间写的东东希望可以帮到你。</strong></span>
          <br/>
          <span style="color:red;">
            <a href="http://tomkoo.javaeye.com/blog/34142#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, 14 Nov 2006 10:38:00 +0800</pubDate>
        <link>http://tomkoo.javaeye.com/blog/34142</link>
        <guid>http://tomkoo.javaeye.com/blog/34142</guid>
      </item>
      <item>
        <title>项目进度：又是一周末来到</title>
        <author>tomkoo</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://tomkoo.javaeye.com">tomkoo</a>&nbsp;
          链接：<a href="http://tomkoo.javaeye.com/blog/32396" style="color:red;">http://tomkoo.javaeye.com/blog/32396</a>&nbsp;
          发表时间: 2006年11月04日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          好快！时间过得好快啊！一周就这样结束了。可是这个星期的工作又没有完成。<br /><br />不知道在项目管理上出了什么问题，进度总是赶不上。本来安排一周做完的工作，总是不能在一周内完成。<br /><br />我突然觉得自己的精力真的好有限，一边做项目管理，一边还要做技术攻关（JBPM），还要监测代码质量，总是会感觉里不从心。<br />我想在小公司做Team Leader都会是这样的吧？到底要怎么做才能兼顾好管理和开发，而且还是要花时间的技术学习？往往在刚刚进入状态的时候就被人打断，然后也许一个小时后才能回到自己位置上，先前的思路又乱了。有的时候看看我们的工作结果真的是很不能令我满意，我不得不抽出时间，帮其他人修改程序，讲解实现。这样，这样，我的时间就慢慢的消逝了。结果一天下来还是没有多大的进展。<br /><br />到底出了什么问题？我该如何来解决？<br /><br />神啊！我吧！
          <br/>
          <span style="color:red;">
            <a href="http://tomkoo.javaeye.com/blog/32396#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>Sat, 04 Nov 2006 09:53:12 +0800</pubDate>
        <link>http://tomkoo.javaeye.com/blog/32396</link>
        <guid>http://tomkoo.javaeye.com/blog/32396</guid>
      </item>
      <item>
        <title>如何实现双（多）语种网站内容的国际化？</title>
        <author>tomkoo</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://tomkoo.javaeye.com">tomkoo</a>&nbsp;
          链接：<a href="http://tomkoo.javaeye.com/blog/31973" style="color:red;">http://tomkoo.javaeye.com/blog/31973</a>&nbsp;
          发表时间: 2006年11月01日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          如何实现双（多）语种网站，应该也是一个国际化问题中必须要解决的一个问题。<br /><br />现在用Java都很容易实现国际化，比如中Struts中，如果要实现国际化，我们会配置不同的资源文件，类似如下这般：<br /><br /><ul><br />ApplicationResources.properties<br />ApplicationResources_zh.properties<br /></ul><br /><br />这样我们就可以解决国际化的问题，但是有一个问题。这样应该说只是解决了“软件”本生的国际化的问题，而并没有解决用户的国际化问题。也就是说，我们这一套软件可以给中国人，美国人，甚至小日本用，但是用这套软件的客户，如果想这套系统既给中国人用，也给其他国家的人用，那就出问题了。<br /><br />问题就是：我们现在的国际化只是做到了“软件”本身的国际化，但是“内容”的国际化却没有做到。<br /><br />现在正在给深圳雅利达公司做他们的中英文网站，于是想到了这个问题。传统的解决方案是做两（N）套一样的系统，用来连接不同语种的数据库。但是这样会不会太麻烦了点？那要是是Microsoft这样的企业，岂不是要做死人？<br /><br />我想，数据库应该是要多套的，但是应用程序就一套吧，这样，至少我们开发牛要轻松点吧。<br /><br />不过现在还没有太多的思路。
          <br/>
          <span style="color:red;">
            <a href="http://tomkoo.javaeye.com/blog/31973#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>Wed, 01 Nov 2006 13:56:25 +0800</pubDate>
        <link>http://tomkoo.javaeye.com/blog/31973</link>
        <guid>http://tomkoo.javaeye.com/blog/31973</guid>
      </item>
      <item>
        <title>我的文章也被“D版”了！</title>
        <author>tomkoo</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://tomkoo.javaeye.com">tomkoo</a>&nbsp;
          链接：<a href="http://tomkoo.javaeye.com/blog/29548" style="color:red;">http://tomkoo.javaeye.com/blog/29548</a>&nbsp;
          发表时间: 2006年10月23日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          最近一直都在研究JBPM，有了一些成果，我也把自己的心得放到Blog上面，好让有需要的同志们参考参考。<br /><br />今天在Google上查资料的时候，发现了一篇和我写的《JBPM 实现“会签”的两种思路》同名的Bolg文章。于是就去看了看。链接如下：<a href="http://www.javaeye.com/blog/24637" target="_blank">http://www.javaeye.com/blog/24637</a>。去看了才知道，原来是我自己的文章。开始挺高兴的，我的文章也有人引用了，这也是对我的文章的肯定啊！谁知道我找遍了整篇文章，也没有找到关于“引用”的一丁点信息。唉！看来是被人D版了！<br /><br />虽然“引用”和“抄袭”之间只有一步之遥，但是给文章作者的感受却是千壤之别。<br /><br />以前虽然b4抄袭的行为，但是却没有什么感觉。现在才知道这样的感觉，真的很不爽！
          <br/>
          <span style="color:red;">
            <a href="http://tomkoo.javaeye.com/blog/29548#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>Mon, 23 Oct 2006 18:39:59 +0800</pubDate>
        <link>http://tomkoo.javaeye.com/blog/29548</link>
        <guid>http://tomkoo.javaeye.com/blog/29548</guid>
      </item>
      <item>
        <title>婚后第一次报到！</title>
        <author>tomkoo</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://tomkoo.javaeye.com">tomkoo</a>&nbsp;
          链接：<a href="http://tomkoo.javaeye.com/blog/28415" style="color:red;">http://tomkoo.javaeye.com/blog/28415</a>&nbsp;
          发表时间: 2006年10月18日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          放完婚假，已经上班了3天了，处理了一些工作上的事情，也处理了一些私人的事情，做的感觉就是结婚比上班还要累，HOHO。就冲这个我也不结第二次了（可别被老婆看到）！<br /><br />现在离CMCS3.0交货的时间又近了点了，虽然以前很多的技术难题都已经一一攻破，但是还有两点让我寝食难安啊！<br /><br /><ul><br />1. 工作流的引入，使项目的难度增大了不少，虽然现在已经可以开发简单的流程。但是距离“灵活运用、随心所欲”还有很长的路要走。例如：刚刚解决了“会签”的问题，又来了“流程回收”。唉！还得熬！<br /></ul><br /><br /><ul><br />2. 整个开发部都是“纯种”的开发人员，对于美工这样的活，就像一个大南瓜——找不到从哪里下口。这个啊，还得熬！<br /><br /></ul><br /><br /><br />熬啊！什么时候才能“拨开乌云见青天啊”！
          <br/>
          <span style="color:red;">
            <a href="http://tomkoo.javaeye.com/blog/28415#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>Wed, 18 Oct 2006 18:57:05 +0800</pubDate>
        <link>http://tomkoo.javaeye.com/blog/28415</link>
        <guid>http://tomkoo.javaeye.com/blog/28415</guid>
      </item>
      <item>
        <title>今天我结婚！</title>
        <author>tomkoo</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://tomkoo.javaeye.com">tomkoo</a>&nbsp;
          链接：<a href="http://tomkoo.javaeye.com/blog/25508" style="color:red;">http://tomkoo.javaeye.com/blog/25508</a>&nbsp;
          发表时间: 2006年10月03日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          2006年10月3号<br /><br />是我结婚的日子，在这个特殊的日子里，怎么能只顾自己舒服而不写Blog呢？hoho！趁现在还有点时间，赶紧记下点什么。<br /><br />什么呢？<br /><br />哦！<br /><br />“今天我结婚！”<br /><br /><img src="/images/smiles/icon_idea.gif"/><img src="/images/smiles/icon_idea.gif"/><img src="/images/smiles/icon_idea.gif"/><br /><br />hoho！
          <br/>
          <span style="color:red;">
            <a href="http://tomkoo.javaeye.com/blog/25508#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, 03 Oct 2006 09:03:03 +0800</pubDate>
        <link>http://tomkoo.javaeye.com/blog/25508</link>
        <guid>http://tomkoo.javaeye.com/blog/25508</guid>
      </item>
      <item>
        <title>Work Experience ：工作汇报机制</title>
        <author>tomkoo</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://tomkoo.javaeye.com">tomkoo</a>&nbsp;
          链接：<a href="http://tomkoo.javaeye.com/blog/25299" style="color:red;">http://tomkoo.javaeye.com/blog/25299</a>&nbsp;
          发表时间: 2006年09月29日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          【背景】<br /><br />目前，手头上负责着两个项目：CMCS2.0和CMCS3.0。虽然都是资金管控项目，而且3.0是2.0的一个升级。但是由于3.0的技术框架产生了很大的变化，并且2.0已经在维护阶段（但是还有很多的需求要做），3.0却还在研发阶段。所以，除了要管理项目之外，我还要负责3.0的系统设计和主要功能模块的开发。<br /><br />【问题】<br /><br />由于一边要忙于开发，另一边又要随时的去了解各个项目的现状和进展情况。总是感觉没有足够的精力去兼顾好管理和开发工作。尤其是在监控项目进展情况的时候，总是感觉有点疲于奔命，总是需要自己随时去询问才能了解到项目的进展情况。如果不询问就根本无从知道项目的进度，但是如果询问频繁又同样会给开发人员带来反感。到头来，搞不好就会弄得上面说你办事不利，下面的人说你是“吸血鬼”！（还好我还没有弄成这样:D）<br /><br />【转机】<br /><br />由于要请婚假，所以今天和黄老大（公司技术总监）讨论一下，我请假期间的工作安排问题，以及对目前工作的一个汇报。<br /><br />讨论中，提到了中国电信的“主动汇报机制”。上级安排下去的工作，除了上级的询问意外，工作负责人要在适当的时候就该项工作（该段时间工作）的现状、进展情况、遇到问题、解决情况等对领导进行汇报，以让上级可以及时了解到工作的现状，并根据汇报的情况做出决策。对啊！我们现在在项目监控上不就是缺少这样的一个“主动汇报机制”吗？<br /><br />虽然，向上级汇报是大家都知道的，但是我们却老是把汇报的发起者弄错。“汇报机制”的发起者是工作负责人，而不总是分配任务的管理者！每个工作负责人在完成自己相关的任务或者工作进展到一定程度时都必须及时向上级或相关负责人及时的汇报工作情况，以让管理者能够及时的掌握整个项目的进展情况，这样才能针对目前的具体情况做出决策和判断。这样也让管理者减少了不必要的询问工作，使整个项目进展顺利。<br /><br />【解决】<br /><br />在开发部建立“主动汇报机制”，让大家养成工作汇报的习惯。并且把“工作汇报”纳入管理制度。<br /><br /><br />哈哈！希望这个“主动汇报机制”可以解我的燃眉之急！
          <br/>
          <span style="color:red;">
            <a href="http://tomkoo.javaeye.com/blog/25299#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 Sep 2006 13:34:35 +0800</pubDate>
        <link>http://tomkoo.javaeye.com/blog/25299</link>
        <guid>http://tomkoo.javaeye.com/blog/25299</guid>
      </item>
      <item>
        <title>我想休息！！！</title>
        <author>tomkoo</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://tomkoo.javaeye.com">tomkoo</a>&nbsp;
          链接：<a href="http://tomkoo.javaeye.com/blog/25160" style="color:red;">http://tomkoo.javaeye.com/blog/25160</a>&nbsp;
          发表时间: 2006年09月27日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          2006-9-27 17：14：17 本来应该是上班的时间，可是却没有半点的心思上班。最近总这样，虽然手头上的任务几乎快到了“刻不容缓”了。CMCS2.0还有很多的问题要去修改和完善，客户也在嚷个不停；CMCS3.0的开发却因为总总的原因，迟迟不能正常的启动......可还是打不起精神来工作。<br /><br />    虽然晚上静静的躺在床上的时候也暗下决心，明天不能再这样过了，可是到了明天，依旧还是老样子，好像忙忙碌碌的一天，结果什么也没有做，然后混到下班。<br /><br />    也许是最近的事情太多了吧，也许是结婚的事情搞得我有点疲惫了吧。也许过了10.1长假，度了我的婚假回来我的状态能有所改变。也许一切都会好起来的......
          <br/>
          <span style="color:red;">
            <a href="http://tomkoo.javaeye.com/blog/25160#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>Wed, 27 Sep 2006 17:24:40 +0800</pubDate>
        <link>http://tomkoo.javaeye.com/blog/25160</link>
        <guid>http://tomkoo.javaeye.com/blog/25160</guid>
      </item>
      <item>
        <title>“JavaScrip 权威指南”读书笔记（1）</title>
        <author>tomkoo</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://tomkoo.javaeye.com">tomkoo</a>&nbsp;
          链接：<a href="http://tomkoo.javaeye.com/blog/25019" style="color:red;">http://tomkoo.javaeye.com/blog/25019</a>&nbsp;
          发表时间: 2006年09月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          JavaScript中的直接量<br /><br /><br />在JavaScript的数据类型的学习中，直接量的概念贯穿着整个章节。对它的定义是：直接显示出来的数据值叫住“直接量”，“直接量”可以直接复制给变量。<br /><br />在JavaScript中包含以下几种“直接量”：<br /><br />1） 数值型直接量。其中包含整型、浮点型、八进制、十六进制    <br />2） 字符串直接量<br />3） 函数直接量<br />4） 对象直接量<br />5） 数组直接量
          <br/>
          <span style="color:red;">
            <a href="http://tomkoo.javaeye.com/blog/25019#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, 25 Sep 2006 23:03:29 +0800</pubDate>
        <link>http://tomkoo.javaeye.com/blog/25019</link>
        <guid>http://tomkoo.javaeye.com/blog/25019</guid>
      </item>
      <item>
        <title>“JavaScrip 权威指南”读书笔记——背景</title>
        <author>tomkoo</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://tomkoo.javaeye.com">tomkoo</a>&nbsp;
          链接：<a href="http://tomkoo.javaeye.com/blog/25016" style="color:red;">http://tomkoo.javaeye.com/blog/25016</a>&nbsp;
          发表时间: 2006年09月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          以前用JavaScript总是把他当成一种简单的脚本语言，用来做一些简单的数据有效性验证。即使是用到一些更高级的JavaScript应用也只是在网上去搜索人家的源代码来用，基本都是Copy，Paste。对Copy来的代码也是一知半解。所以就更不用说对JavaScript这门语言的理解了。<br />随着AJAX的应用的流行，对JavaScript的应用越来越多，要求也越来越高，这才感觉到自己在JavaScript上的捉襟见肘。<br />于是乎，决定从基础开始重新学习JavaScript。捧起了《JavaScrip 权威指南》。也记录下读书的过程。
          <br/>
          <span style="color:red;">
            <a href="http://tomkoo.javaeye.com/blog/25016#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>Mon, 25 Sep 2006 22:41:37 +0800</pubDate>
        <link>http://tomkoo.javaeye.com/blog/25016</link>
        <guid>http://tomkoo.javaeye.com/blog/25016</guid>
      </item>
      <item>
        <title>Javascript 中三元运算符的用法</title>
        <author>tomkoo</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://tomkoo.javaeye.com">tomkoo</a>&nbsp;
          链接：<a href="http://tomkoo.javaeye.com/blog/24749" style="color:red;">http://tomkoo.javaeye.com/blog/24749</a>&nbsp;
          发表时间: 2006年09月21日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          一直来都对Javascript的三元运算符很迷惑，不知道究竟应该怎么用，大概是受了例如Java这样的语言的影响，总是觉得三元运算符的条件表达式必须返回Boolean类型。就是这个东西让我对Javascript的三元运算符迷惑了许久，今天终于忍受不下去了，于是自己写代码测试了一番，原来它是这样的。<br /><br />三元预算表达式： Condition ? doSomething : doOtherThing ;<br /><br />1. 同所有语言的三元运算一样，Javascript的三元运算同样支持Condition为Boolean类型的情况。当Condition为True的时候，执行doSomething，为False的时候执行doOtherThing。<br /><br />2. 支持Condition为字符串。当Condition=“”的时候，等同于False，执行doOtherThing;当Condition!=“”的时候，等同于True，执行doSomething。<br /><br />3. 支持Condition为对象。当Condition=undefined或者null的时候，等同于False，执行doOtherThing;当Condition!=undefined和null的时候，等同于True，执行doSomething。<br /><br /><br />目前我的总结就是发现了这3中使用方式，是否还有其他的使用方式还不知道。呵呵，不过就算是这样也让我减少了不少看Javascript代码时的疑惑！
          <br/>
          <span style="color:red;">
            <a href="http://tomkoo.javaeye.com/blog/24749#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, 21 Sep 2006 11:24:47 +0800</pubDate>
        <link>http://tomkoo.javaeye.com/blog/24749</link>
        <guid>http://tomkoo.javaeye.com/blog/24749</guid>
      </item>
  </channel>
</rss>