2011-01-25 9 views
5

新しいTomcat 7.0 JDBC接続プールとMySqlを使用しようとしています。 hereによれば、最新のtomcat-jdbc.jarをTomcat 6.0環境のtomcat/libディレクトリに置くことができます。これが私のやり方です。Tomcat 7.0 JDBC接続プールとMySqlを持つSQLException

私はウェブの周りの例あたりのデータソースを初期化し、インスタンス化する春を使用しています:

<bean id="myDataSource" class="org.apache.tomcat.jdbc.pool.DataSource" destroy-method="close" 
p:driverClassName="${driver_class}" 
p:url="${url}" 
p:username="${username?root}" 
p:password="${password}" 
p:initialSize="10" 
p:initSQL="SELECT DTS FROM DT_TM_TS FOR READ ONLY WITH UR" 
p:minIdle="10" 
p:maxIdle="100" 
p:maxActive="100" 
p:maxWait="6000" 
p:jmxEnabled="true" 
p:jdbcInterceptors="org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer" 
p:removeAbandoned="true" 
p:removeAbandonedTimeout="60" 
p:logAbandoned="true" 
p:testOnBorrow="true" 
p:testOnReturn="false" 
p:testWhileIdle="false" 
p:useEquals="false" 
p:fairQueue="false" 
p:timeBetweenEvictionRunsMillis="30000" 
p:minEvictableIdleTimeMillis="30000" 
p:validationInterval="1800000" 
p:validationQuery="SELECT DTS FROM DT_TM_TS FOR READ ONLY WITH UR" 
/> 

しかし、私はそれがこの例外をスローDBに接続しようとすると:

java.sql.SQLException: "com.mysql.jdbc.Driver" 
    at org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:243) 
    at org.apache.tomcat.jdbc.pool.PooledConnection.connect(PooledConnection.java:176) 
    at org.apache.tomcat.jdbc.pool.ConnectionPool.createConnection(ConnectionPool.java:647) 
    at org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:589) 
    at org.apache.tomcat.jdbc.pool.ConnectionPool.init(ConnectionPool.java:452) 
    at org.apache.tomcat.jdbc.pool.ConnectionPool.<init>(ConnectionPool.java:130) 
    at org.apache.tomcat.jdbc.pool.DataSourceProxy.createPool(DataSourceProxy.java:99) 
    at org.apache.tomcat.jdbc.pool.DataSourceProxy.getConnection(DataSourceProxy.java:110) 
    at org.hibernate.ejb.connection.InjectedDataSourceConnectionProvider.getConnection(InjectedDataSourceConnectionProvider.java:46) 
    at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:111) 
    at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2101) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1325) 
    at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:867) 
    at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:669) 
    at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:132) 
    at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:225) 
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:308) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1477) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1417) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190) 
    at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.findDefaultEntityManagerFactory(PersistenceAnnotationBeanPostProcessor.java:529) 
    at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.findEntityManagerFactory(PersistenceAnnotationBeanPostProcessor.java:495) 
    at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor$PersistenceElement.resolveEntityManager(PersistenceAnnotationBeanPostProcessor.java:656) 
    at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor$PersistenceElement.getResourceToInject(PersistenceAnnotationBeanPostProcessor.java:629) 
    at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:147) 
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:84) 
    at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.postProcessPropertyValues(PersistenceAnnotationBeanPostProcessor.java:338) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1074) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:580) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:895) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:425) 
    at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:276) 
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:197) 
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47) 
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4135) 
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4630) 
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045) 
    at org.apache.catalina.core.StandardHost.start(StandardHost.java:785) 
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045) 
    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:445) 
    at org.apache.catalina.core.StandardService.start(StandardService.java:519) 
    at org.apache.catalina.core.StandardServer.start(StandardServer.java:710) 
    at org.apache.catalina.startup.Catalina.start(Catalina.java:581) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289) 
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414) 
Caused by: java.lang.ClassNotFoundException: "com.mysql.jdbc.Driver" 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:248) 
    at java.lang.Class.forName0(Native Method) 
    at java.lang.Class.forName(Class.java:247) 
    at org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:236) 
    ... 59 more 

私はWebapp WEB-INF/libとtomcat/libの両方にmysql-connector-java-5.1.13-bin.jarがあります。私は、persistence.xml(DataSource/connection poolingなし)にドライバの詳細を指定して細かく接続できます。

+0

あなたは 'resource'タグの' factory'属性も更新しました(データソースの定義)。また、このスタックトレースは完全ではないようです(それは?)。 –

+0

いいえ、DataSourceはTomcatのDataSourceFactoryによって作成されていないため、Springによって作成されています。今私はTomcat 6のWebコンテナで動作していますが、問題は残ります。 –

答えて

0

は、Tomcat 6.0では、私は、共通の/ libに/ EXT

しかし、そのための検索パスがそこに財産common.loaderをチェックアウトcatalina.propertiesに設定されているに私のJDBCドライバを配置する必要があります。 common/libがそこにリストされていることを確認してください。

+0

これはTomcat 5.5とTomcat 6.0の間で変更されました。 6.0では '/ common'はもうありません。 6.0の 'common.loader'はデフォルトで' $ {catalina.home}/lib、$ {catalina.home}/lib/*になります。jar'は完全に細かく、 '/ lib'にJARを入れる必要があることを示しています。 – BalusC

2

Tomcat 7.0.20.BとMaven 3でSpring 3.1、Hibernate 4.0、VMware vFabric tc Serverデベロッパーエディション2.6.1を使用しています.Mavenによって管理されているコネクタを使用しても同じ問題が発生しました。

Infactは私が

driverClassName

(String)を使用する JDBCドライバの完全修飾Javaクラス名を見つけたmanualを読みました。 ドライバーは、Tomcat-jdbc.jarと同じ クラスローダからアクセスできる必要があり

だから私は、中にあるMySQLコネクタ(mysqlの-コネクタのjava-5.1.18-bin.jarを)を追加することで解決libディレクトリに移動し、提供されるコネクタパッケージのスコープをMavenに設定します(Tomcatの場合はvfabric-tc-server-developer-2.6.1.RELEASE/tomcat-7.0.20.B.RELEASE/lib)。

6

実際には、Springで非常に簡単な回避策があります。 Tomcat接続プールでデータベース接続を作成し、クラスローダーの不具合のために失敗させる代わりに、Springがそれを作成して接続プールへの参照を渡すようにします。

<!-- Data source template for use in the connection pool. --> 
<bean id="dataSourceTemplate" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
    <property name="driverClassName" value="${jdbc.driver}" /> 
    <property name="url" value="${jdbc.url}" /> 
    <property name="username" value="${jdbc.username}" /> 
    <property name="password" value="${jdbc.password}" /> 
</bean> 

<!-- Connection pool as data source. --> 
<bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource" destroy-method="close"> 
    <!-- Refer to a separately created bean as a data source template to work around a quirk of Tomcat's class loader. --> 
    <property name="dataSource" ref="dataSourceTemplate" /> 
    ... 
</bean> 

次に、接続プールは実際に必要な数の追加接続を作成するためのテンプレートとしてデータベース接続を使用します。

tomcat/libを使いこなす必要はありません。これはアクセス権がない場合もあります。

関連する問題