- - PR -
MySQL5.0とTomcat5.5.9でDB接続ができない
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 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 ] |
|
投稿日時: 2005-11-07 01:54
参考になれば幸いです。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=12867&forum=12 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 |
|
投稿日時: 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 と記述していますが、それでもエラーがでてしまいます。何がいけないのかわからなくて困っています。 |
|
投稿日時: 2005-11-07 09:23
「server.xmlの<Server>タグの下に」とありますが、これを
server.xmlの<GlobalNamingResources>タグの内側に書いてみてはどうでしょうか? |
|
投稿日時: 2005-11-07 22:46
<GlobalNamingResources>タグの中に入れて実行してみましたが、やはりできませんでした。同じエラーが出ています。どこがいけないのでしょうか。[ メッセージ編集済み 編集者: season 編集日時 2005-11-08 21:48 ] |
|
投稿日時: 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です。ひとつにまとめましょう。 |
|
投稿日時: 2005-11-11 18:24
FAQ です。
5.5 からは ResourceParams 要素は無く、全て Resource 要素で指定します。 http://tomcat.apache.org/tomcat-5.5-doc/jndi-datasource-examples-howto.html |
|
投稿日時: 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&characterEncoding=SJIS"/> <ResourceLink name="jdbc/webdb" global="webdb" type="javax.sql.DataSource" /> </Context> って定義したら、ドライバエラーが解消されました!どうもありがとうございました |
1