<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>pppppp</title>
    <description></description>
    <link>http://pppppp.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>dojo combobox的autocomplete不支持中文检索问题的解决办法</title>
        <author>pppppp</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://pppppp.javaeye.com">pppppp</a>&nbsp;
          链接：<a href="http://pppppp.javaeye.com/blog/186505" style="color:red;">http://pppppp.javaeye.com/blog/186505</a>&nbsp;
          发表时间: 2008年04月24日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          只需要修改ComboBox.js文件，<br />将if(evt.ctrlKey || evt.altKey || !evt.key){ return; }<br />替换成：<br />if(evt.altKey || (evt.ctrlKey && evt.charCode != 118)){<br />    return;<br />   }即可
          <br/>
          <span style="color:red;">
            <a href="http://pppppp.javaeye.com/blog/186505#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 24 Apr 2008 19:48:05 +0800</pubDate>
        <link>http://pppppp.javaeye.com/blog/186505</link>
        <guid>http://pppppp.javaeye.com/blog/186505</guid>
      </item>
      <item>
        <title>terracotta在hibernate应用上的严重问题</title>
        <author>pppppp</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://pppppp.javaeye.com">pppppp</a>&nbsp;
          链接：<a href="http://pppppp.javaeye.com/blog/156053" style="color:red;">http://pppppp.javaeye.com/blog/156053</a>&nbsp;
          发表时间: 2008年01月15日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          在原有的一个hibernate应用上，使用terracotta做集群，结果意想不到的事情发生了，应用运行后会自动把数据库表中数据清空。<br />实在令人诧异。
          <br/>
          <span style="color:red;">
            <a href="http://pppppp.javaeye.com/blog/156053#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 15 Jan 2008 15:10:50 +0800</pubDate>
        <link>http://pppppp.javaeye.com/blog/156053</link>
        <guid>http://pppppp.javaeye.com/blog/156053</guid>
      </item>
      <item>
        <title>使用JBPM实现动态会签</title>
        <author>pppppp</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://pppppp.javaeye.com">pppppp</a>&nbsp;
          链接：<a href="http://pppppp.javaeye.com/blog/125297" style="color:red;">http://pppppp.javaeye.com/blog/125297</a>&nbsp;
          发表时间: 2007年09月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>原文出处：http://sqz.spaces.live.com/blog/cns!F319B9AFFE33A988!283.entry <br />
目前有很多实现动态会签的文章，但是给人感觉不是很优雅，下面介绍一种实现方式。 <br />
1、流程定义文件： <br />
<process-definition>
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-xml" start="1">
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">process-definition</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="attribute">xmlns</span><span>=</span><span class="attribute-value">&quot;urn:jbpm.org:jpdl-3.1&quot;</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;foreach&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">start-state</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;start&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="tag">&lt;</span><span class="tag-name">task</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;one&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="tag">&lt;/</span><span class="tag-name">task</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="tag">&lt;</span><span class="tag-name">transition</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;a&quot;</span><span>&nbsp;</span><span class="attribute">to</span><span>=</span><span class="attribute-value">&quot;foreachf&quot;</span><span class="tag">&gt;</span><span class="tag">&lt;/</span><span class="tag-name">transition</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="tag">&lt;/</span><span class="tag-name">start-state</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="tag">&lt;</span><span class="tag-name">node</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;foreachf&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">action</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">&quot;com.framework.workflow.jbpm.ForEachFork&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="tag">&lt;</span><span class="tag-name">foreach</span><span class="tag">&gt;</span><span>#{bpm_assignees}</span><span class="tag">&lt;/</span><span class="tag-name">foreach</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">var</span><span class="tag">&gt;</span><span>reviewer</span><span class="tag">&lt;/</span><span class="tag-name">var</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="tag">&lt;/</span><span class="tag-name">action</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">transition</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;review&quot;</span><span>&nbsp;</span><span class="attribute">to</span><span>=</span><span class="attribute-value">&quot;review&quot;</span><span class="tag">&gt;</span><span class="tag">&lt;/</span><span class="tag-name">transition</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="tag">&lt;/</span><span class="tag-name">node</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">task-node</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;review&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="tag">&lt;</span><span class="tag-name">task</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;reviewTask&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">assignment</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">&quot;com.framework.workflow.jbpm.DefaultAssignment&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="tag">&lt;</span><span class="tag-name">actor</span><span class="tag">&gt;</span><span>#{reviewer}</span><span class="tag">&lt;/</span><span class="tag-name">actor</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="tag">&lt;/</span><span class="tag-name">assignment</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="tag">&lt;/</span><span class="tag-name">task</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">transition</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;reject&quot;</span><span>&nbsp;</span><span class="attribute">to</span><span>=</span><span class="attribute-value">&quot;endreview&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="tag">&lt;</span><span class="tag-name">action</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">&quot;com.framework.workflow.jbpm.JoinEndForkedTokens&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="tag">&lt;/</span><span class="tag-name">transition</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="tag">&lt;</span><span class="tag-name">transition</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;approve&quot;</span><span>&nbsp;</span><span class="attribute">to</span><span>=</span><span class="attribute-value">&quot;endreview&quot;</span><span class="tag">&gt;</span><span class="tag">&lt;/</span><span class="tag-name">transition</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="tag">&lt;/</span><span class="tag-name">task-node</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="tag">&lt;</span><span class="tag-name">join</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;endreview&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">transition</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;toend&quot;</span><span>&nbsp;</span><span class="attribute">to</span><span>=</span><span class="attribute-value">&quot;end1&quot;</span><span class="tag">&gt;</span><span class="tag">&lt;/</span><span class="tag-name">transition</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="tag">&lt;/</span><span class="tag-name">join</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">end-state</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;end1&quot;</span><span class="tag">&gt;</span><span class="tag">&lt;/</span><span class="tag-name">end-state</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="tag">&lt;/</span><span class="tag-name">process-definition</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<br />
在这里我们从node节点动态生成任务节点，会签时当有一个是reject时便结束所有节点。 <br />
2、动态派生ForEachFork代码： <br />
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-j" start="1">
    <li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;ForEachFork&nbsp;</span><span class="keyword">implements</span><span>&nbsp;ActionHandler&nbsp;&nbsp;</span></span></li>
    <li class=""><span>{&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="keyword">private</span><span>&nbsp;Element&nbsp;foreach;&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">private</span><span>&nbsp;String&nbsp;var;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="comment">//测试数据</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">private</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;Map&nbsp;map&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;HashMap();&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">static</span><span>{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>List&nbsp;list&nbsp;=&nbsp;<span class="keyword">new</span><span>&nbsp;ArrayList();&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>list.add(<span class="string">&quot;1234&quot;</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>list.add(<span class="string">&quot;2345&quot;</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>list.add(<span class="string">&quot;3456&quot;</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>map.put(<span class="string">&quot;bpm_assignees&quot;</span><span>,&nbsp;list);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>}&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="comment">/**</span>&nbsp;</span></li>
    <li class=""><span><span class="comment">*</span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment"></span>&nbsp;</span></li>
    <li class=""><span><span class="comment">为每个元素创建一个分支</span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment"></span>&nbsp;</span></li>
    <li class=""><span><span class="comment">*</span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">*&nbsp;@param&nbsp;executionContext</span>&nbsp;</span></li>
    <li class=""><span><span class="comment">*&nbsp;@throws&nbsp;Exception</span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="annotation">@SuppressWarnings</span><span>(</span><span class="string">&quot;unchecked&quot;</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;execute(</span><span class="keyword">final</span><span>&nbsp;ExecutionContext&nbsp;executionContext)&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">throws</span><span>&nbsp;Exception&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>{&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="keyword">if</span><span>&nbsp;(foreach&nbsp;==&nbsp;</span><span class="keyword">null</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>{&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="keyword">throw</span><span>&nbsp;</span><span class="keyword">new</span><span>&nbsp;WorkflowException(</span><span class="string">&quot;forEach&nbsp;has&nbsp;not&nbsp;been&nbsp;provided&quot;</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>}&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>List&nbsp;forEachColl&nbsp;=&nbsp;<span class="keyword">null</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>String&nbsp;forEachCollStr&nbsp;=&nbsp;foreach.getTextTrim();&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="keyword">if</span><span>&nbsp;(forEachCollStr&nbsp;!=&nbsp;</span><span class="keyword">null</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>{&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="keyword">if</span><span>&nbsp;(forEachCollStr.startsWith(</span><span class="string">&quot;#{&quot;</span><span>))&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>{&nbsp;&nbsp;</span></li>
    <li class=""><span>String&nbsp;expression&nbsp;=&nbsp;forEachCollStr.substring(<span class="number">2</span><span>,&nbsp;forEachCollStr.length()&nbsp;-</span><span class="number">1</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>forEachColl&nbsp;=&nbsp;(List)map.get(expression);&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>}&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>}&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="keyword">if</span><span>&nbsp;(var&nbsp;==&nbsp;</span><span class="keyword">null</span><span>&nbsp;||&nbsp;var.length()&nbsp;==&nbsp;</span><span class="number">0</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class=""><span>{&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="keyword">throw</span><span>&nbsp;</span><span class="keyword">new</span><span>&nbsp;WorkflowException(</span><span class="string">&quot;forEach&nbsp;variable&nbsp;name&nbsp;has&nbsp;not&nbsp;been&nbsp;provided&quot;</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="comment">//</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="comment">//&nbsp;创建分支</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="comment">//</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>Token&nbsp;rootToken&nbsp;=&nbsp;executionContext.getToken();&nbsp;&nbsp;</span></li>
    <li class="alt"><span>Node&nbsp;node&nbsp;=&nbsp;executionContext.getNode();&nbsp;&nbsp;</span></li>
    <li class=""><span>List&nbsp;forkTransitions&nbsp;=&nbsp;<span class="keyword">new</span><span>&nbsp;ArrayList();&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="comment">//&nbsp;为每一个元素创建一个token</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">for</span><span>&nbsp;(</span><span class="keyword">int</span><span>&nbsp;i&nbsp;=&nbsp;</span><span class="number">0</span><span>;&nbsp;i&nbsp;&lt;&nbsp;node.getLeavingTransitions().size();&nbsp;i++)&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>{&nbsp;&nbsp;</span></li>
    <li class=""><span>Transition&nbsp;transition&nbsp;=&nbsp;(Transition)&nbsp;node.getLeavingTransitions().get(i);&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="keyword">for</span><span>&nbsp;(</span><span class="keyword">int</span><span>&nbsp;iVar&nbsp;=&nbsp;</span><span class="number">0</span><span>;&nbsp;iVar&nbsp;&lt;&nbsp;forEachColl.size();&nbsp;iVar++)&nbsp;&nbsp;</span></span></li>
    <li class=""><span>{&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="comment">//&nbsp;为每一个新token创建一个path</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>String&nbsp;tokenName&nbsp;=&nbsp;getTokenName(rootToken,&nbsp;transition.getName(),&nbsp;iVar);&nbsp;&nbsp;</span></li>
    <li class="alt"><span>Token&nbsp;loopToken&nbsp;=&nbsp;<span class="keyword">new</span><span>&nbsp;Token(rootToken,&nbsp;tokenName);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>loopToken.setTerminationImplicit(<span class="keyword">true</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>executionContext.getJbpmContext().getSession().save(loopToken);&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="comment">//赋予一个新变量</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">final</span><span>&nbsp;ExecutionContext&nbsp;newExecutionContext&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;ExecutionContext(loopToken);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>newExecutionContext.getContextInstance().createVariable(var,&nbsp;forEachColl.get(iVar),&nbsp;loopToken);&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="comment">//&nbsp;记录下每一transition</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>ForkedTransition&nbsp;forkTransition&nbsp;=&nbsp;<span class="keyword">new</span><span>&nbsp;ForkedTransition();&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>forkTransition.executionContext&nbsp;=&nbsp;newExecutionContext;&nbsp;&nbsp;</span></li>
    <li class=""><span>forkTransition.transition&nbsp;=&nbsp;transition;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>forkTransitions.add(forkTransition);&nbsp;&nbsp;</span></li>
    <li class=""><span>}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>}&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="comment">//</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="comment">//&nbsp;转向下一个节点</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="comment">//</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">for</span><span>&nbsp;(ForkedTransition&nbsp;forkTransition&nbsp;:&nbsp;forkTransitions)&nbsp;&nbsp;</span></span></li>
    <li class=""><span>{&nbsp;&nbsp;</span></li>
    <li class="alt"><span>node.leave(forkTransition.executionContext,&nbsp;forkTransition.transition);&nbsp;&nbsp;</span></li>
    <li class=""><span>}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>}&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="comment">/**</span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">*</span>&nbsp;</span></li>
    <li class=""><span><span class="comment"></span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">获得分支token&nbsp;name</span>&nbsp;</span></li>
    <li class=""><span><span class="comment"></span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">*</span>&nbsp;</span></li>
    <li class=""><span><span class="comment">*&nbsp;@param&nbsp;parent</span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">*&nbsp;@param&nbsp;transitionName</span>&nbsp;</span></li>
    <li class=""><span><span class="comment">*&nbsp;@return</span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">protected</span><span>&nbsp;String&nbsp;getTokenName(Token&nbsp;parent,&nbsp;String&nbsp;transitionName,&nbsp;</span><span class="keyword">int</span><span>&nbsp;loopIndex)&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>{&nbsp;&nbsp;</span></li>
    <li class=""><span>String&nbsp;tokenName&nbsp;=&nbsp;<span class="keyword">null</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">if</span><span>&nbsp;(transitionName&nbsp;!=&nbsp;</span><span class="keyword">null</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class=""><span>{&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="keyword">if</span><span>&nbsp;(!parent.hasChild(transitionName))&nbsp;&nbsp;</span></span></li>
    <li class=""><span>{&nbsp;&nbsp;</span></li>
    <li class="alt"><span>tokenName&nbsp;=&nbsp;transitionName;&nbsp;&nbsp;</span></li>
    <li class=""><span>}&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="keyword">else</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>{&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="keyword">int</span><span>&nbsp;i&nbsp;=&nbsp;</span><span class="number">2</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>tokenName&nbsp;=&nbsp;transitionName&nbsp;+&nbsp;Integer.toString(i);&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="keyword">while</span><span>&nbsp;(parent.hasChild(tokenName))&nbsp;&nbsp;</span></span></li>
    <li class=""><span>{&nbsp;&nbsp;</span></li>
    <li class="alt"><span>i++;&nbsp;&nbsp;</span></li>
    <li class=""><span>tokenName&nbsp;=&nbsp;transitionName&nbsp;+&nbsp;Integer.toString(i);&nbsp;&nbsp;</span></li>
    <li class="alt"><span>}&nbsp;&nbsp;</span></li>
    <li class=""><span>}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>}&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="keyword">else</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>{&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="comment">//&nbsp;没有转向</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">int</span><span>&nbsp;size&nbsp;=&nbsp;(&nbsp;parent.getChildren()!=</span><span class="keyword">null</span><span>&nbsp;?&nbsp;parent.getChildren().size()+</span><span class="number">1</span><span>&nbsp;:&nbsp;</span><span class="number">1</span><span>&nbsp;);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>tokenName&nbsp;=&nbsp;Integer.toString(size);&nbsp;&nbsp;</span></li>
    <li class="alt"><span>}&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="keyword">return</span><span>&nbsp;tokenName&nbsp;+&nbsp;</span><span class="string">&quot;.&quot;</span><span>&nbsp;+&nbsp;loopIndex;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>}&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="comment">/**</span>&nbsp;</span></li>
    <li class=""><span><span class="comment">*&nbsp;Fork&nbsp;Transition</span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">private</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;ForkedTransition&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>{&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="keyword">private</span><span>&nbsp;ExecutionContext&nbsp;executionContext;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">private</span><span>&nbsp;Transition&nbsp;transition;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>}&nbsp;&nbsp;&nbsp;</span></li>
</ol>
</div>
<br />
</process-definition>
</p>
<br />
在具体应用中需要灵活的根据业务逻辑需要派生所需要的分支。
<p>&nbsp;</p>
<p>3、DefaultAssignment <br />
进行简单的权限操作，这里面主要是将#{reviewer}值作为actorId进行设置 <br />
4、JoinEndForkedTokens结束所有节点 <br />
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-j" start="1">
    <li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;JoinEndForkedTokens&nbsp;</span><span class="keyword">implements</span><span>&nbsp;ActionHandler&nbsp;&nbsp;</span></span></li>
    <li class=""><span>{&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="keyword">public</span><span>&nbsp;JoinEndForkedTokens()&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>{&nbsp;&nbsp;</span></li>
    <li class=""><span>}&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="comment">/*&nbsp;(non-Javadoc)</span>&nbsp;</span></li>
    <li class=""><span><span class="comment">*&nbsp;@see&nbsp;org.jbpm.graph.def.ActionHandler#execute(org.jbpm.graph.exe.ExecutionContext)</span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;execute(ExecutionContext&nbsp;executionContext)&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>{&nbsp;&nbsp;</span></li>
    <li class=""><span>Token&nbsp;token&nbsp;=&nbsp;executionContext.getToken().getParent();&nbsp;&nbsp;</span></li>
    <li class="alt"><span>Map&nbsp;childTokens&nbsp;=&nbsp;token.getActiveChildren();&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="keyword">for</span><span>&nbsp;(Object&nbsp;childToken&nbsp;:&nbsp;childTokens.values())&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>{&nbsp;&nbsp;</span></li>
    <li class=""><span>cancelToken(executionContext,&nbsp;(Token)childToken);&nbsp;&nbsp;</span></li>
    <li class="alt"><span>}&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>}&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="comment">/**</span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">*</span>&nbsp;</span></li>
    <li class=""><span><span class="comment"></span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">取消&nbsp;token</span>&nbsp;</span></li>
    <li class=""><span><span class="comment"></span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">*</span>&nbsp;</span></li>
    <li class=""><span><span class="comment">*&nbsp;@param&nbsp;executionContext</span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">*&nbsp;@param&nbsp;token</span>&nbsp;</span></li>
    <li class=""><span><span class="comment">*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">protected</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;cancelToken(ExecutionContext&nbsp;executionContext,&nbsp;Token&nbsp;token)&nbsp;&nbsp;</span></span></li>
    <li class=""><span>{&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>Map&nbsp;childTokens&nbsp;=&nbsp;token.getActiveChildren();&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="keyword">for</span><span>&nbsp;(Object&nbsp;childToken&nbsp;:&nbsp;childTokens.values())&nbsp;&nbsp;</span></span></li>
    <li class=""><span>{&nbsp;&nbsp;</span></li>
    <li class="alt"><span>cancelToken(executionContext,&nbsp;(Token)childToken);&nbsp;&nbsp;</span></li>
    <li class=""><span>}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="keyword">if</span><span>&nbsp;(!token.hasEnded())&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>{&nbsp;&nbsp;</span></li>
    <li class=""><span>token.end(<span class="keyword">true</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>}&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>cancelTokenTasks(executionContext,&nbsp;token);&nbsp;&nbsp;</span></li>
    <li class="alt"><span>}&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="comment">/**</span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">*</span>&nbsp;</span></li>
    <li class=""><span><span class="comment"></span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">结束token关联的任务</span>&nbsp;</span></li>
    <li class=""><span><span class="comment"></span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">*</span>&nbsp;</span></li>
    <li class=""><span><span class="comment">*&nbsp;@param&nbsp;executionContext</span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">*&nbsp;@param&nbsp;token</span>&nbsp;</span></li>
    <li class=""><span><span class="comment">*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">protected</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;cancelTokenTasks(ExecutionContext&nbsp;executionContext,&nbsp;Token&nbsp;token)&nbsp;&nbsp;</span></span></li>
    <li class=""><span>{&nbsp;&nbsp;</span></li>
    <li class="alt"><span>TaskMgmtInstance&nbsp;tms&nbsp;=&nbsp;executionContext.getTaskMgmtInstance();&nbsp;&nbsp;</span></li>
    <li class=""><span>Collection&nbsp;tasks&nbsp;=&nbsp;tms.getUnfinishedTasks(token);&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="keyword">for</span><span>&nbsp;(Object&nbsp;task&nbsp;:&nbsp;tasks)&nbsp;&nbsp;</span></span></li>
    <li class=""><span>{&nbsp;&nbsp;</span></li>
    <li class="alt"><span>TaskInstance&nbsp;taskInstance&nbsp;=&nbsp;(TaskInstance)task;&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="keyword">if</span><span>&nbsp;(taskInstance.isBlocking())&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>{&nbsp;&nbsp;</span></li>
    <li class=""><span>taskInstance.setBlocking(<span class="keyword">false</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>}&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="keyword">if</span><span>&nbsp;(taskInstance.isSignalling())&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>{&nbsp;&nbsp;</span></li>
    <li class=""><span>taskInstance.setSignalling(<span class="keyword">false</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>}&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="keyword">if</span><span>&nbsp;(!taskInstance.hasEnded())&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>{&nbsp;&nbsp;</span></li>
    <li class=""><span>taskInstance.end();&nbsp;&nbsp;</span></li>
    <li class="alt"><span>}&nbsp;&nbsp;</span></li>
    <li class=""><span>}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>}&nbsp;&nbsp;</span></li>
    <li class=""><span>}&nbsp;&nbsp;&nbsp;</span></li>
</ol>
</div>
<br />
</p>
<br />
结束所有分支节点任务，流向结束节点。
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://pppppp.javaeye.com/blog/125297#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 19 Sep 2007 14:42:42 +0800</pubDate>
        <link>http://pppppp.javaeye.com/blog/125297</link>
        <guid>http://pppppp.javaeye.com/blog/125297</guid>
      </item>
      <item>
        <title>RedHat Developer Studio初试</title>
        <author>pppppp</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://pppppp.javaeye.com">pppppp</a>&nbsp;
          链接：<a href="http://pppppp.javaeye.com/blog/125302" style="color:red;">http://pppppp.javaeye.com/blog/125302</a>&nbsp;
          发表时间: 2007年08月27日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          试用了一下RedHat Developer Studio的beta版，500多M的文件，真有点赶超.net的味道。<br />对于做web开发来说，确实集成了很多功能，但个人觉得还不是很实用，在简单的页面上还能够做到可视化<br />但是一到复杂的页面还得是在source文件里打拼，看来前面的路还很长。<img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-929507682540082808&page=RSS%3a+RedHat+Developer+Studio%e5%88%9d%e8%af%95&referrer=" border="0" height="1px" alt="" width="1px" /><img src="http://c.live.com/c.gif?NC=31263&amp;NA=1149&amp;PI=88469&amp;RF=&amp;DI=3919&amp;PS=85545&amp;TP=sqz.spaces.live.com&amp;GT1=sqz" height="0px" alt="" style="position:absolute" width="0px" />
          <br/>
          <span style="color:red;">
            <a href="http://pppppp.javaeye.com/blog/125302#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 27 Aug 2007 02:15:46 +0800</pubDate>
        <link>http://pppppp.javaeye.com/blog/125302</link>
        <guid>http://pppppp.javaeye.com/blog/125302</guid>
      </item>
      <item>
        <title>tapestry4.1.2怪异的问题</title>
        <author>pppppp</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://pppppp.javaeye.com">pppppp</a>&nbsp;
          链接：<a href="http://pppppp.javaeye.com/blog/125304" style="color:red;">http://pppppp.javaeye.com/blog/125304</a>&nbsp;
          发表时间: 2007年07月03日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          环境tomcat6:<br />如果应用名称和web.xml配置的servlet名称一致，也就是和{$name}.application名称一致，那么在表单中采用客户端验证时数字验证会不通过，换成服务器验证没有问题。<br />真搞不明白名称一致到底产生了什么作用?<br /><img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-929507682540082808&page=RSS%3a+tapestry4.1.2%e6%80%aa%e5%bc%82%e7%9a%84%e9%97%ae%e9%a2%98&referrer=" border="0" height="1px" alt="" width="1px" /><img src="http://c.live.com/c.gif?NC=31263&amp;NA=1149&amp;PI=88469&amp;RF=&amp;DI=3919&amp;PS=85545&amp;TP=sqz.spaces.live.com&amp;GT1=sqz" height="0px" alt="" style="position:absolute" width="0px" />
          <br/>
          <span style="color:red;">
            <a href="http://pppppp.javaeye.com/blog/125304#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 03 Jul 2007 06:52:59 +0800</pubDate>
        <link>http://pppppp.javaeye.com/blog/125304</link>
        <guid>http://pppppp.javaeye.com/blog/125304</guid>
      </item>
      <item>
        <title>几个优秀的java测试套件</title>
        <author>pppppp</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://pppppp.javaeye.com">pppppp</a>&nbsp;
          链接：<a href="http://pppppp.javaeye.com/blog/125306" style="color:red;">http://pppppp.javaeye.com/blog/125306</a>&nbsp;
          发表时间: 2007年06月01日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          三种单元测试套件：JUnit 、TestNG 、p-unit<br />JUnit 4 和 TestNG 工作起来非常相似，单是TestNG具有JUnit 不具备的功能：<br />1、<a><span>依赖性测试<br /></span>TestNG 利用 <code>Test</code> 注释的 <code> dependsOnMethods </code> 属性来应对测试的依赖性问题。有了这个便利的特性，就可以轻松指定依赖方法。<br /><span>2、</span></a><a><span>良好的测试报告<br /></span>TestNG 在当前目录下自动创建了一个叫做 test-output 的文件夹，并在其中创建了一份非常好的 HTML 报告。<br />另外TestNG被广泛的应用在更高级别的测试当中，web测试 如：seam，tapestry（</a><a href="http://www.openqa.org/selenium/" style="color:rgb(0, 0, 0)">Selenium</a>+<span style="text-decoration:underline;color:rgb(0, 0, 128)">TestNG</span>)<a><br />p-unit是一款开源的性能测试软件</a><ul><li>多线程支持：同一个测试案例可以单线程执行，也可以多线程执行，测试案例开发者只需写一套测试案例。</li><li>参数化测试案例：很多测试案例，需要测试同一功能在不同数量级上的性能表现。</li><li>不同虚拟机性能测试：只需指定虚拟机路径，即可测试同一个测试案例在不同虚拟机上的表现，报表上可以非常直观显示性能差别。</li><li>事件机制构架：punit 是基于事件机制构架的，如果用户想定制报表，只需实现事件响应器，并注册该响应器到 punit 核心即可。</li></ul>EclEmma优秀的代码测试覆盖工具，能够对由 Java 语言编写的程序进行覆盖测试，从而对程序运行的结果生成详尽的覆盖测试报告。<br /><br /><img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-929507682540082808&page=RSS%3a+%e5%87%a0%e4%b8%aa%e4%bc%98%e7%a7%80%e7%9a%84java%e6%b5%8b%e8%af%95%e5%a5%97%e4%bb%b6&referrer=" border="0" height="1px" alt="" width="1px" /><img src="http://c.live.com/c.gif?NC=31263&amp;NA=1149&amp;PI=88469&amp;RF=&amp;DI=3919&amp;PS=85545&amp;TP=sqz.spaces.live.com&amp;GT1=sqz" height="0px" alt="" style="position:absolute" width="0px" />
          <br/>
          <span style="color:red;">
            <a href="http://pppppp.javaeye.com/blog/125306#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/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 01 Jun 2007 01:55:06 +0800</pubDate>
        <link>http://pppppp.javaeye.com/blog/125306</link>
        <guid>http://pppppp.javaeye.com/blog/125306</guid>
      </item>
      <item>
        <title>EJB事务属性</title>
        <author>pppppp</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://pppppp.javaeye.com">pppppp</a>&nbsp;
          链接：<a href="http://pppppp.javaeye.com/blog/125309" style="color:red;">http://pppppp.javaeye.com/blog/125309</a>&nbsp;
          发表时间: 2007年05月22日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          1、Required<br />当需要EJB总是运行在事务当中时使用Required属性。如果当前已经存在一个运行事务，EJB将加入该事务；如果<br />没有运行的事务存在，则EJB容器将新建一个事务。<br />2、RequiresNew<br />当你希望你的EJB被调用是运行在一个新的事务中时使用RequiresNew属性。如果此时已经有一个运行的事务，该事务将被挂起，一个新的事务将在你的EJB调用过程中存在，当该过程结束后，老的事务将恢复。<br />3、Supports<br />当EJB使用Supports事务属性时，如果当前存在一个运行事务，那么该bean将运行在这个事务当中，如果不存在则该bean将运行在一个非事务的环境中。<br />4、Mandatory<br />Mandatory要求bean被调用时，必须存在一个运行的事务，否则将抛出javax.ejb.EJBTransactionRequiredException异常。<br />5、NotSupported<br />如果你设置你的EJB事务属性是NotSupported，那么你的bean将不会运行在事务当中去。如果一个带有事务的bean调用你的ejb那么该事务将被挂起直至你的bean运行结束。<br />6、Never<br />如果设置成Never，你的ejb将不允许在事务中调用，否则抛出javax.ejb.EJBException异常。<br /><img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-929507682540082808&page=RSS%3a+EJB%e4%ba%8b%e5%8a%a1%e5%b1%9e%e6%80%a7&referrer=" border="0" height="1px" alt="" width="1px" /><img src="http://c.live.com/c.gif?NC=31263&amp;NA=1149&amp;PI=88469&amp;RF=&amp;DI=3919&amp;PS=85545&amp;TP=sqz.spaces.live.com&amp;GT1=sqz" height="0px" alt="" style="position:absolute" width="0px" />
          <br/>
          <span style="color:red;">
            <a href="http://pppppp.javaeye.com/blog/125309#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 22 May 2007 05:19:25 +0800</pubDate>
        <link>http://pppppp.javaeye.com/blog/125309</link>
        <guid>http://pppppp.javaeye.com/blog/125309</guid>
      </item>
      <item>
        <title>tomcat6奇怪的问题</title>
        <author>pppppp</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://pppppp.javaeye.com">pppppp</a>&nbsp;
          链接：<a href="http://pppppp.javaeye.com/blog/125311" style="color:red;">http://pppppp.javaeye.com/blog/125311</a>&nbsp;
          发表时间: 2007年05月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          在windows上使用tomcat6时报java.lang.NoClassDefFoundError: javax/el/ELResolver错误，<br />将lib目录下的el-api.jar文件加入classpath中，正常运行。<br /><img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-929507682540082808&page=RSS%3a+tomcat6%e5%a5%87%e6%80%aa%e7%9a%84%e9%97%ae%e9%a2%98&referrer=" border="0" height="1px" alt="" width="1px" /><img src="http://c.live.com/c.gif?NC=31263&amp;NA=1149&amp;PI=88469&amp;RF=&amp;DI=3919&amp;PS=85545&amp;TP=sqz.spaces.live.com&amp;GT1=sqz" height="0px" alt="" style="position:absolute" width="0px" />
          <br/>
          <span style="color:red;">
            <a href="http://pppppp.javaeye.com/blog/125311#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 16 May 2007 06:44:45 +0800</pubDate>
        <link>http://pppppp.javaeye.com/blog/125311</link>
        <guid>http://pppppp.javaeye.com/blog/125311</guid>
      </item>
      <item>
        <title>Memcached性能测试</title>
        <author>pppppp</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://pppppp.javaeye.com">pppppp</a>&nbsp;
          链接：<a href="http://pppppp.javaeye.com/blog/125312" style="color:red;">http://pppppp.javaeye.com/blog/125312</a>&nbsp;
          发表时间: 2007年05月02日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          以1w个对象的get，set，delete三种操作进行测试<br />当对象是0.1k时：<br /> delete avg time per req 0.1817 ms (total: 1817 ms)<br /> set avg time per req 0.1955 ms (total: 1955 ms)<br /> gets avg time per req 0.2729 ms (total: 2729 ms)<br />当对象是1k时：<br />delete avg time per req 0.2431 ms (total: 2431 ms)<br />set avg time per req 0.2821 ms (total: 2821 ms)<br />get avg time per req 0.3351 ms (total: 3351 ms)<br />也就是查询时性能最差<br />另外在装memcached在64位机器上要注意，libevent默认是编译成32的，需要在makefile中指定是64位。<br />否则找不到相应的包。<br /><img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-929507682540082808&page=RSS%3a+Memcached%e6%80%a7%e8%83%bd%e6%b5%8b%e8%af%95&referrer=" border="0" height="1px" alt="" width="1px" /><img src="http://c.live.com/c.gif?NC=31263&amp;NA=1149&amp;PI=88469&amp;RF=&amp;DI=3919&amp;PS=85545&amp;TP=sqz.spaces.live.com&amp;GT1=sqz" height="0px" alt="" style="position:absolute" width="0px" />
          <br/>
          <span style="color:red;">
            <a href="http://pppppp.javaeye.com/blog/125312#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 02 May 2007 09:32:21 +0800</pubDate>
        <link>http://pppppp.javaeye.com/blog/125312</link>
        <guid>http://pppppp.javaeye.com/blog/125312</guid>
      </item>
      <item>
        <title>Top10 J2EE性能问题</title>
        <author>pppppp</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://pppppp.javaeye.com">pppppp</a>&nbsp;
          链接：<a href="http://pppppp.javaeye.com/blog/125314" style="color:red;">http://pppppp.javaeye.com/blog/125314</a>&nbsp;
          发表时间: 2007年05月02日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          10、过多的日志开销<br />9、不正确的应用服务器配置<br />8、不恰当的使用j2ee<br />7、不必要的使用xml<br />6、不合时宜的缓存<br />5、过多的使用内存<br />4、引用过多的lib包<br />3、不正确的使用并发<br />2、不必须的远程接口<br />1、不正确的数据库使用<br /><img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-929507682540082808&page=RSS%3a+Top10+J2EE%e6%80%a7%e8%83%bd%e9%97%ae%e9%a2%98&referrer=" border="0" height="1px" alt="" width="1px" /><img src="http://c.live.com/c.gif?NC=31263&amp;NA=1149&amp;PI=88469&amp;RF=&amp;DI=3919&amp;PS=85545&amp;TP=sqz.spaces.live.com&amp;GT1=sqz" height="0px" alt="" style="position:absolute" width="0px" />
          <br/>
          <span style="color:red;">
            <a href="http://pppppp.javaeye.com/blog/125314#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/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 02 May 2007 08:44:59 +0800</pubDate>
        <link>http://pppppp.javaeye.com/blog/125314</link>
        <guid>http://pppppp.javaeye.com/blog/125314</guid>
      </item>
      <item>
        <title>Hibernate shard介绍</title>
        <author>pppppp</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://pppppp.javaeye.com">pppppp</a>&nbsp;
          链接：<a href="http://pppppp.javaeye.com/blog/125315" style="color:red;">http://pppppp.javaeye.com/blog/125315</a>&nbsp;
          发表时间: 2007年04月27日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <font size="-1"><font color="#cc0033">hibernate shards</font>源自google的一个工程师小团队的20%项目。它提供一个对数据库水平分割的解决方案。<br /></font><font size="-1"><font color="#cc0033">hibernate shards<span style="color:rgb(0, 0, 0)">是对hibernate core进行了扩展，降低了复杂度。从概念上可以分成2部分。<br />1、基础逻辑<br />该部分对<br />• org.hibernate.Session<br />• org.hibernate.SessionFactory<br />• org.hibernate.Criteria<br />• org.hibernate.Query<br />进行了扩展。<br />• org.hibernate.shards.session.ShardedSession<br />• org.hibernate.shards.ShardedSessionFactory<br />• org.hibernate.shards.criteria.ShardedCriteria<br />• org.hibernate.shards.query.ShardedQuery<br />你可以很方便的使用就像普通的hibernate应用。<br />2、应用逻辑部分<br />提供三个接口，用来处理具体的实现策略<br />• org.hibernate.shards.strategy.selection.ShardSelectionStrategy<br />• org.hibernate.shards.strategy.resolution.ShardResolutionStrategy<br />• org.hibernate.shards.strategy.access.ShardAccessStrategy<br /></span></font></font><font size="-1"><font color="#cc0033"><span style="color:rgb(0, 0, 0)">ShardAccessStrategy：<br />获取数据的策略，目前已经包含的实现有：<br />SequentialShardAccessStrategy：顺序策略<br />ParallelShardAccessStrategy：并发策略<br />如果你想只取某一个库，目前你只能通过取具体的数据库的</span></font></font><font size="-1"><font color="#cc0033"><span style="color:rgb(0, 0, 0)">SessionFactory。目前在策略里还不支持取其中的某个或某几个库，暂时是所有<br />数据库都参与。<br /></span></font></font><font size="-1"><font color="#cc0033"><span style="color:rgb(0, 0, 0)">ShardSelectionStrategy：<br />当一个新数据保存时，决定存储到那个数据库。<br /></span></font></font><font size="-1"><font color="#cc0033"><span style="color:rgb(0, 0, 0)">ShardResolutionStrategy：<br />当数据修改后，判断同步到哪一个数据库。<br /><br /><br /><br /><br /></span></font></font><font size="-1"><font color="#cc0033"><span style="color:rgb(0, 0, 0)"><br /><br /><br /><br /><br /><br /><br /></span></font></font><img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-929507682540082808&page=RSS%3a+Hibernate+shard%e4%bb%8b%e7%bb%8d&referrer=" border="0" height="1px" alt="" width="1px" /><img src="http://c.live.com/c.gif?NC=31263&amp;NA=1149&amp;PI=88469&amp;RF=&amp;DI=3919&amp;PS=85545&amp;TP=sqz.spaces.live.com&amp;GT1=sqz" height="0px" alt="" style="position:absolute" width="0px" />
          <br/>
          <span style="color:red;">
            <a href="http://pppppp.javaeye.com/blog/125315#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 27 Apr 2007 03:37:11 +0800</pubDate>
        <link>http://pppppp.javaeye.com/blog/125315</link>
        <guid>http://pppppp.javaeye.com/blog/125315</guid>
      </item>
      <item>
        <title>困扰已久的链接参数带中文接收时变乱码的问题</title>
        <author>pppppp</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://pppppp.javaeye.com">pppppp</a>&nbsp;
          链接：<a href="http://pppppp.javaeye.com/blog/125316" style="color:red;">http://pppppp.javaeye.com/blog/125316</a>&nbsp;
          发表时间: 2007年04月26日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          一直怀疑是jboss或者是seam框架自身的问题，却把tomcat给忽略掉了。<br />这才自己写了个converter做监视，发现tomcat传进来的已经是无法正确转换的乱码。<br />于是乎想到tomcat配置出现了问题，检查server.xml发现没有指定URI编码。<br />设置成URIEncoding="UTF-8"。一切恢复了正常。<br /><img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-929507682540082808&page=RSS%3a+%e5%9b%b0%e6%89%b0%e5%b7%b2%e4%b9%85%e7%9a%84%e9%93%be%e6%8e%a5%e5%8f%82%e6%95%b0%e5%b8%a6%e4%b8%ad%e6%96%87%e6%8e%a5%e6%94%b6%e6%97%b6%e5%8f%98%e4%b9%b1%e7%a0%81%e7%9a%84%e9%97%ae%e9%a2%98&referrer=" border="0" height="1px" alt="" width="1px" /><img src="http://c.live.com/c.gif?NC=31263&amp;NA=1149&amp;PI=88469&amp;RF=&amp;DI=3919&amp;PS=85545&amp;TP=sqz.spaces.live.com&amp;GT1=sqz" height="0px" alt="" style="position:absolute" width="0px" />
          <br/>
          <span style="color:red;">
            <a href="http://pppppp.javaeye.com/blog/125316#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/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 26 Apr 2007 08:02:34 +0800</pubDate>
        <link>http://pppppp.javaeye.com/blog/125316</link>
        <guid>http://pppppp.javaeye.com/blog/125316</guid>
      </item>
      <item>
        <title>MYsql查询缓存介绍</title>
        <author>pppppp</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://pppppp.javaeye.com">pppppp</a>&nbsp;
          链接：<a href="http://pppppp.javaeye.com/blog/125317" style="color:red;">http://pppppp.javaeye.com/blog/125317</a>&nbsp;
          发表时间: 2007年04月24日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          看到一篇介绍 <a href="http://blog.csdn.net/accesine960/archive/2007/04/22/1575008.aspx">Mysql查询缓存</a>的文章，标记一下。<br /><img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-929507682540082808&page=RSS%3a+MYsql%e6%9f%a5%e8%af%a2%e7%bc%93%e5%ad%98%e4%bb%8b%e7%bb%8d&referrer=" border="0" height="1px" alt="" width="1px" /><img src="http://c.live.com/c.gif?NC=31263&amp;NA=1149&amp;PI=88469&amp;RF=&amp;DI=3919&amp;PS=85545&amp;TP=sqz.spaces.live.com&amp;GT1=sqz" height="0px" alt="" style="position:absolute" width="0px" />
          <br/>
          <span style="color:red;">
            <a href="http://pppppp.javaeye.com/blog/125317#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/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 24 Apr 2007 01:38:27 +0800</pubDate>
        <link>http://pppppp.javaeye.com/blog/125317</link>
        <guid>http://pppppp.javaeye.com/blog/125317</guid>
      </item>
      <item>
        <title>activeMQ重器，已经纯在的JMS客户端如何能够自动重新链接</title>
        <author>pppppp</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://pppppp.javaeye.com">pppppp</a>&nbsp;
          链接：<a href="http://pppppp.javaeye.com/blog/72806" style="color:red;">http://pppppp.javaeye.com/blog/72806</a>&nbsp;
          发表时间: 2007年04月20日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          我使用Spring 内嵌activeMQ方式，然后其它应用可以在不同的机器上链接这个JMS。但是一旦activeMQ所在的应用服务器重新启动，其他机器上的应用也必须重起才能建立连接。如何不重新启动就能够重新链接。
          <br/>
          <span style="color:red;">
            <a href="http://pppppp.javaeye.com/blog/72806#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 20 Apr 2007 11:35:40 +0800</pubDate>
        <link>http://pppppp.javaeye.com/blog/72806</link>
        <guid>http://pppppp.javaeye.com/blog/72806</guid>
      </item>
      <item>
        <title>构建在lucene之上搜索引擎框架</title>
        <author>pppppp</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://pppppp.javaeye.com">pppppp</a>&nbsp;
          链接：<a href="http://pppppp.javaeye.com/blog/125318" style="color:red;">http://pppppp.javaeye.com/blog/125318</a>&nbsp;
          发表时间: 2007年04月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          Compass和Hibernate Search都是构建在lucene框架之上的搜索引擎框架。他们使你很优雅的使用lucene搜索引擎（就像使用Hibernate一样).Compass和Hibernate Search与之lucene就像Hibernate与之jdbc。<br />当然2个框架各有各自的优点：<br />倆个框架都能够很好的与Hibernate结合，Compass同时提供了对JDBC、Ibatis、Apache ojb、Jdo的支持；但是对于cluster没有很好的支持（很长时间没有查看Compass文档，不知道现在版本支持如何）。<br />Hibernate Search提供了JMS方式达到对cluster的支持，采用了类似于Mysql (master\slave)的方式，更新操作都在master上，查询使用slave的方式。但是Hibernate Search作为Hibernate的一个子产品，就注定了他不能更好的对其它的orm产品提供支持。<br /><img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-929507682540082808&page=RSS%3a+%e6%9e%84%e5%bb%ba%e5%9c%a8lucene%e4%b9%8b%e4%b8%8a%e6%90%9c%e7%b4%a2%e5%bc%95%e6%93%8e%e6%a1%86%e6%9e%b6&referrer=" border="0" height="1px" alt="" width="1px" /><img src="http://c.live.com/c.gif?NC=31263&amp;NA=1149&amp;PI=88469&amp;RF=&amp;DI=3919&amp;PS=85545&amp;TP=sqz.spaces.live.com&amp;GT1=sqz" height="0px" alt="" style="position:absolute" width="0px" />
          <br/>
          <span style="color:red;">
            <a href="http://pppppp.javaeye.com/blog/125318#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/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, 19 Apr 2007 05:23:59 +0800</pubDate>
        <link>http://pppppp.javaeye.com/blog/125318</link>
        <guid>http://pppppp.javaeye.com/blog/125318</guid>
      </item>
      <item>
        <title>memcached安装及使用</title>
        <author>pppppp</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://pppppp.javaeye.com">pppppp</a>&nbsp;
          链接：<a href="http://pppppp.javaeye.com/blog/125319" style="color:red;">http://pppppp.javaeye.com/blog/125319</a>&nbsp;
          发表时间: 2007年04月18日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <span style="font-weight:bold">1、安装<br /></span>下载memcached 及libevent<span style="text-decoration:underline">(</span>memcached 依赖包) ,解压缩安装。<br /><pre># tar -xzf libevent.tar.gz<br /># cd libevent<br /># ./configure --prefix=/usr<br /># make<br /># make install<br /># cd ..<br /># tar -xzf memcached.tar.gz<br /># cd memcached<br /># ./configure --prefix=/usr<br /># make<br /># make install<br /><span style="font-weight:bold">2、运行<br /></span># ./memcached -d -m 2048 -l 10.0.0.40 -p 11211<br />-d 以守护程序（daemon）方式运行 memcached；<br />-m 设置 memcached 可以使用的内存大小，单位为 M；<br />-l 设置监听的 IP 地址，如果是本机的话，通常可以不设置此参数；<br />-p 设置监听的端口，默认为 11211，所以也可以不设置此参数；<br />-u 指定用户，如果当前为 root 的话，需要使用此参数指定用户。<br />以守护进程方式运行，推荐内存占用至少2G以上。对象都被缓存到内存中，关闭时，缓存数据也同时消失。<br /><span style="font-weight:bold">3、客户端<br /></span>目前Perl/PHP/Python/Ruby/Java/C#/C 等都有相应的客户端API。<br /><span style="font-weight:bold"></span></pre>客户端通过API与memcached 服务建立链接，接下来就是操作数据的get，set了。<br /><pre><div>Perl Example </div><br />sub get_foo_object {<br />   my $foo_id = int(shift);<br />   my $obj = $::MemCache-&gt;get("foo:$foo_id");//获取对象<br />   return $obj if $obj;<br /><br />   $obj = $::db-&gt;selectrow_hashref("SELECT .... FROM foo f, bar b ".<br />                                   "WHERE ... AND f.fooid=$foo_id");<br />   $::MemCache-&gt;set("foo:$foo_id", $obj);//存入对象<br />   return $obj;<br />}<br /><span style="font-weight:bold">4、memcached的优势 <br /></span>一般来说都会把应用和缓存放在一起处理，这也就是说一个产品有多个模块，每个模块单独部署，缓存就会被复制多次，同时意味着浪费了内存和降低了命中率。<br />如果你用一个跨进程和线程的缓存，当有多台机器，每台机器都会有一个cache，如果要求数据同步的话，那么复制缓存就会变成一个瓶颈。<br />memcached就是提供一个在多台机器之间的全局缓存。一般推荐memcached server与一个占用cpu较高内存较小的应用部署在同一台机器上，可以<br />节省硬件开销。<br /><span style="font-weight:bold"></span></pre><br /><span style="text-decoration:underline"> </span><span style="font-weight:bold"></span><img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-929507682540082808&page=RSS%3a+memcached%e5%ae%89%e8%a3%85%e5%8f%8a%e4%bd%bf%e7%94%a8&referrer=" border="0" height="1px" alt="" width="1px" /><img src="http://c.live.com/c.gif?NC=31263&amp;NA=1149&amp;PI=88469&amp;RF=&amp;DI=3919&amp;PS=85545&amp;TP=sqz.spaces.live.com&amp;GT1=sqz" height="0px" alt="" style="position:absolute" width="0px" />
          <br/>
          <span style="color:red;">
            <a href="http://pppppp.javaeye.com/blog/125319#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 18 Apr 2007 07:58:14 +0800</pubDate>
        <link>http://pppppp.javaeye.com/blog/125319</link>
        <guid>http://pppppp.javaeye.com/blog/125319</guid>
      </item>
      <item>
        <title>memcached高性能的分布式内存缓存</title>
        <author>pppppp</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://pppppp.javaeye.com">pppppp</a>&nbsp;
          链接：<a href="http://pppppp.javaeye.com/blog/125320" style="color:red;">http://pppppp.javaeye.com/blog/125320</a>&nbsp;
          发表时间: 2007年04月18日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          当今对于网站的功能要求越来越高，生成静态文件的方式已经无法满足应用的需求，因此内存缓存的应用越来越多。memcached是一个赞誉很高的分布式对象缓存系统。用于在动态应用中减少数据库负载，提升访问速度。<br />
Memcached由Danga Interactive开发，最早用于提升LiveJournal.com访问速度的。LiveJournal.com每秒动态页面访问量几千次，用户700万。Memcached将数据库负载大幅度降低，更好的分配资源，更快速访问。<br />Memcached是一个对内存要求很高，CPU占用率很低的一个缓存系统。因此对于硬件成本越来越低，系统性能要求很高的当今web系统是一个非常不错的解决方案。<br /><br /><img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-929507682540082808&page=RSS%3a+memcached%e9%ab%98%e6%80%a7%e8%83%bd%e7%9a%84%e5%88%86%e5%b8%83%e5%bc%8f%e5%86%85%e5%ad%98%e7%bc%93%e5%ad%98&referrer=" border="0" height="1px" alt="" width="1px" /><img src="http://c.live.com/c.gif?NC=31263&amp;NA=1149&amp;PI=88469&amp;RF=&amp;DI=3919&amp;PS=85545&amp;TP=sqz.spaces.live.com&amp;GT1=sqz" height="0px" alt="" style="position:absolute" width="0px" />
          <br/>
          <span style="color:red;">
            <a href="http://pppppp.javaeye.com/blog/125320#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 18 Apr 2007 06:58:03 +0800</pubDate>
        <link>http://pppppp.javaeye.com/blog/125320</link>
        <guid>http://pppppp.javaeye.com/blog/125320</guid>
      </item>
      <item>
        <title>Lighttpd轻量级的web server</title>
        <author>pppppp</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://pppppp.javaeye.com">pppppp</a>&nbsp;
          链接：<a href="http://pppppp.javaeye.com/blog/125321" style="color:red;">http://pppppp.javaeye.com/blog/125321</a>&nbsp;
          发表时间: 2007年04月18日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <font size="-1"><font color="#cc0033">lighttpd</font>和apache一样是开源的，与apache相比，虽然功能不及apache完善，稳定性也不如apache，但是，不管是服务静态页面，还是服务动态内容(CGI，PHP)，它都比apache快。<br />找到一篇<a href="http://blog.sina.com.tw/3759/article.php?pbgid=3759&amp;entryid=9778">中文安装</a>说明备份一下，以便以后用。<br /><br /></font><img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-929507682540082808&page=RSS%3a+Lighttpd%e8%bd%bb%e9%87%8f%e7%ba%a7%e7%9a%84web+server&referrer=" border="0" height="1px" alt="" width="1px" /><img src="http://c.live.com/c.gif?NC=31263&amp;NA=1149&amp;PI=88469&amp;RF=&amp;DI=3919&amp;PS=85545&amp;TP=sqz.spaces.live.com&amp;GT1=sqz" height="0px" alt="" style="position:absolute" width="0px" />
          <br/>
          <span style="color:red;">
            <a href="http://pppppp.javaeye.com/blog/125321#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 18 Apr 2007 06:20:39 +0800</pubDate>
        <link>http://pppppp.javaeye.com/blog/125321</link>
        <guid>http://pppppp.javaeye.com/blog/125321</guid>
      </item>
      <item>
        <title>seam中文问题</title>
        <author>pppppp</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://pppppp.javaeye.com">pppppp</a>&nbsp;
          链接：<a href="http://pppppp.javaeye.com/blog/67404" style="color:red;">http://pppppp.javaeye.com/blog/67404</a>&nbsp;
          发表时间: 2007年04月02日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          使用JBoss seam开发时候，使用EntityQuery对象，如果查询条件输入中文，结果会搜索条件会变成乱码。在后台跟踪后发现执行了3次数据库查询。第一次是查询上一次的内容。第二次是查询当前输入的条件内容。但是这之后查询的属性被从新set了，而且是乱码并且重新执行查询。这个时候就错了。<br />
谁知道是什么原因？
          <br/>
          <span style="color:red;">
            <a href="http://pppppp.javaeye.com/blog/67404#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 02 Apr 2007 17:06:57 +0800</pubDate>
        <link>http://pppppp.javaeye.com/blog/67404</link>
        <guid>http://pppppp.javaeye.com/blog/67404</guid>
      </item>
      <item>
        <title>Facelets文档</title>
        <author>pppppp</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://pppppp.javaeye.com">pppppp</a>&nbsp;
          链接：<a href="http://pppppp.javaeye.com/blog/67363" style="color:red;">http://pppppp.javaeye.com/blog/67363</a>&nbsp;
          发表时间: 2007年04月02日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <a href="http://www.ibm.com/developerworks/cn/java/j-facelets/" target="_blank">http://www.ibm.com/developerworks/cn/java/j-facelets/</a><br />
<a href="http://www.ibm.com/developerworks/cn/java/j-facelets2.html" target="_blank">http://www.ibm.com/developerworks/cn/java/j-facelets2.html</a>
          <br/>
          <span style="color:red;">
            <a href="http://pppppp.javaeye.com/blog/67363#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 02 Apr 2007 14:25:15 +0800</pubDate>
        <link>http://pppppp.javaeye.com/blog/67363</link>
        <guid>http://pppppp.javaeye.com/blog/67363</guid>
      </item>
      <item>
        <title>找到了一个mysql5.1中文在线文档</title>
        <author>pppppp</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://pppppp.javaeye.com">pppppp</a>&nbsp;
          链接：<a href="http://pppppp.javaeye.com/blog/66660" style="color:red;">http://pppppp.javaeye.com/blog/66660</a>&nbsp;
          发表时间: 2007年03月30日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          地址：http://imysql.cn/docs/MySQL_51_zh/mysql_51.html
          <br/>
          <span style="color:red;">
            <a href="http://pppppp.javaeye.com/blog/66660#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 30 Mar 2007 13:06:56 +0800</pubDate>
        <link>http://pppppp.javaeye.com/blog/66660</link>
        <guid>http://pppppp.javaeye.com/blog/66660</guid>
      </item>
      <item>
        <title>JBPM使用mysql5时 action不会被执行</title>
        <author>pppppp</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://pppppp.javaeye.com">pppppp</a>&nbsp;
          链接：<a href="http://pppppp.javaeye.com/blog/60390" style="color:red;">http://pppppp.javaeye.com/blog/60390</a>&nbsp;
          发表时间: 2007年03月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          使用jbpm自带的描述文件，如果使用默认数据库hsqldb运行正常，如果设置mysql数据库运行时<br />
junit会报junit.framework.AssertionFailedError: Message variable contains message expected:<null> but was:<going to="" the="" first="" state=""><br />
代码是：<br />
assertEquals(<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &quot;Message variable contains message&quot;, <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; instance.getContextInstance().getVariable(&quot;message&quot;),<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &quot;Going to the first state!&quot;);<br />
也就是说com.sample.action.MessageActionHandler没有被执行。<br />
有人遇到这种情况没有？<br />
具体文件见附件<br />
<process-definition><start-state name="start"><task><state name="first">
<transition name="to_end" to="end">
<br />
&nbsp;&nbsp; </transition></state><br />
&nbsp;&nbsp; <end-state name="end"></end-state><br />
</task></start-state></process-definition>
</going></null>
          <br/>
          <span style="color:red;">
            <a href="http://pppppp.javaeye.com/blog/60390#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><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 16 Mar 2007 18:01:38 +0800</pubDate>
        <link>http://pppppp.javaeye.com/blog/60390</link>
        <guid>http://pppppp.javaeye.com/blog/60390</guid>
      </item>
      <item>
        <title>tomcat6尝试</title>
        <author>pppppp</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://pppppp.javaeye.com">pppppp</a>&nbsp;
          链接：<a href="http://pppppp.javaeye.com/blog/57930" style="color:red;">http://pppppp.javaeye.com/blog/57930</a>&nbsp;
          发表时间: 2007年03月07日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>启动时报错：</p>
<p><font face="Arial"><font face="Arial">2007-3-7 9:50:29 org.apache.catalina.core.AprLifecycleListener init<br />
信息: The Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: D:\Program Files\Java\jdk1.5.0_02\bin;.;C:\WINDOWS\system32;C:\WINDOWS;D:\oracle\product\10.2.0\client_2\bin;D:\oracle\product\10.2.0\client_1\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\SecureCRT\;C:\PROGRA~1\SECUREFX;D:\Program Files\Rational\common;D:\Program Files\Java\jdk1.5.0_02\bin;D:\Program Files\ant\bin;D:\Program Files\Rational\ClearCase\bin<br />
2007-3-7 9:50:29 org.apache.catalina.core.JasperListener lifecycleEvent<br />
警告: Couldn't initialize Jasper<br />
java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory<br />
&nbsp;at org.apache.jasper.runtime.JspFactoryImpl.&lt;clinit&gt;(JspFactoryImpl.java:40)<br />
&nbsp;at org.apache.jasper.compiler.JspRuntimeContext.&lt;clinit&gt;(JspRuntimeContext.java:73)<br />
&nbsp;at java.lang.Class.forName0(Native Method)<br />
&nbsp;at java.lang.Class.forName(Class.java:242)<br />
&nbsp;at org.apache.catalina.core.JasperListener.lifecycleEvent(JasperListener.java:63)<br />
&nbsp;at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:120)<br />
&nbsp;at org.apache.catalina.core.StandardServer.initialize(StandardServer.java:767)<br />
&nbsp;at org.apache.catalina.startup.Catalina.load(Catalina.java:504)<br />
&nbsp;at org.apache.catalina.startup.Catalina.load(Catalina.java:524)<br />
&nbsp;at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)<br />
&nbsp;at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)<br />
&nbsp;at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)<br />
&nbsp;at java.lang.reflect.Method.invoke(Method.java:585)<br />
&nbsp;at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:260)<br />
&nbsp;at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:412)<br />
2007-3-7 9:50:29 org.apache.coyote.http11.Http11Protocol init<br />
信息: Initializing Coyote HTTP/1.1 on http-8080<br />
2007-3-7 9:50:29 org.apache.catalina.startup.Catalina load<br />
信息: Initialization processed in 781 ms<br />
2007-3-7 9:50:29 org.apache.catalina.core.StandardService start<br />
信息: Starting service Catalina<br />
2007-3-7 9:50:29 org.apache.catalina.core.StandardEngine start<br />
信息: Starting Servlet Engine: Apache Tomcat/6.0.10<br />
2007-3-7 9:50:30 org.apache.tomcat.util.modeler.Registry registerComponent<br />
严重: Null component Catalina:type=JspMonitor,name=jsp,WebModule=//localhost/manager,J2EEApplication=none,J2EEServer=none<br />
2007-3-7 9:50:30 org.apache.tomcat.util.modeler.Registry registerComponent<br />
严重: Null component Catalina:type=JspMonitor,name=jsp,WebModule=//localhost/host-manager,J2EEApplication=none,J2EEServer=none<br />
2007-3-7 9:50:31 org.apache.tomcat.util.modeler.Registry registerComponent<br />
严重: Null component Catalina:type=JspMonitor,name=jsp,WebModule=//localhost/examples,J2EEApplication=none,J2EEServer=none<br />
2007-3-7 9:50:31 org.apache.tomcat.util.modeler.Registry registerComponent<br />
严重: Null component Catalina:type=JspMonitor,name=jsp,WebModule=//localhost/docs,J2EEApplication=none,J2EEServer=none<br />
2007-3-7 9:50:31 org.apache.tomcat.util.modeler.Registry registerComponent<br />
严重: Null component Catalina:type=JspMonitor,name=jsp,WebModule=//localhost/,J2EEApplication=none,J2EEServer=none<br />
2007-3-7 9:50:31 org.apache.coyote.http11.Http11Protocol start<br />
信息: Starting Coyote HTTP/1.1 on http-8080<br />
2007-3-7 9:50:31 org.apache.jk.common.ChannelSocket init<br />
信息: JK: ajp13 listening on /0.0.0.0:8009<br />
2007-3-7 9:50:31 org.apache.jk.server.JkMain start<br />
信息: Jk running ID=0 time=0/63&nbsp; config=null<br />
2007-3-7 9:50:31 org.apache.catalina.startup.Catalina start<br />
信息: Server startup in 1609 ms<br />
2007-3-7 9:51:00 org.apache.catalina.core.StandardService stop<br />
信息: Stopping service Catalina<br />
2007-3-7 9:51:00 org.apache.coyote.http11.Http11Protocol destroy<br />
信息: Stopping Coyote HTTP/1.1 on http-8080</font></font></p>
<p>访问manager目录时报如下错误：</p>
<p><font face="Arial">2007-3-7 9:50:30 org.apache.catalina.core.ApplicationContext log<br />
严重: StandardWrapper.Throwable<br />
java.lang.NoClassDefFoundError<br />
&nbsp;at org.apache.jasper.servlet.JspServlet.init(JspServlet.java:101)<br />
&nbsp;at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1161)<br />
&nbsp;at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:981)<br />
&nbsp;at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4044)<br />
&nbsp;at org.apache.catalina.core.StandardContext.start(StandardContext.java:4350)<br />
&nbsp;at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:761)<br />
&nbsp;at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:741)<br />
&nbsp;at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525)<br />
&nbsp;at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:920)<br />
&nbsp;at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:883)<br />
&nbsp;at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:492)<br />
&nbsp;at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1138)<br />
&nbsp;at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)<br />
&nbsp;at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:120)<br />
&nbsp;at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1023)<br />
&nbsp;at org.apache.catalina.core.StandardHost.start(StandardHost.java:719)<br />
&nbsp;at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1015)<br />
&nbsp;at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)<br />
&nbsp;at org.apache.catalina.core.StandardService.start(StandardService.java:448)<br />
&nbsp;at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)<br />
&nbsp;at org.apache.catalina.startup.Catalina.start(Catalina.java:552)<br />
&nbsp;at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)<br />
&nbsp;at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)<br />
&nbsp;at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)<br />
&nbsp;at java.lang.reflect.Method.invoke(Method.java:585)<br />
&nbsp;at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)<br />
&nbsp;at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)<br />
2007-3-7 9:50:30 org.apache.catalina.core.StandardContext loadOnStartup<br />
严重: Servlet /manager threw load() exception</font></p>
          <br/>
          <span style="color:red;">
            <a href="http://pppppp.javaeye.com/blog/57930#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 07 Mar 2007 10:07:51 +0800</pubDate>
        <link>http://pppppp.javaeye.com/blog/57930</link>
        <guid>http://pppppp.javaeye.com/blog/57930</guid>
      </item>
      <item>
        <title>Tomcat6支持comet</title>
        <author>pppppp</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://pppppp.javaeye.com">pppppp</a>&nbsp;
          链接：<a href="http://pppppp.javaeye.com/blog/125324" style="color:red;">http://pppppp.javaeye.com/blog/125324</a>&nbsp;
          发表时间: 2007年03月06日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div>Tomcat6已经支持comet</div>
<div>
<h1>Apache Tomcat 6.0 Advanced IO </h1>
<p>相关文档<a href="http://tomcat.apache.org/tomcat-6.0-doc/aio.html">http://tomcat.apache.org/tomcat-6.0-doc/aio.html</a>
</p><p> </p></div><img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-929507682540082808&page=RSS%3a+Tomcat6%e6%94%af%e6%8c%81comet&referrer=" border="0" height="1px" alt="" width="1px" /><img src="http://c.live.com/c.gif?NC=31263&amp;NA=1149&amp;PI=88469&amp;RF=&amp;DI=3919&amp;PS=85545&amp;TP=sqz.spaces.live.com&amp;GT1=sqz" height="0px" alt="" style="position:absolute" width="0px" />
          <br/>
          <span style="color:red;">
            <a href="http://pppppp.javaeye.com/blog/125324#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 06 Mar 2007 09:29:03 +0800</pubDate>
        <link>http://pppppp.javaeye.com/blog/125324</link>
        <guid>http://pppppp.javaeye.com/blog/125324</guid>
      </item>
  </channel>
</rss>