- PR -

Weblogic起動時にエラーがでます

1
投稿者投稿内容
miki
会議室デビュー日: 2004/04/09
投稿数: 11
お住まい・勤務地: 東京
投稿日時: 2004-04-09 17:17
Weblogic 7.0.4でプロダクションモードで
warファイルをデプロイしようとすると
wldomain.logに以下のログが出ました。

---------------------------------------------------------------
java.lang.NoClassDefFoundError: aaa/system/AAA
at java.lang.Class.getMethod0(Native Method)
at java.lang.Class.getMethod(Class.java:883)
at weblogic.servlet.jsp.JspStub.isJSPClassStale(JspStub.java:246)
at weblogic.servlet.jsp.Precompiler.compileOne(Precompiler.java:100)
at weblogic.servlet.jsp.Precompiler.compile(Precompiler.java:55)
at weblogic.servlet.internal.WebAppServletContext.precompileJSPs(WebAppServletContext.java:4267)
at weblogic.servlet.internal.WebAppServletContext.precompileJSPs(WebAppServletContext.java:4260)
at weblogic.servlet.internal.WebAppServletContext.prepareFromDescriptors(WebAppServletContext.java:1984)
at weblogic.servlet.internal.WebAppServletContext.init(WebAppServletContext.java:1077)
at weblogic.servlet.internal.WebAppServletContext.<init>(WebAppServletContext.java:1013)
at weblogic.servlet.internal.HttpServer.loadWebApp(HttpServer.java:599)
at weblogic.servlet.internal.WebAppModule.prepare(WebAppModule.java:382)
at weblogic.j2ee.J2EEApplicationContainer.prepareWebModule(J2EEApplicationContainer.java:1607)
at weblogic.j2ee.J2EEApplicationContainer.prepare(J2EEApplicationContainer.java:739)
at weblogic.j2ee.J2EEApplicationContainer.prepare(J2EEApplicationContainer.java:555)
at weblogic.management.deploy.slave.SlaveDeployer.processPrepareTask(SlaveDeployer.java:1096)
at weblogic.management.deploy.slave.SlaveDeployer.prepareUpdate(SlaveDeployer.java:764)
at weblogic.drs.internal.SlaveCallbackHandler$1.execute(SlaveCallbackHandler.java:24)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:234)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:210)
--------------- nested within: ------------------
weblogic.management.ManagementException: 149233 - with nested exception:
[java.lang.NoClassDefFoundError: aaa/system/AAA]
at weblogic.management.deploy.slave.SlaveDeployer.convertThrowable(SlaveDeployer.java:868)
at weblogic.management.deploy.slave.SlaveDeployer.processPrepareTask(SlaveDeployer.java:1214)
at weblogic.management.deploy.slave.SlaveDeployer.prepareUpdate(SlaveDeployer.java:764)
at weblogic.drs.internal.SlaveCallbackHandler$1.execute(SlaveCallbackHandler.java:24)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:234)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:210)
---------------------------------------------------------------

warファイルにはAAAというクラスは含まれていませんが、
デプロイする前の同じ名前のwarファイルには
AAAが含まれていました。
Weblogicのコンソールで以前のwarファイルを削除し、
AAAが含まれていないwarファイルをデプロイするときにログがでました。
(英語の綴りが違っていたのでクラスの名前を変更してAAAは削除した)。
なぜ、AAAをコンパイルしようとしているのかと思ったのですが
C:\\windows\\TEMP\\jsp_servlet\\_jsp
C:\\windows\\TEMP\\jsp_servlet\\_aaa\\_jsp
という2つのフォルダがあり、そのうちの\\_aaa\\_jspの方にAAAを参照するJSP
が含まれていたのでこれがコンパイルされようとしたのではないか
と思うのですが、jsp_servlet以下のクラスが全てコンパイルされるのでしょうか?
あるいはもっと別の理由でエラーが発生しているのでしょうか?

またweblogic.xmlは以下のようになっています。
<jsp-descriptor>
<jsp-param>
<param-name>compileCommand</param-name>
<param-value>javac</param-value>
</jsp-param>
<jsp-param>
<param-name>precompile</param-name>
<param-value>true</param-value>
</jsp-param>
<jsp-param>
<param-name>workingDir</param-name>
<param-value>c:\\windows\\TEMP\\</param-value>
</jsp-param>
<jsp-param>
<param-name>keepgenerated</param-name>
<param-value>true</param-value>
</jsp-param>
<jsp-param>
<param-name>pageCheckSeconds</param-name>
<param-value>5</param-value>
</jsp-param>
</jsp-descriptor>
YOU@IT
ぬし
会議室デビュー日: 2002/03/29
投稿数: 284
お住まい・勤務地: 大阪
投稿日時: 2004-04-09 23:41

JSPが実行されるまでの流れは理解されていますか?
JSPからServletのコードが生成・コンパイルされて実行されます。

このことを踏まえて、weblogic.xmlの内容を見ればなぜかはわかるのではないでしょうか?
weblogic.xmlの該当箇所のリファレンスはこちらです。
http://edocs.beasys.co.jp/e-docs/wls/docs70/webapp/weblogic_xml.html#840999
miki
会議室デビュー日: 2004/04/09
投稿数: 11
お住まい・勤務地: 東京
投稿日時: 2004-04-10 02:10
どうもJSPが実行されるまでの流れをよく理解できていないようです。
JSPからServletのコードがjsp_servletに生成されるのはなんとなく
わかるのですが、コンパイルの対象が何かということが
weblogic.xmlに書かれていないのでは?と思いました。
WeblogicのドキュメントのパラメータpackagePrefixのところに「すべての JSP ページがコンパイルされるパッケージを指定する」と書いてあるので、jsp_servlet以下のサーブレットを
すべてコンパイルするということになるのでしょうか?
試しに、_aaa\_jspが存在しなかったテスト環境にも_aaa\_jspをコピーして
Weblogicを再起動してみたのですが何もログが出ずに起動しました。
もうちょっと考えてみます。
YOU@IT
ぬし
会議室デビュー日: 2002/03/29
投稿数: 284
お住まい・勤務地: 大阪
投稿日時: 2004-04-10 11:21

そうですね、jsp_servlet以下のソースが全てコンパイルされると思います。

テスト環境で再現しない事について考えられる原因としては、
 ・テスト環境のweblogic.xmlのprecompileがfalseになっている
 ・テスト環境のweblogic.xmlのworkingDirが異なっている
 ・テスト環境のWebモジュールには、クラスAAAが含まれている
等でしょうか。

山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2004-04-10 16:35
WebLogic は JSP の更新チェックをする際に、JSP内で使われているクラスについても更新がないかチェックします。たとえ JSP に変更がなくても JSP が依存しているクラスに変更があれば JSP も再コンパイルする必要性があるからです。

で、このエラーはプリコンパイル時に JSP の依存しているクラスがパスに通っていなくて発生しているようです。
Webアプリケーションの WEB-INF/lib または WEB-INF/classes 以下に aaa.system.AAA ってクラスが存在するか確認してみてください。
1

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