- PR -

MySQL5.0とTomcat5.5.9でDB接続ができない

1
投稿者投稿内容
season
常連さん
会議室デビュー日: 2004/06/27
投稿数: 25
投稿日時: 2005-11-07 01:35
すみません。
WindowsXP、Eclipse3.1、Tomcat5.5.9、MySQL5.0の環境で勉強しているのですが、DB接続がうまくいきません。

jarファイルmysql-connector-java-3.1.6-bin.jarは
C:/Tomcat5.5/common/lib
と、/WEB-INF/lib
のところにおいてます。

web.xmlに

<description>MySQL Test App</description>
<resource-ref>
<description>DB Connection</description>
<res-ref-name>webdb</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>


server.xmlの<Server>タグの下に (webdbは自分が作ったデータベース名)

<Resource name="webdb" auth="Container"
type="javax.sql.DataSource"/>
<ResourceParams name="webdb">
<parameter>
<name>username</name>
<value>root</value>
</parameter>
<parameter>
<name>password</name>
<value>test</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>com.mysql.jdbc.Driver</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:mysql://localhost:3306/webdb?autoReconnect=true&characterEncoding=SJIS</value>
</parameter>
</ResourceParams>

<Resource name="webdb" auth="Container" type="javax.sql.DataSource"/>
<ResourceParams name="webdb">
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
<parameter><name>maxActive</name><value>50</value></parameter>
<parameter><name>maxIdle</name><value>20</value></parameter>
<parameter><name>maxWait</name><value>20000</value></parameter>

<parameter><name>username</name><value>root</value></parameter>
<parameter><name>password</name><value>7293</value></parameter>
<parameter><name>driverClassName</name>
<value>org.gjt.mm.mysql.Driver</value></parameter>
<parameter><name>url</name>
<value>jdbc:mysql://localhost:3306/webdb?</value></parameter>
<parameter><name>removeAbandoned</name>
<value>true</value></parameter>
<parameter><name>removeAbandonedTimeout</name>
<value>600</value></parameter>
<parameter><name>logAbandoned</name>
<value>true</value></parameter>
</ResourceParams>



catalina/localhost/sms.xml(コンテキストファイル)に

<Context path="/" reloadable="true" docBase="C:/sms/sms"
workDir="C:/sms/sms/work">
<ResourceLink name="webdb" global="webdb" type="javax.sql.DataSource" />
</Context>


と記述してます。しかし、これだと

org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:780)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:540)
at study.struts.model.dao.CounterDAO.findMax(CounterDAO.java:83)
at study.struts.model.biz.CounterManager.put(CounterManager.java:34)
at study.struts.action.CounterAction.insert(CounterAction.java:68)
at study.struts.action.CounterAction.execute(CounterAction.java:50)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:421)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:226)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1164)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:397)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:122)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:856)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:744)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Unknown Source)
Caused by: java.sql.SQLException: No suitable driver
at java.sql.DriverManager.getDriver(Unknown Source)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:773)
... 28 more

2005/11/08 23:40:03 study.struts.model.biz.SystemExceptionHandler execute
致命的: study.struts.model.biz.DuplicateKeyException: Counter table:key=127.0.0.1
at study.struts.model.biz.CounterManager.put(CounterManager.java:35)
at study.struts.action.CounterAction.insert(CounterAction.java:68)
at study.struts.action.CounterAction.execute(CounterAction.java:50)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:421)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:226)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1164)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:397)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:122)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:856)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:744)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Unknown Source)

というエラーが出てきてどうしてもうまくいきません。
どこがおかしいのでしょうか?

[ メッセージ編集済み 編集者: season 編集日時 2005-11-08 23:43 ]
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-11-07 01:54
参考になれば幸いです。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=12867&forum=12

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
season
常連さん
会議室デビュー日: 2004/06/27
投稿数: 25
投稿日時: 2005-11-07 08:16

package study.struts.model.biz;

import java.sql.SQLException;
import java.util.ResourceBundle;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;

public class DataSourceFactory {

/** DataSourceオブジェクト */
private static DataSource ds = null;

/** リソースバンドル */
private static ResourceBundle bundle =
ResourceBundle.getBundle("study.struts.model.biz.datasource");
// JNDI名をリソースバンドルより取得
private static final String jndiName = bundle.getString("jndi.name");

/**
* DataSourceオブジェクトを返します。
* @return DataSourceオブジェクト
* @throws Exception
*/
public static synchronized DataSource getDataSource()
throws SQLException, NamingException {
if (ds == null) {
Context ctx = null;
try {
ctx = new InitialContext();
ds = (DataSource) ctx.lookup(jndiName);
//ds = (DataSource) ctx.lookup("java:comp/env/jdbc/webdb");
} finally {
if (ctx != null) {
ctx.close();
}
}
}
return ds;
}

}

ソースファイルではこのようにして、datasource.propertiesファイルには
jndi.name = java:comp/env/jdbc/webdb

と記述していますが、それでもエラーがでてしまいます。何がいけないのかわからなくて困っています。
T2
常連さん
会議室デビュー日: 2002/02/20
投稿数: 37
投稿日時: 2005-11-07 09:23
「server.xmlの<Server>タグの下に」とありますが、これを
server.xmlの<GlobalNamingResources>タグの内側に書いてみてはどうでしょうか?
season
常連さん
会議室デビュー日: 2004/06/27
投稿数: 25
投稿日時: 2005-11-07 22:46
<GlobalNamingResources>タグの中に入れて実行してみましたが、やはりできませんでした。同じエラーが出ています。どこがいけないのでしょうか。

[ メッセージ編集済み 編集者: season 編集日時 2005-11-08 21:48 ]
T2
常連さん
会議室デビュー日: 2002/02/20
投稿数: 37
投稿日時: 2005-11-11 03:04
コンテキスト設定ファイルに
name="webdb"
と記述し、
web.xmlの<resourse-ref>に
<res-ref-name>webdb</res-ref-name>
と書いたなら、
アプリケーションからは
java:comp/env/jdbc/webdb
ではなくて
java:comp/env/webdb
という参照名でLookupします。

また、server.xmlに"webdb"という名前のリソースの設定が
複数存在するのもNGです。ひとつにまとめましょう。
はしもと
大ベテラン
会議室デビュー日: 2003/02/05
投稿数: 182
投稿日時: 2005-11-11 18:24
FAQ です。
5.5 からは ResourceParams 要素は無く、全て Resource 要素で指定します。
http://tomcat.apache.org/tomcat-5.5-doc/jndi-datasource-examples-howto.html
season
常連さん
会議室デビュー日: 2004/06/27
投稿数: 25
投稿日時: 2005-11-12 15:55
jndi.name = java:comp/env/webdb でlookupし、

web.xmlは上記の定義のとおり、
server.xmlはTomcat5.5.9のデフォルトのままで何もいじらずに、

コンテキストファイル(sms.xml)に
<Context path="/" reloadable="true" docBase="c:/sms/sms" workDir="c:/sms/sms/work">
<Resource name="webdb" auth="Container" type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000"
username="root" password="test" driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/webdb?autoReconnect=true&amp;characterEncoding=SJIS"/>
<ResourceLink name="jdbc/webdb" global="webdb" type="javax.sql.DataSource" />
</Context>

って定義したら、ドライバエラーが解消されました!どうもありがとうございました
1

スキルアップ/キャリアアップ(JOB@IT)