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);
対応するプロセス定義ファイル:
参考資料:http://dl2.csdn.net/down4/20070802/02094345367.swf
基本的な用語:
プロセス定義(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