Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

NoClassDefFoundErrorとClassNotFoundExceptionについて

Java初心者です。
現在apacheとtomcatを連携させてWEBサーバを構築しています。
ファイルのアップロード処理で問題が生じており、色々と手を打った
のですが、完全にお手上げ状態です…。


■環境:
CentOS5.5
tomcat6.0.35
jdk1.6.0_31

PCスペック
メモリ:2GB


■事象:
ファイルのアップロード時にアップロードするファイルのサイズによって挙動が異なります。
1MBの動画ファイルならば正常にアップロードできることを確認できました。6MBの動画ファイルをアップロード
すると、以下のようなエラーが表示され、アップロード処理が終わった後、ファイルは指定のディレクトリに配置
されていますが、FileBeansというクラスを呼び出すとなぜか見つからないと表示されてしまいます。
というより、自分で定義した他のクラスが呼び出そうとすると以下のようなエラーが表示されてしまいます。
--------------------------------------------------------------------------------------
javax.servlet.ServletException: サーブレットの実行により例外を投げました


原因 

java.lang.NoClassDefFoundError: Data/FileBean
Toukou.ToukouServlet.doPost(ToukouServlet.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)


原因 

java.lang.ClassNotFoundException: Data.FileBean
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1680)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526)
Toukou.ToukouServlet.doPost(ToukouServlet.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

--------------------------------------------------------------------------------------


■お試し:
・tomcat単体で試験
Apacheと切り離してtomcat単体で試してみましたが、上記のエラーが表示されました。

・server.xmlの書き換え
20秒前後で上記のエラーが表示されていたので、tomcat単体で試験した際に、port8080の
connectionTimeoutの値を「20000→60000」に変更しましたが、上記のエラーが表示されました。

・gcの回数削減
アップロード中、[jstat -gc]コマンドでgcを1秒間隔で観察みると、YGCが2-3回程度、FGCが1回
走ったので(複数回試験)、ヒープサイズを変更したら、GCは走らなくなったのですが、上記の
エラーは表示されました。


■ディレクトリ構成:
%CATALINA_HOME/application
|-- Frame
| `-- frame.jsp
|-- Movie
| |-- asx
| |-- data
| |-- movieLeft.jsp
| `-- movieRight.jsp
|-- Music
| |-- asx
| |-- data
| |-- musicLeft.jsp
| `-- musicRight.jsp
|-- Picture
| |-- data
| | `-- test1.jpg
| |-- pictureLeft.jsp
| `-- pictureRight.jsp
|-- Top
| `-- top.jsp
|-- Toukou
| `-- toukou.jsp
`-- WEB-INF
|-- DATA
| `-- MVI_1081.wmv
|-- classes
| |-- Data
| | |-- DataBean.class
| | |-- FileBean.class
| | |-- Log.class
| | |-- UpdateBean.class
| |-- DataLeft
| | |-- DataLeftServlet.class
| |-- DataRight
| | |-- DataRightServlet.class
| |-- Top
| | |-- TopServlet.class
| `-- Toukou
| |-- ToukouServlet.class
|-- lib
| |-- c.tld
| |-- commons-fileupload-1.2.2.jar
| |-- commons-io-2.2.jar
| |-- fn.tld
| |-- jstl.jar
| `-- standard.jar
`-- web.xml
↑WEB-INF配下にjavaファイルが置きっぱなしなのは気にしないでください…。



■その他
Windows上で同じアプリケーション(tomcat単体)を試すと1GBのファイルでもアップロードできました。
○Linux端末からWindows端末へ
×Windows端末からLinux端末へ
という感じです。


もう2週間ほどハマっているのですが、全く光が見えてきません。
どうか皆様のお知恵をお貸しください。よろしくお願いいたします。 

1

回答

82566

閲覧

1件の回答

評価

0

メモリを確保しようとして、クラスがアンロードされてるのかなあ…。
でなければ何かクラスローダの問題か…。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。