以前の Micro Focus 製品では、COBOL と Java の相互運用性は、クラス ウィザードおよびメソッド ウィザードを使用して、クラス com.microfocus.cobol.RuntimeObject とその対になる COBOL クラスを拡張する Java クラスを作成することで実現されていました。
現在では、生成されたクラスを JVM COBOL アプリケーションで使用し、com.microfocus.cobol.RuntimeObject のインスタンスを作成することで、ネイティブ オブジェクト COBOL に Java インスタンスを渡すことが可能になりました。ネイティブ COBOL は、それらのインスタンスをネイティブ オブジェクト参照として取得します。
次の例では、Java クラス addressbook は com.microfocus.cobol.RuntimeObject を拡張し、インスタンスの作成に使用されます。
working-storage section.
01 ab type addressbook.
procedure division.
set ab to type addressbook::new()
call "useab_oon" using by value ab
受け取り側ネイティブ COBOL プログラム:
$set ooctrl(+p) ooctrl(-f) dialect(iso2002) mf warning(1)
identification division.
program-id. useab_con as "useab_oon".
repository.
class cls-sb as "$java$java.lang.StringBuffer".
working-storage section.
01 nameBuffer object reference.
01 nameBufferLength binary-long.
01 nameBufferX pic x(80).
linkage section.
01 ab object reference.
procedure division using by value ab.
invoke cls-sb "new" using
by value 80 size 4
returning nameBuffer
invoke ab "getName" using nameBuffer
invoke nameBuffer "length" returning nameBufferLength
invoke nameBuffer "toString" returning nameBufferX
display "Customer name : " nameBufferX(1:nameBufferLength)
invoke nameBuffer "finalize" returning nameBuffer
goback.
ネイティブ COBOL クラス:
$set ooctrl(+p) ooctrl(-f) dialect(iso2002) mf warning(1)
identification division.
class-id. addressBook as "addressbook"
inherits from javabase.
repository.
class javabase as "javabase"
factory.
working-storage section.
end factory.
object.
working-storage section.
method-id. getName .
linkage Section.
01 customerName pic x(80).
procedure division using by reference customerName.
move "Mr Smith" to customerName
exit method.
end method getName.
end object.
end class addressBook.
自動生成される addressbook.java:
import com.microfocus.cobol.*;
// OCWIZARD start imports
// OCWIZARD end imports
public class addressbook extends com.microfocus.cobol.RuntimeObject
{
/* static methods - the COBOL runtime will register these */
public native static boolean cobinvokestatic_boolean (String methodName, Object[] params)
throws CobolException, Exception;
public native static byte cobinvokestatic_byte (String methodName, Object[] params)
throws CobolException, Exception;
public native static char cobinvokestatic_char (String methodName, Object[] params)
throws CobolException, Exception;
public native static short cobinvokestatic_short (String methodName, Object[] params)
throws CobolException, Exception;
public native static int cobinvokestatic_int (String methodName, Object[] params)
throws CobolException, Exception;
public native static long cobinvokestatic_long (String methodName, Object[] params)
throws CobolException, Exception;
public native static float cobinvokestatic_float (String methodName, Object[] params)
throws CobolException, Exception;
public native static double cobinvokestatic_double (String methodName, Object[] params)
throws CobolException, Exception;
public native static void cobinvokestatic_void (String methodName, Object[] params)
throws CobolException, Exception;
public native static Object cobinvokestatic_Object (String methodName, Object[] params)
throws CobolException, Exception;
static private String javaClassName = "addressbook";
static
{
/* Load the class */
/* cobloadclass (libraryname, cobolname, fulljavaname); */
cobloadclass ("addressbook", "addressbook", javaClassName);
}
// OCWIZARD - start java methods
public void getName (StringBuffer customerName) throws Exception, CobolException
{
// Parameters are passed to COBOL in an array
Object[] params = {customerName};
cobinvoke_void ("getName", params);
}
// OCWIZARD - end java methods
}