- ベストアンサー
JDBCが見つからないとエラーメッセージが表示される
- PostgreSQLのバージョンを8.2から9.2にアップグレードし、Tomcatのバージョンを5から7にアップグレードしました。しかし、実行するとHTTPステータス500のエラーメッセージが表示され、javax.naming.NamingException: Could not load resource factory class [Root exception is java.lang.ClassNotFoundException: org.apache.commons.dbcp.BasicDataSourceFactory]というエラーが出ます。
- エラーメッセージによると、JDBCドライバが見つからず、接続の定義に問題があると思われます。接続の定義はcatalina/localhost/test1.xmlファイルに記述されており、そこでデータベースへの接続情報を指定しています。
- 接続の定義では、org.postgresql.Driverクラスを使用してPostgreSQLのデータベースに接続しています。また、ユーザー名とパスワードはpostgresとpostgresに設定されており、データベースのURLはlocalhost:5432/LocalDBです。しかし、JDBCドライバが見つからないため、エラーが発生しています。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
エラーメッセージを見ると、org.apache.commons.dbcp.BasicDataSourceFactory がロード出来なくてエラーになっているようです。 ドキュメントの設定例に factory 属性は書かれていないようですですので、 factory 属性を取り去って試してみては? http://tomcat.apache.org/tomcat-7.0-doc/jndi-datasource-examples-howto.html もしくは、factory 属性の値を↓にしてみては? org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory
その他の回答 (2)
- root139
- ベストアンサー率60% (488/809)
> C:\Tomcat7\lib の中に tomcat-dbcp.jar は有りました。 そうですか。その中に↓は含まれているはずなのですが・・・。 org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory > e.printStackTrace() で出たメッセージがどこに表示(保存?)されるのかわかりません。 おそらくは、↓の様なファイルが有って、そこに出力されているかと。 C:\Tomcat7\logs\catalina.~~~.log あと、#1で補足して頂いたエラーメッセージ(スタックトレース)は、あれで全部なのですよね?
お礼
たびたびご丁寧な回答をいただきましてありがとうございます。 C:\Tomcat7\logs\catalina.yyyymmdd.log と、エラーが出される原因を調べましたところ、 アプリケーションログを取得する定義分のlog4j.xmlファイルがありませんでした。 本ファイルを作り、起動したところ、うまく起動することが出来ました。 最初はJDBCでエラーが出たのですが、コンテキストファイルからFactoryの指定を削除することによって解消しました。 続いて、log4jのファイルがないことでエラーとなったようです。 私のエラーに親身になって取り組んでいただき、ほんとうにありがとうございました。 おかげさまで解決できました。
- root139
- ベストアンサー率60% (488/809)
補足ありがとうございます。 C:\Tomcat7\lib の中に tomcat-dbcp.jar は有りますでしょうか? > e.printStackTrace(); > throw new ServletException(e); ・・・・・・81行目です エラーメッセージとソースを明示して頂けるのはありがたいのですが、その一行前の e.printStackTrace() で出たメッセージの方が重要かなと。 (try句のどこかで例外が発生したという事しか分かりませんので)
お礼
ご回答いただきましてありがとうございます。 C:\Tomcat7\lib の中に tomcat-dbcp.jar は有りました。 無知で申し訳ありません、e.printStackTrace() で出たメッセージがどこに表示(保存?)されるのかわかりません。
お礼
ご回答ありがとうございます。 factoryの属性を変更しても、同じエラーメッセージが表示されます。 factory属性を削除してTomcatを再起動して実行すると、エラーメッセージが変わりました。 javax.servlet.ServletException: javax.servlet.ServletException jp.co.nics.kjiact.common.BaseActionServlet.init(BaseActionServlet.java:81) javax.servlet.GenericServlet.init(GenericServlet.java:160) org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:947) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1009) org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589) org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312) java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) java.lang.Thread.run(Unknown Source) BaseActionServletの81行目は public void init() throws ServletException { try { System.out.println("====== KJIACT Init Start ======"); super.init(); getWebRootRealPath(); // データベースのデータソースを作成 ConnectionMgr.CreateDS(); // コンスタントの初期化 Constant.init(); // ログオブジェクトの初期化 initLog4j(); // メッセージファイルの初期化 initMsgs(); System.out.println("====== KJIACT Init End ======="); } catch(Exception e) { System.out.println("====== KJIACT Init ERROR ======"); e.printStackTrace(); throw new ServletException(e); ・・・・・・81行目です } } よろしくお願いします。