[SOA/BPM] The curious case of SOA Human tasks' automatic completion

原文はこちら。
https://blogs.oracle.com/ateamsoab2b/entry/the_curious_case_of_soa

Oracle BPM/SOAをお使いの南アジアの大規模な保険業界のお客様がこの事象に出くわしました。以前独力で解決したのですが、これをブログにまとめるつもりはありませんでした。しかし、このナレッジを広く知ってもらうことがよいのでは、と思い、以下にまとめておきます。

現象
適切なユーザにタスクを割り当てているのに、(SOA/BPMプロセスの)ヒューマンタスクが自動的に完了する。スタックトレースや関連する例外がログには現れない。

理由
プロセスを完了させる権限をもつ担当者がないヒューマンタスクの場合はこのように扱うように、製品が設計されているからです。したがって、警告やエラーメッセージがログには残らないのです。

類似の事象
このユースケースの派生として、割り当てられた人がリポジトリに存在しない場合、回復可能なエラーとして扱われます。Enterprise Managerで「保留復帰」のインスタンスから見つけることができるので、担当者を変更してプロセス所有者/管理者としてBPM Workspaceの担当者を変更することで、タスクを再度有効化できます。

しかし、いつタスクが自動で完了するのでしょう。ユースケースに戻ってみます…

発生するタイミング
タスクに割り当てられたユーザー/グループが”空(empty)"またはnullである場合に発生します。この事象はタスク担当者を式で導かれる、すなわち実行時にXPathを使ってタスク担当者を決定するようなタスクの場合にのみ確認されています(タスク担当者がスイムレーンのロールで割り当てられる場合は、この事象は発生しません)。

この事象をEnterprise Managerで見つけるには
したがって、自動完了しているインスタンスの場合は、タスクのoutcome(結果)が空のインスタンスの監査証跡で気づくでしょう。「取得された」要素もまたempty/nullとして表示します。

oracle.soa.services.workflow.*のリグオプションをEnterprise Managerで有効にすると、この事象のより詳細なメッセージを出力できます。

この事象を修復するには
2カ所の修正が必要です。
  1. ヒューマンタスクへの入力
    XSLT / XPathを使ってタスク担当者やプロセスそのものを設定する場合、NULLを処理するように拡張する必要があります。例:データが見つからなかった場合、代替値を担当者に割り当てたり、デフォルト担当者を設定すなど。
  2. ヒューマンタスクからの出力
    さらにアプリケーション·コードで、ヒューマンタスクの結果(outcome)がNULLではないことを確認します。NULLの場合は、ルートタスクを再実行するようルーティングする前に担当者を正しく設定する必要があります。Patch Set 4 Feature Packから、'grab'機能を使ってタスクを取り戻し、再度実行することができます。

0 件のコメント:

コメントを投稿