Hitachi

OpenTP1 Version 7 分散トランザクション処理機能 OpenTP1 クライアント使用の手引 TP1/Client/J編


3.2.1 APIの実行順序

〈この項の構成〉

(1) TP1/Client/Jの使用準備

プログラムでTP1/Client/Jパッケージのインポート宣言をします。

Javaの各機能のパッケージをインポートするのと同様に,TP1/Client/Jのパッケージもインポートしてください。

import java.applet.*;                // java.appletパッケージのインポート
import java.awt.*;                    // java.awtパッケージのインポート
import JP.co.Hitachi.soft.OpenTP1.*;  // TP1Clientパッケージのインポート

(2) TP1Clientクラスのインスタンス作成

TP1/Client/Jのクラス名はTP1Clientです。TP1/Serverにアクセスする必要があるときにTP1Clientクラスのインスタンスを作成してください。

TP1Client zaiko;                   // zaikoというインスタンス変数を宣言
zaiko = new TP1Client();           // TP1Clientクラスのインスタンス作成
                                   // (コンストラクタ呼び出し)

(3) RPC環境の初期化

TP1/ServerのSPPを呼び出すためにRPC環境を初期化します。RPC環境を初期化するには,rpcOpenメソッドを呼び出します。

rpcOpenメソッドは,呼び出し時に何らかの問題が発生すると例外を返します。必要に応じて例外処理を行ってください。

なお,スケジューラダイレクト機能を使用したRPC,ネームサービスを利用したRPC,または通信先を指定したRPCを行う場合は,必ずrpcOpenメソッドを呼び出してください。リモートAPI機能を使用したRPCを行う場合は,呼び出さなくてもかまいません。

TP1/Client/J環境定義をシステムプロパティから取得する場合
try {
  zaiko.rpcOpen();                      // RPC環境の初期化
} catch(ErrFatalException e) {          // RPC環境初期化エラー発生
  System.out.println("CUP Initialize error");
} catch (TP1ClientException e) {        // その他のエラー発生
  System.out.println("error occured");
}
TP1/Client/J環境定義をファイルから取得する場合
try {
  zaiko.rpcOpen("C:\\Clt4J\\conf\\clt4j.ini");
                                        // RPC環境の初期化
} catch(ErrFatalException e) {          // RPC環境初期化エラー発生
  System.out.println("CUP Initialize error");
} catch (TP1ClientException e) {        // その他のエラー発生
  System.out.println("error occured");
}

(4) TP1/Serverのrapサーバに接続(リモートAPI機能を使用したRPCを行う場合)

リモートAPI機能を使用したRPCを行う場合,TP1/Serverのrapリスナーおよびrapサーバに接続します。接続を解除するまで,Javaアプレット,Javaアプリケーション,またはJavaサーブレットとrapサーバとの間に専用のTCP/IPコネクションが開設されます。

接続するために,TP1ClientクラスのopenConnectionメソッドを呼び出します。openConnectionメソッドは,呼び出し時に何らかの問題が発生すると例外を返します。必要に応じて例外処理を行ってください。

なお,スケジューラダイレクト機能を使用したRPC,ネームサービスを利用したRPC,通信先を指定したRPC,またはオートコネクトモードを使用したRPCを行う場合は,openConnectionメソッドを呼び出さないでください。

try {
  zaiko.openConnection("zaikosv",12000);
                            // rapリスナー,rapサーバとのコネクション確立
} catch(ErrTimedOutException e) {       // 接続タイムアウト発生
  System.out.println("server inactive");
} catch (TP1ClientException e) {        // その他のエラー発生
  System.out.println("error occured");
}

rapリスナー,rapサーバと常設コネクションを確立している途中に,rapリスナー,rapサーバ,またはOpenTP1システムが異常終了して常設コネクションが切断された場合でも,CUP側が常設コネクションの切断を検知できないことがあります。その場合,次に発行するメソッド(rpcCall,closeConnection)がErrTimedOutExceptionを返すことがあります。

(5) 遠隔サービスの呼び出し(RPC)

rapサーバへの接続が成功したあと,遠隔サービス(SPP)を呼び出せます(RPC)。RPCを行うときは,rpcCallメソッドを呼び出します。rpcCallメソッドの引数には,サービスを示すサービスグループ名,サービス名,問い合わせデータ,問い合わせデータ長,応答データ受信領域,応答データ受信領域長,およびRPCの実行形態を指定します。

rpcCallメソッドは,実行時に何らかの問題が発生すると例外を返します。必要に応じて例外処理を行ってください。

int in_len[] = new int[1];
int out_len[] = new int[1];
byte in_data[];
byte out_data[];
String in = "PN=0012-2456-12";       // 問い合わせデータ(便宜上固定文字列)
in_len[0] = 16;                         // 問い合わせデータ長(便宜上固定)
out_len[0] = 16;                        // 応答データ領域長(便宜上固定)
in_data = new byte[in_len[0]];          // 問い合わせデータ領域作成
in.getBytes(0, in.length(), in_data, 0);// 問い合わせデータ設定
out_data = new byte[out_len[0]];        // 応答データ領域作成
try {
  zaiko.rpcCall("group", "service",     // RPC実行(問い合わせ・応答型)
      in_data, in_len, out_data, out_len, zaiko.DCNOFLAGS);
} catch (ErrTimedOutException e) {      // RPC要求がタイムアウト
  System.out.println("RPC timedout");
} catch (TP1ClientException e) {        // その他のエラー発生
  System.out.println("error occured");
}

なお,RPCには次の表に示す3種類があります。flags引数に指定して選択します。

RPCの種類

機能

指定方法

問い合わせ応答

連鎖なし

サーバに対してサービス要求をしたあと,応答が返る。次回同一サーバへ問い合わせたときは,前回と同一のサーバプロセスで実行するとは限らない。

DCNOFLAGS

連鎖あり

サーバに対してサービス要求をしたあと,応答が返る。次回同一サーバへ問い合わせたときは,前回と同一のサーバプロセスで実行する(サーバプロセスを占有して使用する)。なお,スケジューラダイレクト機能を使用したRPC,およびネームサービスを使用したRPCでは使用できない。

DCRPC_CHAINED

応答なし

サーバに対してサービス要求をしたあと,応答を受信できない。サービスを正常に実行できたかどうか,クライアントではわからない。応答を待たないため,クライアントの実行性能が良い。

DCRPC_NOREPLY

DCRPC_CHAINEDでサービス呼び出しを実行した場合,最後のサービス呼び出し時に,連鎖型RPCの終了を示すため,DCNOFLAGSを指定してRPCを実行してください。

(6) rapリスナーおよびrapサーバとの常設コネクションの切断(リモートAPI機能を使用してRPCを行っている場合)

TP1/Serverとのオンライン業務が完了したあとに,closeConnectionメソッドを呼び出してrapリスナー,rapサーバとの常設コネクションを切断します。このメソッドに引数はありません。

closeConnectionメソッドは,実行時に何らかの問題が発生すると例外を返します。必要に応じて例外処理を行ってください。

try {
  zaiko.closeConnection();
               // rapリスナー,rapサーバとの常設コネクション切断
} catch (TP1ClientException e) {        // エラー発生
  System.out.println("error occured");
}

(7) RPC環境の解放

CUPの最後に,rpcCloseメソッドを呼び出してCUPのRPC環境を解放します。このメソッドに引数はありません。

rpcCloseメソッドは,実行時に何らかの問題が発生すると例外を返します。必要に応じて例外処理を行ってください。

try {
  zaiko.rpcClose();                     // RPC環境の解放
} catch (TP1ClientException e) {        // エラー発生
  System.out.println("error occured");
}