WebSphere Message Broker バージョン 8.0.0.5 オペレーティング・システム: AIX、HP-Itanium、Linux、Solaris、Windows、z/OS

製品の最新バージョンについては、IBM Integration Bus バージョン 9.0 をご覧ください。

JavaCompute ノードの例外処理

evaluate() メソッドは、MbException をスローします。

チェック例外の他のクラスがコードでスローされる場合、それらをキャッチして MbException として再スローする必要があります。 通常は、コード例に示されているように MbUserException クラスを使用します。 MbUserExceptionMbException のサブクラスであり、パブリック・コンストラクターを含んでいます。 WebSphere® Message Broker ユーティリティー機能は、プライベート・コンストラクターを含む MbException の他のサブクラスをスローすることがあります。

evaluate() メソッドが処理された後にどうなるかについては、デフォルトのエラー処理を参照してください。

例外は、メッセージ・フロー処理 (evaluate() メソッド中) および onInitialize() メソッドの際に生じる可能性があります。 onInitialize() メソッドを実装した場合にノード構成でリカバリー不能エラーが検出されると、クラス MbException の例外が発行され、フローの初期化が失敗します。 フローでデプロイに失敗し、エラー・メッセージ BIP4157 が出されます。 あるいは、フローが開始されず、実行フローのリストにも表示されません。

存在しない可能性がある別の外部リソースに依存するコードを onInitialize() メソッドで実行しないでください。 これは、ブローカーがそのようなメソッドの呼び出しを再試行しないためです。 例えば、外部接続を初期化する必要がある場合は、evaluate() メソッドの最初の呼び出しの際に初期化してください。 初期化が正常に行われない場合は、他のフロー例外と同様に処理される例外をスローすることができます。

以下のコード例では、正または負の数が入ったヘッダー・フィールドに基づいて、CSV メッセージを out または alt ターミナルにルーティングする JavaCompute ノードの簡単な実装が示されています。 フィールド内のテキストが数値でない場合、NumberFormatException はスローされます。 コード例には、この例外をキャッチして MbUserException としてスローすることによって、JavaCompute ノードから WebSphere Message Broker に組み込まれる MbException の処理を使用できるようにする方法が示されています。

public void evaluate(MbMessageAssembly assembly) throws MbException {
  MbOutputTerminal out = getOutputTerminal("out");
  MbOutputTerminal alt = getOutputTerminal("alternate");
  
  MbMessage message = assembly.getMessage();
  int routeTo = 0;
  try {
    // ----------------------------------------------------------
    // Add user code below
    String routingValue = (String)message.evaluateXPath("string(/csv/header/route_to)");
    routeTo = Integer.parseInt(routingValue);
    
    
    // End of user code
    // ----------------------------------------------------------
  } catch (java.lang.NumberFormatException e ) {
    // Example Exception handling
    MbUserException mbue = new MbUserException(this, "evaluate()", "","", e.toString(), null);
    throw mbue;
  }
  
  // The following should only be changed
  // if not propagating message to the 'out' terminal
  if ( routeTo > 0 )
    out.propagate(assembly);
  else
    alt.propagate(assembly);
}
特記事項 | 商標 | ダウンロード | ライブラリー | サポート | フィードバック

Copyright IBM Corporation 1999, 2014Copyright IBM Corporation 1999, 2014.

        
        最終更新:
        
        最終更新: 2015-02-28 17:45:49


タスク・トピックタスク・トピック | バージョン 8.0.0.5 | ac30495_