28 インスタンス・メッセージ・データへのプログラムでのアクセス

この章では、インスタンス・メッセージ・データにプログラムでアクセスするためのインスタンス・メッセージJava APIの概要を示します。

この章の内容は次のとおりです。

インスタンス・メッセージAPIのInstanceMessageUtilクラスの詳細は、Oracle Fusion Middleware B2Bのインスタンス・メッセージJava APIリファレンスを参照してください。

28.1 インスタンス・メッセージ・データへのプログラムでのアクセス

インスタンス・メッセージJava APIは、取引パートナ間で交換されるランタイム・データを取得するためにOracle B2Bで提供されているJava APIです。

次のような場合にインスタンス・メッセージJava APIを使用します。

  • バックエンド・アプリケーションからの再発行

  • 特定の注文番号のステータスのチェック

  • バックエンド・アプリケーションによるペイロードのイントロスペクト

  • メッセージの残りの再試行のチェック

  • ペイロードのワイヤ・メッセージのチェック

インスタンス・メッセージAPIでは、様々な基準でランタイム・データを問い合せ、インスタンス・データの形式で結果を提供します。インスタンス・メッセージAPIは、ビジネス・メッセージとワイヤ・メッセージの両方をカプセル化する、インスタンス・メッセージ・ビューの上位のJavaラッパーです。

ノート:

このAPIを使用する場合は、b2b.jarおよびweblogic.jarまたはwlthint3client.jarに加えて、追加ライブラリをクラスパスの一部として設定する必要があります。

インスタンス・メッセージAPI問合せオプション

インスタンス・メッセージJava APIを使用すると、次の基準に基づいてインスタンス・メッセージを取得できます。

  • アグリーメント名

  • 管理番号、グループ管理番号、トランザクション管理番号、取引パートナ名、ドキュメント・タイプ

  • 日付範囲と取引パートナ

  • 日付範囲、方向、取引パートナ

  • メッセージID

  • メッセージの状態

  • プロトコル・メッセージID

  • 取引パートナ

  • 取引パートナと方向

  • 取引パートナとドキュメント・タイプ

  • 取引パートナとメッセージの状態

  • XPath式(1つまたは2つのXPath式で評価できます)

  • XPath値(1つまたは2つのXPath式で評価できます)

  • 対話ID

インスタンス・メッセージAPIの詳細は、Oracle Fusion Middleware B2Bのインスタンス・メッセージJava APIリファレンスを参照してください。

28.2 インスタンス・メッセージJava APIの例

この例は、取引パートナ名に基づく検索のサンプル・コードです

次の出力に基づいてロジックを作成できます。

Vector messages = (Vector) imUtil.getInstanceMessagesForTP("GlobalChips")

この例を例28-1に示します。

これと似た別のメソッドgetInstanceMessagesForMsgId(String messageId)があります。すべてのメソッドについては、Oracle Fusion Middleware B2Bのインスタンス・メッセージJava APIリファレンスを参照してください。

例28-1 取引パートナ名に基づく取得

import java.util.Vector;
import oracle.tip.b2b.utility.InstanceMessageUtil;
 
public class MyInstanceData {
    public static void main(String[] args) throws Exception {
 
        InstanceMessageUtil imUtil = new InstanceMessageUtil();
        Vector messages = (Vector) imUtil.getInstanceMessagesForTP("GlobalChips");
        System.out.println(messages.size());
    }
}

28.3 インスタンス・メッセージJava APIのトラブルシューティング

多数のメッセージおよび大きなペイロードの処理や、問合せのリモート実行のトラブルシューティングの例を示します。

トラブルシューティングについては、次のトピックを参照してください。

28.3.1 多数のメッセージの処理

問合せから多数のメッセージが返された場合、weblogic.socket.MaxMessageSizeExceededExceptionが発生することがあります。

この問題を解決するには、weblogic.MaxMessageSizeの値を増やし、クライアントのコマンドラインで-Dweblogic.MaxMessageSize=100000000を渡します。このパラメータ設定を指定すると、100MBのメッセージを受信できます。

次に例を示します。

java -cp
.:$ORACLE_HOME/wlserver_10.3/server/lib/wlthint3client.jar:$SOA_HOME/
/soa/modules/oracle.soa.b2b_11.1.1/b2b.jar
-Dweblogic.MaxMessageSize=100000000 TestInstanceMsg

28.3.2 大きなペイロードの処理

大きいインバウンドまたはアウトバウンド・ペイロードの場合は、ペイロード自体を返すのではなく、ペイロードの場所に対する参照を返します。

次に例を示します。

/tmp/GlobalChips_1_custnonxml_largepayload.dat@9844C4341297D3EB7B60000011A0CC9D .dat 

Oracle B2Bによる大きなペイロードの処理の詳細は、大きなペイロードの処理を参照してください。

28.3.3 Weblogic.jarを使用した問合せのリモート実行

weblogic.jarを使用してリモートで問合せを実行しているときに、Oracle WebLogic Serverのクラスパスの問題と、java.lang.ClassNotFoundException:weblogic.security.subject.AbstractSubject例外が発生する場合があります。

この問題を解決するには、wlthint3client.jarを使用して問合せを実行してください。

次に例を示します。

java -cp
.:$ORACLE_HOME/wlserver_10.3/server/lib/wlthint3client.jar:$SOA_HOME/
/soa/modules/oracle.soa.b2b_11.1.1/b2b.jar TestInstanceMsg