- PR -

WAS上のサーブレットで画像描画処理を行うとNoClassDefFoundErrorが発生します。

投稿者投稿内容
田中
会議室デビュー日: 2004/03/02
投稿数: 7
投稿日時: 2004-03-03 22:16
ご返答ありがとうございます。
すみません、スタックトレースは長すぎると思い貼り付けませんでした。

エラー発生時はログに以下のスタックトレースが吐き出されていました。

[sun/awt/motif/MToolkit]: java.lang.NoClassDefFoundError: sun/awt/motif/MToolkit
at java.lang.Class.forName1(Native Method)
at java.lang.Class.forName(Class.java(Compiled Code))
at java.awt.Toolkit$2.run(Toolkit.java:533)
at java.security.AccessController.doPrivileged(Native Method)
at java.awt.Toolkit.getDefaultToolkit(Toolkit.java:524)
at TestServlet.doGet(TestServlet.java:25)
at javax.servlet.http.HttpServlet.service(HttpServlet.java(Compiled Code))
at javax.servlet.http.HttpServlet.service(HttpServlet.java(Compiled Code))
at com.ibm.ws.webcontainer.servlet.StrictServletInstance.doService(StrictServletInstance.java(Compiled Code))
at com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet._service(StrictLifecycleServlet.java(Compiled Code))
at com.ibm.ws.webcontainer.servlet.IdleServletState.service(StrictLifecycleServlet.java(Compiled Code))
at com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet.service(StrictLifecycleServlet.java(Inlined Compiled Code))
at com.ibm.ws.webcontainer.servlet.ServletInstance.service(ServletInstance.java(Compiled Code))
at com.ibm.ws.webcontainer.servlet.ValidServletReferenceState.dispatch(ValidServletReferenceState.java(Compiled Code))
at com.ibm.ws.webcontainer.servlet.ServletInstanceReference.dispatch(ServletInstanceReference.java(Inlined Compiled Code))
at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.handleWebAppDispatch(WebAppRequestDispatcher.java(Compiled Code))
at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.dispatch(WebAppRequestDispatcher.java(Compiled Code))
at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppRequestDispatcher.java(Compiled Code))
at com.ibm.ws.webcontainer.srt.WebAppInvoker.doForward(WebAppInvoker.java(Compiled Code))
at com.ibm.ws.webcontainer.srt.WebAppInvoker.handleInvocationHook(WebAppInvoker.java(Compiled Code))
at com.ibm.ws.webcontainer.cache.invocation.CachedInvocation.handleInvocation(CachedInvocation.java(Compiled Code))
at com.ibm.ws.webcontainer.srp.ServletRequestProcessor.dispatchByURI(ServletRequestProcessor.java(Compiled Code))
at com.ibm.ws.webcontainer.oselistener.OSEListenerDispatcher.service(OSEListener.java(Compiled Code))
at com.ibm.ws.webcontainer.http.HttpConnection.handleRequest(HttpConnection.java(Compiled Code))
at com.ibm.ws.http.HttpConnection.readAndHandleRequest(HttpConnection.java(Compiled Code))
at com.ibm.ws.http.HttpConnection.run(HttpConnection.java(Compiled Code))
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java(Compiled Code))

確かにご指摘の通りToolkit.getDefaultToolkit()とsun.awt.motif.MToolkitのクラス変数
を見に行くのではクラスのロードの仕方が違うかもしれません。

クラスローダーは奥が深くて謎だらけです・・・・

以上、ご返答ありがとうございました。

田中
会議室デビュー日: 2004/03/02
投稿数: 7
投稿日時: 2004-03-11 10:18
遅くなりましたが一応結果だけ報告させていただきます。

java.lang.NoClassDefFoundError: sun/awt/motif/MToolkit
はxhost localhostなどのコマンドでXを開放してあげれば回避が出来るようになりました。
ですので根本的な問題はjava.lang.NoClassDefFoundErrorにあったのではなく、
java.lang.InternalError: Can't connect to X11 window server using ':0.0' as the value of the DISPLAY variable.
というエラー(X windowへのアクセス権の問題)にあったようです。
結局rt.jarにクラスパスを通しても通さなくてもエラーには関係がないようです。

上記のような事実がわかったので本番機の設定もそれでいこうとしていたのですが、突然お客様が「運用中のLinuxはキャラクターログインではないとだめ。」と言われてしまったため急きょPJAを再調査することになりました。

以前記述させていただいたようにPJAの一部のクラスに問題(JavaVMがクラッシュする)があり、使用することができないという報告を受けていたのですが、自分で調べなおした結果以下のような設定をすればうまく行くことがわかりました。

・PJA2.4を使用。
・WAS5.0の管理コンソールで
アプリケーション・サーバー > server1 > プロセス定義 > Java仮想マシン
に移動(server1は自分で付けたサーバー名に読み替えてください)します。
「ブートクラスパス」にpja.jarとpjatools.jarを追加します。
「汎用 JVM 引き数」に
-Dawt.toolkit=com.eteks.awt.PJAToolkit -Djava.awt.graphicsenv=com.eteks.java2d.PJAGraphicsEnvironment -Djava2d.font.usePlatformFont=false -Djava.awt.fonts=/opt/WebSphere/AppServer/java/jre/lib/fonts
を追加します。

※Fontクラスを使っていなくても-Djava.awt.fonts=/opt/WebSphere/AppServer/java/jre/lib/fontsがないとJavaVMはクラッシュする場合があります。
※上記の設定だけではFontクラスをロードすることができませんでした。Fontクラスを使うにはさらに設定が必要なようです。

現在はキャラクターログインでWASを立ち上げた状態で画像描画処理を行っても正常に動作しています。

いろいろとご返答いただきありがとうございました。








[ メッセージ編集済み 編集者: 田中 編集日時 2004-03-11 10:19 ]

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