- PR -

Tomcatを使用したアプリケーションで発生する不規則なエラー

1
投稿者投稿内容
satoru789
会議室デビュー日: 2008/04/18
投稿数: 3
投稿日時: 2008-04-18 17:03
初めての投稿になります。
投稿にあたり、不手際ありましたら御容赦願います。

■タイトルの件

自分で作成した画面系はjsp、処理はjavaを使用したアプリケーションなのですが動作させていると不規則にエラーが発生することがわかりました。
一応の解決案はあるのですが根本的に解決できておりません。
「同様のエラーを見たことがある」「原因に思い当たるふしがある」という方は
ご意見をお聞かせ願えませんでしょうか。

<<エラーを不規則と判断した理由>>
・アプリケーションを動かしていると特定の画面に限らずに発生することがある。
・画面によってファイル名はもちろん異なるがエラー内容は同一。

■現在の対応結果

・下記に転載させて頂いたケースの場合に限らず、ログでNullPointerが発生したと記述されている箇所を調査するもNullになる要素がみつからず。

・下記に転載させて頂いたケースの場合、ログでNullpointerが発生したと記載されたサーブレットクラス()を作りなおすとエラーが発生しなくなる。
その他のケースの場合もログに記載されたサーブレットクラスを削除するとエラーが発生しなくなる。ただし、エラーが発生しなくなるといってもしばらく日にちを置いたりして再トライすると再びエラーが表示されることもある。

■問題のエラー

下記が問題のエラーになります。
結構長かったので呼び出し箇所の前半部分ははちょっとカットしてます。

java.lang.NullPointerException at org.apache.jasper.servlet.JasperLoader.LoadClass
(JasperLoder.java:179) at org.apache.jasper.servlet.JasperLoader.loadclass
(JasperLoder.java:131) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302)
org.apache.jsp.CBoMailList_001_jsp._jspService(CBoMailList_001_jsp.java:461) at
org.gjt.jsp.HttpJspPageImpl.service(HttpJspPageImpl.java:139) at
javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:210) at
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:295) at
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241) at
javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247) at
org.apache.catalina.core.ApplicationFilterChain.access$000(ApplicationFilterChain.java:98) at
org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:176) at
java.security.AccessController.doPrivileged(Native Method) at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:172) at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:256) at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext
(StandardPipeline.java:643) at org.apache.catalina.core.StandardPipeline.invoke
(StandardPipeline.java:480) at org.apache.catalina.core.ContainBase.invoke
(ContainBase.java:995) at org.apache.catalina.core.StandardContextValve.invoke
(StandardContextValve.java:191) at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext
(StandardPipeline.java:643) at org.apache.catalina.core.StandardPipeline.invoke
(StandardPipeline.java:480) at org.apache.catalina.core.ContainBase.invoke
(ContainBase.java:995) at org.apache.catalina.core.StandardContextValve.invoke




■環境情報

tomcat_ver:4.1.29
java_ver:j2sdk1.4.2_04

以上よろしくお願い致します。
Edosson
ぬし
会議室デビュー日: 2004/04/30
投稿数: 675
投稿日時: 2008-04-18 18:46
引用:

satoru789さんの書き込み (2008-04-18 17:03) より:

■現在の対応結果

・下記に転載させて頂いたケースの場合に限らず、ログでNullPointerが発生したと記述されている箇所を調査するもNullになる要素がみつからず。


いやあ、やっぱり、nullになってる要素があるんだと思いますよ。
探すのがたいへんな場合があるのは確かですけどね。
javagg
会議室デビュー日: 2008/04/18
投稿数: 1
投稿日時: 2008-04-18 20:51
javaクラスパスの設定がちゃんと確認しましたか?
クラスオンロードエラーみたいかなあ
よく検討しないので、ご参考だけ
satoru789
会議室デビュー日: 2008/04/18
投稿数: 3
投稿日時: 2008-04-21 10:34
>>javaggさん
ご指摘ありがとうございます。

確かにNullじゃなかったらNullPointerは出ないですよね。
NullPointer発生は事実だとは思うんです。


>>Edossonさん
ご指摘ありがとうございます。

javaクラスパスの設定ですか・・確認してなかったです。
盲点でした。確認してみます。

またご報告させて頂きます。


ひろ@ya
大ベテラン
会議室デビュー日: 2006/02/23
投稿数: 168
投稿日時: 2008-04-21 17:44
蛇足かもしれませんが、4.1.29は静的コンテンツのContent-typeに
勝手に charset=ISO-8859-1 を追加するバグがあるので、
非英語圏での使用はお勧めできません。
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2008-04-21 19:23
引用:

satoru789さんの書き込み (2008-04-18 17:03) より:
(JasperLoder.java:131) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302)
org.apache.jsp.CBoMailList_001_jsp._jspService(CBoMailList_001_jsp.java:461) at
org.gjt.jsp.HttpJspPageImpl.service(HttpJspPageImpl.java:139) at


良くは知りませんが、このスタックトレースの中に、
CBoMailList_001_jsp.java:461
が出力されていますので、その行やその周辺はチェックしたほうが良いと思いますが、すでになされているでしょうか?
(中間ファイルなので、どこかのフォルダーの中にあります。フォルダーを探すよりもディスクをファイル名で検索するのが手っ取り早いですが。)
satoru789
会議室デビュー日: 2008/04/18
投稿数: 3
投稿日時: 2008-04-22 19:54
>>ひろ@yaさん
ご意見ありがとうございます。

恥ずかしながら存じませんでした。合わせて調査させて頂きます。

>>unibonさん
ご意見ありがとうございます。

CBoMailList_001_jsp.java:461(サーブレットファイル)は調査済みです。
nullを引き起こす可能性があるかもしれない変数など調べたのですが・・成果が出ませんでした。
その他のサーブレットでも同様のエラーが発生するので(不規則)、特定ファイルが原因ではないのかなと感じております。

まだ私用で調査できていないのですが、先日javaggさんからご意見頂いたクラスパスとクラスローダの関係を調査する予定です。

koe
大ベテラン
会議室デビュー日: 2003/07/13
投稿数: 198
投稿日時: 2008-04-23 12:07
NPEとはいえクラスローダでのエラーなので、
スタックトレースに現れたソース中の変数を追うだけでは
つかめないような気がします。

余り根拠はないですが、
ある程度時間が経ってから発生するとのことなので、
なんらかのリソースがGCで破棄されたことに起因するのではないかと思います。
クラス自体のGCが起きたときに発生するのかもしれません。

CBoMailList_001_jsp.javaの461行目で使用しているクラスや、
それが依存するクラスを中心に調べてみてはどうでしょうか。

また、Tomcat自身のバグの可能性も考えられますので、
Tomcatのbugzillaを漁ってみたり、
Tomcatのバージョンを上げて再現しないか確認したり
してもいいかもしれません。

推測ばかりですが、お役に立てば幸いです。
1

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