副構造配列を持つ固定レコード・パーツの例を次に示します。
Record myPart type basicRecord 10 MyTopStructure CHAR(20)[5]; 20 MyStructureItem01 CHAR(10); 20 MyStructureItem02 CHAR(10); end
プログラム・ラッパー・クラス、パラメーター・ラッパー・クラス、動的配列ラッパー・クラス、 および副構造体項目付き配列ラッパー・クラスとしてのプログラムのラッパー・クラスについては、 後に説明します。
EGL により、各パラメーター・ラッパー・クラス、動的配列ラッパー・クラス、 または副構造体項目付き配列ラッパー・クラスごとに BeanInfo クラスが生成されます。BeanInfo クラスは、関連ラッパー・クラスを Java 準拠の Java Bean として使用できるようにします。通常、BeanInfo クラスと対話することはありません。
ラッパーを生成すると、呼び出し先プログラムのパラメーター・リストは、BLOB、CLOB、STRING、Dictionary、ArrayDictionary、または非固定レコード型のパラメーターをインクルードできません。
import com.ibm.javart.v6.cso.*; public class MyNativeClass { /* ミドルウェアの変数を宣言します */ CSOPowerServer powerServer = null; try { powerServer = new CSOLocalPowerServerProxy(); } catch (CSOException exception) { System.out.println("Error initializing middleware" + exception.getMessage()); System.exit(8); } }
myProgram = new MyprogramWrapper(powerServer);
Mypart myParm = myProgram.getMyParm(); Mypart2 myParm2 = myProgram.getMyParm2();
myRecArrayVar myParm3 = myProgram.getMyParm3();
動的配列との対話の詳細については、『動的配列ラッパー・クラス』を参照してください。
データベースへのアクセスでは、ユーザー ID とパスワードは使用されません。
myProgram.callOptions.setUserID("myID"); myProgram.callOptions.setPassword("myWord"); myUserID = myProgram.callOptions.getUserID(); myPassword = myProgram.callOptions.getPassword();
myProgram.execute();
powerServer.commit(); powerServer.rollback();
if (powerServer != null) { try { powerServer.close(); powerServer = null; } catch(CSOException error) { System.out.println("Error closing middleware" + error.getMessage()); System.exit(8); } }
プログラム・ラッパー・クラスには、生成済みプログラムの各パラメーター用のプライベート・インスタンス変数が含まれています。パラメーターがレコードまたは書式の場合、変数は、関連するパラメーター・ラッパー・クラスのインスタンスを参照します。パラメーターがデータ項目の場合、変数は、Java プリミティブ型です。
EGL と Java 型の間の変換については、このヘルプ・ページの最後に表でまとめています。
purposeParmname()
setPassword(passWord) setUserid(userid) getPassword() getUserid()
PropertyChange イベントについては、Sun Microsystems, Inc. の JavaBean 仕様に記述されています。
Mypart myRecWrapperObject = myProgram.getMyrecord();
この場合は、プログラム・ラッパー・オブジェクトによって割り振られたメモリーが使用されます。
パラメーター・ラッパー・クラスを使用すると、プログラム・オブジェクトの call メソッド (execute メソッドではなく) を呼び出す場合に必要なメモリーを宣言することもできます。
purposesiName()
purposesiNameNullIndicator()
ParameterClassname.ArrayClassName
Record CompanyPart type basicRecord 10 Departments CHAR(20)[5]; 20 CountryCode CHAR(10); 20 FunctionCode CHAR(10)[3]; 30 FunctionCategory CHAR(4); 30 FunctionDetail CHAR(6); end
パラメーター Company が CompanyPart に基づいている場合は、 インナー・クラスの名前として、ストリング CompanyPart.Departments を使用します。
インナー・クラスのインナー・クラスにより、ドット構文の使用が拡張されます。この例では、Departments のインナー・クラス名として、 シンボル CompanyPart.Departments.Functioncode を使用します。
副構造体項目付き配列ラッパー・クラスの命名の詳細については、『Java ラッパー生成の出力』を参照してください。
Program myProgram(intParms int[], recParms MyRec[])
動的配列ラッパー・クラス名は IntParmsArray and MyRecArray です。
IntParmsArray myIntArrayVar = myProgram.getIntParms(); MyRecArray myRecArrayVar = myProgram.getRecParms();
動的配列ごとに変数を宣言した後、次のように、エレメントを追加する場合があります。
// Java プリミティブの配列への追加は // 1 ステップ・プロセスです。 myIntArrayVar.add(new Integer(5)); // レコードの配列または書式への追加には、 // 複数のステップが必要です。この場合、 // 新規レコード・オブジェクトを割り振ることから始めます。 MyRec myLocalRec = (MyRec)myRecArrayVar.makeNewElement(); // 値を割り当てるステップは、この例では表示されていません。 // ただし、値を割り当てた後、 // レコードを配列に追加します。 myRecArrayVar.add(myLocalRec); // 次に、プログラムを実行します。 myProgram.execute(); // プログラムが戻ったときに、 // 配列のエレメント数を決定できます。 int myIntArrayVarSize = myIntArrayVar.size(); // 整数配列の最初のエレメントを得て、 // Integer オブジェクトにキャストします。 Integer firstIntElement = (Integer)myIntArrayVar.get(0); // レコード配列の 2 番目のエレメントを得て、 // MyRec オブジェクトにキャストします。 MyRec secondRecElement = (MyRec)myRecArrayVar.get(1);
例で示されるように、EGL では、宣言した変数を操作する方法がいくつか提供されます。
動的配列クラスのメソッド | 用途 |
---|---|
add(int, Object) | int により指定される位置にオブジェクトを挿入し、現行および後続のエレメントを右方にシフトします。 |
add(Object) | オブジェクトを動的配列の最後に追加します。 |
addAll(ArrayList) | ArrayList を動的配列の最後に追加します。 |
get() | 配列内のすべてのエレメントを含む ArrayList オブジェクトを検索します。 |
get(int) | int により指定される位置にあるエレメントを検索します。 |
makeNewElement() | 配列に特有のタイプの新規エレメントを割り振り、そのエレメントを検索しますが、動的配列には追加しません。 |
maxSize() | 動的配列内のエレメントの最大数 (実際の数ではない) を示す整数を検索します。 |
remove(int) | int により指定される位置にあるエレメントを除去します。 |
set(ArrayList) | 動的配列の代替として、指定の ArrayList を使用します。 |
set(int, Object) | int により指定される位置にあるエレメントの代替として、 指定のオブジェクトを使用します。 |
size() | 動的配列にあるエレメントの数を検索します。 |
次の表は、生成されたプログラム内の EGL プリミティブ型、および生成されたラッパー内の Java データ型の関係をまとめたものです。
EGL プリミティブ型 | 文字または |
長さ |
小数部 | Java データ型 | Java の最大精度 |
---|---|---|---|---|---|
CHAR | 1 から 32767 | 2 から 32766 | NA | String | NA |
DBCHAR | 1 から 16383 | 1 から 32767 | NA | String | NA |
MBCHAR | 1 から 32767 | 1 から 32767 | NA | String | NA |
UNICODE | 1 から 16383 | 2 から 32766 | NA | String | NA |
HEX | 2 から 75534 | 1 から 32767 | NA | byte[] | NA |
BIN、SMALLINT | 4 | 2 | 0 | short | 4 |
BIN、INT | 9 | 4 | 0 | int | 9 |
BIN、BIGINT | 18 | 8 | 0 | long | 18 |
BIN | 4 | 2 | >0 | float | 4 |
BIN | 9 | 4 | >0 | double | 15 |
BIN | 18 | 8 | >0 | double | 15 |
DECIMAL、PACF | 1 から 3 | 1 から 2 | 0 | short | 4 |
DECIMAL、PACF | 4 から 9 | 3 から 5 | 0 | int | 9 |
DECIMAL、PACF | 10 から 18 | 6 から 10 | 0 | long | 18 |
DECIMAL、PACF | 1 から 5 | 1 から 3 | >0 | float | 6 |
DECIMAL、PACF | 7 から 18 | 4 から 10 | >0 | double | 15 |
NUM、NUMC | 1 から 4 | 1 から 4 | 0 | short | 4 |
NUM、NUMC | 5 から 9 | 5 から 9 | 0 | int | 9 |
NUM、NUMC | 10 から 18 | 10 から 18 | 0 | long | 18 |
NUM、NUMC | 1 から 6 | 1 から 6 | >0 | float | 6 |
NUM、NUMC | 7 から 18 | 7 から 18 | >0 | double | 15 |
関連するタスク
Java ラッパーの生成