今回作成した「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.