Javaアクション・フォルト・ポリシーの使用方法
Javaアクション・フォルト・ポリシーを使用する際は、次の点に注意してください。
-
用意されているJavaクラスは、特定のインタフェースに従っています。このインタフェースは文字列を戻します。実行後に取得する出力およびフォルト・ポリシーには、複数の値を指定できます。
-
実装されているメソッドの出力値(戻り値)からフォルト・ポリシーへのマッピングを指定することで、追加のフォルト・ポリシーを実行できます。
-
ReturnValue
が指定されていない場合は、次の例に示すように、デフォルトのフォルト・ポリシーが実行されます。
<Action id="ora-java"> <javaAction className="mypackage.myclass" defaultAction="ora-human-intervention" propertySet="prop-for-billing"> <!--defaultAction is a required attribute, but propertySet is optional--> <!-- attribute--> <ReturnValue value="RETRY" ref="ora-retry"/> <!--value is not nilable attribute & cannot be empty--> <ReturnValue value="RETRHOW" ref="ora-rethrow-fault"/> </javaAction> </Action>
表12-7に、ReturnValue
の使用例を示します。
表12-7 システムによるJavaアクション・フォルト・ポリシーの解釈
コード | 説明 |
---|---|
<ReturnValue value="RETRY" ref="ora-retry"/> |
メソッドから |
<ReturnValue value="" ref="ora-rethrow"/> |
検証は失敗です。 |
<javaAction className="mypackage.myclass" defaultAction="ora-human-intervention"> |
Javaコード実行後に |
<ReturnValue value="RETRY" ref="ora-retry"/> <ReturnValue value="" ref=""/> |
検証は失敗です。 |
<javaAction className="mypackage.myclass" defaultAction=" ora-human-intervention"> <ReturnValue></ReturnValue> |
検証は失敗です。 |
Javaクラスを起動するには、IFaultRecoveryJavaClass
インタフェースを実装しているクラスを指定できます。IFaultRecoveryJavaClass
は、fabric-runtime.jar
ファイルにあります。パッケージ名は、oracle.integration.platform.faultpolicy
です。
次の例に示すように、IFaultRecoveryJavaClass
インタフェースには2つのメソッドがあります。
public interface IFaultRecoveryJavaClass { public void handleRetrySuccess( IFaultRecoveryContext ctx ); public String handleFault( IFaultRecoveryContext ctx ); }
次の詳細に注意してください。
-
handleRetrySuccess
は、再試行に成功した場合に起動されます。再試行ポリシーは、retrySuccessAction
のJavaアクションにチェーンします。 -
handleFault
は、javaAction
タイプのポリシーを実行する際に起動されます。 -
フォルト・ポリシー・クラスは、次の2つのいずれかの方法でパッケージ化およびデプロイされます。
-
SOAコンポジット・アプリケーションを使用してJavaクラスをパッケージ化します。
-
Javaクラスを複数のSOAコンポジット・アプリケーションで共有する必要がある場合は、共有場所(
$MW_HOME/soa/soa/ modules/oracle.soa.ext_11.1.1
など)に置きます。共有場所には、クラス・パスで使用できるようにするためのJavaクラスの配置方法を説明するreadme
ファイルが含まれています。
-
次の例にIFaultRecoveryContext
で使用可能なデータを示します。
public interface IFaultRecoveryContext { /** * Gets implementation type of the fault. * @return */ public String getType(); /** * @return Get property set of the fault policy action being executed. */ public Map getProperties(); /** * @return Get fault policy id of the fault policy being executed. */ public String getPolicyId(); /** * @return Name of the faulted partner link. */ public String getReferenceName(); /** * @return Port type of the faulted reference . */ public QName getPortType(); }
このインタフェースのサービス・エンジン実装では、さらに詳細な情報が提供されます(たとえば、Oracle BPEL Process Manager)。次の例に詳細を示します。
public class BPELFaultRecoveryContextImpl extends BPELXExecLetUtil implements IBPELFaultRecoveryContext, IFaultRecoveryContext{ ... }
次の例に示すように、Oracle BPEL Process Manager固有のデータは、IBPELFaultRecoveryContext
を使用して入手できます。
public interface IBPELFaultRecoveryContext { public void addAuditTrailEntry(String message); public void addAuditTrailEntry(String message, Object detail); public void addAuditTrailEntry(Throwable t); /** * @return Get action id of the fault policy action being executed. */ public String getActionId(); /** * @return Type of the faulted activity. */ public String getActivityId(); /** * @return Name of the faulted activity. */ public String getActivityName(); /** * @return Type of the faulted activity. */ public String getActivityType(); /** * @return Correleation id of the faulted activity. */ public String getCorrelationId(); /** * @return BPEL fault that caused the invoke to fault. */ public BPELFault getFault(); /** * @return Get index value of the instance */ public String getIndex(int i); /** * @return get Instance Id of the current process instance of the faulted * activity. */ public long getInstanceId(); /** * @return Get priority of the current process instance of the faulted * activity. */ public int getPriority(); /** * @return Process DN. */ public ComponentDN getProcessDN(); /** * @return Get status of the current process instance of the faulted * activity. */ public String getStatus(); /** * @return Get title of the current process instance of the faulted * activity. */ public String getTitle(); public Object getVariableData(String name) throws BPELFault; public Object getVariableData(String name, String partOrQuery) throws BPELFault; public Object getVariableData(String name, String part, String query) throws BPELFault; /** * @param priority * Set priority of the current process instance of the faulted * activity. * @return */ public void setPriority(int priority); /** * @param status * Set status of the current process instance of the faulted * activity. */ public void setStatus(String status); /** * @param title * Set title of the current process instance of the faulted * activity. * @return */ public String setTitle(String title); public void setVariableData(String name, Object value) throws BPELFault; public void setVariableData(String name, String partOrQuery, Object value) throws BPELFault; public void setVariableData(String name, String part, String query, Object value) throws BPELFault; }
次の例は、javaAction
の実装例を示しています。
public class TestJavaAction implements IFaultRecoveryJavaClass { public void handleRetrySuccess(IFaultRecoveryContext ctx) { System.out.println("This is for retry success"); handleFault(ctx); } public String handleFault(IFaultRecoveryContext ctx) { System.out.println("-----Inside handleFault-----\n" + ctx.toString()); dumpProperties(ctx.getProperties()); /* Get BPEL specific context here */ BPELFaultRecoveryContextImpl bpelCtx = (BPELFaultRecoveryContextImpl) ctx; bpelCtx.addAuditTrailEntry("hi there"); System.out.println("Policy Id" + ctx.getPolicyId()); ... }