この章では、com.microfocus.cobol.RuntimeSystem クラスに含まれる COBOL サポートを使用して、Java から手続き型 COBOL の既存のプログラムにアクセスする方法を説明します。
手続き型の COBOL プログラムは、Java プログラムや EJB から呼び出すことができます (COBOL で作成した EJB に限らず、さまざまな言語で作成した EJB から呼び出し可能です) 。この呼び出しに使用できる各種の方法については、『Java と COBOL の連携』の章で概説しています。
この章で説明するのは、com.microfocus.cobol.RuntimeSystem クラスと CobolBean クラスに含まれる COBOL サポートを使用して呼び出しを行う方法です。CobolBean クラスは、実際には RuntimeSystem クラスの拡張であり、一連の RuntimeSystem.cobcall*() メソッドを使用します。 ここで紹介する手法は、Object COBOL と Enterprise Server を使用せずに、Java や EJB から COBOL プログラムを呼び出すときに使用します。
Java オブジェクトには JNI (Java Native Interface) を介するか、Object COBOL の Java ドメインを使用してアクセスできます。
com.microfocus.cobol.RuntimeSystem クラスの Java サポートは一連の関数から構成されており、COBOL プログラムのロード、呼び出し、およびキャンセルを実行できます。 また、Java 配列を使用して、COBOL プログラムにパラメータを渡すことも可能です。com.microfocus.cobol.RuntimeSystem クラスの関数群が、配列からデータを取り出し、そのデータを COBOL プログラムに渡します。図 8-1 は、Java プログラムから COBOL プログラムを呼び出し、2 つのパラメータを渡す処理を示しています。
ここで説明する情報を活用するには、Java 言語に関する基本レベル以上の知識が必要になります。Java 言語の基本的な知識を得るには、Sun のJava Web サイトが役立ちます。
COBOL と JAVA の環境設定の方法については、『Java と COBOL の連携』の章の『Java と COBOL の環境のセットアップ』を参照してください。
Java プログラムは mfcobol.jar ファイル内の RuntimeSystem.class で定義されている関数群を使用して COBOL のエントリポイントを呼び出します。このクラスには cobcall_returntype() という名前の一連の関数が含まれています (returntype の部分は、呼び出し対象の COBOL プログラムまたはエントリポイントによって返される値のデータ型によって変化します)。 たとえば、整数型を返す COBOL プログラムの呼び出しには cobcall_int() を使用します。
Java プログラムで COBOL サポートを使用するには、Java ソースファイルの先頭に次の文を記述してください。
import com.microfocus.cobol.*;
Java ランタイムシステムはマルチスレッド環境であるため、Java から呼び出す COBOL プログラムは、呼び出し元の Java プログラムがマルチスレッドプログラムかどうかに関係なく、常にマルチスレッドの COBOL ランタイムシステムとリンクする必要があります。COBOL プログラムをマルチスレッドの Java プログラムから呼び出す場合には、使用中の COBOL データに他のスレッドがアクセスしてデータが壊れてしまわないように対処する必要があります。
この問題には、次の方法で対処できます。
SERIAL を使用すると、複数のスレッドによる COBOL コードへのアクセスが、COBOL ランタイムシステムによって直列化され、 プログラムにアクセスできるスレッドが一度に 1 つだけに限定されます。 これは最も安全性の高い選択肢ですが、潜在的なオーバーヘッドも最も大きくなります。 この方法は、COBOL プログラムを介して共有リソース (共有プリンタなど) にアクセスする場合や、Java から呼び出した COBOL プログラムが、マルチスレッドに対応していない他の COBOL プログラムを呼び出す場合に適しています。
REENTRANT"2" を使用すると、互いに独立したユーザデータ領域と FD ファイル領域が COBOL ランタイムシステムによってスレッドごとに割り当てられ、 プログラム内での競合の発生やデータ破損が防止されます。ただし、REENTRANT"2" を指定したプログラムでは、他のスレッド化されていないプログラムを呼び出したり、他の共有リソースにアクセスする際のスレッドセーフが保証されません。したがって、そのような場合の安全性は SERIAL に劣ります。REENTRANT"2" 指令では、スレッドが直前のスレッドの終了を待たずに実行されるため、パフォーマンス面では SERIAL より優れています。
Thread-Local-Storage はスレッドごとに割り当てられるため、スレッドで使用しているデータに他のスレッドがアクセスし、データが破損する事態が回避されます。 この方法は効率面でも優れていますが、既存のコードに常に使用できるとは限りません。
この方法は、スレッドローカルなデータと、スレッド間で共有するデータをユーザ側で指定できるため、効率面で非常に優れています。 ただし、この方法を既存の COBOL コードで使用するには、Java ランタイム環境と既存のプログラムを仲介する COBOL ドライバプログラムを作成する必要があります。 このドライバプログラムによって既存のプログラムへのアクセスを制御します。また、2 つのスレッドが同じコードに同時にアクセスしないように、ドライバプログラムにはセマフォまたは同等の手法を使用する必要があります。
マルチスレッド環境ではプログラムが複数のスレッドによって共有されるため、COBOL プログラムのキャンセル処理は、十分に注意して実装する必要があります。 キャンセル処理の手段として、CANCEL と com.microfocus.cobol.RuntimeSystem.cobcancel() メソッドのどちらを使用する場合も同様です。可能であれば、キャンセル処理はいっさい使用しないでください。
あるいは、CobolBean インターフェイスを使用して、COBOL プログラムの作業場所節を CobolBean クラスの特定インスタンスと関連付ける方法を検討します。
COBOL プログラムをライブラリファイルにリンクしている場合や、COBOL プログラム内のエントリポイントをエクスポーズする場合には、Java プログラムから COBOL プログラムを呼び出す前に、プログラム自体やライブラリファイルをロードする必要があります。 これを行うには、runtime.class で runtime.cobload() メソッドを使用します。たとえば、mycbl 内にプログラムをロードするには、次のようにします。
{
if (RuntimeSystem.cobload("mycbl") != 0)
System.out.println("Could not load library\n") ;
else
System.out.println("Library loaded successfully\n") ;
}
必要なライブラリやプログラムをロードした後 (詳細は前項を参照)、Java アプリケーションで cobcall_ メソッドを使用して COBOL プログラムを呼び出します。cobcall_ メソッドは、RuntimeSystem.class のすべての静的メソッドなので、事前に RuntimeSystem.class をインスタンス化する必要はありません。各 cobcall_ メソッドには 2〜3 つのパラメータを指定します (3 番目のパラメータは省略可能)。
パラメータの指定方法 1
パラメータの指定方法 2
Java と COBOL の間では、『Java データ型』の章で説明しているルールに従ってデータ型が変換されます。『Java プログラムの作成』の項で前述したように cobcall_ メソッドにはいくつかの種類があり、COBOL プログラムやエントリポイントの戻り値のデータ型に応じて、対応する Java データ型の名前を持つ関数を使用します。 たとえば、COBOLプログラムが符号付き整数型 (pic s9(9) comp-5 など) の値を返す場合、この値は Java のデータ型では int 型に相当するため、この COBOL プログラムの呼び出しには cobcall_int メソッドを使用します。 デフォルトでは、すべてのパラメータは参照渡しされます。
コピーファイル javatypes.cpy には、Java のデータ型に対応する一連の COBOL データ型が定義されています。Java プログラムとのパラメータのやり取りに使用する COBOL データ項目は、このファイル内で定義されているデータ型を使用して宣言することをお奨めします。 これらのデータ型を使用すれば、他の COBOL プラットフォームとの互換性を維持できます。
cobcall_ の各メソッドは、『Java Run-time Class Library Reference』 (docs/mfcobol.docs.zip に格納されています) の『Java Classes for Run-time Support』に一覧されています。
ここでは、Java プログラムから COBOL プログラムを呼び出す 2 つの短いコード例を示します。 最初の例は次の処理を実行します。
最初にシンプルな COBOL のサブルーチン、legacy.cbl を示します。
working-storage section.
copy "javatypes.cpy".
01 wsResult jint.
linkage section.
01 wsOperand1 jint.*> この型は javatypes.cpy で定義済み
01 wsOperand2 jint.
01 wsOperation pic x.
procedure division using wsOperand1 wsOperand2 wsOperation.
evaluate wsOperation
when "a"
add wsOperand1 to wsOperand2 giving wsResult
when "s"
subtract wsOperand1 from wsOperand2 giving wsResult
end-evaluate
exit program returning wsResult.
次に、このサブルーチンを呼び出す Java プログラムを示します。
import com.microfocus.cobol.* ;
class SimpleCall
{
public static void main(String argv[]) throws Exception
{
int i = RuntimeSystem.cobcall_int("legacy",
new ParameterList()
.add((int)4
.add((int)7
.add((byte)'a'));
System.out.println(i) ;
}
}
2 つ目の例では、複数の異なる USAGE 句に相当する文を使用して COBOL プログラムへデータを渡す方法を示します。使用されている cobcall() メソッドは値を戻しませんが、最初のパラメータとしてオブジェクトを渡し、COBOL プログラムから同じオブジェクト型を返すことができます。 次の SimpleCall2 は、最初のパラメータを参照で、2 番目のパラメータを値で、3 番目のパラメータを内容 (by content) で、それぞれ渡します。
import com.microfocus.cobol.*;
class SimpleCall2
{
public static void main(String argv[]) throws Exception
{
RuntimeSystem.cobcall(null, "usages",
new ParameterList()
.add((int)1, RuntimeSystem.BY_REFERENCE)
.add((int)2, RuntimeSystem.BY_VALUE)
.add((int)3, RuntimeSystem.BY_CONTENT));
}
}
この項の例は前項の例に似ていますが、COBOL プログラムから返される値を使用して、Java オブジェクト内のデータメンバの 1 つの値を変更しています。
thread-local-storage section.
copy "javatypes.cpy".
linkage section.
01 wsOperand1 jint.
01 wsOperand2 jint.
01 wsOperation pic x.
01 wsResult jint.
procedure division using wsOperand1 wsOperand2 wsOperation
wsResult.
evaluate wsOperation
when "a"
add wsOperand1 to wsOperand2
when "s"
subtract wsOperand1 from wsOperand2
end-evaluate
exit program returning wsResult
この Java クラス SimpleCall2 は、legacy2.cbl が legacy2.ext というライブラリファイルに組み込まれていることを前提としています。このサブルーチンが別のライブラリファイルに組み込まれている場合には、legacy2 プログラムを呼び出す前に RuntimeSystem.cobload() メソッドを使用して、そのライブラリファイルをロードする必要があります。
import com.microfocus.cobol.* ;
class SimpleCall2
{
Integer simpleInteger1;
Integer simpleInteger2;
Integer simpleResult;
public SimpleCall2(int a, int b)
{
simpleInteger1 = new Integer(a);
simpleInteger2 = new Integer(b);
simpleResult = new Integer(0);
}
public String toString()
{
return new String(
"simple1Integer1 = "+simpleInteger1+"\n" +
"simple1Integer2 = "+simpleInteger2+"\n" +
"simpleResult = "+simpleResult);
}
public static void main(String argv[]) throws Exception
{
SimpleCall2 firstDemo = new SimpleCall2(4,7);
Object theParams[] = { firstDemo.simpleInteger1,
firstDemo.simpleInteger2,
new Byte((byte) 'a'),
firstDemo.simpleResult }
System.out.println("Before call\n"+firstDemo) ;
int i = RuntimeSystem.cobcall_int("legacy2",theParams);
System.out.println("After call\n"+firstDemo) ;
}
}
com.microfocus.cobol.CobolBean クラスを使用すれば、COBOL プログラムをスレッドセーフになるように、あるいはJava アプリケーションからパラメータを取り込むように書き直すことなく、CobolBean のインスタンスを COBOL プログラムの記憶域節のインスタンスに関連付けることができます。
たとえば、次の COBOL プログラムは、複数の Java クラスから cobcall() で呼び出されると、同じデータを共有します。
$set intlevel"4" data-context
working-storage section.
01 address-rec pic x(30).
linkage section.
01 lnk-address-rec pic x(30).
procedure division.
goback.
entry "setAddressBook" using lnk-address-rec.
move lnk-address-rec to address-rec
exit program returning 0.
entry "getAddressBook" using lnk-address-rec.
move address-rec to lnk-address-rec
exit program returning 0.
com.microfocus.cobol.CobolBean を拡張する Java クラスを作成すれば、cobcall() のインスタンス (data-context) バージョンを利用できます。CobolBean.cobcall() で呼び出す COBOL プログラムは、RE-ENTRANT(1/2)、SERIAL などのスレッド化指令ではなく、常に DATA-CONTEXT コンパイラ指令を使用してコンパイルする必要があります。DATA-CONTEXT コンパイラ指令を指定すると、COBOL ランタイムが CobolBean.cobcall() から使用されるときに、常に新しい COBOL 作業場所節が割り当てられます。
次の例では、COBOL プログラムの共有データ bean1.getAddress() が bean2.getAddress() と等しければ、通常は問題が発生しますが、Java プログラムが CobolBean の cobcall() を使用しているため、COBOL 作業場所節が CobolBean と関連付けられます。
import com.microfocus.cobol.*;
import com.microfocus.cobol.lang.*;
public class MyBean extends com.microfocus.cobol.CobolBean
{
private StringBuffer address = new StringBuffer(30);
public MyBean() throws Exception
{
super();
super.cobload("addbook");
}
public String getAddress() throws Exception
{
Pointer addressPointer =
new Pointer(this.address.toString(),30);
super.cobcall("getAddressBook",
new ParameterList().add(addressPointer));
this.address.setLength(0);
this.address.append(addressPointer.toString());
return address.toString();
}
public void setAddress(String address) throws Exception
{
super.cobcall("setAddressBook",
new ParameterList().add(new Pointer(address,30)));
}
public static void main(String[] args) throws Exception
{
MyBean bean1 =new MyBean();
bean1.setAddress("Mr A");
MyBean bean2 =new MyBean();
bean2.setAddress("Mr B");
System.out.println("bean1.getAddress="+
bean1.getAddress());
System.out.println("bean2.getAddress="+
bean2.getAddress());
}
}
メモリリークを防ぐため、Java オブジェクトがガーベッジコレクションによって破棄される前に、Java からロードした COBOL プログラムをすべてキャンセルする必要があります。Java オブジェクトの Finalize メソッドから、次の呼び出しを使用します。
RuntimeSystem.cobcancel("program")
program は、RuntimeSystem.cobload() call を使用してロードされた COBOL プログラムの名前です。次に Java プログラム内の Finalize メソッドの一例を示します。
private void Finalize()
{
try
{
RuntimeSystem.cobcancel("demoFinalizers");
System.out.println("demoFinalizers - finalize'ed");
}
catch(Exception e)
{
System.out.println(
"Error during finalize : "+e.getMessage());
}
}
警告:
Java プログラムから COBOL に文字列を渡すときには、String クラスまたは StringBuffer クラスを使用します。 この処理では、次のいずれかの手法を使用できます。
Java の文字列を COBOL に渡す際に常に問題になるのが文字列長です。COBOL では、文字列は常に固定長になるからです。COBOL プログラムで定義済みの固定長フィールドに変更を加えるには、そのインスタンスを Pointer クラスの新しいインスタンスでラップする必要があります。Pointer クラスは com.microfocus.cobol.lang パッケージで定義されています。
PIC X(20) データ項目を定義している COBOL プログラムのコード例を次に示します。
showbytes.cbl:
working-storage section.
linkage section.
01 lnk-string pic x(20).
procedure division using lnk-string.
display "lnk-string = " lnk-string.
move "Hello from COBOL - 1" to lnk-string.
exit program returning 0.
対応する Java のコードは次のようになります。
showbytes.java:
import com.microfocus.cobol.RuntimeSystem;
import com.microfocus.cobol.lang.Pointer;
import com.microfocus.cobol.lang.ParameterList;
public class showbytes
{
public static void main(String[] args) throws Exception
{
String myString = new String("Hello to COBOL");
Pointer ptr2String = new Pointer(myString, 20);
RuntimeSystem.cobcall("showbytes",
new ParameterList().add(ptr2String));
myString = ptr2String.toString();
System.out.println(myString = ["+myString+"]");
}
}
COBOL プログラムでは Java から渡された文字列を変更することはできませんが、StringBuffer の内容は変更できます。文字列操作を容易にするため、javatypes.cpy で MF-JSTRING 型が定義されています。 定義の内容は次のとおりです。
01 mf-jstring is typedef.
03 len jint.
03 capacity jint.
03 ptr2string pointer.
len フィールドは文字列の長さ、capacity フィールドはバッファのサイズをそれぞれ指定します。String の場合、capacity フィールドの値は常に 0 です。ptr2tring フィールドは、実際の文字列の先頭アドレスへのポインタです。 StringBuffer の場合は、既存のバッファを変更できるほか、新しいバッファを割り当てて、その先頭アドレスを指すように ptr2string を指定できます。
次の COBOL プログラムは、Java から渡された String と StringBuffer を連結し、結果を StringBuffer に格納して返します。
program-id. StringAdd.
thread-local-storage section.
copy "javatypes.cpy".
01 lsNewPtr pointer.
01 lsSize jint.*> この型は javatypes.cpy で定義済みです。
01 i jint.
01 lsStatus jint.
01 lsBigBuffer pic x(1024).
linkage section.
01 lnkJString mf-jstring.
01 lnkJStringBuffer mf-jstring.
01 lnkString pic x(256).
01 lnkStringbuffer pic x(256).
procedure division using lnkJString lnkJStringBuffer.
set address of lnkStringBuffer to
ptr2string of lnkJStringBuffer
set address of lnkString to ptr2string of lnkJString
*> lnkJStringBuffer が Java StringBuffer であることを確認します。
if capacity of lnkJStringBuffer > 0
add len of lnkJString to len of lnkJStringBuffer
giving lsSize
*> 連結バッファがオーバーフローしないことを確認します。
if lsSize < 1024
move len of lnkJString to i
move lnkString(1:i) to lsBigBuffer
add 1 to i
move lnkStringBuffer to lsBigBuffer(i:lsSize)
set ptr2string of lnkJStringBuffer
to address of lsBigBuffer
move lsSize to len of lnkJStringBuffer
end-if
end-if
次の Java クラス StringsToCobol は、文字列 "fred" および "ginger" を StringAdd に渡し、結果を表示します。
import mfcobol.*;
public class StringsToCobol {
public static void main(String[] args) throws Exception
{
StringBuffer sb1 = new StringBuffer("ginger") ;
Object theParams[] = {"fred" ,
sb1} ;
RuntimeSystem.cobcall_int("stringadd", theParams) ;
System.out.println(sb1) ;
}
}
CobolNational Java クラスを使用すれば、UTF-16 文字列を生成して COBOL の PIC N(...) usage is national フィールドに渡すことができます。
たとえば、次の COBOL プログラム (hellonat) は文字列 "Hello From Java" を受け取り、PIC N(40) USAGE IS NATIONAL として定義したデータ項目に格納します。
$set unicode(portable)
working-storage section.
linkage section.
01 lnk-natstring pic n(40) usage is national.
procedure division using lnk-natstring.
display "Java said to COBOL [" lnk-natstring "]"
move "Hello From Java" to lnk-natstring
exit program returning 0.
文字列 "Hello From Java" を COBOL プログラム hellonat に渡す Java コードは次のとおりです。
CobolNational cobnat =
new CobolNational("Hello From Java", 40);
RuntimeSystem.cobcall("hellonat",
new ParameterList().add(cobnat));
System.out.println(cobnat.toString());
com.microfocus.cobol.lang で定義されている CustomRecord インターフェイスを使用すれば、cobcall() や cobrcall() で呼び出した既存の COBOL プログラムにグループ項目を渡すことができます。
CustomRecord インターフェイスの定義を次に示します。
package com.microfocus.cobol.lang;
public interface CustomRecord
{
public Object[] getParameters();
public void setParameters(Object[] parms);
}
demo/javademo/cobol/record/RecordDemo ディレクトリ内のデモンストレーションでは、データ項目 customerDetails が次のように定義されています。
01 customerDetails.
03 customerName pic x(30).
03 customerAddress pic x(30).
03 customerRef pic 9(6).
Java による CustomRecord インターフェイスの実装例を次に示します。
import com.microfocus.cobol.lang.*;
import java.text.*;
public class RecordData implements
com.microfocus.cobol.lang.CustomRecord
{
private String customerName;
private StringBuffer customerAddress;
private int customerRef;
RecordData(String name, String address, int ref)
{
customerName = name;
customerAddress = new StringBuffer(address);
customerRef = ref;
}
public String getCustomerName()
{
return this.customerName;
}
public String getCustomerAddress()
{
return this.customerAddress.toString();
}
public int getCustomerRef()
{
return this.customerRef;
}
public Object[] getParameters()
{
String strCustomerRef =
Integer.toString(this.customerRef);
while(strCustomerRef.length() < 6)
{
strCustomerRef = "0"+strCustomerRef;
}
customerAddress.setLength(30);
/* 必ず正しい長さを指定する。 */
customerAddress.ensureCapacity(30);
return new ParameterList()
.add(new Pointer(this.customerName,30))
.add(this.customerAddress)
.add(strCustomerRef.getBytes())
.getArguments();
}
public void setParameters(Object[] parms)
{
Pointer ptr = (Pointer)parms[0];
this.customerName = ptr.toString();
this.customerAddress = (StringBuffer)parms[1];
byte[] byteCustomerRef = (byte[])parms[2];
this.customerRef =
Integer.parseInt(new String(byteCustomerRef));
}
public String toString()
{
return "Customer Name : "+this.customerName+"\n"+
"Customer Address : "+this.customerAddress+"\n"+
"Customer Ref : "+this.customerRef;
}
}
Java プログラム内では、次のようなコードで COBOL プログラムを呼び出します。
cobcall("RecordDemo",new ParameterList().add(
new RecordData(myname, myaddress, myref)));
『Java データ型』の章の『ParameterList() によるパラメータの追加』を参照してください。
JNI (Java Native Interface) は、Java のオブジェクトとクラスを、Java 以外の言語で作成したプログラムで利用するためのインターフェイスです。com.microfocus.cobol.RuntimeSystem クラス内の cobcall() メソッドの一種を使用して、呼び出し対象の COBOL プログラムに JNI ポインタを渡します。 JNI ポインタとは、Java 以外のコードから Java ランタイムシステムへのアクセスを可能にする Java 関数群のテーブルを指すポインタです。
COBOL で JNI を容易に利用できるようにするため、javatypes.cpy でデータ型 JNINativeInterface が定義されています。JNINativeInterface は、JNI Java 関数群を指す一連の手続きポインタで構成されるグループデータ項目です。 COBOL での JNI の用途としては、COBOL プログラムからの Java 例外のスローなどがあります。
COBOL プログラムから Java にアクセスする手段としては、ドメインサポートも使用できます (『Object COBOL からの Java の呼び出し』を参照)。
JNI 関数を使用して例外をスローする簡単な COBOL プログラムの例を次に示します。
identification division.
program-id. "except".
special-names.
**********************************************
* JNI 呼び出しに使用する呼び出し規約をここで
* 指定します。 Win 32 システムの場合は 74 を
* 指定します (stdcall 呼び出し規約に対応
* しています)。
**********************************************
$if UNIX defined
call-convention 0 is javaapi.
$else
call-convention 74 is javaapi.
$end
local-storage section.
copy "javatypes.cpy".
01 JavaException pointer.
01 ExceptionClass pointer.
linkage section.
01 JEnv pointer.
01 jobject pointer.
01 lnk-JNINativeInterface JNINativeInterface.
* 最初のパラメータ (JEnv) は、JNI 関数テーブルへのポインタ
* です。 JNI 関数呼び出しでは、常に、このポインタを最初の
* パラメータとして参照渡しする必要があります。
procedure division.
using by reference JEnv.
* JEnv で渡されたポインタを JNINativeInterface
* 構造体の先頭アドレスにマッピングして、JNI 関数の
* 呼び出しを可能にします。
set address of lnk-JNINativeInterface to JEnv
* 例外クラスへの参照を取得します。
call javaapi FindClass
using by reference JEnv
by reference
z"java/lang/IllegalArgumentException"
returning ExceptionClass
end-call
* 例外クラスが見つからない場合は、そのまま終了します。
if ExceptionClass = NULL
exit program
end-if
* 新しい例外をスローします。
call javaapi ThrowNew
using by reference JEnv
by value ExceptionClass
by reference z"Thrown from COBOL code"
end-call
exit program
.
次に呼び出し側の Java プログラムを示します。
import com.microfocus.cobol.*;
class testexcept
{
public static void main(String argv[]) throws Exception
{
try
{
/* JNIEnvで渡すため、最後のパラメータは true に設定します。 */
RuntimeSystem.cobcall(null,"throwex",null,null,true);
}
catch(Exception e)
{
System.out.println(
"PASS - exception caught ("+ e + ")");
}
}
}
COBOL 開発プログラムには、Java からの 手続き型 COBOL 呼び出しのさまざまな側面を示すサンプルプログラムが付属しています。 これらのデモンストレーションプログラムは、製品のインストールディレクトリであるdemo/javademo/cobol ディレクトリに格納されています。これらのディレクトリ内の各ファイルは、いずれもサンプル関連ファイルであり、readme.txt ファイルに詳細情報が記載されています。
サンプルプログラムを格納している各ディレクトリと、格納されているサンプルの機能の概要を次に示します。
| ディレクトリ名 | 概要 |
|---|---|
| arrays | COBOL で Java 配列を読み取る。 COBOL で Java 配列を更新する。 |
| pi | pi を計算する。 数値を文字列として Java に返す。 |
| primtypes | Java の原始データ型を COBOL に渡す。 Java の原始データ型を COBOL で更新する。 |
| record | シンプルな COBOL Java オブジェクトを作成する。 DataType インターフェイスを実装する Java オブジェクト から COBOL プログラムにデータを渡し、構造体に格納する。パラメータを参照で渡す。 |
Copyright © 2004 Micro Focus International Limited. All rights reserved.