- PR -

JAVA5環境におけるjavaVMの使用方法について。

1
投稿者投稿内容
marquee
会議室デビュー日: 2009/02/25
投稿数: 2
投稿日時: 2009-02-25 18:25
現在、IBMのZサーバ(Linux x64)上で、C++から "JNI_CreateJavaVM" を行い、
VM上で、JAVAプログラムを実行させようとしています。

この時、JAVA4を使用した場合は、VMが生成できて正常にJAVAプログラムを起動出来たのですが、
JAVAのバージョンをJAVA5にアップしたところエラーになってしまい、VMの作成自体が出来ませんでした。

JAVA5では、J9VMフォルダ配下の "libjvm.so" をC++プログラムにリンクして使用しているのですが、
JAVA4とJAVA5では、"libjvm.so" の使用方法が異なるのでしょうか?
試しとして、JAVA5環境でJAVA4の"libjvm.so" を使用してみたところ、
"JNI_CreateJavaVM" は行えたのですが、その後の "FindClass" でエラーになりました。
ソースは、下記のようになっております。


// JavaVMを生成
jint res = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args);
// Javaのクラスを検索
jclass clazz = env->FindClass("TestPro");
// Javaのメソッドを検索
jmethodID mid = env->GetStaticMethodID(clazz, "main", "([Ljava/lang/String;)Ljava/lang/String;");


また、JAVA4の"libjvm.so" と JAVA5の"libjvm.so"のサイズが極端に異っていることも気になります。
JAVA4の"libjvm.so"は、5027847バイトなのに対し、
JAVA5の"libjvm.so"は、128159バイト(J9VMフォルダ)、70338バイト(classicフォルダ)となっています。

使用環境・使用方法の情報が少ないかもしれませんが、
IBMのJ9VMに詳しい方、若しくは解説等のあるページをご存知の方がいらっしゃいましたら、
ぜひ、教えて下さい。
宜しくお願いします。


以上です。
marquee
会議室デビュー日: 2009/02/25
投稿数: 2
投稿日時: 2009-03-09 10:59
JNI アプリケーションの作成

ネイティブ・プログラムが JNI_CreateJavaVM() API 呼び出しで
指定できる有効な JNI バージョン番号は、以下のとおりです。

* JNI_VERSION_1_2(0x00010002)
* JNI_VERSION_1_4(0x00010004)

このバージョン番号で決まるのは、使用する JNI ネイティブ・インターフェースのレベルのみです。
作成される JVM の実際のレベルは、J2SE ライブラリーによって指定されます (つまり、v5.0)。
JNI インターフェース API は、JVM によって実装される言語仕様や、
クラス・ライブラリー API、その他の範囲の JVM 動作に影響しません。
詳しくは、http://java.sun.com/j2se/1.5.0/docs/guide/jni を参照してください。

32 ビット用に作成されたものと 64 ビット用に作成されたものの
2 つの JNI ライブラリーがアプリケーションで必要な場合、
com.ibm.vm.bitmode システム・プロパティーを使用して、
32 ビットまたは 64 ビット JVM のどちらで実行しているかを判別し、
適切なライブラリーを選択します。

IBM 5.0 SDK でネイティブ・アプリケーションをコンパイルおよびリンクするには、
次のコマンドを使用します。

gcc -I/opt/ibm/java2-i386-50/include -L/opt/ibm/java2-i386-50/jre/bin/j9vm
-ljvm -ldl -lpthread <JNI program filename>

-ljvm オプションは、libjvm.so が、JVM を実装する共用ライブラリーであることを指定します。
-lpthread オプションは、ネイティブ pthread サポートを使用することを指示します。
pthread ライブラリーとリンクしないと、
JNI プログラムの実行時にセグメンテーション障害 (シグナル SIGSEGV)
が発生する可能性があります。

注:Java Native Interface (JNI) の Version 1.1 はサポートされません。

http://lampwww.epfl.ch/java/java-ibm-1.5/docs/ja/sdkandruntimeguide.lnx.ja.htm#wq51
1

スキルアップ/キャリアアップ(JOB@IT)