クライアントアプリケーションの作成例を以下に示します。
■文字列型を使用した作成例
クライアントアプリケーションで文字列データを扱う場合、“java.lang.String”型を使用してください。
文字列型を使用する場合のクライアントアプリケーションの例を示します。
◆定義例
実行基盤インタフェース生成ツールを使用して、Javaソースを生成する場合のIDLファイルとアプリケーション情報入力ファイルを以下に示します。
IDLファイル
module apfw_mod { interface apfw_intf { long sampleOp01(in string p1,inout wstring p2,out string p3); }; }; |
アプリケーション情報入力ファイル
<?xml version="1.0" encoding="UTF-8"?> <apfw-app> <server> <target name="apl" /> <library name="libserverapl.so" /> </server> <client> <comment>C:\dev\app_def\src_comment\comment.txt</comment> <bean> <package>samplepkg</package> </bean> </client> </apfw-app> |
COBOL開発支援ツールを使用してJavaソースを生成する場合の入力情報を、以下に示します。
COBOLプロジェクトの情報の設定値
プロジェクト基本情報
項目 | 設定値 |
---|---|
プロジェクト名 | 任意の値 |
プロジェクトコンテンツ | ワークスペース内に新規プロジェクトを作成(初期値) |
ターゲットの定義
項目 | 設定値 |
---|---|
ターゲット種別 | ダイナミックリンクライブラリ |
ターゲット名 | apl |
登録集
P1.cbl
01 P1 PICTURE X(16). |
P2.cbl
01 P2 PICTURE N(8). |
P3.cbl
01 P3 PICTURE X(16). |
実行基盤インタフェースを生成するアプリケーション情報の設定値
基本情報
項目 | 設定値 |
---|---|
サーバアプリケーション名 | apl |
プログラム名 | sampleOp01 |
実行基盤インタフェースの出力情報
項目 | 設定値 | |
---|---|---|
サーバアプリケーションの実行基盤インタフェースの出力形式 | - | |
| 出力ファイルのプレフィクス | sample |
コメントファイル名 | C:\dev\app_def\src_comment\comment.txt | |
クライアントアプリケーションを使用する | チェックする | |
クライアントアプリケーションで使用するソースファイルの出力形式 | - | |
| パッケージ名 | samplepkg |
コメントファイル名 | C:\dev\app_def\src_comment\comment.txt | |
コメントに生成日付を挿入する | チェックしない |
パラメタと復帰値情報
項目 | 設定値 | |
---|---|---|
COBOLプログラムに渡すパラメタ | パラメタ名 | P1 |
パラメタタイプ | IN | |
COBOL登録集名 | P1.cbl | |
先頭のレベル番号 | 01 or 77 | |
COBOLプログラムに渡すパラメタ | パラメタ名 | P2 |
パラメタタイプ | INOUT | |
COBOL登録集名 | P2.cbl | |
先頭のレベル番号 | 01 or 77 | |
COBOLプログラムに渡すパラメタ | パラメタ名 | P3 |
パラメタタイプ | OUT | |
COBOL登録集名 | P3.cbl | |
先頭のレベル番号 | 01 or 77 | |
PROGRAM-STATUSの値を返却する | チェックする |
オプション情報
項目 | 設定値 | |
---|---|---|
サーバアプリケーションのオプション情報 | - | |
| アプリケーション作業域を使用する | チェックする |
処理結果情報および例外情報を使用する | チェックしない | |
前処理を使用する | チェックしない | |
後処理を使用する | チェックしない | |
エラー処理を使用する | チェックしない | |
トランザクション後メッセージ編集処理を使用する | チェックしない | |
COBOL実行基盤インタフェースの形式 | - | |
| 2進項目整数データをString型にマッピングする | チェックしない |
パラメタを初期化する | チェックしない | |
サーバアプリケーションで未設定データ判定処理を使用する | チェックしない | |
日本語項目をビッグエンディアンとして処理する(注) | チェックしない |
注)[日本語項目をビッグエンディアンとして処理する] の選択は、Linux、Windows のサーバアプリケーションを開発する場合、またはリモート開発の設定がされていない場合に表示されます。開発するサーバアプリケーションのプラットフォームは、アプリケーション開発用プロジェクトの [プロパティ] の [リモート開発] ページで確認することができます。
◆クライアントプリケーションの作成例
import com.fujitsu.interstage.apfw.conv.ApfwDataConversionException; import com.fujitsu.interstage.apfw.msync.ApfwInvokeException; import java.rmi.RemoteException; import com.fujitsu.interstage.apfw.scnt.ApfwSystemException; import com.fujitsu.interstage.apfw.scnt.ApfwUserException; import com.fujitsu.interstage.apfw.msync.MsyncCall; import samplepkg.sampleOp01Bean; class SampleClient1 { public static void main(String[] args) { try { // パラメタ設定用のsamplepkg.sampleOp01Beanを生成 sampleOp01Bean request = new sampleOp01Bean(); // INパラメタp1を設定 request.setP1("param1-IN"); // INOUTパラメタp2を設定 request.setP2("パラメタ2-インアウト"); // MsyncCallの作成 MsyncCall call = new MsyncCall("MyApp"); // コンテキストIDの設定 call.setContextId("id:11111"); // サーバアプリケーションの呼出し sampleOp01Bean response = (sampleOp01Bean)call.invokeMsync(request,"apl"); // removeメソッドの呼出し call.remove(); if( response != null ) { // サーバアプリケーションの結果(復帰値)を参照 int result = response.getApfw_result(); // INOUTパラメタp2を参照 String inout = response.getP2(); // OUTパラメタp3を参照 String out = response.getP3(); System.out.println("response-data(RETURN) : "+result); if( inout != null ) { System.out.println("response-data(INOUT) : "+inout); } else { System.out.println("response-data(INOUT) : null"); } if( out != null ) { System.out.println("response-data(OUT) : "+out); } else { System.out.println("response-data(OUT) : null"); } } } // 変換中の例外など catch(ApfwDataConversionException adce) { adce.printStackTrace(); } // API内部の例外 catch(ApfwInvokeException aie) { aie.printStackTrace(); } // 通信中の例外 catch(RemoteException re) { re.printStackTrace(); } // 同期アプリケーション連携実行基盤で発生した例外 catch(ApfwSystemException ase) { ase.printStackTrace(); } // サーバアプリケーションで発生した例外 catch(ApfwUserException aue) { aue.printStackTrace(); } } } |
import com.fujitsu.interstage.apfw.conv.ApfwDataConversionException; import com.fujitsu.interstage.apfw.msync.ApfwInvokeException; import java.rmi.RemoteException; import com.fujitsu.interstage.apfw.scnt.ApfwSystemException; import com.fujitsu.interstage.apfw.scnt.ApfwUserException; import com.fujitsu.interstage.apfw.msync.MsyncCall; import java.util.HashMap; class SampleClient1 { public static void main(String[] args) { try { // パラメタ設定用のjava.util.HashMapを生成 HashMap<String, Object> request = new HashMap<String, Object>(); // INパラメタp1を設定 request.put("p1", "param1-IN"); // INOUTパラメタp2を設定 request.put("p2", "パラメタ2-インアウト"); // MsyncCallの作成 MsyncCall call = new MsyncCall("MyApp"); // コンテキストIDの設定 call.setContextId("id:11111"); // サーバアプリケーションの呼出し HashMap response = (HashMap)call.invokeMsync(request,"apl"); // removeメソッドの呼出し call.remove(); if( response != null ) { // サーバアプリケーションの結果(復帰値)を参照 int result = (String)response.get("apfw_result"); // INOUTパラメタp2を参照 String inout = (String)response.get("p2"); // OUTパラメタp3を参照 String out = (String)response.get("p3"); System.out.println("response-data(RETURN) : "+result); if( inout != null ) { System.out.println("response-data(INOUT) : "+inout); } else { System.out.println("response-data(INOUT) : null"); } if( out != null ) { System.out.println("response-data(OUT) : "+out); } else { System.out.println("response-data(OUT) : null"); } } } // 変換中の例外など catch(ApfwDataConversionException adce) { adce.printStackTrace(); } // API内部の例外 catch(ApfwInvokeException aie) { aie.printStackTrace(); } // 通信中の例外 catch(RemoteException re) { re.printStackTrace(); } // 同期アプリケーション連携実行基盤で発生した例外 catch(ApfwSystemException ase) { ase.printStackTrace(); } // サーバアプリケーションで発生した例外 catch(ApfwUserException aue) { aue.printStackTrace(); } } } |
■class型を使用した作成例
classを使用する場合のクライアントアプリケーションの例を示します。
◆定義例
classを扱う場合には、IDLファイルに構造体型を定義します。
実行基盤インタフェース生成ツールを使用して、Javaソースを生成する場合のIDLファイルとアプリケーション情報入力ファイルを以下に示します。
IDLファイル
struct PARAM1STR { string mem11; wstring mem12; }; struct PARAM2STR { string mem21; wstring mem22; }; struct PARAM3STR { string mem31; wstring mem32; }; module apfw_mod { interface apfw_intf { long sampleOp02(in PARAM1STR P1,inout PARAM2STR P2,out PARAM3STR P3); }; }; |
アプリケーション情報入力ファイル
<?xml version="1.0" encoding="UTF-8"?> <apfw-app> <server> <target name="apl" /> <library name="libserverapl.so" /> </server> <client> <comment>C:\dev\app_def\src_comment\comment.txt</comment> <bean> <package>samplepkg</package> </bean> </client> </apfw-app> |
COBOL開発支援ツールを使用してJavaソースを生成する場合の入力情報を、以下に示します。
COBOLプロジェクトの情報の設定値
プロジェクト基本情報
項目 | 設定値 |
---|---|
プロジェクト名 | 任意の値 |
ターゲットの定義
項目 | 設定値 |
---|---|
ターゲット種別 | ダイナミックリンクライブラリ |
ターゲット名 | apl |
登録集
P1.cbl
01 PARAM1STR. 02 MEM11 PICTURE X(16). 02 MEM12 PICTURE N(8). |
P2.cbl
01 PARAM2STR. 02 MEM21 PICTURE X(16). 02 MEM22 PICTURE N(8). |
P3.cbl
01 PARAM3STR. 02 MEM31 PICTURE X(16). 02 MEM32 PICTURE N(8). |
実行基盤インタフェースを生成するアプリケーション情報の設定値
基本情報
項目 | 設定値 |
---|---|
サーバアプリケーション名 | apl |
プログラム名 | sampleOp02 |
実行基盤インタフェースの出力情報
項目 | 設定値 | |
---|---|---|
サーバアプリケーションの実行基盤インタフェースの出力形式 | - | |
| 出力ファイルのプレフィクス | sample |
コメントファイル名 | C:\dev\app_def\src_comment\comment.txt | |
クライアントアプリケーションを使用する | チェックする | |
クライアントアプリケーションで使用するソースファイルの出力形式 | - | |
| パッケージ名 | samplepkg |
コメントファイル名 | C:\dev\app_def\src_comment\comment.txt | |
コメントに生成日付を挿入する | チェックしない |
パラメタと復帰値情報
項目 | 設定値 | |
---|---|---|
COBOLプログラムに渡すパラメタ | パラメタ名 | PARAM1STR |
パラメタタイプ | IN | |
COBOL登録集名 | P1.cbl | |
先頭のレベル番号 | 01 or 77 | |
COBOLプログラムに渡すパラメタ | パラメタ名 | PARAM2STR |
パラメタタイプ | INOUT | |
COBOL登録集名 | P2.cbl | |
先頭のレベル番号 | 01 or 77 | |
COBOLプログラムに渡すパラメタ | パラメタ名 | PARAM3STR |
パラメタタイプ | OUT | |
COBOL登録集名 | P3.cbl | |
先頭のレベル番号 | 01 or 77 | |
PROGRAM-STATUSの値を返却する | チェックする |
オプション情報
項目 | 設定値 | |
---|---|---|
サーバアプリケーションのオプション情報 | - | |
| アプリケーション作業域を使用する | チェックする |
処理結果情報および例外情報を使用する | チェックしない | |
前処理を使用する | チェックしない | |
後処理を使用する | チェックしない | |
エラー処理を使用する | チェックしない | |
トランザクション後メッセージ編集処理を使用する | チェックしない | |
COBOL実行基盤インタフェースの形式 | - | |
| 2進項目整数データをString型にマッピングする | チェックしない |
パラメタを初期化する | チェックしない | |
サーバアプリケーションで未設定データ判定処理を使用する | チェックしない | |
日本語項目をビッグエンディアンとして処理する(注) | チェックしない |
注)[日本語項目をビッグエンディアンとして処理する] の選択は、Linux、Windows のサーバアプリケーションを開発する場合、またはリモート開発の設定がされていない場合に表示されます。開発するサーバアプリケーションのプラットフォームは、アプリケーション開発用プロジェクトの [プロパティ] の [リモート開発] ページで確認することができます。
◆クライアントプリケーションの作成例
import com.fujitsu.interstage.apfw.conv.ApfwDataConversionException; import com.fujitsu.interstage.apfw.msync.ApfwInvokeException; import java.rmi.RemoteException; import com.fujitsu.interstage.apfw.scnt.ApfwSystemException; import com.fujitsu.interstage.apfw.scnt.ApfwUserException; import com.fujitsu.interstage.apfw.msync.MsyncCall; import samplepkg.sampleOp02Bean; import samplepkg.PARAM1STR; import samplepkg.PARAM2STR; import samplepkg.PARAM3STR; class SampleClient2 { public static void main(String[] args) { try { // パラメタ設定用のsamplepkg.sampleOp02Beanを生成 sampleOp02Bean request = new sampleOp02Bean(); PARAM1STR p1str = new PARAM1STR("param1-IN", "パラメタ1-イン"); PARAM2STR p2str = new PARAM2STR("param2-INOUT", "パラメタ2-インアウト"); // INパラメタp1を設定 request.setP1(p1str); // INOUTパラメタp2を設定 request.setP2(p2str); // MsyncCallの作成 MsyncCall call = new MsyncCall("MyApp"); // コンテキストIDの設定 call.setContextId("id:22222"); // サーバアプリケーションの呼出し sampleOp02Bean response = (sampleOp02Bean)call.invokeMsync(request,"apl"); // removeメソッドの呼出し call.remove(); if( response != null ) { // サーバアプリケーションの結果(復帰値)を参照 int result = response.getApfw_result(); // INOUTパラメタp2を参照 PARAM2STR inout = response.getP2(); // OUTパラメタp3を参照 PARAM3STR out = response.getP3(); System.out.println("response-data(RETURN): "+result); if( inout != null ) { if( inout.mem21 != null ) { System.out.println("response-data(INOUT) : mem21 : "+inout.mem21); } else { System.out.println("response-data(INOUT) : mem21 : null"); } if( inout.mem22 != null ) { System.out.println("response-data(INOUT) : mem22 : "+inout.mem22); } else { System.out.println("response-data(INOUT) : mem22 : null"); } } else { System.out.println("response-data(INOUT) : null"); } if( out != null ) { if( out.mem31 != null ) { System.out.println("response-data(OUT) : mem31 : "+out.mem31); } else { System.out.println("response-data(OUT) : mem31 : null"); } if( out.mem32 != null ) { System.out.println("response-data(OUT) : mem32 : "+out.mem32); } else { System.out.println("response-data(OUT) : mem32 : null"); } } else { System.out.println("response-data(OUT) : null"); } } } // 変換中の例外など catch(ApfwDataConversionException adce) { adce.printStackTrace(); } // API内部の例外 catch(ApfwInvokeException aie) { aie.printStackTrace(); } // 通信中の例外 catch(RemoteException re) { re.printStackTrace(); } // 同期アプリケーション連携実行基盤で発生した例外 catch(ApfwSystemException ase) { ase.printStackTrace(); } // サーバアプリケーションで発生した例外 catch(ApfwUserException aue) { aue.printStackTrace(); } } } |
import com.fujitsu.interstage.apfw.conv.ApfwDataConversionException; import com.fujitsu.interstage.apfw.msync.ApfwInvokeException; import java.rmi.RemoteException; import com.fujitsu.interstage.apfw.scnt.ApfwSystemException; import com.fujitsu.interstage.apfw.scnt.ApfwUserException; import com.fujitsu.interstage.apfw.msync.MsyncCall; import java.util.HashMap; import java.util.Map; class SampleClient2 { public static void main(String[] args) { try { // パラメタ設定用のjava.util.HashMapを生成 HashMap<String, Object> request = new HashMap<String, Object>(); HashMap<String, Object> p1str = new HashMap<String, Object>(); p1str.put("mem11", "param1-IN"); p1str.put("mem12", "パラメタ1-イン"); HashMap<String, Object> p2str = new HashMap<String, Object>(); p2str.put("mem21", "param2-INOUT"); p2str.put("mem22", "パラメタ2-インアウト"); // INパラメタP1を設定 request.put("P1", p1str); // INOUTパラメタP2を設定 request.put("P2", p2str); // MsyncCallの作成 MsyncCall call = new MsyncCall("MyApp"); // コンテキストIDの設定 call.setContextId("id:22222"); // サーバアプリケーションの呼出し HashMap response = (HashMap)call.invokeMsync(request,"apl"); // removeメソッドの呼出し call.remove(); if( response != null ) { // サーバアプリケーションの結果(復帰値)を参照 int result = ((Integer)response.get("apfw_result")).intValue(); // INOUTパラメタp2を参照 Map inout = (Map)response.get("P2"); // OUTパラメタp3を参照 Map out = (Map)response.get("P3"); System.out.println("response-data(RETURN) : " + result); if( inout != null ) { if( inout.get("mem21") != null ) { System.out.println("response-data(INOUT) : mem21 : "+inout.get("mem21")); } else { System.out.println("response-data(INOUT) : mem21 : null"); } if( inout.get("mem22") != null ) { System.out.println("response-data(INOUT) : mem22 : "+inout.get("mem22")); } else { System.out.println("response-data(INOUT) : mem22 : null"); } } else { System.out.println("response-data(INOUT) : null"); } if( out != null ) { if( out.get("mem31") != null ) { System.out.println("response-data(OUT) : mem31 : "+out.get("mem31")); } else { System.out.println("response-data(OUT) : mem31 : null"); } if( out.get("mem32") != null ) { System.out.println("response-data(OUT) : mem32 : "+out.get("mem32")); } else { System.out.println("response-data(OUT) : mem32 : null"); } } else { System.out.println("response-data(OUT) : null"); } } } // 変換中の例外など catch(ApfwDataConversionException adce) { adce.printStackTrace(); } // API内部の例外 catch(ApfwInvokeException aie) { aie.printStackTrace(); } // 通信中の例外 catch(RemoteException re) { re.printStackTrace(); } // 同期アプリケーション連携実行基盤で発生した例外 catch(ApfwSystemException ase) { ase.printStackTrace(); } // サーバアプリケーションで発生した例外 catch(ApfwUserException aue) { aue.printStackTrace(); } } } |
■配列型を使用した作成例
配列型を使用する場合のクライアントアプリケーションの例を示します。
◆定義例
実行基盤インタフェース生成ツールを使用して、Javaソースを生成する場合のIDLファイルとアプリケーション情報入力ファイルを以下に示します。
IDLファイル
struct P1ARRAY { string p1array_val[3]; }; struct P2ARRAY { wstring p2array_val[2]; }; struct P3ARRAY { string p3array_val[5]; }; module apfw_mod { interface apfw_intf { long sampleOp03(in P1ARRAY p1array,inout P2ARRAY p2array,out P3ARRAY p3array); }; }; |
アプリケーション情報入力ファイル
<?xml version="1.0" encoding="UTF-8"?> <apfw-app> <server> <target name="apl" /> <library name="libserverapl.so" /> </server> <client> <comment>C:\dev\app_def\src_comment\comment.txt</comment> <bean> <package>samplepkg</package> </bean> </client> </apfw-app> |
COBOL開発支援ツールを使用してJavaソースを生成する場合の入力情報を、以下に示します。
COBOLプロジェクトの情報の設定値
プロジェクト基本情報
項目 | 設定値 |
---|---|
プロジェクト名 | 任意の値 |
ターゲットの定義
項目 | 設定値 |
---|---|
ターゲット種別 | ダイナミックリンクライブラリ |
ターゲット名 | apl |
登録集
P1.cbl
01 P1ARRAY. 02 P1ARRAY-VAL PICTURE X(16) OCCURS 3. |
P2.cbl
01 P2ARRAY. 02 P2ARRAY-VAL PICTURE N(8) OCCURS 2. |
P3.cbl
01 P3ARRAY. 02 P3ARRAY-VAL PICTURE X(16) OCCURS 5. |
実行基盤インタフェースを生成するアプリケーション情報の設定値
基本情報
項目 | 設定値 |
---|---|
サーバアプリケーション名 | apl |
プログラム名 | sampleOp03 |
実行基盤インタフェースの出力情報
項目 | 設定値 | |
---|---|---|
サーバアプリケーションの実行基盤インタフェースの出力形式 | - | |
| 出力ファイルのプレフィクス | sample |
コメントファイル名 | C:\dev\app_def\src_comment\comment.txt | |
クライアントアプリケーションを使用する | チェックする | |
クライアントアプリケーションで使用するソースファイルの出力形式 | - | |
| パッケージ名 | samplepkg |
コメントファイル名 | C:\dev\app_def\src_comment\comment.txt | |
コメントに生成日付を挿入する | チェックしない |
パラメタと復帰値情報
項目 | 設定値 | |
---|---|---|
COBOLプログラムに渡すパラメタ | パラメタ名 | P1ARRAY |
パラメタタイプ | IN | |
COBOL登録集名 | P1.cbl | |
先頭のレベル番号 | 01 or 77 | |
COBOLプログラムに渡すパラメタ | パラメタ名 | P2ARRAY |
パラメタタイプ | INOUT | |
COBOL登録集名 | P2.cbl | |
先頭のレベル番号 | 01 or 77 | |
COBOLプログラムに渡すパラメタ | パラメタ名 | P3ARRAY |
パラメタタイプ | OUT | |
COBOL登録集名 | P3.cbl | |
先頭のレベル番号 | 01 or 77 | |
PROGRAM-STATUSの値を返却する | チェックする |
オプション情報
項目 | 設定値 | |
---|---|---|
サーバアプリケーションのオプション情報 | - | |
| アプリケーション作業域を使用する | チェックする |
処理結果情報および例外情報を使用する | チェックしない | |
前処理を使用する | チェックしない | |
後処理を使用する | チェックしない | |
エラー処理を使用する | チェックしない | |
トランザクション後メッセージ編集処理を使用する | チェックしない | |
COBOL実行基盤インタフェースの形式 | - | |
| 2進項目整数データをString型にマッピングする | チェックしない |
パラメタを初期化する | チェックしない | |
サーバアプリケーションで未設定データ判定処理を使用する | チェックしない | |
日本語項目をビッグエンディアンとして処理する(注) | チェックしない |
注)[日本語項目をビッグエンディアンとして処理する] の選択は、Linux、Windows のサーバアプリケーションを開発する場合、またはリモート開発の設定がされていない場合に表示されます。開発するサーバアプリケーションのプラットフォームは、アプリケーション開発用プロジェクトの [プロパティ] の [リモート開発] ページで確認することができます。
◆クライアントプリケーションの作成例
import com.fujitsu.interstage.apfw.conv.ApfwDataConversionException; import com.fujitsu.interstage.apfw.msync.ApfwInvokeException; import java.rmi.RemoteException; import com.fujitsu.interstage.apfw.scnt.ApfwSystemException; import com.fujitsu.interstage.apfw.scnt.ApfwUserException; import com.fujitsu.interstage.apfw.msync.MsyncCall; import samplepkg.sampleOp03Bean; import samplepkg.P1ARRAY; import samplepkg.P2ARRAY; import samplepkg.P3ARRAY; class SampleClient3 { public static void main(String[] args) { try { // パラメタ設定用のsamplepkg.sampleOp03Beanを生成 sampleOp03Bean request = new sampleOp03Bean(); String[] p1array_val = new String[3]; String[] p2array_val = new String[2]; for( int i = 0; i < p1array_val.length; i++) { p1array_val[i] = new String("param1-IN"); } for( int i = 0; i < p2array_val.length; i++) { p2array_val[i] = new String("パラメタ2-インアウト"); } P1ARRAY p1array = new P1ARRAY( p1array_val ); P2ARRAY p2array = new P2ARRAY( p2array_val ); // INパラメタP1ARRAYを設定 request.setP1array(p1array); // INOUTパラメタP2ARRAYを設定 request.setP2array(p2array); // MsyncCallの作成 MsyncCall call = new MsyncCall("MyApp"); // コンテキストIDの設定 call.setContextId("id:33333"); // サーバアプリケーションの呼出し sampleOp03Bean response = (sampleOp03Bean)call.invokeMsync(request,"apl"); // removeメソッドの呼出し call.remove(); if( response != null ) { // サーバアプリケーションの結果(復帰値)を参照 int result = response.getApfw_result(); // INOUTパラメタP2ARRAYを参照 P2ARRAY inout = response.getP2array(); // OUTパラメタP3ARRAYを参照 P3ARRAY out = response.getP3array(); System.out.println("response-data(RETURN) : " + result); String[] inout_val = inout.p2array_val; String[] out_val = out.p3array_val; if( inout_val != null ) { for( int i = 0; i < inout_val.length; i++) { if( inout_val[i] != null ) { System.out.println("response-data(INOUT) : ["+i+"] : "+inout_val[i]); } else { System.out.println("response-data(INOUT) : ["+i+"] : null"); } } } else { System.out.println("response-data(INOUT) : null"); } if( out_val != null ) { for( int i = 0; i < out_val.length; i++) { if( out_val[i] != null ) { System.out.println("response-data(OUT) : ["+i+"] : "+out_val[i]); } else { System.out.println("response-data(OUT) : ["+i+"] : null"); } } } else { System.out.println("response-data(OUT) : null"); } } } // 変換中の例外など catch(ApfwDataConversionException adce) { adce.printStackTrace(); } // API内部の例外 catch(ApfwInvokeException aie) { aie.printStackTrace(); } // 通信中の例外 catch(RemoteException re) { re.printStackTrace(); } // 同期アプリケーション連携実行基盤で発生した例外 catch(ApfwSystemException ase) { ase.printStackTrace(); } // サーバアプリケーションで発生した例外 catch(ApfwUserException aue) { aue.printStackTrace(); } } } |
備考.IDLファイルに定義した配列の長さが超過または不足した場合は、例外が発生します。
import com.fujitsu.interstage.apfw.conv.ApfwDataConversionException; import com.fujitsu.interstage.apfw.msync.ApfwInvokeException; import java.rmi.RemoteException; import com.fujitsu.interstage.apfw.scnt.ApfwSystemException; import com.fujitsu.interstage.apfw.scnt.ApfwUserException; import com.fujitsu.interstage.apfw.msync.MsyncCall; import java.util.HashMap; import java.util.Map; class SampleClient3 { public static void main(String[] args) { try { // パラメタ設定用のjava.util.HashMapを生成 HashMap<String, Object> request = new HashMap<String, Object>(); // パラメタp1array / p2array設定用のjava.util.HashMapを生成 HashMap<String, Object> in = new HashMap<String, Object>(); HashMap<String, Object> inout = new HashMap<String, Object>(); // パラメタp1array / p2arrayに設定する配列を定義する String[] inarray = new String[3]; String[] inoutarray = new String[2]; for( int i = 0; i < inarray.length; i++) { inarray[i] = new String("param1-IN"); } for( int i = 0; i < inoutarray.length; i++) { inoutarray[i] = new String("パラメタ2-インアウト"); } // パラメタp1array / p2arrayに配列データを設定する in.put("p1array_val", inarray ); inout.put("p2array_val", inoutarray ); // INパラメタp1を設定 request.put("p1array", in); // INOUTパラメタp2を設定 request.put("p2array", inout); // MsyncCallの作成 MsyncCall call = new MsyncCall("MyApp"); // コンテキストIDの設定 call.setContextId("id:33333"); // サーバアプリケーションの呼出し HashMap<String, Object> response = (HashMap<String, Object>)call.invokeMsync(request,"apl"); // removeメソッドの呼出し call.remove(); if( response != null ) { // サーバアプリケーションの結果(復帰値)を参照 int result = ((Integer)response.get("apfw_result")).intValue(); // INOUTパラメタp2arrayを参照 Map inout_ret = (Map)response.get("p2array"); // OUTパラメタp3arrayを参照 Map out = (Map)response.get("p3array"); // p2arrayの配列データを参照 String[] inoutarray_ret = (String[])inout_ret.get("p2array_val"); // p3arrayの配列データを参照 String[] outarray = (String[])out.get("p3array_val"); System.out.println("response-data(RETURN) : " + result); if( inoutarray_ret != null ) { for( int i = 0; i < inoutarray_ret.length; i++) { if( inoutarray_ret[i] != null ) { System.out.println("response-data(INOUT) : ["+i+"] : "+inoutarray_ret[i]); } else { System.out.println("response-data(INOUT) : ["+i+"] : null"); } } } else { System.out.println("response-data(INOUT) : null"); } if( outarray != null ) { for( int i = 0; i < outarray.length; i++) { if( outarray[i] != null ) { System.out.println("response-data(OUT) : ["+i+"] : "+outarray[i]); } else { System.out.println("response-data(OUT) : ["+i+"] : null"); } } } else { System.out.println("response-data(OUT) : null"); } } } // 変換中の例外など catch(ApfwDataConversionException adce) { adce.printStackTrace(); } // API内部の例外 catch(ApfwInvokeException aie) { aie.printStackTrace(); } // 通信中の例外 catch(RemoteException re) { re.printStackTrace(); } // 同期アプリケーション連携実行基盤で発生した例外 catch(ApfwSystemException ase) { ase.printStackTrace(); } // サーバアプリケーションで発生した例外 catch(ApfwUserException aue) { aue.printStackTrace(); } } } |
備考.IDLファイルに定義した配列の長さが超過または不足した場合は、例外が発生します。
■バイナリデータを使用した作成例
バイナリを定義したIDLファイルとアプリケーション情報入力ファイルを使用して、Javaソースを生成した場合のクライアントアプリケーションの例を示します。
◆定義例
実行基盤インタフェース生成ツールを使用して、Javaソースを生成する場合のIDLファイルとアプリケーション情報入力ファイルを以下に示します。
IDLファイル
typedef sequence<octet> PARAM1BIN; typedef sequence<octet> PARAM2BIN; typedef sequence<octet> PARAM3BIN; module apfw_mod { interface apfw_intf { long sampleOp04 ( in PARAM1BIN param1bin, inout PARAM2BIN param2bin, out PARAM3BIN param3bin ); }; }; |
アプリケーション情報入力ファイル
<?xml version="1.0" encoding="UTF-8"?> <apfw-app> <server> <target name="apl" /> <library name="libserverapl.so" /> </server> <client> <comment>C:\dev\app_def\src_comment\comment.txt</comment> <bean> <package>samplepkg</package> </bean> </client> </apfw-app> |
COBOL開発支援ツールを使用してJavaソースを生成する場合の入力情報を、以下に示します。
COBOLプロジェクトの情報の設定値
プロジェクト基本情報
項目 | 設定値 |
---|---|
プロジェクト名 | 任意の値 |
ターゲットの定義
項目 | 設定値 |
---|---|
ターゲット種別 | ダイナミックリンクライブラリ |
ターゲット名 | apl |
登録集
P1.cbl
01 PARAM1BIN. 49 AREALEN PICTURE 9(9) COMP-5. 49 VALLEN PICTURE 9(9) COMP-5. 49 VAL USAGE POINTER. |
P2.cbl
01 PARAM2BIN. 49 AREALEN PICTURE 9(9) COMP-5. 49 VALLEN PICTURE 9(9) COMP-5. 49 VAL USAGE POINTER. |
P3.cbl
01 PARAM3BIN. 49 AREALEN PICTURE 9(9) COMP-5. 49 VALLEN PICTURE 9(9) COMP-5. 49 VAL USAGE POINTER. |
実行基盤インタフェースを生成するアプリケーション情報の設定値
基本情報
項目 | 設定値 |
---|---|
サーバアプリケーション名 | apl |
プログラム名 | sampleOp04 |
実行基盤インタフェースの出力情報
項目 | 設定値 | |
---|---|---|
サーバアプリケーションの実行基盤インタフェースの出力形式 | - | |
| 出力ファイルのプレフィクス | sample |
コメントファイル名 | C:\dev\app_def\src_comment\comment.txt | |
クライアントアプリケーションを使用する | チェックする | |
クライアントアプリケーションで使用するソースファイルの出力形式 | - | |
| パッケージ名 | samplepkg |
コメントファイル名 | C:\dev\app_def\src_comment\comment.txt | |
コメントに生成日付を挿入する | チェックしない |
パラメタと復帰値情報
項目 | 設定値 | |
---|---|---|
COBOLプログラムに渡すパラメタ | パラメタ名 | PARAM1BIN |
パラメタタイプ | IN | |
COBOL登録集名 | P1.cbl | |
先頭のレベル番号 | 01 or 77 | |
COBOLプログラムに渡すパラメタ | パラメタ名 | PARAM2BIN |
パラメタタイプ | INOUT | |
COBOL登録集名 | P2.cbl | |
先頭のレベル番号 | 01 or 77 | |
COBOLプログラムに渡すパラメタ | パラメタ名 | PARAM3BIN |
パラメタタイプ | OUT | |
COBOL登録集名 | P3.cbl | |
先頭のレベル番号 | 01 or 77 | |
PROGRAM-STATUSの値を返却する | チェックする |
オプション情報
項目 | 設定値 | |
---|---|---|
サーバアプリケーションのオプション情報 | - | |
| アプリケーション作業域を使用する | チェックする |
処理結果情報および例外情報を使用する | チェックしない | |
前処理を使用する | チェックしない | |
後処理を使用する | チェックしない | |
エラー処理を使用する | チェックしない | |
トランザクション後メッセージ編集処理を使用する | チェックしない | |
COBOL実行基盤インタフェースの形式 | - | |
| 2進項目整数データをString型にマッピングする | チェックしない |
パラメタを初期化する | チェックしない | |
サーバアプリケーションで未設定データ判定処理を使用する | チェックしない | |
日本語項目をビッグエンディアンとして処理する(注) | チェックしない |
注)[日本語項目をビッグエンディアンとして処理する] の選択は、Linux、Windows のサーバアプリケーションを開発する場合、またはリモート開発の設定がされていない場合に表示されます。開発するサーバアプリケーションのプラットフォームは、アプリケーション開発用プロジェクトの [プロパティ] の [リモート開発] ページで確認することができます。
◆クライアントプリケーションの作成例
import com.fujitsu.interstage.apfw.conv.ApfwDataConversionException; import com.fujitsu.interstage.apfw.msync.ApfwInvokeException; import java.rmi.RemoteException; import com.fujitsu.interstage.apfw.scnt.ApfwSystemException; import com.fujitsu.interstage.apfw.scnt.ApfwUserException; import com.fujitsu.interstage.apfw.msync.MsyncCall; import samplepkg.sampleOp04Bean; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; class SampleClient4 { public static void main(String[] args) { try { // パラメタ設定用のsamplepkg.sampleOp04Beanを生成 sampleOp04Bean request = new sampleOp04Bean(); int length = 0; File f = new File("sample4-1.txt"); length = (int)f.length(); byte[] p1so = new byte[length]; FileInputStream fis = new FileInputStream(f); fis.read(p1so); fis.close(); f = new File("sample4-2.jpg"); length = (int)f.length(); byte[] p2so = new byte[length]; fis = new FileInputStream(f); fis.read(p2so); fis.close(); // INパラメタp1を設定 request.setParam1bin(p1so); // INOUTパラメタp2を設定 request.setParam2bin(p2so); // MsyncCallの作成 MsyncCall call = new MsyncCall("MyApp"); // コンテキストIDの設定 call.setContextId("id:44444"); // サーバアプリケーションの呼出し sampleOp04Bean response = (sampleOp04Bean)call.invokeMsync(request,"apl"); // removeメソッドの呼出し call.remove(); if( response != null ) { // サーバアプリケーションの結果(復帰値)を参照 int result = response.getApfw_result(); // INOUTパラメタp2を参照 byte[] inout = response.getParam2bin(); // OUTパラメタp3を参照 byte[] out = response.getParam3bin(); FileOutputStream fos = null; System.out.println("response-data(RETURN) : " + result); if( inout != null ) { f = new File("inout.bmp"); fos = new FileOutputStream(f); fos.write(result); fos.close(); } else { System.out.println("response-data(INOUT) : null"); } if( out != null ) { f = new File("outt.jpg"); fos = new FileOutputStream(f); fos.write(result); fos.close(); } else { System.out.println("response-data(OUT) : null"); } } } // 変換中の例外など catch(ApfwDataConversionException adce) { adce.printStackTrace(); } // API内部の例外 catch(ApfwInvokeException aie) { aie.printStackTrace(); } // 通信中の例外 catch(RemoteException re) { re.printStackTrace(); } // 同期アプリケーション連携実行基盤で発生した例外 catch(ApfwSystemException ase) { ase.printStackTrace(); } // サーバアプリケーションで発生した例外 catch(ApfwUserException aue) { aue.printStackTrace(); } // ファイル操作で発生した例外 catch(IOException ie) { ie.printStackTrace(); } } } |
import com.fujitsu.interstage.apfw.conv.ApfwDataConversionException; import com.fujitsu.interstage.apfw.msync.ApfwInvokeException; import java.rmi.RemoteException; import com.fujitsu.interstage.apfw.scnt.ApfwSystemException; import com.fujitsu.interstage.apfw.scnt.ApfwUserException; import com.fujitsu.interstage.apfw.msync.MsyncCall; import java.util.HashMap; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; class SampleClient4 { public static void main(String[] args) { try { // パラメタ設定用のjava.util.HashMapを生成 HashMap<String, Object> request = new HashMap<String, Object>(); int length = 0; File f = new File("sample4-1.txt"); length = (int)f.length(); byte[] p1so = new byte[length]; FileInputStream fis = new FileInputStream(f); fis.read(p1so); fis.close(); f = new File("sample4-2.jpg"); length = (int)f.length(); byte[] p2so = new byte[length]; fis = new FileInputStream(f); fis.read(p2so); fis.close(); // INパラメタparam1binを設定 request.put("param1bin", p1so); // INOUTパラメタparam2binを設定 request.put("param2bin", p2so); // MsyncCallの作成 MsyncCall call = new MsyncCall("MyApp"); // コンテキストIDの設定 call.setContextId("id:44444"); // サーバアプリケーションの呼出し HashMap<String, Object> response = (HashMap<String, Object>)call.invokeMsync(request,"apl"); // removeメソッドの呼出し call.remove(); if( response != null ) { // サーバアプリケーションの結果(復帰値)を参照 int result = ((Integer)response.get("apfw_result")).intValue(); // INOUTパラメタparam2binを参照 byte[] inout = (byte[])response.get("param2bin"); // OUTパラメタparam3binを参照 byte[] out = (byte[])response.get("param3bin"); FileOutputStream fos = null; System.out.println("response-data(RETURN) : " + result); if( inout != null ) { f = new File("inout.bmp"); fos = new FileOutputStream(f); fos.write(result); fos.close(); } else { System.out.println("response-data(INOUT) : null"); } if( out != null ) { f = new File("outt.jpg"); fos = new FileOutputStream(f); fos.write(result); fos.close(); } else { System.out.println("response-data(OUT) : null"); } } } // 変換中の例外など catch(ApfwDataConversionException adce) { adce.printStackTrace(); } // API内部の例外 catch(ApfwInvokeException aie) { aie.printStackTrace(); } // 通信中の例外 catch(RemoteException re) { re.printStackTrace(); } // 同期アプリケーション連携実行基盤で発生した例外 catch(ApfwSystemException ase) { ase.printStackTrace(); } // サーバアプリケーションで発生した例外 catch(ApfwUserException aue) { aue.printStackTrace(); } // ファイル操作で発生した例外 catch(IOException ie) { ie.printStackTrace(); } } } |
■パラメタを省略する場合の作成例
以下のデータ型について、クライアントアプリケーションからサーバアプリケーションへ送信するデータを省略することができます。
文字列
class
配列
バイナリ
beanのインスタンスを作成したときに、これらのデータ型に該当するbeanのプロパティには初期値としてnullが設定されます。クライアントアプリケーションから明示的にnullを指定しなくても、省略データとして扱われます。
サーバアプリケーションから受信したデータで設定されていない場合も同様に、beanのプロパティにnullが設定されます。
以下に判別方法を示します。ここでは、以下の条件で例を記述しています。
復帰値:文字列
第1OUTパラメタ(パラメタ名:p1):class
第2OUTパラメタ(パラメタ名:p2):配列
第3OUTパラメタ(パラメタ名:p3):バイナリ
; // サーバアプリケーションの結果(復帰値)を参照 String result = response.getApfw_result(); // 第1OUTパラメタp1を参照 PARAM1STR out1 = response.getP1(); // 第2OUTパラメタp2を参照 String[] out2 = response.getP2(); // 第3OUTパラメタp3を参照 byte[] out3 = response.getP3(); // 受信したデータが設定されている if( result != null ) { System.out.println("response-data(RETURN) : exists"); System.out.println("response-data(RETURN) : "+result); } // 受信したデータが設定されていない else { System.out.println("response-data(RETURN) : null"); } // 受信したデータが設定されている if( out1 != null ) { System.out.println("response-data(OUT1) : exists"); System.out.println("response-data(OUT1) : "+out1); // 受信したclass内のデータが設定されている if( out1 != null ) { System.out.println("response-data(OUT1:MEM1) : exists"); System.out.println("response-data(OUT1.MEM1) : "+out1.MEM1); } // 受信したclass内のデータが設定されていない else { System.out.println("response-data(OUT1:MEM1) : null); } } // 受信したデータが設定されていない else { System.out.println("response-data(OUT1) : null"); } // 受信したデータが設定されている if( out2 != null ) { System.out.println("response-data(OUT2) : exists"); System.out.println("response-data(OUT2) : "+out2); for( int i = 0; i < out2.length; i++ ) { // 受信した配列内のデータが設定されている if( out2[i] != null ) { System.out.println("response-data(OUT2["+i+"]) : exists"); System.out.println("response-data(OUT2["+i+"]) : "+out2[i]); } // 受信した配列内のデータが設定されていない else { System.out.println("response-data(OUT2["+i+"]) : null"); } } } // 受信したデータが設定されていない else { System.out.println("response-data(OUT2) : null"); } // 受信したデータが設定されている if( out3 != null ) { System.out.println("response-data(OUT3) : exists"); File f = new File("OUT3.txt"); FileOutputStream fos = new FileOutputStream(); fos.write(out3); fos.close(); } // 受信したデータが設定されていない else { System.out.println("response-data(OUT3) : null"); } ; |