![]() |
COBOL からの Java の呼び出し | Java データ型 | ![]() |
この章では、Java プログラムから COBOL オブジェクトへアクセスする方法について説明します。これは、Java プログラムから手続き型 COBOL にアクセスするメソッドとは少し異なります (詳細は、『Java からの手続き型 COBOL の呼び出し』 を参照してください)。また、COBOL を使用して Enterprise Java Beans を作成する方法についても説明します。
Java プログラムから Java クラスと同様に呼び出すことができるクラスを オブジェクト COBOL に作成することができます。これは、オブジェクト COBOL クラスの各メソッドに対して関数を与える Java ラッパークラスを使用して行います。
Java ラッパークラス内の関数は、メソッドのパラメータをすべて Java 配列に渡し、次に Java クラス、 mfcobol.runtime のメンバー関数の 1 つを呼び出し、オブジェクト COBOL クラスのメソッドを呼び出して結果を戻します。図 4-1 にこの流れを示します。
図 4-1: Java から COBOL のメソッド呼び出しへの関数呼び出しのパス
この章では オブジェクト COBOL クラスとその Java ラッパーの書き方を説明します。最後の項では、Enterprise Java Beans (EJB) として使用するのに適切な オブジェクト COBOL クラスを作成する場合に行う必要がある追加事項について説明します。
このテクノロジを使用する前に、 COBOL および Java 環境をセットアップする必要があります。詳しくは 『始める前に』 を参照してください。
Java から呼び出せるクラスを オブジェクト COBOL で書くには、次の操作を行う必要があります。
$set ooctrl"+p-f"
.int または .gnt へコンパイルされたクラスを使用することもできますが、この方法では 1 つのファイル内で複数のクラスをパッケージ化することができません。
Java ラッパークラスが オブジェクト COBOL クラスと通信するために必要なサポートは mfcobol パッケージにあります。ラッパーには、次の文が含まれている必要があります。
import mfcobol.* ;
また、mfcobol.jar が Java クラスパス上にあることを確認してください。クラスパス上にない場合は、Java プログラムのコンパイルや実行を行うことができません(この説明は、 『始める前に』にあります)。
Java ラッパークラスは、mfcobol.runtimeObject または mfcobol.runtime を拡張します。これは、次のように、Java ラッパークラスのインスタンスによって表現される オブジェクト COBOL インスタンスの存在期間に影響を与えます。
ラッパークラスは、ラッピングしているCOBOL クラスのライブラリとファイル名で初期化される必要があります。初期化するには、Java ラッパークラスに次のコードを含めます。
static { cobloadclass("shared-obj-name", "filename", "fullJavaClassName") ; }
各パラメータの説明は以下のとおりです。
shared-obj-name | オブジェクト COBOL クラスを含む共有オブジェクトの名前を指定します。クラスが共有オブジェクトにパッケージ化されていない場合は、このパラメータをヌルのままにできます。たとえば、 .int または .gnt コードとして実行されている場合です。 |
filename | オブジェクト COBOL クラスのファイル名を指定します。 |
FullJavaClassName | オブジェクト COBOL に対応する Java クラス名を指定します。 |
mfcobol.runtime には、cobloadclass() メソッドが全部で 3 つあり、これらはそれぞれ少し異なる方法でライブラリ、COBOL ファイル、および Java ラッパークラスを識別します。
COBOL クラスに追加するすべてのメソッドには、対応する関数が Java ラッパークラスに存在する必要があります。
Java 関数は、次の操作を行う必要があります。
デフォルトでは、例外は Exception (COBOL で例外を挙げる場合に発生) と COBOLException (COBOL ランタイム システムから発生) です。作成するクラスが Enterprise Java Bean として実装される場合や、Java RMI (リモート メソッド 起動) を使用して実装される場合は、RemoteException も追加する必要があります。
パラメータは、Java から COBOL ランタイム システムに Java 配列で渡されます。
Java 関数からの戻り値に応じて、cobinvoke_ メソッド と cobinvokestatic_ メソッドがあります (たとえば、cobinvoke_int は int を戻します)。オブジェクト COBOL インスタンスを呼び出すには cobinvoke_ メソッドを使用します。オブジェクト COBOL クラスを呼び出すには cobinvokestatic_ メソッドを使用します。
すべての cobinvoke_ 関数のリストについては、『Class Library Reference』の『Java Classes for COBOL Support』の項を参照してください。
どの Java データ型が COBOL メソッドからの戻り値の種類にマップされるかを判断して、適切な cobinvoke_ 関数を選択する必要があります。詳細は、『Java データ型』 の章を参照してください。
オブジェクト COBOL クラス メソッドは Java ラッパーの静的関数へマップされます。
次の 2 つのコード サンプルは、COBOL インスタンス メソッドと、それに対応する Java ラッパーの関数を示しています。次は COBOL メソッドです。
method-id. "myMethod". local-storage Section. *>---USER-CODE。次で必要なローカル記憶域項目を追加。 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。次にメソッド実装を追加。 exit method. end method "myMethod".
次は Java ラッパー メソッドです。
public int myMethod (Integer myParameter) throws Exception, COBOLException, RemoteException { // パラメータは配列で COBOL へ渡されます。 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 へマップします。
COBOL コードから Java 例外を発生させることができます。例外オブジェクトは任意の Java クラスにすることができます。例外を発生させるメソッドは javasup クラスにあり、Class Library Referenceマニュアルの『Java Domain Class Library』の項に説明されています。。
次のいずれかのメソッドを使用することができます。
invoke javasup "throwException" using aCOBOLProxy
ここで、
aCOBOLProxy | には、Throwable 型の Java オブジェクトに対する COBOL プロキシを指定します。 |
または、
invoke javasup "throwNewException" using javaclassname description
ここで、
javaclassname | には、発生させる Java 例外のクラスの名前を指定します。 |
description | テキストによる例外の説明です。 |
Server Express で提供されている機能を使用して、COBOL Enterprise JavaBean を手動で作成することができます。作成方法については、Micro Focus アンサーラインにお問い合わせください。
Enterprise JavaBean は、アプリケーション サーバーで稼動するソフトウェア コンポーネントです。 セキュリティ、トランザクションの完全性と永続性など、Bean で必要なサービスはすべてアプリケーション サーバーが行うので、EJB はビジネス ロジックを実装する必要があるだけです。 本項を読むためにははじめに EJB について理解することが必要です。 EJB についての詳細は、Sun Microsystems の Java サイトを参照してください。
COBOLクラスを EJB として作成するためには、次のファイルを作成します。
作成するクラスの COBOL ファイル。オプションで、クラス名と異なるファイル名を付けることができます。
Beanが実装するビジネスロジックは、すべてこの中のメソッドとして記述されます。
『4.3.3 メソッドの追加と削除』 で説明した方法で、上記の クラス名.cbl に対して機械的な操作で作成できる Java ラッパークラス
Java ラッパーへのホームインターフェイス。
Java ラッパーへのリモートインターフェイス。
Enterprise JavaBean を生成ためには、次の 5 つのメソッドもクラス名.cbl に追加して記述する必要があります。
これらのメソッドは、すべての Enterprise JavaBeans によって実装されている SessionBean インターフェイスの一部です。これらのメソッドのうち、最初の 3 つにはコードを追加する必要があります。SetSessionContext へは、Java コンテキスト オブジェクトが COBOL クラスのインスタンス データの一部として格納されるようにします。
ejbCreate は EJB でオーバーロードが可能なメソッドであり、異なるパラメータを指定して、インスタンス化時に Java bean を初期化することができます。パラメータを受け取らない ejbCreate メソッドを EJB に追加し、対応する create メソッドをリモート インターフェイス クラス (クラス名Remote.java) に追加します。クラス名Remote.java の create メソッドは、リモート インターフェイス オブジェクトを戻します。
COBOL クラスに追加するメソッドは、Java ラッパークラスとリモート インターフェイス クラスへも追加する必要があります。
Net Express 製品とともに提供されている、COBOL EJBテンプレートプロジェクトをテンプレートとしてプロジェクトのクローンを作成することによって、容易に COBOL Enterprise JavaBeans を作成することができます。
COBOL Enterprise JavaBeans テンプレートプロジェクトは、\NetExpress\BASE\SOURCE\TEMPLATE\EJB\EJBTPLT.APP にあります。使用方法の詳細は、同プロジェクト中の README.TXT を参照して下さい。
Server Express には、Java からのオブジェクト COBOL の呼び出しのいくつかの方法を説明するデモプログラムが付属しています。これらのデモプログラムは、$COBDIR/demo/java/oocobol の下のサブディレクトリにあります。各サブディレクトリには、該当するすべてのプログラムファイルと、プログラムを詳しく説明した、各デモ用のテキストファイルが含まれています。テキストファイルの名前は、demonstration-name.txt という形式です(demonstration-name はデモプログラムの名前を示します)。これらのデモプログラムは、Net Express にも付属しており、\Program Files\Micro Focus\Net Express\Base\Demo\Javademo\Oocobol ディレクトリの下のサブディレクトリにあります。
以下の表は、デモプログラムを含むディレクトリと、そのデモの目的の概要です。
ディレクトリ
|
デモの目的
|
---|---|
array | オブジェクト COBOL 中の Java 配列の受領とアクセス |
Creating a Java array in オブジェクト COBOL 中への Java 配列の作成と、その Java への転送 | |
simple | 単純な COBOL Java オブジェクトの作成. |
Java を使用した、クラスおよびインスタンスオブジェクト COBOL の呼び出し | |
sort | 単純な COBOL Java オブジェクトの作成. |
Java を使用したオブジェクト COBOL メソッドの呼び出し | |
オブジェクト COBOL を使用した Java メソッドの呼び出し | |
Java オブジェクトの、パラメータおよび返された値としての処理 |
Copyright © 2002 Micro Focus International Limited. All rights reserved.
本書、ならびに使用されている固有の商標と商品名は国際法で保護されています。
![]() |
COBOL からの Java の呼び出し | Java データ型 | ![]() |