を選択します。
Selection ウィザードから JBoss jBPM Process Definition を選択します。
プロセス定義を保存します。混乱を避けるために、プロセス定義ごとに個別のディレクトリーを使用します。
jBPM 統合開発環境 のメニューパレットから Process Design ビューへの "drag-and-drop" 項目を開始します。設計モードとソースモードを切り替えて、追加時に XML 要素を確認できます。
インテグレーションに必要な XML フラグメントを追加します。
オーダープロセスダイアグラムをビルドする前に、3 つのサービスを作成およびテストします。これらは通常のグローバルなサービスであり、jboss-esb.xml ファイルで定義されます。サービス名とカテゴリーを使用した設定例を以下に示します。
<services>
<service category="BPM_orchestration4_Starter_Service"
name="Starter_Service"
description="BPM Orchestration Sample 4: Use this service to start a
process instance">
<!-- .... -->
</service>
<service category="BPM_Orchestration4" name="IntakeService"
description="IntakeService: transforms, massages, calculates priority">
<!-- .... -->
</service>
<service category="BPM_Orchestration4" name="DiscountService"
description="DiscountService">
</service>
<service category="BPM_Orchestration4" name="ShippingService"
description="ShippingService">
<!-- .... -->
</service>
</services>
EsbActionHandler または EsbNotifier アクションハンドラーのいずれかを使用してこれらのサービスを参照します。( JBoss Business Process Manager が応答を期待する場合は EsbActionHandler を選択し、何も必要ない場合は EsbNotifier を選択します。)
ためのサービスが認識されているので、Start state ノードをデザインビューにドラッグします。新しいプロセスインスタンスはこのノードで開始されます。
ノードにドラッグし、Intake Order に名前を付けます。
メニューから を選択し、各ノードをクリックして、Start ノードおよび Intake Order ノードを接続します。それらに接続する矢印が表示されます。最初の Intake Order を参照します。
Intake Node に Service および Category 名を追加します。Source ビューを選択します。Intake Order ノードのソースコードを確認できます。以下のようになります。
<node name="Intake Order">
<transition name="" to="Review Order"></transition>
</node>
EsbActionHandler クラス参照を追加し、続いてサービスカテゴリーと名前、BPM_Orchestration4、および IntakeService のサブ要素設定を追加します。以下のようになります。
<node name="Intake Order">
<action name="esbAction" class=
"org.jboss.soa.esb.services.jbpm.actionhandlers.EsbActionHandler">
<esbCategoryName>BPM_Orchestration4</esbCategoryName>
<esbServiceName>IntakeService</esbServiceName>
<!-- async call of IntakeService -->
</action>
<transition name="" to="Review Order"></transition>
</node>
以下のコードを使用して、サービス呼び出しとともに JBoss Business Process Manager コンテキスト変数を送信します。(以下の例では、 entireOrderAsXML という名前の変数がメッセージ本文のデフォルト位置に設定される)があります。
<bpmToEsbVars>
<mapping bpm="entireOrderAsXML" esb="BODY_CONTENT" />
</bpmToEsbVars>
これにより、 entireOrderAsXML 変数の XML ベースの内容がメッセージの本文で終了します。これで、IntakeService は、パイプラインの各アクションを通過させることにより、メッセージにアクセスし、処理できるようになりました。最後のアクションに達すると、 replyTo プロパティーが確認され、メッセージは JBpmCallBack サービスに送信されます。
これにより、JBoss Business Process Manager にコールバックし、Intake Order ノードから次のノードへの移行(この場合は 順の確認 の 確認)に通知します。
次に、メッセージからノードにいくつかの変数を送信します。両方のコンテキストがオブジェクトのクラスをロードできる限り、オブジェクト全体を送信できます。JBoss Business Process Manager にマップバックする機能を維持するには、 esbToEsbVars 要素を追加します。
<node name="Intake Order">
<action name="esbAction" class=
"org.jboss.soa.esb.services.jbpm.actionhandlers.EsbActionHandler">
<esbCategoryName>BPM_Orchestration4</esbCategoryName>
<esbServiceName>IntakeService</esbServiceName>
<bpmToEsbVars>
<mapping bpm="entireOrderAsXML" esb="BODY_CONTENT" />
</bpmToEsbVars>
<esbToBpmVars>
<mapping esb="body.entireOrderAsXML" bpm="entireOrderAsXML"/>
<mapping esb="body.orderHeader" bpm="entireOrderAsObject" />
<mapping esb="body.customer" bpm="entireCustomerAsObject" />
<mapping esb="body.order_orderId" bpm="order_orderid" />
<mapping esb="body.order_totalAmount" bpm="order_totalamount" />
<mapping esb="body.order_orderPriority" bpm="order_priority" />
<mapping esb="body.customer_firstName" bpm="customer_firstName" />
<mapping esb="body.customer_lastName" bpm="customer_lastName" />
<mapping esb="body.customer_status" bpm="customer_status" />
</esbToBpmVars>
</action>
<transition name="" to="Review Order"></transition>
</node>
このサービスが返されると、以下の変数が JBoss Business Process Manager のコンテキストに保存されます。
entireOrderAsXML
entireOrderAsObject
entireCustomerAsObject
また、デモの目的では、フラット化された変数もあります。
order_orderid
order_totalAmount
order_priority
customer_firstName
customer_lastName
customer_status
オーダープロセスを手動で確認する必要があります。Order Review という タスクでタスクノード を追加します。これらのジョブは、列車を持つ誰かが実行する必要があります。 actor_iduser
XML フラグメントは以下のようになります。
<task-node name="Review Order">
<task name="Order Review">
<assignment actor-id="user"></assignment>
<controller>
<variable name="customer_firstName"
access="read,write,required"></variable>
<variable name="customer_lastName" access="read,write,required">
<variable name="customer_status" access="read"></variable>
<variable name="order_totalamount" access="read"></variable>
<variable name="order_priority" access="read"></variable>
<variable name="order_orderid" access="read"></variable>
<variable name="order_discount" access="read"></variable>
<variable name="entireOrderAsXML" access="read"></variable>
</controller>
</task>
<transition name="" to="Calculate Discount"></transition>
</task-node>
XHTML データ形式を作成して、これらの変数を jbpm-console の形式で表示します。
詳細は、 bpm_orchestration4 クイックスタートの Review_Order.xhtml ファイルを参照してください。
これらの設定を form .xml ファイルに追加して、このデータ形式を task node にリンクします。
<forms>
<form task="Order Review" form="Review_Order.xhtml"/>
<form task="Discount Review" form="Review_Order.xhtml"/>
</forms>
この場合、2 つのタスクノードに同じ形式が適用されます。以下のサンプルコードに示されるように、Review Order フォームの変数への参照があります。(次に、JBoss Business Process Manager のコンテキストで設定される変数を参照します。)
<jbpm:datacell>
<f:facet name="header">
<h:outputText value="customer_firstName"/>
</f:facet>
<h:inputText value="#{var['customer_firstName']}" />
</jbpm:datacell>
プロセスが Review Node に到達すると、jBPM コンソールにログインし、Task をクリックしてアイテムのリストを表示できます。
タスクをクリックして詳細を確認します。フォームが表示されます。その後、一部の値を更新できます。
Save and Close をクリックして結論します。この時点で、プロセスは次のノードに移動します。
これは Calculate Discount ノードです。繰り返しになりますが、このノードは、以下のような設定ファイルです。
<node name="Calculate Discount">
<action name="esbAction" class="
org.jboss.soa.esb.services.jbpm.actionhandlers.EsbActionHandler">
<esbCategoryName>BPM_Orchestration4</esbCategoryName>
<esbServiceName>DiscountService</esbServiceName>
<bpmToEsbVars>
<mapping bpm="entireCustomerAsObject" esb="customer" />
<mapping bpm="entireOrderAsObject" esb="orderHeader" />
<mapping bpm="entireOrderAsXML" esb="BODY_CONTENT" />
</bpmToEsbVars>
<esbToBpmVars>
<mapping esb="order"
bpm="entireOrderAsObject" />
<mapping esb="body.order_orderDiscount" bpm="order_discount" />
</esbToBpmVars>
</action>
<transition name="" to="Review Discount"></transition>
</node>
サービスは、顧客、orderHeader、および entireOrderAsXML データを受け取ります。次に割引を計算します。応答は、body.order_orderDiscount の値を order_-discount という JBoss Business Process Manager コンテキスト変数にマッピングします。プロセスが通知され、Review Discount ノードに移行するように指示します。
値が 8.5 に設定されている割引を確認します。Save and Close をクリックします。プロセスは Ship It ノードに移動します。このノードも、Mastive サービスです。
Ship It サービスの完了前に注文プロセスを回避するには、以下のように EsbNotifier アクションハンドラーを送信移行にアタッチしてこれを使用します。
<node name="ShipIt">
<transition name="ProcessingComplete" to="end">
<action name="ShipItAction" class=
"org.jboss.soa.esb.services.jbpm.actionhandlers.EsbNotifier">
<esbCategoryName>BPM_Orchestration4</esbCategoryName>
<esbServiceName>ShippingService</esbServiceName>
<bpmToEsbVars>
<mapping bpm="entireCustomerAsObject" esb="customer" />
<mapping bpm="entireOrderAsObject" esb="orderHeader" />
<mapping bpm="entireOrderAsXML" esb="entireOrderAsXML" />
</bpmToEsbVars>
</action>
</transition>
</node>
ShippingService に通知した後、オーダープロセスは終了状態に移行し、終了します。( ShippingService 自体は終了している可能性があります。)
bpm_orchestration4 のクイックスタートでは、 JBoss Rules エンジンを使用して、この順番が normal メソッドまたは express メソッドから同梱されるかどうかを決定します。