第8章 タスク管理
jBPM の中心的な役割は、プロセスの実行を 永続化 することです。この機能は、ユーザーのタスクとタスクリストを管理する場合に非常に便利です。jBPM を使用すると、プロセス全体を記述するソフトウェアを指定できます。このようなソフトウェアは、ヒューマンタスクの 待機状態 を持つことができます。
8.1. タスク リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
タスク はプロセス定義の一部です。タスクは、プロセスの実行中にタスクインスタンスを作成して割り当てる方法を定義します。
タスクは、
task-node
および process-definition
で定義します。最も一般的な方法は、task-node
で 1 つ以上の タスク
を定義することです。その場合、task-node
はユーザーが引き受けるタスクを表します。プロセスの実行は、アクターがタスクを完了するまで待機する必要があります。アクターがタスクを完了すると、プロセスの実行が続行されます。task-node
に追加のタスクが指定されている場合、デフォルトの動作では、すべてのタスクが終了するまで待機します。
タスクは、
process-definition
で指定することもできます。この方法で指定したタスクは、名前を検索して見つけることができます。task-node
内からそれらを参照したり、アクション内から使用したりすることもできます。実際、名前が付けられたすべてのタスク (または task-node
) は、process-definition
で見つけることができます。
各タスク名は、必ず一意のものにします。また、タスクには
優先度
を設定します。これは、このタスク用に作成された各タスクインスタンスの初期優先度として使用されます。(この初期優先度は、後でタスクインスタンスによって変更できます。)
8.2. タスクインスタンス リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
タスクインスタンスは、
actorId
(java.lang.String
) に割り当てることができます。すべてのタスクインスタンスは 1 つのテーブル (JBPM_TASKINSTANCE
) に格納されます。 特定のユーザーのタスクリストを取得するには、このテーブルを照会し、特定の actorId のすべてのタスクインスタンスを取得します。
jBPM のタスクリストメカニズムを使用すると、jBPM のタスクを他のタスクと組み合わせることができます。それらの他のタスクがプロセスの実行に関連していない場合でも、これは可能です。このようにして、一元的なリポジトリーで、jBPM-process-task を他のアプリケーションのタスクと簡単に組み合わせることができます。
8.2.1. タスクインスタンスのライフサイクル リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
タスクインスタンスのライフサイクルは単純です。インスタンスを作成すると、インスタンスを起動できます。起動後は、インスタンスを終了できます。終了すると、完了としてマークされます。
注記
柔軟性を確保するために、割り当て はライフサイクルには含まれていません。
- タスクインスタンスは通常、プロセスの実行が
task-node
に進入したときに (TaskMgmtInstance.createTaskInstance(...)
メソッドを介して) 作成されます。 - ユーザーインターフェイスコンポーネントが、データベースにタスクリストを照会します。これは、
TaskMgmtSession.findTaskInstancesByActorId(...)
メソッドを使用して行われます。 - ユーザーからの入力を収集した後、UI コンポーネントが
TaskInstance.assign(String)
、TaskInstance.start()
、またはTaskInstance.end(...)
を呼び出します。
タスクインスタンスは、次の 3 つの日付プロパティーによって状態を維持します。
create
start
end
TaskInstance
にあるそれぞれの "ゲッター" を介してこれらのプロパティーにアクセスします。
完了したタスクインスタンスは、終了日でマークされます。これは、後続のクエリーがタスクリストを検索するときに、完了したタスクインスタンスを取得しないようにするためです。ただし、完了したタスクは
JBPM_TASKINSTANCE
テーブルに残ります。
8.2.2. タスクインスタンスとグラフ実行 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
タスクインスタンス は、アクターのタスクリスト内にある項目です。シグナリングタスクインスタンスは、完了時にトークンにシグナルを送信してプロセスの実行を続行するタスクインスタンスです。ブロッキングタスクインスタンスは、タスクインスタンスが完了する前に、関連するトークン (実行パス) が
task-node
から退出することを禁止するタスクインスタンスです。デフォルトでは、タスクインスタンスはシグナリングおよび非ブロッキングになるように設定されています。
複数のタスクインスタンスが
task-node
に関連付けられている場合、プロセス開発者は、タスクインスタンスの完了がプロセスの継続に影響を与える方法を指定できます。以下の値のいずれかを task-node
の signal-property
に与えます。
- last
- これはデフォルトです。最後のタスクインスタンスが完了すると、実行が続行されます。このノードへの進入時にタスクが作成されていない場合、実行が続行されます。
- last-wait
- 最後のタスクインスタンスが完了すると、実行が続行されます。このノードへの進入時にタスクが作成されていない場合、タスクが作成されるまで、タスクノードで実行が待機されます。
- first
- 最初のタスクインスタンスが完了すると、実行が続行されます。このノードへの進入時にタスクが作成されていない場合、実行が続行されます。
- first-wait
- 最初のタスクインスタンスが完了すると、実行が続行されます。このノードへの進入時にタスクが作成されていない場合、タスクが作成されるまで、タスクノードで実行が待機されます。
- unsynchronized
- この場合、タスクが作成されているか未完了であるかに関係なく、実行は常に続行されます。
- never
- この場合、タスクが作成されているか未完了であるかに関係なく、実行は続行されません。
タスクインスタンスの作成は、ランタイム時の計算に基づいて行うことができます。このような場合、
ActionHandler
を task-node
の node-enter
イベントに追加し、create-tasks="false"
を設定します。以下に例を示します。
ここで、作成するタスクは
task-node
で指定します。また、process-definition
で指定して、TaskMgmtDefinition
から取得することもできます。(TaskMgmtDefinition
は、タスク管理情報を追加してプロセス定義を拡張します。)
TaskInstance.end()
メソッドは、タスクインスタンスを完了としてマークするために使用します。必要に応じて、end メソッドで遷移を指定できます。このタスクインスタンスの完了によって実行の継続がトリガーされた場合、指定された遷移を介して task-node
から退出します。
8.3. 割り当て リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
プロセス定義にはタスクノードが含まれます。
task-node
には、0 個以上のタスクが含まれます。タスクは、プロセス定義の一部を静的に記述したものです。ランタイム時にタスクを実行すると、タスクインスタンスが作成されます。タスクインスタンスは、個人のタスクリストの 1 つのエントリーに対応します。
jBPM を使用すると、タスク割り当てのプッシュモデル (個人タスクリスト) とプルモデル (グループタスクリスト) を組み合わせて適用できます。プロセスは、タスクの責任者を決定し、責任者のタスクリストにプッシュします。タスクをアクターのプールに割り当てることもできます。この場合、各アクターはタスクをプルして、個人のタスクリストに入れます。
8.3.1. 割り当てのインターフェイス リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
AssignmentHandler
インターフェイスを介してタスクインスタンスを割り当てます。
public interface AssignmentHandler extends Serializable { void assign( Assignable assignable, ExecutionContext executionContext ); }
public interface AssignmentHandler extends Serializable {
void assign( Assignable assignable, ExecutionContext executionContext );
}
タスクインスタンスの作成時に、割り当てハンドラーの実装が呼び出されます。その時点で、タスクインスタンスは 1 つ以上のアクターに割り当てられます。
AssignmentHandler
の実装は、割り当て可能なメソッド (setActorId
または setPooledActors
) を呼び出し、タスクを割り当てます。割り当て可能な項目は、TaskInstance
または SwimlaneInstance
(プロセスロール) です。
public interface Assignable { public void setActorId(String actorId); public void setPooledActors(String[] pooledActors); }
public interface Assignable {
public void setActorId(String actorId);
public void setPooledActors(String[] pooledActors);
}
TaskInstance
と SwimlaneInstance
の両方を、特定のユーザーまたはアクターのプールに割り当てることができます。TaskInstance
をユーザーに割り当てるには、Assignable.setActorId(String actorId)
を呼び出します。TaskInstance
を候補アクターのプールに割り当てるには、Assignable.setPooledActors(String[] actorIds)
を呼び出します。
プロセス定義の各タスクをハンドラー実装に関連付けることで、ランタイム時に割り当てを実行できます。
プロセス内の複数のタスクを同じ個人またはアクターのグループに割り当てる必要がある場合は、スイムレーンの使用を検討してください (「 スイムレーン 」 を参照)。
再利用可能な
AssignmentHandler
を作成するには、processdefinition.xml
ファイルを使用してそれぞれを設定します。(割り当てハンドラーに設定を追加する方法の詳細は、「委譲」 を参照してください。)
8.3.2. 割り当てのデータモデル リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
タスクインスタンスとスイムレーンインスタンスのアクターへの割り当てを管理するためのデータモデルを以下に示します。各
TaskInstance
には、actorId
とプールされたアクターのセットがあります。
図8.1 割り当てモデルのクラス図
actorId
はタスクの責任者です。プールされたアクターのセットは、候補者のコレクションを表します。候補者はタスクを引き受けると、責任者になります。actorId
と pooledActors
はどちらもオプションであり、組み合わせることもできます。
8.3.3. 個人タスクリスト リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
個人タスクリストは、特定の個人に割り当てられたすべてのタスクインスタンスを表します。これは、
TaskInstance
の actorId プロパティーの存在によって示されます。次のいずれかの方法で、TaskInstance
を個人のタスクリストに追加します。
- タスク要素の
actor-id
属性に式を指定する - コード内の任意の場所から
TaskInstance.setActorId(String)
メソッドを使用する AssignmentHandler
でassignable.setActorId(String)
を使用する
特定のユーザーの個人タスクリストを取得するには、
TaskMgmtSession.findTaskInstances(String actorId)
を使用します。
8.3.4. グループタスクリスト リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
プールされたアクターは、タスクを与えられる候補者のグループです。1 人の候補者がタスクを引き受ける必要があります。多くのユーザーが同じタスクの作業を開始すると、競合が発生する可能性があるため、ユーザーはすぐにタスクの作業を開始できません。これを防ぐために、ユーザーはグループタスクリストからのみタスクインスタンスを取得して個人タスクリストに移動できます。ユーザーが作業を開始できるのは、ユーザーの個人タスクリストにタスクが追加された場合のみです。
taskInstance
をユーザーのグループタスクリストに入れるには、ユーザーの actorId またはユーザーの groupId
の 1 つを pooledActorIds
に追加します。プールされたアクターを指定するには、次のいずれかの方法を使用します。
- プロセス内のタスク要素の属性
pooled-actor-ids
に式を指定する - コード内のいずれかの場所で
TaskInstance.setPooledActorIds(String[])
を使用する - AssignmentHandler で
assignable.setPooledActorIds(String[])
を使用する
特定のユーザーのグループタスクリストを取得するには、ユーザーの actorId と、そのユーザーが属するすべてのグループの actorId を含むコレクションを作成します。
TaskMgmtSession.findPooledTaskInstances(String actorId)
または TaskMgmtSession.findPooledTaskInstances(List actorIds)
を使用して、個人タスクリストになく (actorId==null
)、プールされた actorId に一致するタスクインスタンスを検索します。
注記
このソフトウェアは、アイデンティティーコンポーネントを jBPM のタスク割り当てから分離するために、このように設計されました。jBPM は、文字列のみを actorId として格納します。ユーザーとグループの関係やその他のアイデンティティー情報は認識しません。
actorId は、プールされたアクターを常にオーバーライドします。したがって、actorId と
pooledActorId
のリストを持つ taskInstance は、アクターの個人タスクリストにのみ表示されます。タスクインスタンスをグループに戻すには、taskInstance
の actorId プロパティを null
に設定して、pooledActorId
を保持します。
8.4. タスクインスタンス変数 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
タスクインスタンスは、独自の変数セットを持つことができ、プロセス変数を "認識" することもできます。タスクインスタンスは通常、実行パス (トークン) に作成されます。これにより、トークンとタスクインスタンスの間に親子関係が作成されます。これは、トークンの間の親子関係に似ています。通常のスコープ規則が適用されることに注意してください。
コントローラー を使用して、タスクインスタンススコープとプロセスのスコープ付き変数の間で変数の作成、入力、および送信を行います。
これは、タスクインスタンスが自身の変数に加えて、関連するトークンのすべての変数を '認識' できることを意味します。
コントローラーを使用すると、タスクインスタンススコープとプロセスのスコープ付き変数の間で変数の作成、入力、および送信を行うことができます。
8.5. タスクコントローラー リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
タスクインスタンスを作成したら、タスクコントローラーを使用してタスクインスタンス変数を設定できます。タスクインスタンスが終了すると、タスクコントローラーを使用して、タスクインスタンスに属するデータをプロセス変数に送信できます。
注記
タスクコントローラーの使用はオプションです。タスクインスタンスは、そのトークンに関連するプロセス変数を "認識" することもできます。タスクコントローラーは、次のタスクの実行に使用します。
- タスクインスタンス変数のコピーを作成して、プロセスが完了するまでタスクインスタンス変数への中間更新がプロセス変数に影響を与えないようにします。この時点で、コピーがプロセス変数に送信されます。
- タスクインスタンス変数は、プロセス変数と 1 対 1 の関係を持ちません。たとえば、プロセスに
sales in January
、sales in January sales
、およびsales in March
という名前の変数がある場合、タスクインスタンスのフォームで、それらの 3 か月の平均売上を表示しなければならないこともあります。
タスクは、ユーザーからの入力を収集します。ただし、ユーザーにタスクを提示するために使用できるユーザーインターフェイスは多数あります。たとえば、Web アプリケーション、Swing アプリケーション、インスタントメッセンジャー、メールフォームなどがあります。そのため、タスクコントローラーは、プロセス変数 (= プロセスコンテキスト) とユーザーインターフェイスアプリケーションの間の橋渡しを行います。タスクコントローラーは、プロセス変数のビューをユーザーインターフェイスアプリケーションに提供します。
タスクインスタンスが作成されると、タスクコントローラーは、プロセス変数があればそれをタスク変数に変換します。タスク変数は、ユーザーインターフェイスフォームの入力として機能します。ユーザー入力自体はタスク変数に格納されます。ユーザーがタスクを終了すると、タスクコントローラーはタスクインスタンスデータに基づいてプロセス変数を更新します。
図8.2 タスクコントローラー
単純なシナリオでは、プロセス変数とフォームパラメーターの間に 1 対 1 のマッピングがあります。タスクコントローラーをタスク要素で指定します。このような場合、デフォルトの JBPM タスクコントローラーを使用できます。このコントローラーは、プロセス変数をタスク変数にどのようにコピーするかを表す
variable
要素のリストを取得します。
次の例は、プロセス変数に基づいて、タスクインスタンス変数の個別のコピーを作成する方法を示しています。
name 属性は、プロセス変数の名前を参照します。mapped-name はオプションで、タスクインスタンス変数の名前を参照します。mapped-name 属性を省略すると、mapped-name のデフォルトは名前に設定されます。mapped-name は、Web アプリケーションのタスクインスタンスフォームにおけるフィールドのラベルとしても使用されます。
access 属性を使用して、タスクインスタンスの作成時にコピーした変数を、タスクインスタンスの終了時にプロセス変数に書き戻すかどうかを指定します。(この情報は、適切なフォームコントロールを生成するためにユーザーインターフェイスで使用できます。) access 属性はオプションで、デフォルトのアクセスは
read,write
です。
task-node
は多くのタスクを持つことができますが、start-state
は 1 つのタスクしか持ちません。
プロセス変数とフォームパラメーター間の単純な 1 対 1 のマッピングでは制約が大きすぎる場合は、カスタムの
TaskControllerHandler
実装を作成します。そのためのインターフェイスを以下に示します。
public interface TaskControllerHandler extends Serializable { void initializeTaskVariables(TaskInstance taskInstance, ContextInstance contextInstance, Token token); void submitTaskVariables(TaskInstance taskInstance, ContextInstance contextInstance, Token token); }
public interface TaskControllerHandler extends Serializable {
void initializeTaskVariables(TaskInstance taskInstance, ContextInstance contextInstance, Token token);
void submitTaskVariables(TaskInstance taskInstance, ContextInstance contextInstance, Token token);
}
次のコードサンプルは、その設定方法を示しています。
8.6. スイムレーン リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
スイムレーン はプロセスロールです。このメカニズムを使用して、プロセス内の複数のタスクを同じアクターが引き受けるよう指定します。特定のスイムレーンの最初のタスクインスタンスが作成されると、同じスイムレーン内の後続のすべてのタスクでアクターが "記憶" されます。そのため、スイムレーンには 1 つの
割り当て
があります。総裁は、「 割り当て 」 を参照してください。
特定のスイムレーンの最初のタスクが作成されると、
AssignmentHandler
が呼び出されます。AssignmentHandler
に渡される Assignable
(割り当て可能な) 項目は、SwimlaneInstance
です。特定のスイムレーンのタスクインスタンスで引き受けられた割り当ては、すべてスイムレーンインスタンスに伝播されます。タスクを引き受けるユーザーはその特定のプロセスに関する知識を持っているため、これがデフォルトの動作となっています。したがって、そのスイムレーンの後続のタスクインスタンスは、自動的にそのユーザーに割り当てられます。
8.7. 開始タスクのスイムレーン リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
スイムレーンは、開始タスクに関連付けることができます。これは、プロセスの開始者をキャプチャーするために行います。
タスクは start-state で指定できます。これにより、タスクがスイムレーンに関連付けられます。新しいタスクインスタンスが作成されると、現在の認証済みアクターが
Authentication.getAuthenticatedActorId()
メソッドによりキャプチャーされます。アクターは開始タスクのスイムレーンに格納されます。
通常のメソッドを使用して、開始タスクに変数を追加します。これにより、タスクに関連付けられたフォームを定義します。詳細は、「 タスクコントローラー 」 を参照してください。
8.8. タスクイベント リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
タスクにはアクションを関連付けることができます。4 つの標準イベントタイプがあります。
task-create
: タスクインスタンスが作成されたときに発生します。task-assign
: タスクインスタンスが割り当てられるときに発生します。このイベントで実行されるアクションでは、executionContext.getTaskInstance().getPreviousActorId();
メソッドを使用して前のアクターにアクセスできます。task-start
:TaskInstance.start()
メソッドが呼び出されたときに発生します。このオプション機能は、ユーザーが実際にタスクインスタンスの作業を開始していることを示すために使用します。task-end
:TaskInstance.end(...)
が呼び出されたときに発生します。これは、タスクの完了を示します。タスクがプロセスの実行に関連している場合、この呼び出しによってプロセスの実行が再開されることがあります。
注記
タスクには例外ハンドラーを関連付けることができます。詳細は、「 例外処理 」 を参照してください。
8.9. タスクタイマー リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
タスクにはタイマーを指定できます。「 タイマー 」 を参照してください。
タスクタイマーの cancel-event はカスタマイズできます。デフォルトでは、タスクタイマーはタスクが終了するとキャンセルされますが、タイマーの cancel-event 属性を使用すると、それを task-assign または task-start にカスタマイズできます。cancel-event は複数のイベントをサポートしています。cancel-event のタイプを組み合わせるには、属性のコンマ区切りリストでそれらを指定します。
8.10. タスクインスタンスのカスタマイズ リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
タスクインスタンスをカスタマイズするには、次の手順に従います。
TaskInstance
のサブクラスを作成します。org.jbpm.taskmgmt.TaskInstanceFactory
実装を作成します。- jbpm.task.instance.factory 設定プロパティーを
jbpm.cfg.xml
ファイルの完全修飾クラス名に設定し、実装を設定します。 TaskInstance
のサブクラスを使用する場合は、サブクラスの Hibernate マッピングファイルを作成します (extends="org.jbpm.taskmgmt.exe.TaskInstance"
を使用)。- そのマッピングファイルを
hibernate.cfg.xml
のリストに追加します。
8.11. アイデンティティーコンポーネント リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
ユーザー、グループ、および権限の管理は、アイデンティティー管理 と呼ばれます。jBPM には、オプションの アイデンティティーコンポーネントが含まれています。これは、自社のデータストアに簡単に置き換えることができます。
jBPM アイデンティティー管理コンポーネントは、組織モデルの情報を保持し、これを使用してタスクを割り当てます。このモデルは、ユーザー、グループ、システム、およびこれらの間の関係を記述します。オプションで、権限とロールも含めることができます。
jBPM は、このモデルを、アクターをプロセスの実際の参加者として定義することで処理します。アクターは、actorId と呼ばれる ID によって識別されます。jBPM は、actorId に関する情報のみを持ちます。actorId は、最大限の柔軟性を得るために、
java.lang.String
として表されます。そのため、組織モデルとそのデータの構造に関する情報は、jBPM のコアエンジンの範囲外です。
jBPM の拡張機能として、単純なユーザーロールモデルを管理するためのコンポーネントが (将来的に) 提供される予定です。ユーザーとロール間のこのような多対多の関係は、J2EE およびサーブレット仕様で定義されているものと同じモデルであり、新規開発の出発点として役立つ可能性があります。
サーブレット、ejb、およびポートレットの仕様で使用されているユーザーロールモデルは、タスクの割り当てを処理するには不十分であることに注意してください。そのモデルは、ユーザーとロール間の多対多の関係です。これには、プロセスに関与するチームやユーザーの組織構造に関する情報は含まれません。
8.11.1. アイデンティティーモデル リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
図8.3 アイデンティティーモデルのクラス図
黄色のクラスは、後述する式の割り当てハンドラーに関連するクラスです。
User
は、ユーザーまたはサービスを表します。Group
は、あらゆる種類のユーザーグループです。グループをネストすることで、チーム、ビジネスユニット、および会社全体の間の関係をモデル化できます。グループには、階層グループと髪の色グループなどを区別するためのタイプがあります。Membership
は、ユーザーとグループ間の多対多の関係を表します。メンバーシップは、会社内の役職を表すために使用できます。メンバーシップの名前は、ユーザーがグループ内で果たす役割を示すために使用できます。
8.11.2. 割り当て式 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
アイデンティティーコンポーネントには、タスク割り当て時にアクターを計算するための式を評価する 1 つの実装が付属しています。プロセス定義で割り当て式を使用する例を次に示します。
8.11.2.1. 最初の項 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
式は左から右に解決されます。first-term は、アイデンティティーモデルの
User
または Group
を指定します。後続の項は、中間のユーザーまたはグループからの次の項を計算します。
previous
は、タスクが現在の認証済みアクターに割り当てられていることを意味します。これは、プロセスの前のステップを実行したアクターを意味します。
swimlane(swimlane-name)
は、指定されたスイムレーンインスタンスからユーザーまたはグループを取得することを意味します。
variable(variable-name)
は、指定された変数インスタンスからユーザーまたはグループを取得することを意味します。変数インスタンスには java.lang.String
を含めることができます。その場合、そのユーザーまたはグループは、アイデンティティーコンポーネントから取得されます。または、変数インスタンスに User
または Group
オブジェクトが含まれています。
user(user-name)
は、アイデンティティーコンポーネントから特定のユーザーを取得することを意味します。
group(group-name)
は、アイデンティティーコンポーネントから特定のグループを取得することを意味します。
8.11.2.2. 次の項 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
group(group-type)
は、ユーザーのグループを取得します。これは、前の項の結果が User
である必要があることを意味します。この項は、ユーザーのすべてのメンバーシップで、指定された group-type のグループを検索します。
member(role-name)
は、グループの特定のロールを実行するユーザーを取得します。前の項の結果が Group
である必要があります。この項は、メンバーシップの名前が特定の role-name と一致するグループのメンバーシップを持つユーザーを検索します。
8.11.3. アイデンティティーコンポーネントの削除 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
会社のユーザーデータベースや LDAP システムなどの組織情報に独自のデータソースを使用する場合は、jBPM アイデンティティーコンポーネントを削除できます。必要な唯一のことは、
hibernate.cfg.xml
から次の行を削除することです。
<mapping resource="org/jbpm/identity/User.hbm.xml"/> <mapping resource="org/jbpm/identity/Group.hbm.xml"/> <mapping resource="org/jbpm/identity/Membership.hbm.xml"/>
<mapping resource="org/jbpm/identity/User.hbm.xml"/>
<mapping resource="org/jbpm/identity/Group.hbm.xml"/>
<mapping resource="org/jbpm/identity/Membership.hbm.xml"/>
ExpressionAssignmentHandler
は、アイデンティティーコンポーネントに依存しているため、そのまま使用することはできません。ExpressionAssignmentHandler
を再利用してユーザーデータストアにバインドする場合は、ExpressionAssignmentHandler
から拡張し、getExpressionSession
メソッドをオーバーライドできます。
protected ExpressionSession getExpressionSession(AssignmentContext assignmentContext);
protected ExpressionSession getExpressionSession(AssignmentContext assignmentContext);