JBOSS JBPM学習ノート


ワークフローシステムは、正規化されたプロセス記述を入力とするソフトウェアコンポーネントであり、プロセスの実行状態を維持し、人とアプリケーションの間でアクティビティを割り当てる.
基本的な用語:
プロセス定義(process definition)は、ビジネスプロセスまたはプロセスの正規化記述です.
プロセスインスタンス(process instance).は、プロセス定義の実行エンティティです.
プロセスコンテキスト変数(process context variable)、または略称変数は、プロセスインスタンスに関連する変数です.
 
package com.sample;
 
import junit.framework.TestCase;
import org.jbpm.graph.def.ProcessDefinition;
import org.jbpm.graph.exe.ProcessInstance;
import org.jbpm.graph.exe.Token;
 
public class testHelloWorldProcess extends TestCase {
       public void testHelloWorldProcess() {
//この方法はプロセス定義とプロセス実行の定義を示す
//プロセス定義には3つのノードがあります.
//名前のない開始状態start-state、状態's'
//終了ステータス名は'end'.
//次の行はxml textがProcessDefinitionオブジェクトであることを解析します(プロセス定義)
//ProcessDefinitionプロセス定義形式をjavaオブジェクトと記述
              ProcessDefinition processDefinition = ProcessDefinition
                            .parseXmlString(""+ "  "
                                          + "    "+ " 
"
                                          + "  "+ "    "
                                          + " 
"+ "  "
                                          + "
");
 
//次の行はプロセス実行定義を確立しました.
//構築後、プロセス実行には主な実行パス
//(=root tokenルートトークン)このときstart-stateで
              ProcessInstance processInstance = new ProcessInstance(processDefinition);
 
//構築後のプロセス実行には、主な実行パス
//(=roottokenルートトークン).
              Token token = processInstance.getRootToken();
 
//構築後、位置はフロー定義実行パスstart-stateの位置
              assertSame(processDefinition.getStartState(), token.getNode());
 
//これからプロセス実行を開始し、start-stateを離れてデフォルトの変換(transition)を終了します.
              token.signal();
//このsignalメソッドは、プロセス実行がwait状態に入るまでブロックされます
 
//プロセス実行ステータス's'で最初の待機状態に入る
//従って実行メインパスは現在ステータス''
              assertSame(processDefinition.getNode("s"), token.getNode());
 
//もう一つの信号を送ります.これにより、ステータス's'終了デフォルトの変換(transition)が実行されます.
              token.signal();
//プロセスインスタンスがend-state終了状態に達したため、信号signalメソッドが返されます
 
              assertSame(processDefinition.getNode("end"), token.getNode());
       }
 
}
 
 
 
プロセス定義では、JBossのグラフィックで自動的に生成できます.
 

ソースをクリックすると、のコードが生成されます.

 

  xmlns="urn:jbpm.org:jpdl-3.1"  name="test">
  
     
  

 
  
     
  

  
  

ロードプロセス定義ファイル、
ProcessDefinition processDefinition = ProcessDefinition
                            .parseXmlString(""+ "  "
                                          + "    "+ " 
"
                                          + "  "+ "    "
                                          + " 
"+ "  "
                                          + "
");
 
変更:
 
FileInputStream fis = new FileInputStream("processes/test/processdefinition.xml");
              ProcessDefinition processDefinition = ProcessDefinition.parseXmlInputStream(fis);
 
 

対応するプロセス定義ファイル:
<process-definition><o:p></o:p>
<o:p> </o:p>  <start-state><o:p></o:p>
    <transition to="auction" /><o:p></o:p>
  </start-state><o:p></o:p>
    <state name="auction"><o:p></o:p>
    <transition name="auction ends" to="salefork" /><o:p></o:p>
    <transition name="cancel" to="end" /><o:p></o:p>
  </state><o:p></o:p>
 // fork           <o:p></o:p>
//一つの分岐は一つの実行ルートを複数の兵法の実行ルートに分割する.デフォルトのブランチの動作は、ブランチから離れる変換ごとにサブトークンを作成し、トークンが到着するブランチ間に親と子の関係を作成します.
  <fork name="salefork"><o:p></o:p>
    <transition name="shipping" to="send item" /><o:p></o:p>
    <transition name="billing" to="receive money" /><o:p></o:p>
  </fork><o:p></o:p>
    <state name="send item"><o:p></o:p>
    <transition to="receive item" /><o:p></o:p>
  </state><o:p></o:p>
<o:p> </o:p>  <state name="receive item"><o:p></o:p>
    <transition to="salejoin" /><o:p></o:p>
  </state><o:p></o:p>
    <state name="receive money"><o:p></o:p>
    <transition to="send money" /><o:p></o:p>
  </state><o:p></o:p>
<o:p> </o:p>  <state name="send money"><o:p></o:p>
    <transition to="salejoin" /><o:p></o:p>
  </state><o:p></o:p>
   //join              <o:p></o:p>
//デフォルト連合(join)は、同じ親からのすべてのサブトークン連合を仮定する.上でfork(ブランチ)を用いる場合が現れ、すべてのトークンブランチが確立し、同じ連合(join)に達する.すべてのトークンが連合に入ると、連合は終了する.そして連合は両親-子供を検査する.すべての兄弟トークンが連合(join)に達すると、親トークンは変換から離れる(唯一の)伝播する.兄弟トークンのアクティビティがある場合、連合の動作は待機状態になります.
<o:p> </o:p>  <join name="salejoin"><o:p></o:p>
    <transition to="end" /><o:p></o:p>
  </join><o:p></o:p>
    <end-state name="end" /><o:p></o:p>
  </process-definition><o:p></o:p>
  
参考資料:http://dl2.csdn.net/down4/20070802/02094345367.swf