- PR -

突然java.lang.NoClassDefFoundErrorが発生

1
投稿者投稿内容
JBOY
ベテラン
会議室デビュー日: 2003/02/27
投稿数: 72
投稿日時: 2004-04-28 21:11
お世話になります。

一点、質問があります。
Sun One Application Server 7を使用しているのですが、
普段は普通に稼動しているのですが、自作のjarのクラスを
呼ぶと突然、NoClassDefFoundErrorが発生します。
以後はこのjar内のクラスを呼び出すと同様のエラーが出つづけます。
Aplication Serverを再起動すると治ります。
ですが、しばらくすると(何時間か後の場合もあれば、何日か後の場合もあります)、
再度発生します。
このような現象の考えられる原因について何かわかる方いらっしゃいましたら
ご教授願います。

一つ、怪しいのが、jarを作った際のJDKのバージョンと
Aplication ServerのJDKのバージョンが違うのが原因の可能性もあるのかなと
思ったのですが、このようなケースはざらにありそうですので、
多分違いますね。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2004-04-29 03:29
FD が枯渇してファイルの読み込みが出来なくなっているということはないでしょうか?
Anthyhime
ぬし
会議室デビュー日: 2002/09/10
投稿数: 437
投稿日時: 2004-04-29 06:52
クラスの静的メンバの初期化などに失敗し再ロードできなくなっているのではないでしょうか。
JBOY
ベテラン
会議室デビュー日: 2003/02/27
投稿数: 72
投稿日時: 2004-04-29 18:20
回答ありがとうございました。
引用:
FD が枯渇してファイルの読み込みが出来なくなっているということはないでしょうか?


ですが、まず、FDとは何でしょうか?
すいません。。無知で。。
引用:
クラスの静的メンバの初期化などに失敗し再ロードできなくなっているのではないでしょうか。


これについては、わかりませんが、ログなどには何も出力されていません。
ただ、静的メンバ等はクラスのロード時のみ行われ、
その後は静的メンバの初期化は行われないと思っていたのですが、
そもそも違いますか?
因みに、このクラスではJNIを使用していて、
コード:
System.loadLibrary("にょろにょろ");


みたいな感じで使用しています。
Anthyhime
ぬし
会議室デビュー日: 2002/09/10
投稿数: 437
投稿日時: 2004-05-02 07:28
ApplicationServer内でWEB-INF/lib,classesディレクトリに格納したクラスはダイナミックにロードされ、また、起動中に、クラスの変更をなどのイベントを受け付け再ロードされます。
本現象はSystem.loadLibrary()を実行しているクラスが何かしらの原因で再ロードされたため発生したのではないでしょうか。JNIを利用してライブラリを複数回ロードしたときにJVMに障害が発生するというケースをどこかで聞いたことがあります。該当するJarをApplicationServerのクラスパスに配置し一度しかロードされないようにすることで回避することができると思います。
JBOY
ベテラン
会議室デビュー日: 2003/02/27
投稿数: 72
投稿日時: 2004-05-02 15:56
Anthyhime様

返信ありがとうございます。
引用:
本現象はSystem.loadLibrary()を実行しているクラスが何かしらの原因で再ロードされたため発生したのではないでしょうか。JNIを利用してライブラリを複数回ロードしたときにJVMに障害が発生するというケースをどこかで聞いたことがあります。該当するJarをApplicationServerのクラスパスに配置し一度しかロードされないようにすることで回避することができると思います。


私もライブラリを使用しているクラスの複数回のロードが怪しいのかなという気はしているのですが、
なぜ、再ロードされるのかがわかりません。考えられる原因としてはどのようなものがあるのでしょうか?
あと、該当のJARはApplicationServerのクラスパスに配置しています。。。
1

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