こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

JDBCが見つからないとメッセージが出る

PostgreSQLをバージョン8.2から9.2にUPし、Tomcatをバージョン5から7にUPしました。
そのほか、OSはWindows7でローカルシステムを構築中です。
実行すると、HTTPステータス500javax.naming.NamingException: Could not load resource factory class [Root exception is java.lang.ClassNotFoundException: org.apache.commons.dbcp.BasicDataSourceFactory]
とエラーが出ます。

以下の環境設定の間違いと思われますが、どこを直せばよいかわかりません。
よろしくご教授ください。

PostgreSQLは、C:\Program Files\postgresql9.2に配置しました。
Tomcatは、C:\Tomcat7に配置しました。
システムはC:\Tomcat7\webapps\test1に配置しました。
JDBCドライバは、postgresql-9.1-901.jdbc3.jar と postgresql-9.1-901.jdbc4.jar を
C:\Tomcat7\libnにコピー&ペーストしました。

接続の定義は、C:\Tomcat7\conf\catalina\localhost に test1.xmlファイルを作りました。
以下がその記述です。
<?xml version='1.0' encoding='utf-8'?>
<Context path="/test1" reloadable="true" docBase="C:\Tomcat7\webapps\test1"
workDir="C:\Tomcat7\work" >

<Resource name="jdbc/RDBMS" auth="container"
type="javax.sql.DataSource" debug="1"
factory="org.apache.commons.dbcp.BasicDataSourceFactory"
driverClassName="org.postgresql.Driver"
username="postgres"
password="postgres"
maxActive="100"
maxIdle="30"
maxWait="10000"
url="jdbc:postgresql://localhost:5432/LocalDB"
removeAbandoned="true"
removeAbandonedTimeout="300"
/>
</Context>

投稿日時 - 2013-05-06 18:31:28

QNo.8075757

困ってます

質問者が選んだベストアンサー

エラーメッセージを見ると、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

投稿日時 - 2013-05-06 22:51:31

お礼

ご回答ありがとうございます。

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行目です
}
}

よろしくお願いします。

投稿日時 - 2013-05-07 12:09:26

ANo.1

このQ&Aは役に立ちましたか?

3人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

> C:\Tomcat7\lib の中に tomcat-dbcp.jar は有りました。

そうですか。その中に↓は含まれているはずなのですが・・・。
org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory

> e.printStackTrace() で出たメッセージがどこに表示(保存?)されるのかわかりません。

おそらくは、↓の様なファイルが有って、そこに出力されているかと。
C:\Tomcat7\logs\catalina.~~~.log

あと、#1で補足して頂いたエラーメッセージ(スタックトレース)は、あれで全部なのですよね?

投稿日時 - 2013-05-09 10:29:32

お礼

たびたびご丁寧な回答をいただきましてありがとうございます。

C:\Tomcat7\logs\catalina.yyyymmdd.log と、エラーが出される原因を調べましたところ、
アプリケーションログを取得する定義分のlog4j.xmlファイルがありませんでした。

本ファイルを作り、起動したところ、うまく起動することが出来ました。

最初はJDBCでエラーが出たのですが、コンテキストファイルからFactoryの指定を削除することによって解消しました。
続いて、log4jのファイルがないことでエラーとなったようです。

私のエラーに親身になって取り組んでいただき、ほんとうにありがとうございました。
おかげさまで解決できました。

投稿日時 - 2013-05-09 18:06:02

ANo.2

補足ありがとうございます。
C:\Tomcat7\lib の中に tomcat-dbcp.jar は有りますでしょうか?

> e.printStackTrace();
> throw new ServletException(e); ・・・・・・81行目です

エラーメッセージとソースを明示して頂けるのはありがたいのですが、その一行前の e.printStackTrace() で出たメッセージの方が重要かなと。
(try句のどこかで例外が発生したという事しか分かりませんので)

投稿日時 - 2013-05-08 09:30:49

お礼

ご回答いただきましてありがとうございます。

C:\Tomcat7\lib の中に tomcat-dbcp.jar は有りました。

無知で申し訳ありません、e.printStackTrace() で出たメッセージがどこに表示(保存?)されるのかわかりません。

投稿日時 - 2013-05-08 18:00:06