2014-02-03 6 views
1

Я не могу создать DATASOURCE ведро, как C3P0 connectionPool с Spring, Hibernate и MySqlне может создать DATASOURCE ведро с Spring, Hibernate и C3P0

Мои ошибки:

java.lang.NoSuchMethodError: com.mchange.v2.c3p0.impl.C3P0Defaults.dataSourceName()Ljava/lang/String; 
    at com.mchange.v2.c3p0.impl.PoolBackedDataSourceBase.<init>(PoolBackedDataSourceBase.java:49) 
    at com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource.<init>(AbstractPoolBackedDataSource.java:74) 
    at com.mchange.v2.c3p0.ComboPooledDataSource.<init>(ComboPooledDataSource.java:134) 
    at com.mchange.v2.c3p0.ComboPooledDataSource.<init>(ComboPooledDataSource.java:130) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526) 
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:147) 

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManager' defined in ServletContext resource [/WEB-INF/dispatcher-servlet.xml]: Cannot resolve reference to bean 'sessionFactory' while setting bean property 'sessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/dispatcher-servlet.xml]: Cannot resolve reference to bean 'dataSource' while setting bean property 'dataSource'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in ServletContext resource [/WEB-INF/dispatcher-servlet.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.mchange.v2.c3p0.ComboPooledDataSource]: Constructor threw exception; nested exception is java.lang.NoSuchMethodError: com.mchange.v2.c3p0.impl.C3P0Defaults.dataSourceName()Ljava/lang/String; 

Моя весна конфигурации:

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> 
    <property name="driverClass" value="com.mysql.jdbc.Driver" /> 
    <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/screenshots" /> 
    <property name="user" value="root" /> 
    <property name="password" value="root" /> 

    <property name="acquireIncrement" value="1"></property> 
    <property name="minPoolSize" value="5" /> 
    <property name="maxPoolSize" value="10" /> 
    <property name="maxIdleTime" value="1800" /> 
</bean> 

<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean" lazy-init="false" autowire="default"> 
    <property name="dataSource"> 
     <ref local="dataSource" /> 
    </property> 
    <property name="packagesToScan" value="com.webscreenshots.bean"/> 
    <property name="hibernateProperties"> 
     <props> 
      <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> 
      <prop key="hibernate.max_fetch_depth">3</prop> 
      <prop key="hibernate.jdbc.fetch_size">50</prop> 
      <prop key="hibernate.jdbc.batch_size">10</prop> 
      <prop key="hibernate.show_sql">true</prop> 
      <prop key="hibernate.hbm2ddl.auto">update</prop> 
     </props> 
    </property> 
</bean> 

<tx:annotation-driven /> 
<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager"> 
    <property name="sessionFactory" ref="sessionFactory" /> 
</bean> 

и мой POM зависимостей:

<dependency> 
      <groupId>mysql</groupId> 
      <artifactId>mysql-connector-java</artifactId> 
      <version>5.1.28</version> 
     </dependency> 

     <dependency> 
      <groupId>com.mchange</groupId> 
      <artifactId>c3p0</artifactId> 
      <version>0.9.2.1</version> 
     </dependency> 

     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-c3p0</artifactId> 
      <version>4.3.0.Final</version> 
     </dependency> 

     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-core</artifactId> 
      <version>4.3.0.Final</version> 
     </dependency> 

Я использую Spring 3.2.

Это типичная конфигурация, и я не имею в виду, что происходит не так. Не могли бы вы дать мне несколько советов, пожалуйста?

ответ

1

Очень вероятно, что у вас есть старая версия c3p0, похороненная где-то в CLASSPATH вашего приложения, таким образом, что в сочетании с делегацией ClassLoader привело к смешанным версиям c3p0 в вашей эффективной кодовой базе. Метод, вызов которого вызывает ошибку NoSuchMethod, был добавлен где-то около 0.9.2-pre6 (well prior к той версии, которую, по вашему мнению, вы используете, c3p0 0.9.2.1). Возможно, вы внесли версию 0.9.1.x вместе с вашими зависимыми зависимостями (обратите внимание, что версии, предшествующие c3p0-0.9.2.x, имеют другое название группы, чем более поздние версии), иначе у вас есть неуправляемый файл jar, лежащий где-то.

Зависимости, которые перечислены выше, выглядят хорошо, hibernate-c3p0-4.3.0.Final зависит от той же версии c3p0, которую вы добавили явно. Но вы можете попробовать не добавлять c3p0 явно как зависимость и просто позволить hibernate-c3p0 привести свою версию. Обратите внимание, что версия c3p0, которую вы хотите, была изменена спящей с 4.2.3; если каким-то образом вы приводите зависимости от версий старше, чем у вас могут возникнуть проблемы. Так или иначе, вам нужно понять эффективный CLASSPATH вашего приложения (включая каталоги расширений JVM) и выяснить, где старая версия сосуществует с той версией, которую вы собираетесь использовать.

0

я вещь проблема с вашим acquireIncrement свойством com.mchange.v2.c3p0.ComboPooledDataSource класса должно быть как

<property name="acquireIncrement">1</property> 

ИЛИ

<property name="acquireIncrement" value="1"/> 

пытаются изменить это и запустить приложение снова

Configuring the built-in c3p0 pooling in Hibernate using Spring

надеюсь, что это решит вашу проблему!

Смежные вопросы