- - PR -
HIBERNATEでのNoClassDefFoundErrorって?
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-02-22 14:43
いつもお世話になります。開発環境: j2sdk1.4.2_06、TOMCAT5.0.28、ECLIPSE2.1.3、MYSQL4.1、struts1.1、easystruts0.6.4、middlegen-2.0-vo、HIBERNATE2.1.7です。
STRUTSでビューを、HIBERNATEを使用してデータベースにアクセスし、WEBアプリケーションを作ろうと学習してる段階です。データベースにアクセスするクラスをSTRUTUSのアクションクラスでインスタンス化しようとしたときに以下のエラーが出るようです。 javax.servlet.ServletException: サーブレットの実行により例外を投げました at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:222) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:146) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:209) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:144) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948) at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2358) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:133) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596) at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:118) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:594) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:116) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:594) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:127) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948) at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:152) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705) at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683) at java.lang.Thread.run(Unknown Source) root cause java.lang.NoClassDefFoundError: net/sf/hibernate/HibernateException at com.youcompany.struts.action.OwnerAction.execute(OwnerAction.java:66) at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484) at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274) at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482) at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525) at javax.servlet.http.HttpServlet.service(HttpServlet.java:716) at javax.servlet.http.HttpServlet.service(HttpServlet.java:809) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:200) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:146) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:209) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:144) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948) at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2358) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:133) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596) at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:118) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:594) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:116) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:594) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:127) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948) at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:152) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705) at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683) at java.lang.Thread.run(Unknown Source) --------------------------------エラー終わり---------------------------- ソースコードは以下です。 *************************** OwnerAction.java *************************** // Created by Xslt generator for Eclipse. // XSL : not found (java.io.FileNotFoundException: (Bad file descriptor)) // Default XSL used : easystruts.jar$org.easystruts.xslgen.JavaClass.xsl package com.youcompany.struts.action; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import test.TestList; import com.youcompany.struts.form.OwnerForm; /** * OwnerAction.java created by EasyStruts - XsltGen. * http://easystruts.sf.net * created on 02-18-2005 * * XDoclet definition: * @struts:action path="/owner" name="ownerForm" input="/form/owner.jsp" validate="true" * @struts:action-forward name="/success.jsp" path="/success.jsp" */ public class OwnerAction extends Action { // --------------------------------------------------------- Instance Variables // --------------------------------------------------------- Methods /** * Method execute * @param ActionMapping mapping * @param ActionForm form * @param HttpServletRequest request * @param HttpServletResponse response * @return ActionForward * @throws Exception */ public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { /* OwnerForm ownerForm = (OwnerForm)form; String greet = ownerForm.getGreet(); String name = ownerForm.getName(); request.setAttribute("name", name); request.setAttribute("greet", greet); // Forward control to the specified success target return (mapping.findForward("success")); */ OwnerForm ownerForm = (OwnerForm)form; String greet = ownerForm.getGreet(); String name = ownerForm.getName(); request.setAttribute("name", name); request.setAttribute("greet", greet); TestList testList = new TestList(); request.setAttribute("list",testList.getList()); // request.setAttribute("hbtest",HibTest1.getList()); return (mapping.findForward("success")); } } *************************** TestList.java **************************** /* * 作成日: 2005/02/22 * * この生成されたコメントの挿入されるテンプレートを変更するため * ウィンドウ > 設定 > Java > コード生成 > コードとコメント */ package test; import java.util.List; import entity.hibernate.Test1; import net.sf.hibernate.Criteria; import net.sf.hibernate.HibernateException; import net.sf.hibernate.Session; import net.sf.hibernate.SessionFactory; import net.sf.hibernate.cfg.Configuration; /** * @author takeshi * * この生成されたコメントの挿入されるテンプレートを変更するため * ウィンドウ > 設定 > Java > コード生成 > コードとコメント */ public class TestList { public TestList() { } public List getList(){ List list=null; try{ Configuration cfg = new Configuration(); cfg.configure(); SessionFactory sf = cfg.buildSessionFactory(); Session sess = sf.openSession(); Criteria cri = sess.createCriteria(Test1.class); list = cri.list(); /* for(Iterator ite = list.iterator(); ite.hasNext() ![]() Test1 test1 = (Test1)ite.next(); System.out.println(test1.toString() + ":"+ test1.getAddress()); } */ sess.close(); } catch(HibernateException e){ e.printStackTrace(); } return list; } } ***************************** TestYobi.java *************************** /* * 作成日: 2005/02/22 * * この生成されたコメントの挿入されるテンプレートを変更するため * ウィンドウ > 設定 > Java > コード生成 > コードとコメント */ package test; import java.util.Iterator; import entity.hibernate.Test1; /** * @author takeshi * * この生成されたコメントの挿入されるテンプレートを変更するため * ウィンドウ > 設定 > Java > コード生成 > コードとコメント */ public class TestYobi { public static void main(String[] args) { TestList testList = new TestList(); java.util.List list= testList.getList(); for(Iterator ite = list.iterator(); ite.hasNext() ![]() Test1 test1 = (Test1)ite.next(); System.out.println(test1.getName() + ":"+ test1.getEmail()); } } } ****************************** ソースコード終わり ********************* 呼び出すときにエラーになるので、ためしにMainメソッドを持ったクラスから呼び出してみようと思って作ったのがTestYobiクラスですが、このクラスから呼び出す時にはエラーが出ずにちゃんと表示されるのです。NoClassDefFoundErrorが出るときってだいたいはクラスパスが通ってないのが原因のようなんですが、Mainクラスが呼び出した時にエラーにならないのでさらに混乱してる状態です。足りない情報を示していただければ追記いたしますので、どなたかご教示いただけませんでしょうか。お願いします。 | ||||
|
投稿日時: 2005-02-22 22:13
Tomcat上での実行と、 TestYobi#main() からの実行では実行条件が異なる
からあまり比較にならないのではないでしょうか? 十中八九、クラスパスの設定だと思うので、以下の順で確認してみてください。 1.見つからないとなっているHibernateExceptionが含まれるJarファイルは? 2.1.のJarファイルはクラスパスに通っているか? a.システム環境変数CLASSPATHは? b.Tomcat起動時のCLASSPATHは? c.Webアプリの、/WEB-INF/lib の下は? 等。。。 | ||||
|
投稿日時: 2005-02-23 06:03
YOU@ITさん、ご返答ありがとうございます。おっしゃるとおり、クラスパスの問題だったようです。
1.C:\java\or_unzip\hibernate-2.1.7c\hibernate-2.1\hibernate2.jar です。 2. a.システム環境変数CLASSPATHに上記のjarファイルを追加しても変化はなかったです。 bでクラスパスのHibernateExceptionが見つからない問題はクリアしたっぽいのでcのご指摘はさわってないのですが、/WEB-INF/lib の中には入れてません。 b.のご指摘に対して、TOMCAT起動時のCLASSPATHというものがよくわからなかったので、自分なりに勝手な解釈かもしれませんが、以下のように設定しました。 ECLIPSEのパッケージエクスプローラからプロジェクトのルートを右クリック、プロパティ→TOMCAT→開発用クラスローダのクラスパス→開発用クラスローダを有効にするにチェックを入れ、すぐしたのボックスの中にあるライブラリとクラスフォルダすべてにチェックを入れてOK。(ここにお目当てのjarファイルがありました。JAVAのビルド・パス→ライブラリーで追加したやつが表示されるんですね) これだけでは使えないようなのでTOMCATプラグインのアーカイブを解凍し、その中からDevLoader.zipをさらに解凍。これの中身をTOMCAT/server/classesにコピーしてECLIPSEを再起動。TOMCATを起動してみると、ちゃんとDevLoaderが動いているのがコンソールからも確認できました。アプリを実行してみると先ほどのエラーは出なくなりました。ありがとうございます。 ここで新たな問題が発生したのです。エラーは以下です。 ************* ECLIPSEコンソールに表示されるエラー ****************** 警告: /hibernate.cfg.xml not found ************* ブラウザに表示されるエラー ****************** exception javax.servlet.ServletException: Cannot find bean list in scope request at org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:495) at org.apache.jsp.success_jsp._jspService(success_jsp.java:104) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:92) at javax.servlet.http.HttpServlet.service(HttpServlet.java:809) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:162) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:240) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:187) at javax.servlet.http.HttpServlet.service(HttpServlet.java:809) at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:627) at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:382) at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:306) at org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1069) at org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:455) at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:279) at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482) at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525) at javax.servlet.http.HttpServlet.service(HttpServlet.java:716) at javax.servlet.http.HttpServlet.service(HttpServlet.java:809) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:200) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:146) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:209) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:144) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948) at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2358) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:133) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596) at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:118) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:594) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:116) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:594) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:127) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948) at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:152) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705) at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683) at java.lang.Thread.run(Unknown Source) root cause javax.servlet.jsp.JspException: Cannot find bean list in scope request at org.apache.struts.util.RequestUtils.lookup(RequestUtils.java:940) at org.apache.struts.taglib.logic.IterateTag.doStartTag(IterateTag.java:277) at org.apache.jsp.success_jsp._jspService(success_jsp.java:73) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:92) at javax.servlet.http.HttpServlet.service(HttpServlet.java:809) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:162) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:240) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:187) at javax.servlet.http.HttpServlet.service(HttpServlet.java:809) at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:627) at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:382) at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:306) at org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1069) at org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:455) at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:279) at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482) at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525) at javax.servlet.http.HttpServlet.service(HttpServlet.java:716) at javax.servlet.http.HttpServlet.service(HttpServlet.java:809) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:200) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:146) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:209) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:144) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948) at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2358) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:133) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596) at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:118) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:594) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:116) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:594) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:127) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948) at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:152) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705) at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683) at java.lang.Thread.run(Unknown Source) /hibernate.cfg.xmlは、TestEasyStruts/config/hibernate.cfg.xmlとしておいてます。 プロジェクトのプロパティからJAVAのビルド・パス→ライブラリ→クラスフォルダの追加からTestEasyStruts/configを前に追加して、今もあります。先ほどのDevLoaderの設定のときにもそれにチェックをつけました。ECLIPSEのエラーの内容から、クラスパスが通ってないので見つけられないんだと思うのですがそもそも設定の仕方が間違っているのでしょうか?ブラウザのbeanが見つからないっていうエラーはその辺のエラーと連動してると思うのですが・・・。 たびたび恐れ入ります。ご教示いただけませんでしょうか。よろしくお願いします。 | ||||
|
投稿日時: 2005-02-23 09:43
takeさん、こんにちは。
>>/hibernate.cfg.xmlは、TestEasyStruts/config/hibernate.cfg.xmlとしておいてます。 とのことですが、 hibernate.cfg.xmlが見つけられてないと出ているので、パスがあっていないと思います。 classesフォルダではなく、srcフォルダの直下にhibernate関連のxmlファイルを移してみてはどうでしょうか? ビルドされるとclassesフォルダにxmlが自動生成されるので間違いが少ないと思います。 [ メッセージ編集済み 編集者: abby 編集日時 2005-02-23 14:52 ] | ||||
|
投稿日時: 2005-02-23 11:02
abbyさん、ご返答ありがとうございます。abbyさんのおっしゃるとおりにしてみると、ちゃんと動作するようになりました。ありがとうございます。 ソースフォルダに入れてやるとコンパイルしてクラスフォルダにコピーしてくれるんですね!JAVAファイルのみにしかできないのかと思ってました。いいこと聞きました(^^)classesフォルダにクラスパスが通ってないことはないので大丈夫ってわけですね。勉強になりました。 YOU@ITさん、abbyさん、その他閲覧いただいた皆様に感謝いたします。ありがとうございます。またよろしくお願いします。 |
1