Java と COBOL の連携

この章では、Java プログラムと COBOL プログラムの間で、一方から他方を呼び出すための各種の方法を紹介します。

概要

COBOL と Java は、いくつかの方法で連携させることができます。 1 つの方法として Interface Mapping Toolkit を使用することができます。 また、クラスウィザードやメソッドウィザードなどの Net Express の GUI ツールを使用して、作成したアプリケーションを UNIX システムにパブリッシュすることができます。 Java では RMI (Remote Method Invocation) や JNDI (Java Naming and Directory Interface) といった技術がサポートされており、これらの技術を利用して、さまざまな種類のマシンにオブジェクトを分散配置できます。

COBOL と Java を連携させる方法を次に示します。

Interface Mapping Toolkit を使用してエクスポーズした既存のプログラムの実行には Enterprise Server が必要です。ただし、その他の方法で COBOL と Java プログラムを連携させるアプリケーションでは、Enterprise Server または Application Server を使用できます。

Java 言語では、COBOL で使用されるデータ型とは異なる、Java 用のデータ型が定義されています。 COBOL から Java (または Java から COBOL) が呼び出されると、COBOL ランタイムシステムによって COBOL と Java 間でデータ型が自動的に変換されます。 直接変換できない COBOL データ型 (編集フィールドなど) は、環境によっては文字列型に変換されることがあります。詳細は『Java データ型』の章を参照してください。

Java と COBOL の環境のセットアップ

Java アプリケーションを実行するマシンには、Java ランタイムシステムをインストールする必要があります。Java と COBOL の両方を使ってアプリケーションを開発する場合は、Java 開発環境も必要になります。 開発環境としては、 Oracle が提供している Java SDK (Software Development Kit) のほか、AIX上の IBM または Oracle, Microsoft のランタイム環境に基づくあらゆる Java IDE が使用可能です。

本 COBOL開発システムは複数のバージョンの Javaランタイムをサポートしています。

UNIX環境

Java/COBOL アプリケーションランチャは、COBOL 実行時環境から Java アプリケーションを起動するために使用します。 通常の java アプリケーションランチャや cobrun トリガーではなく、Java/COBOL アプリケーションランチャcobjrunを使用する必要があります。Java/COBOL アプリケーションランチャを使うと COBOL ランタイムシステムと Java VM の両方を適切に管理する環境をセットアップすることができます。

PATH環境変数に JDK のインストールパスを追加する必要があります。JAVA_HOME環境変数が設定されている場合には cobjrun はそちらを優先して参照します。

注: cobsetenv スクリプトで COBOL製品の環境変数を設定してください。このスクリプトは以下の環境変数を設定・更新します: COBDIR, PATH, CLASSPATH, LD_LIBRARY_PATH (AIXでは LIBPATH)

Windows環境

COBOL と Java のプログラムを連携させて作成する前に、以下の環境変数を設定する必要があります。

  • PATH

    Oracle Java ランタイムシステムを使用する場合は、 jvm.dll ファイルが必要です。 jvm.dll ファイルは、Sun Java ランタイムシステムに含まれる他のファイルと依存関係にあるため、他の位置には移動しないでください。 このファイルの位置は、使用している JDK のバージョンによって異なります。このファイルを使用可能にするには、システムの PATH 環境変数にこのファイルを追加します。次に設定例を示します。

    set path=jdk-install-directory\bin\subdirectory;%path%

    subdirectory の値は client, classic, hotspot または server のどれかです。

    Interface Mapping Toolkit を使用して EJB または Java bean を生成する場合は、Java コンパイラが使用可能でなければなりません。 Java コンパイラを使用可能にするには、PATH 環境変数に JDK の bin ディレクトリを追加します。次に設定例を示します。
    set path=jdk-install-directory\bin;%path%
  • CLASSPATH

    Java プログラムから COBOL を呼び出す場合には、COBOL ランタイムシステムとのインターフェイスを実装する Java クラスへのアクセスが必要になります。 Java クラスへのアクセスを可能にするには、CLASSPATH 環境変数に mfcobol.jar を追加します。次に設定例を示します。

    set classpath=install-directory\base\bin\mfcobol.jar;%classpath%;.;

    あるいは、Javaプログラムの実行時に -classpath スイッチを使用して CLASSPATHを指定することもできます。次に設定例を示します。

    java -classpath ".;install-directory\base\bin\mfcobol.jar;%classpath%" MyClass
    Interface Mapping Toolkit を使用して EJB または Java bean を生成する場合は、CLASSPATH 環境変数に JDK の tools.jar を設定する必要があります。 次に設定例を示します。
    set classpath=jdk-install-directory\lib\tools.jar;%classpath%;.;
  • 共有ライブラリパス

    オペレーティングシステムの共有ライブラリパスには、 libjavaを含むディレクトリを必ず指定します。このディレクトリ名はプラットフォームに固有ですが、ほとんどの場合は Java の jre/lib ディレクトリのサブディレクトリとなります。プラットフォームによっては、複数のディレクトリを指定する必要もあります。たとえば、Java ネイティブスレッドサポートを含むディレクトリも同時に指定します。

すべてのプラットフォーム

Eclipseの Javaまたは JVMプロジェクトで開発している場合には JAVA_HOME環境変数の設定は必須ではありません。プロジェクトのプロパティダイアログで、以下の手順に従って使用する JRE/JDK を指定してください。
  1. プロジェクトを開く
  2. プロジェクト > プロパティ を選択する
  3. Javaビルドパス をクリックし ライブラリ タブを選択
  4. JRE System Library を選択し Edit ボタンをクリック
  5. Alternate JRE を選択し使用する JRE または JDK のライブラリにナビゲート

CobolBean インターフェイス経由で呼び出される COBOL プログラムのコンパイル

Java から CobolBean.cobcall*() メソッドで呼び出される COBOL プログラムは、必ず DATA-CONTEXT コンパイラ指令付きでコンパイルしてください。この指令を指定すると、作成された CobolBean のインスタンスごとに、ランタイムシステムが新しいアプリケーション記憶域を作成できるようになります。

Java/COBOL アプリケーションランチャ

Java/COBOL アプリケーションランチャは、COBOL 実行時環境から Java アプリケーションを起動するために使用します。 通常の Java アプリケーションランチャではなく、Java/COBOL アプリケーションランチャを使用する必要があります。Java/COBOL アプリケーションランチャを使うと COBOL ランタイムシステムと Java VM の両方を適切に管理する環境をセットアップすることができます。

Java/COBOL アプリケーションランチャは cobjrun です。cobjrun は、cobjrun32 および cobjrun64 のトリガです。

Java/COBOL アプリケーションランチャを呼び出すコマンドには、次の 2 種類の形式があります。

cobjrun [options] class [arguments]

または

cobjrun -jar [options] jarfile [arguments]

説明

options Java アプリケーションランチャに標準で指定するオプション。
class 呼び出すクラスの名前。 Java/COBOL アプリケーションランチャでこの名前の Java クラスが見つからない場合は、同じ名前の COBOL プログラムが検索されます。 COBOL プログラムが見つかった場合は、そのプログラムが実行されます。
arguments メイン関数に渡される引数。
-jar JAR ファイルに格納されているプログラムを実行することを指定します。
jarfile 呼び出す Java アーカイブ(.jar) ファイルの名前。

注:

  • Java/COBOL アプリケーションランチャは、指定されたクラスをロードし、クラスのメインメソッドを呼び出します。メソッドは次の形式で宣言する必要があります。
    public static void main(String args[])
  • Java アプリケーションが .jar ファイルに格納されている場合は、-classpath (または -cp) オプションを使用して完全修飾のクラス名を指定し、このアプリケーションをクラスパスに追加する必要があります。
  • Main-Class 属性などのマニフェストを含む .jar ファイルを指定する場合は、-jar オプションを使用してアプリケーションを実行します。

Object COBOL EJB (Enterprise JavaBean) を AIX プラットフォームの WebSphere にディプロイする場合は、COBMAINSTACK 環境変数を設定する必要があります。 Application Server 環境で Object COBOL コードを実行している場合に限り COBMAINSTACK を設定します。 Interface Mapping Toolkit を使用して EJB を作成し、Enterprise Server 環境で COBOL コードを実行している場合は、COBMAINSTACK を設定する必要はありません。

COBMAINSTACK を設定するのは、EJB サーバの起動プロセス中に WebSphere が大量のスタックスペースを必要とするからです。 AIX のデフォルトサイズは、COBOL および WebSphere アプリケーションサーバを共存させるには小さすぎます。 このサイズが小さすぎると問題が発生し、大きすぎるとリソースが大量に消費されてしまいます。 このサイズは 256 KB 以上に設定してください。 たとえば、次のように設定します。

COBMAINSTACK=256
export COBMAINSTACK