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