JBossシリーズ61:jBPM Human Task-Iを深く理解する
概要
HumanTaskはBPMプロセス中のノードであり人為的な手動操作によって実行されなければならない.jBPM 5は、User Task(jBPM 5の例のUser Task)ノードによってHuman Taskをサポートする.HumanTaskは、通常、プロセス設計者がプロセスを設計する際に、プロセス実行に関連する属性、プロセスタイプ、プロセスの実行者、プロセス実行に関連するデータを指定する必要があります.プロセスの実行時に、これらのプロパティに基づいてプロセスを実行します.
Human TaskはBPMのコアですが、なぜそう言えるのでしょうか.あるBPM専門家は、あるBPM技術サミットでBPMをこのように定義したことがある.「BPM is a blending of process management/workflow withアプリケーションintegration technology...to support rich human interaction and deepアプリケーションconnectivity」.BPMの目的や価値は、複雑な企業アプリケーションに広範な人為的な操作を提供する可能性であることに注意してください.
本論文の主な目的はjBPM Human Taskを実験的に理解することであり,git,Maven,JBossなどを含むツールが必要であり,これらのインストールはソフトウェアインストールおよび資料ダウンロードを参照することができる.この文書の主な内容は次のとおりです.ダウンロードコンパイルjBPM Human Taskコード jBPM Human TaskサービスをJBoss に導入 jBPM HumanTaskデータモデル TaskClientを介してHuman Taskサービス側と対話する Human Taskのライフサイクル ダウンロードコンパイルjBPM Human Taskコード
このセクションでは、jBPM 5.2のコンパイルをダウンロードします.xコード(https://github.com/droolsjbpm/jbpm/tree/5.2.x)を使用して、以下のgitコマンドを使用してクローンを作成します.
クローン作成完了は、以下のmavenコマンドを使用してjBPM 5.2をコンパイルする.xコード:
上記の手順でエラーが発生しなかった場合、このセクションは完了します.生成されたパッケージまたはMavenローカルウェアハウス内のパッケージをコンパイルして使用する必要があります. jbpm-human-task-war-5.2.6-SNAPSHOT-EE6.war-jbpm-human-task-war/targetディレクトリの下にある JBPM Human TaskサービスをJBossに配備
このセクションでは、jbpm-human-task-war-5.26-SNAPSHOT-EE 6を導入します.warからJBoss 7へ.具体的には、JBoss 7/WildFlyに適用するには、4つの方法を使用します.
jbpm-human-task-war-5.26-SNAPSHOT-EE 6に基づく必要があります.warは次の操作を行います.
1.名前の変更
2.データベースの作成
jBPM Human Task実行プロセスでは、データベースにデータを格納する必要があります.この実験ではmysqlデータベースを使用し、次のSQL文を使用してデータベースjbpm、jbpm_を作成します.userは、データベースjbpm、jbpm_を操作するために使用されます.user対応パスワードjbpm_pass:
3.jbpmDSデータソースの作成
JBoss 7/WildFlyでMysqlデータベースで説明されている方法を使用してデータソースjbpmDSを作成するように構成されています.データソースは次のようになります.
4.persistenceを修正する.xml
jbpm-human-taskを変更します.war/WEB-INF/classes/META-INF/persistence.xmlファイル、hibernateを構成します.dialect属性はorg.hibernate.dialect.MySQL5Dialect,hibernate.show_sqlプロパティはtrueです.
5.hornetq-core-2.2.2.10を更新する.Final.jar
このステップは選択可能ですhornetq-core-2.2.2.10.Final.JArパッケージにはSocket leakなどの不安定な問題がありますので、このパッケージをアップグレードすることをお勧めします.
6.JBossを起動する
JBossを使用してスクリプトを起動します./standalone.shはJBossを起動し、起動完了後にjbpm-human-taskを見ることができる.war導入成功のヒント.次のログ情報が表示されます.
netstatコマンドを使用して、すべてのポートの使用状況を出力します.
5153は、Human Task Serviceがサーバ側で傍受するポートであることに注意してください.
jBPM Human Taskデータモデル
上記のセクションでは、空白のデータベースjbpmを作成し、jBPMはJPA/Hobernateをデータ永続ツールとして使用し、JBossの起動に成功するとHibernateはデータベースjbpmにテーブルを作成し、mysql管理側でjbpm_を使用します.userユーザーがログインした後、テーブルの作成状況を表示します.
show tables出力:
すなわちjBPMがHumanTaskを実行するために必要なテーブルは計23個である.
jbpm human taskソースコード解析−Iのorg.jbpm.task.Taskセクションでは、データ・エンティティ・モデルが対応するデータベース内のテーブルのマッピングであるデータ・モデル・クラスを説明します.次のセクションでは、jBPM Human Task Serviceが提供するインタフェースを使用してデータベース内のデータを操作する方法を示します.
TaskClientによるHuman Taskサービスとのインタラクション
以前の手順に基づいて、ここではTaskClientを通じてHumanTaskサービス側と対話し、Taskを作成し、Taskを開始し、Taskを終了します.
Taskの作成
org.jbpm.conductor.humantask.TaskAddでは、TaskClientを使用してクライアントでTaskを作成する方法を示します.次のように、コードクリップの一部を示します.
Javaアプリケーションでorgを実行する.jbpm.conductor.humantask.TaskAdd出力
Mysqlデータベース側でSQL文クエリを使用すると、次の結果が得られます.
Taskの取得
org.jbpm.conductor.humantask.Gettingでは、TaskClientを使用してクライアントでTaskを取得する操作を実行する方法を示します.次のように、コードセグメントの一部を示します.
Javaアプリケーションでorgを実行する.jbpm.conductor.humantask.TaskGetting出力
スタートTask
org.jbpm.conductor.humantask.TaskStartでは、TaskClientを使用してクライアントでTaskを開始する方法を示します.次のように、一部のコードクリップです.
Javaアプリケーションでorgを実行する.jbpm.conductor.humantask.TaskStart出力
Mysqlデータベース側でSQL文クエリを使用すると、次の結果が得られます.
Taskの完了
org.jbpm.conductor.humantask.TaskCompleteは、TaskClientを使用してクライアントでTaskの操作を完了する方法を示します.次のように、一部のコードクリップです.
Javaアプリケーションでorgを実行する.jbpm.conductor.humantask.TaskComplete出力
Mysqlデータベース側でSQL文クエリを使用すると、次の結果が得られます.
また、次のSQLを使用してMysql管理側でクエリーを管理することもできます.
ヒューマンタスクのライフサイクル
HumanTaskノードがプロセス実行中にアクティブ化されると、1人が参加する作業のために生成され、プロセスはその人が参加する作業が完了またはキャンセルされた後にのみノードを離れる.HumanTaskのライフサイクルは次のとおりです. Taskが作成され、最初の状態は「created」 であった. Taskの状態は、通常、自動的に"Ready"に遷移し、この状態のTaskはTaskリストにあり、ユーザによって を要求することができる. Taskはユーザによって要求され、状態は「Reserved」 となる. Taskはユーザによって開始され、状態は「InProgress」 となる. Taskはユーザによって終了され、状態は「Completed」となり、ユーザがTaskを終了できない場合、誤った結果が返され、Task状態は「Failed」 となる
Next
HumanTaskはBPMプロセス中のノードであり人為的な手動操作によって実行されなければならない.jBPM 5は、User Task(jBPM 5の例のUser Task)ノードによってHuman Taskをサポートする.HumanTaskは、通常、プロセス設計者がプロセスを設計する際に、プロセス実行に関連する属性、プロセスタイプ、プロセスの実行者、プロセス実行に関連するデータを指定する必要があります.プロセスの実行時に、これらのプロパティに基づいてプロセスを実行します.
Human TaskはBPMのコアですが、なぜそう言えるのでしょうか.あるBPM専門家は、あるBPM技術サミットでBPMをこのように定義したことがある.「BPM is a blending of process management/workflow withアプリケーションintegration technology...to support rich human interaction and deepアプリケーションconnectivity」.BPMの目的や価値は、複雑な企業アプリケーションに広範な人為的な操作を提供する可能性であることに注意してください.
本論文の主な目的はjBPM Human Taskを実験的に理解することであり,git,Maven,JBossなどを含むツールが必要であり,これらのインストールはソフトウェアインストールおよび資料ダウンロードを参照することができる.この文書の主な内容は次のとおりです.
このセクションでは、jBPM 5.2のコンパイルをダウンロードします.xコード(https://github.com/droolsjbpm/jbpm/tree/5.2.x)を使用して、以下のgitコマンドを使用してクローンを作成します.
git clone --branch=5.2.x [email protected]:droolsjbpm/jbpm.git
クローン作成完了は、以下のmavenコマンドを使用してjBPM 5.2をコンパイルする.xコード:
mvn clean install -Dmaven.test.skip=true
上記の手順でエラーが発生しなかった場合、このセクションは完了します.生成されたパッケージまたはMavenローカルウェアハウス内のパッケージをコンパイルして使用する必要があります.
このセクションでは、jbpm-human-task-war-5.26-SNAPSHOT-EE 6を導入します.warからJBoss 7へ.具体的には、JBoss 7/WildFlyに適用するには、4つの方法を使用します.
jbpm-human-task-war-5.26-SNAPSHOT-EE 6に基づく必要があります.warは次の操作を行います.
1.名前の変更
unzip jbpm-human-task-war-5.2.6-SNAPSHOT-EE6.war jbpm-human-task.war
2.データベースの作成
jBPM Human Task実行プロセスでは、データベースにデータを格納する必要があります.この実験ではmysqlデータベースを使用し、次のSQL文を使用してデータベースjbpm、jbpm_を作成します.userは、データベースjbpm、jbpm_を操作するために使用されます.user対応パスワードjbpm_pass:
CREATE DATABASE jbpm;
create user 'jbpm_user'@'localhost' identified by 'jbpm_pass';
grant all on jbpm.* to jbpm_user@'localhost';
FLUSH PRIVILEGES;
3.jbpmDSデータソースの作成
JBoss 7/WildFlyでMysqlデータベースで説明されている方法を使用してデータソースjbpmDSを作成するように構成されています.データソースは次のようになります.
<datasource jndi-name="java:jboss/datasources/jbpmDS" pool-name="jbpmPool">
<connection-url>jdbc:mysql://localhost:3306/jbpm</connection-url>
<driver>mysql</driver>
<security>
<user-name>jbpm_user</user-name>
<password>jbpm_pass</password>
</security>
</datasource>
4.persistenceを修正する.xml
jbpm-human-taskを変更します.war/WEB-INF/classes/META-INF/persistence.xmlファイル、hibernateを構成します.dialect属性はorg.hibernate.dialect.MySQL5Dialect,hibernate.show_sqlプロパティはtrueです.
5.hornetq-core-2.2.2.10を更新する.Final.jar
このステップは選択可能ですhornetq-core-2.2.2.10.Final.JArパッケージにはSocket leakなどの不安定な問題がありますので、このパッケージをアップグレードすることをお勧めします.
6.JBossを起動する
JBossを使用してスクリプトを起動します./standalone.shはJBossを起動し、起動完了後にjbpm-human-taskを見ることができる.war導入成功のヒント.次のログ情報が表示されます.
17:19:07,950 INFO [stdout] (ServerService Thread Pool -- 52) Task service startup completed successfully !
netstatコマンドを使用して、すべてのポートの使用状況を出力します.
[kylin@localhost lib]$ netstat -antulop | grep 13179
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp 0 0 127.0.0.1:4447 0.0.0.0:* LISTEN 13179/java off (0.00/0/0)
tcp 0 0 127.0.0.1:5153 0.0.0.0:* LISTEN 13179/java off (0.00/0/0)
tcp 0 0 127.0.0.1:9990 0.0.0.0:* LISTEN 13179/java off (0.00/0/0)
tcp 0 0 127.0.0.1:9999 0.0.0.0:* LISTEN 13179/java off (0.00/0/0)
tcp 0 0 127.0.0.1:8080 0.0.0.0:* LISTEN 13179/java off (0.00/0/0)
tcp 0 0 127.0.0.1:44186 127.0.0.1:5153 ESTABLISHED 13179/java keepalive (5695.77/0/0)
tcp 0 0 127.0.0.1:34368 127.0.0.1:3306 ESTABLISHED 13179/java keepalive (5695.77/0/0)
tcp 0 0 127.0.0.1:5153 127.0.0.1:44186 ESTABLISHED 13179/java keepalive (5695.77/0/0)
5153は、Human Task Serviceがサーバ側で傍受するポートであることに注意してください.
jBPM Human Taskデータモデル
上記のセクションでは、空白のデータベースjbpmを作成し、jBPMはJPA/Hobernateをデータ永続ツールとして使用し、JBossの起動に成功するとHibernateはデータベースjbpmにテーブルを作成し、mysql管理側でjbpm_を使用します.userユーザーがログインした後、テーブルの作成状況を表示します.
show tables出力:
mysql> show tables;
+--------------------------------+
| Tables_in_jbpm |
+--------------------------------+
| Attachment |
| BooleanExpression |
| Content |
| Deadline |
| Delegation_delegates |
| Escalation |
| I18NText |
| Notification |
| Notification_BAs |
| Notification_Recipients |
| Notification_email_header |
| OrganizationalEntity |
| PeopleAssignments_BAs |
| PeopleAssignments_ExclOwners |
| PeopleAssignments_PotOwners |
| PeopleAssignments_Recipients |
| PeopleAssignments_Stakeholders |
| Reassignment |
| Reassignment_potentialOwners |
| SubTasksStrategy |
| Task |
| email_header |
| task_comment |
+--------------------------------+
23 rows in set (0.00 sec)
すなわちjBPMがHumanTaskを実行するために必要なテーブルは計23個である.
jbpm human taskソースコード解析−Iのorg.jbpm.task.Taskセクションでは、データ・エンティティ・モデルが対応するデータベース内のテーブルのマッピングであるデータ・モデル・クラスを説明します.次のセクションでは、jBPM Human Task Serviceが提供するインタフェースを使用してデータベース内のデータを操作する方法を示します.
TaskClientによるHuman Taskサービスとのインタラクション
以前の手順に基づいて、ここではTaskClientを通じてHumanTaskサービス側と対話し、Taskを作成し、Taskを開始し、Taskを終了します.
Taskの作成
org.jbpm.conductor.humantask.TaskAddでは、TaskClientを使用してクライアントでTaskを作成する方法を示します.次のように、コードクリップの一部を示します.
TaskClient client = getTaskClientInstance();
client.connect();
Task task = newTask();
ContentData content = new ContentData();
BlockingAddTaskResponseHandler addTaskResponseHandler = new BlockingAddTaskResponseHandler();
client.addTask(task, content, addTaskResponseHandler );
long taskId = addTaskResponseHandler.getTaskId();
System.out.println("Add Task to human task service, taskId: " + taskId);
Javaアプリケーションでorgを実行する.jbpm.conductor.humantask.TaskAdd出力
Add Task to human task service, taskId: 1
Mysqlデータベース側でSQL文クエリを使用すると、次の結果が得られます.
mysql> select id, status, actualOwner_id, createdBy_id, activationTime from Task;
+----+----------+----------------+--------------+---------------------+
| id | status | actualOwner_id | createdBy_id | activationTime |
+----+----------+----------------+--------------+---------------------+
| 1 | Reserved | kylin | kylin | 2013-12-02 16:51:24 |
+----+----------+----------------+--------------+---------------------+
Taskの取得
org.jbpm.conductor.humantask.Gettingでは、TaskClientを使用してクライアントでTaskを取得する操作を実行する方法を示します.次のように、コードセグメントの一部を示します.
TaskClient client = getTaskClientInstance();
client.connect();
BlockingTaskSummaryResponseHandler taskSummaryResponseHandler = new BlockingTaskSummaryResponseHandler();
client.getTasksAssignedAsPotentialOwner("kylin", "en-UK", taskSummaryResponseHandler);
List<TaskSummary> tasks = taskSummaryResponseHandler.getResults();
System.out.println("Getting tasks for human task service via user kylin, tasks size: " + tasks.size());
Javaアプリケーションでorgを実行する.jbpm.conductor.humantask.TaskGetting出力
Getting tasks for human task service via user kylin, tasks size: 1
スタートTask
org.jbpm.conductor.humantask.TaskStartでは、TaskClientを使用してクライアントでTaskを開始する方法を示します.次のように、一部のコードクリップです.
TaskClient client = getTaskClientInstance();
client.connect();
BlockingTaskOperationResponseHandler responseHandler = new BlockingTaskOperationResponseHandler();
client.start(1, "kylin", responseHandler);
responseHandler.waitTillDone(1000);
System.out.println("kylin starting Task ");
Javaアプリケーションでorgを実行する.jbpm.conductor.humantask.TaskStart出力
kylin starting Task
Mysqlデータベース側でSQL文クエリを使用すると、次の結果が得られます.
mysql> select id, status, actualOwner_id, createdBy_id, activationTime from Task;
+----+------------+----------------+--------------+---------------------+
| id | status | actualOwner_id | createdBy_id | activationTime |
+----+------------+----------------+--------------+---------------------+
| 1 | InProgress | kylin | kylin | 2013-12-02 16:51:24 |
+----+------------+----------------+--------------+---------------------+
Taskの完了
org.jbpm.conductor.humantask.TaskCompleteは、TaskClientを使用してクライアントでTaskの操作を完了する方法を示します.次のように、一部のコードクリップです.
TaskClient client = getTaskClientInstance();
client.connect();
ContentData content = new ContentData();
BlockingTaskOperationResponseHandler responseHandler = new BlockingTaskOperationResponseHandler();
client.complete(2, "kylin", content, responseHandler);
responseHandler.waitTillDone(1000);
System.out.println("kylin completing Task ");
Javaアプリケーションでorgを実行する.jbpm.conductor.humantask.TaskComplete出力
kylin completing Task
Mysqlデータベース側でSQL文クエリを使用すると、次の結果が得られます.
mysql> select id, status, actualOwner_id, createdBy_id, activationTime from Task;
+----+-----------+----------------+--------------+---------------------+
| id | status | actualOwner_id | createdBy_id | activationTime |
+----+-----------+----------------+--------------+---------------------+
| 1 | Completed | kylin | kylin | 2013-12-02 16:51:24 |
+----+-----------+----------------+--------------+---------------------+
また、次のSQLを使用してMysql管理側でクエリーを管理することもできます.
select DTYPE, id from OrganizationalEntity;
select id, language, text from I18NText;
ヒューマンタスクのライフサイクル
HumanTaskノードがプロセス実行中にアクティブ化されると、1人が参加する作業のために生成され、プロセスはその人が参加する作業が完了またはキャンセルされた後にのみノードを離れる.HumanTaskのライフサイクルは次のとおりです.
Next