- - PR -
ServletでHibernateを使うとjava.lang.NoClassDefFoundError: org/hibernate/Sessionエラーが起きる。
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-04-13 10:16
OS:Windows XP
DB:PostgreSQL Struts:1.3.8 Hibernate:3.2 Tomcat:5.5.2 ローカルでは動くプログラムがサーブレットで動かすとエラーが起こります。 エラーは以下です。 java.lang.NoClassDefFoundError: org/hibernate/Session java.lang.Class.getDeclaredConstructors0(Native Method) java.lang.Class.privateGetDeclaredConstructors(Unknown Source) java.lang.Class.getConstructor0(Unknown Source) java.lang.Class.newInstance0(Unknown Source) java.lang.Class.newInstance(Unknown Source) org.apache.struts.chain.commands.util.ClassUtils.getApplicationInstance(ClassUtils.java:71) org.apache.struts.chain.commands.servlet.CreateAction.createAction(CreateAction.java:98) org.apache.struts.chain.commands.servlet.CreateAction.getAction(CreateAction.java:68) org.apache.struts.chain.commands.AbstractCreateAction.execute(AbstractCreateAction.java:90) org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51) org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190) org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:304) org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190) org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283) org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913) org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462) javax.servlet.http.HttpServlet.service(HttpServlet.java:710) javax.servlet.http.HttpServlet.service(HttpServlet.java:803) ソース的にはこんな感じです。 public class LoginAction extends Action { //@SuppressWarnings("finally") public ActionForward execute(ActionMapping map, ActionForm frm, HttpServletRequest req, HttpServletResponse res) { UserForm _userForm = (UserForm) frm; // 実行する処理の種類を格納 String action = req.getParameter("action"); // ArrayList errors = new ArrayList(); String foward = "error"; // Session session; Session session = new Configuration().configure().buildSessionFactory().openSession(); Transaction tx = session.beginTransaction(); tx.commit(); session.close(); return map.findForward(foward); } } 単にセッションを取得して、閉じてるだけです。 ライブラリとしては以下のものを置いています。 antlr-2.7.2.jar bsf-2.3.0.jar commons-beanutils-1.7.0.jar commons-chain-1.1.jar commons-collections-2.1.1.jar commons-digester-1.8.jar commons-fileupload-1.1.1.jar commons-io-1.1.jar commons-logging-1.0.4.jar commons-validator-1.3.1.jar dom4j-1.6.1.jar ehcache-1.2.3.jar jdbc2_0-stdext.jar jgroups-2.2.8.jar jstl-1.0.2.jar jta.jar oro-2.0.8.jar standard-1.0.2.jar struts-core-1.3.8.jar struts-el-1.3.8.jar struts-extras-1.3.8.jar struts-faces-1.3.8.jar struts-mailreader-dao-1.3.8.jar struts-scripting-1.3.8.jar struts-taglib-1.3.8.jar struts-tiles-1.3.8.jar xml-apis.jar です。 _________________ | ||||
|
投稿日時: 2007-04-13 11:35
NoClassDefFoundErrorはJavaVMが該当クラスを発見できない場合に発生します。
まず確認するのは該当クラスを含むjarファイルにクラスパスが通っているかどうか。 J2EEではWEB-INF/libにjarファイルを置くことで自動的に参照できるようになります。 | ||||
|
投稿日時: 2007-04-13 12:08
Struts のライブラリが Web アプリケーションの親クラスローダで読み込まれているとか?
| ||||
|
投稿日時: 2007-04-13 12:14
ここらへんとか参考になるかもしれません。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=28912&forum=12 http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=15194&forum=12&start=8 >ライブラリとしては以下のものを置いています。 あれ、hibernate の jar ファイルは配置されていなさそうですね。 クラスローダの階層関係とかじゃなくて、nagise さんの仰るとおりライブラリが見つからないだけみたいですね。 [ メッセージ編集済み 編集者: インギ 編集日時 2007-04-13 12:14 ] | ||||
|
投稿日時: 2007-04-13 12:24
クラスローダも考えたのですが、スタックトレースが javax.servlet.http.HttpServlet.service(HttpServlet.java:803) からでしたので違うだろうと推測しました。 ここならAppClassLoaderでしょうから。 | ||||
|
投稿日時: 2007-04-13 12:36
>> nagise さん
回答ありがとうございます。 Hibernate-3.2に含まれるjarファイルを全て入れてみたのですが、それでも同じ結果でした。 同じような現象に悩まされた人いませんかねぇ。 _________________ | ||||
|
投稿日時: 2007-04-13 13:09
ぐぐると同様のネタはでてきますが…
いくつか見てみましたがやはりクラスパスのようですね。 もうひとつの可能性はインギさんが示されているようにクラスローダの問題。 エラー箇所直前でクラスローダが何かを確認してみるといいかもしれませんね。 | ||||
|
投稿日時: 2007-04-13 13:36
みなさん回答ありがとうございます。
Hibernate-3.2のライブラリをTomcatのsharedの中に入れて試してみたのですが、結果は同じでした。 それと、エラーの直前のクラスローダーを調べてみたのですが、sun.misc.Launcher$AppClassLoader@11b86e7 というふうに出力されました。 _________________ |