Java ラッパークラスでは、COBOL クラスに追加した各メソッドに対応する関数を定義する必要があります。メソッド ウィザードで COBOL Java クラスにメソッドを追加すると、対応するメソッドが Java ラッパー クラスに自動的に追加されます。ただし、いったん追加したメソッドを COBOL クラスから削除した場合は、対応するメソッドを Java ラッパー クラスから手動で削除する必要があります。
move 0 to received-length inspect passed-string tallying received-length for characters before initial x"00" move passed-string(1:received-length) to actual-string
以降の内容では、Java 関数をメソッド ウィザードを使用せず、手作業でラッパー クラス内に記述する方法を説明します。
Java 関数には、次の処理が必要です。
デフォルトでは、COBOL で例外が発生したときにスローされる Exception と、COBOL ランタイム システムによってスローされる COBOLException を宣言します。Java クラスを Enterprise Java Bean としてディプロイするか、Java リモートメソッド起動 (RMI) を使用する場合は、RemoteException も宣言する必要があります。
パラメーターは、Java 配列で COBOL ランタイムシステムに渡されます。
Java 関数の戻り値の型に応じて、対応する種類の cobinvoke_ または cobinvokestatic_ を使用します (たとえば、戻り値が int 型であれば cobinvoke_int を使用します)。オブジェクト指向 COBOL のインスタンスを呼び出すには cobinvoke_ メソッドを使用します。オブジェクト指向 COBOL のクラスを呼び出すには cobinvokestatic_ メソッドを使用します。
cobinvoke_ 関数の完全なリストは、COBOL 開発システム インストールの help\mfcobol.docs.zip (Windows) または docs/mfcobol.docs.zip (UNIX) にある『Java Run-time Class Library Reference』を参照してください。
COBOL メソッドの戻り値の型にマップする Java データ型を決定し、適切な cobinvoke_ 関数を使用する必要があります。詳細は、『Java データ型』の章を参照してください。
オブジェクト指向 COBOL ファクトリのメソッドは、Java ラッパーの静的関数にマップされます。
COBOL インスタンスのメソッドと、それに対応する Java ラッパーの関数のサンプルコードを次に示します。まず、COBOL のメソッドのサンプルコードを示します。
method-id. "myMethod". local-storage section. *>---USER-CODE. Add any local storage items needed below. linkage Section. 01 myParameter pic x(4) comp-5. 01 myReturnValue pic x(4) comp-5. procedure division using by reference myParameter returning myReturnValue. *>---USER-CODE. Add method implementation below. exit method. end method "myMethod".
次に Java ラッパーのメソッドのサンプルコードを示します。
public int myMethod (Integer myParameter) throws Exception, CobolException, RemoteException { // Parameters are passed to COBOL in an array Object[] params = {myParameter}; return ((int) cobinvoke_int ("myMethod", params)); }
通常、Java ラッパークラスのメソッドには、COBOL クラスの対応するメソッドと同じ名前を付けますが、これは必須ではありません。ただし、同じ名前を使用すると、Java ラッパー内でのメソッドのオーバーロードが可能になります。
メソッドのオーバーロードでは、パラメーターの型や数が異なるメソッドを複数、同じ名前で定義できます。メソッドのオーバーロードは Java でサポートされている機能であり、COBOL ではサポートされていません。しかし、複数のオーバーロード関数を Java ラッパーに追加して、それぞれの関数で COBOL クラス内の異なる名前のメソッドを呼び出すことができます。
たとえば、Java ラッパークラスでは次のようなオーバーロード関数を定義できます。
public int add (int a, int b) {...} public int add (int a, int b, int c) {...}
これらの関数は、COBOL クラス内の add2 や add3 などのメソッドにマップすることが可能です。
Net Express のメソッド ウィザードで、Java クラスとして生成した COBOL クラスにメソッドを追加する場合は、Java ラッパーと COBOL クラスの対応するメソッドに、互いに異なる名前を付けることができます。