「COBOL」「Java」OpenCOBOL から Java を呼び出す
OpenCOBOL から Java を呼び出してみたので、その時のメモ。
以下のエントリーと同様にインタフェースには JNI を使います。
・「Java」「COBOL」Java から OpenCOBOL を呼び出す - プログラム日記
http://a4dosanddos.hatenablog.com/entry/2013/11/05/014548
[ 環境情報 ]
CentOS 6.2
Java SE 7 Update 21
OpenCOBOL 2.0
GCC 4.4.7
※ JDK のインストールディレクトリは "/usr/local/java/jdk1.7.0_21/"
OpenCOBOL のインストールディレクトリは "/usr/local/cobol/2.0/"
1. Java プログラムの作成 ( Hello.java )
public class Hello { public static void hello() { System.out.println("***** Hello World"); } }
コンパイルしておく。
2. C プログラムの作成 ( CallJava.c )
#include <stdio.h> #include "jni.h" int callJavaMethod(void) { JNIEnv *env; JavaVM *jvm; int res; jclass cls; jmethodID mid; JavaVMOption options[1]; options[0].optionString = "-Djava.class.path=."; JavaVMInitArgs vm_args; vm_args.version = JNI_VERSION_1_6; vm_args.options = options; vm_args.nOptions = 1; res = JNI_CreateJavaVM(&jvm, (void **)&env, &vm_args); cls = (*env)->FindClass(env, "Hello"); mid = (*env)->GetStaticMethodID(env, cls, "hello", "()V"); printf("** C start\n"); (*env)->CallStaticVoidMethod(env, cls, mid, NULL); printf("** C end\n"); (*jvm)->DestroyJavaVM(jvm); return 0; }
3. COBOL プログラムの作成 ( CallJava.cob )
* Sample COBOL program IDENTIFICATION DIVISION. PROGRAM-ID. CallJava. PROCEDURE DIVISION. DISPLAY "COBOL start". CALL "callJavaMethod". DISPLAY "COBOL end". EXIT PROGRAM.
4. コンパイル、および、環境変数 LD_LIBRARY_PATH を設定する
cobc -x CallJava.cob CallJava.c -I /usr/local/java/jdk1.7.0_21/include/ -I /usr/local/java/jdk1.7.0_21/include/linux/ -L /usr/local/java/jdk1.7.0_21/jre/lib/i386/server/ -ljvm export LD_LIBRARY_PATH=/usr/local/cobol/2.0/lib/:/usr/local/java/jdk1.7.0_21/jre/lib/i386/server/
上記で作業は完了です。生成された "CallJava" を実行して、以下の出力が得られたらひとまず成功。
COBOL start ** C start ***** Hello World ** C end COBOL end
一応ドキュメント的には、以下の Static COBOL to C とかあたりが参考になるんかと思います。
・OpenCOBOL - B-Wiki - UserManual/2_3
http://www.opencobol.org/modules/bwiki/index.php?cmd=read&page=UserManual%2F2_3
以上です。