今回作成した「processdefinition.xml」は、「jPDL」と呼ばれ、プロセス定義言語を定義するXMLファイルです。jPDLには、優れたグラフィカルインターフェイスが用意されており、複雑なページフローを扱う際に大いに役立ちます。
実際にグラフィカルなイメージを確認するため、サンプルとして自動生成された「src/main/jpdl/simple/processdefinition.xml」を開きます。
上記の画面が表示されグラフィカルなイメージが確認できたと思います。これがサンプルアプリのプロセス定義です。
これだけでは分かりづらいので、XMLのソースコードを見てみましょう。
<?xml version="1.0" encoding="UTF-8"?>
<process-definition
xmlns="urn:jbpm.org:jpdl-3.2"
name="simple">
<start-state name="start">
<transition name="to_state" to="first">
<action name="action" class="com.sample.action.MessageActionHandler">
<message>Going to the first state!</message>
</action>
</transition>
</start-state>
<state name="first">
<transition name="to_end" to="end">
<action name="action" class="com.sample.action.MessageActionHandler">
<message>About to finish!</message>
</action>
</transition>
</state>
<end-state name="end"></end-state>
</process-definition>
このソースコードでは、各プロセスを定義しています。この「プロセス」というものは、ビジネスの処理フローを指しており、jPDLによって記述されています。各プロセスのxmlタグとDiagramの紐付けを以下に示します。
この中で以下のコードを確認してください。
<action name="action" class="com.sample.action.MessageActionHandler">
これは、サンプル用に作成したMessageActionHandlerのアクションを実行することを定義しています。
MessageActionHandlerのソースを見てみましょう。
package com.sample.action;
import org.jbpm.graph.def.ActionHandler;
import org.jbpm.graph.exe.ExecutionContext;
public class MessageActionHandler implements ActionHandler {
private static final long serialVersionUID = 1L;
/**
* The message member gets its value from the configuration in the
* processdefinition. The value is injected directly by the engine.
*/
String message;
/**
* A message process variable is assigned the value of the message
* member. The process variable is created if it doesn't exist yet.
*/
public void execute(ExecutionContext context) throws Exception {
context.getContextInstance().setVariable("message", message);
}
}
このMessageActionHandlerは、jBPMのActionHandlerインターフェイスを実装しています。プロセスのステートが遷移する際に、executeメソッドが実行される仕組みです。executeメソッドの引数であるExecutionContextに実行時のプロセス定義の情報が格納されています。サンプルでは、「message」をキーにメッセージを取得しています。
サンプルを作成した際に、生成されたSimpleProcessTestでは、processdefinition.xmlの値を読み込んで、各プロセスの検証テストを実装しています。実際に、JUnitテストを実行して確認してみてください。
以下は、今回作成したサンプルアプリのフローです。
では、どのようにしてサンプルを確認するのでしょうか? 作成したサンプルをデプロイして、サーバ上で動作を確認してみましょう。実際に、Webブラウザ上からサンプルアプリを動かすことで、本稿のコンセプトである「見える化」が分かると思います。
今回インストールした、「C:\Program Files\jbpm-jpdl-3.2.3\server」にあるstart.batをダブルクリックします。すると、コマンドプロンプト上に、サーバ起動のログが出力されます。
サーバが起動したらEclipseで「processdefinition.xml」を開き、[Deployment]を選択します。[Deployment]の画面が開いたら、[TestConnection]ボタンを押します。
テストコネクションで問題がなければ、「successfully」のダイアログが表示されます。
続いて、デプロイです。画面の[Deploy Process Archive]ボタンを押します。問題がなければ、「successfully」のダイアログが表示されます。
デプロイが完了したら、Webブラウザで「http://localhost:8080/jbpm-console/sa/processes.jsf」にアクセスします。
ここでは、[UserName][Password]に「manager」と入力してログインします。ログインが済み、jBPMコンソール画面に遷移したら、今回デプロイした「simple」が表示されています。
これは、「processdefinition.xml」で定義しているプロセス名です。次ページで、デプロイしたサンプルアプリを検証してみましょう。
Copyright © ITmedia, Inc. All Rights Reserved.