2011-03-14 22 views
4

Commons-dbcpを使用して、小さなTom Webアプリケーション内のMySQLデータベースの接続プーリングを行います。このファイルは、ローカルTomcat 6.0.28コンテナ(WARファイルとしてUbuntuパッケージマネージャ)をSun 1.6 JDKを使用して実行します。このデプロイは、tomcat:redeployのゴールでtomcat-maven-plugin-1.1を使用してMavenから実行されます。 MySQL Connector/J jarはwebappのWEB-INF/libディレクトリにあります。Tomcat webappは再デプロイ後にMySQLドライバを使用できません

初めてTomcatを起動した後にWebアプリケーションが読み込まれると、すべて正常に動作します。しかし、webappを再デプロイすると、Tomcatがwebappのデプロイを解除するときに、JDBCドライバが登録解除されていないという不満があります。

code>SEVERE: The web application [/taskrun] registered the JBDC driver [com.mysql.jdbc.Driver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered. 
Mar 11, 2011 11:29:46 AM org.apache.catalina.loader.WebappClassLoader clearReferencesJdbc 

TomcatがWebアプリケーションを再起動するときに、それはありません、適切なドライバ不満、データベースへの接続に失敗した:私は手動で再デプロイした後、Tomcatを再起動した場合

org.apache.commons.dbcp.SQLNestedException: Cannot create JDBC driver of class 'com.mysql.jdbc.jdbc2.optional.MysqlDataSource' for connect URL 'jdbc:mysql://127.0.0.1:3306/testdb?autoReconnect=true' 
    at org.apache.commons.dbcp.BasicDataSource.createConnectionFactory(BasicDataSource.java:1452) 
    at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1371) 
    at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044) 
    at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:113) 
    at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:79) 
    ... 14 more 
Caused by: java.sql.SQLException: No suitable driver 
    at java.sql.DriverManager.getDriver(DriverManager.java:279) 
    at org.apache.commons.dbcp.BasicDataSource.createConnectionFactory(BasicDataSource.java:1437) 
    ... 18 more 

すべてが正常に動作します。

クラスがロードされたときにMySQLドライバがDriverManagerに登録されていますが、com.mysql.jdbc.Driverクラスがwebappの再デプロイ時に再ロードされていないようです。 TomcatのWebappClassLoaderは、Webアプリケーションのリロード時にWEB-INF/libディレクトリからクラスをリロードすることになっていますか、またはそれらをデプロイ間でメモリに保持していますか?または、展開後にMySQLドライバを自分で再登録する必要がありますか?

また、ドライバjarをTomcatのcommons/libディレクトリに移動することを提案している記事がたくさんありますが、WARファイルの外部にできるだけ依存しないようにしたいと考えています。

ありがとうございました。

答えて

2

通常、JDBCドライバをWEB-INF/libに配置するのは悪い考えです。通常、JDBCドライバは、デプロイされたすべてのアプリケーション間で共有され、適切な構成でグローバルなTomcat構成(Tomcat 'lib'に配置)の一部である必要があります。非常に具体的な理由がない限り、アプリケーションを更新するたびにドライバを再配備しないでください。

+0

ありがとうございました! jdbcドライバをWEB-INF/libの両方に置き、実行時にtomcat/sharedがwebappの競合を引き起こしていました。あなたのアドバイスは結局私の問題を解決しました! – hightechfool

関連する問題