14.3. jBPM プロセス定義からのルールの使用
ルールベースは、ページプローまたはビジネスプロセス定義のいずれかで jBPM アクションハンドラ、 決定ハンドラまたはアサイメントハンドラとして動作することができます。
<decision name="approval">
<handler class="org.jboss.seam.drools.DroolsDecisionHandler">
<workingMemoryName>orderApprovalRulesWorkingMemory</workingMemoryName>
<assertObjects>
<element>#{customer}</element>
<element>#{order}</element>
<element>#{order.lineItems}</element>
</assertObjects>
</handler>
<transition name="approved" to="ship">
<action class="org.jboss.seam.drools.DroolsActionHandler">
<workingMemoryName>shippingRulesWorkingMemory</workingMemoryName>
<assertObjects>
<element>#{customer}</element>
<element>#{order}</element>
<element>#{order.lineItems}</element>
</assertObjects>
</action>
</transition>
<transition name="rejected" to="cancelled"/>
</decision>
<assertObjects> エレメントは WorkingMemory に fact としてアサートされるオブジェクトの集合または 1 オブジェクトを返す EL 式を指定します。
jBPM タスク割り当てに対する Drools の使用もサポートされます。
<task-node name="review">
<task name="review" description="Review Order">
<assignment handler="org.jboss.seam.drools.DroolsAssignmentHandler">
<workingMemoryName>
orderApprovalRulesWorkingMemory
</workingMemoryName>
<assertObjects>
<element>#{actor}</element>
<element>#{customer}</element>
<element>#{order}</element>
<element>#{order.lineItems}</element>
</assertObjects>
</assignment>
</task>
<transition name="rejected" to="cancelled"/>
<transition name="approved" to="approved"/>
</task-node>
特定のオブジェクトが Drools グローバルとして使用可能です。 jBPM
Assignable は assignable として、 Seam Decision オブジェクトは decision として使用可能です。 decision を処理するルールは decision.setOutcome"result") を呼び出して決定結果を確定するはずです。assignment を実行するルールは Assignable を持つ actor IDを設定するはずです。
package org.jboss.seam.examples.shop
import org.jboss.seam.drools.Decision
global Decision decision
rule "Approve Order For Loyal Customer"
when
Customer( loyaltyStatus == "GOLD" )
Order( totalAmount <= 10000 )
then
decision.setOutcome("approved");
end
package org.jboss.seam.examples.shop
import org.jbpm.taskmgmt.exe.Assignable
global Assignable assignable
rule "Assign Review For Small Order"
when
Order( totalAmount <= 100 )
then
assignable.setPooledActors( new String[] {"reviewers"} );
end
注記
Drools についての詳細は http://www.drools.org を参照してください。
重要
Seam はシンプルなルールを実装するのには十分な Drools の依存性を同梱しています。 機能を追加する場合は、Drools の完全ディストリビューションをダウンロードしてから必要に応じて依存性を追加してください。