3.2.1 APIの実行順序

<この項の構成>
(1) TP1/Client/Jの使用準備
(2) TP1Clientクラスのインスタンス作成
(3) RPC環境の初期化
(4) TP1/Serverのrapサーバに接続(リモートAPI機能を使用したRPCを行う場合)
(5) 遠隔サービスの呼び出し(RPC)
(6) rapリスナーおよびrapサーバとの常設コネクションの切断(リモートAPI機能を使用してRPCを行っている場合)
(7) RPC環境の解放

(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");
}