Spring 3 + Hibernate 4 + C3P0: java.lang.NoSuchMethodError: org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.addAnnotatedClass -
my webapp works , wanna add c3p0 webapp manage connection pooling. seems ok following error leading bunch of exceptions:
java.lang.nosuchmethoderror: org.springframework.orm.hibernate4.localsessionfactorybuilder.addannotatedclass(ljava/lang/class;)lorg/hibernate/cfg/configuration; @ org.springframework.orm.hibernate4.localsessionfactorybuilder.addannotatedclasses(localsessionfactorybuilder.java:165) @ org.springframework.orm.hibernate4.localsessionfactorybean.afterpropertiesset(localsessionfactorybean.java:341) @ org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.invokeinitmethods(abstractautowirecapablebeanfactory.java:1541) @ org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.initializebean(abstractautowirecapablebeanfactory.java:1479) ... 86 more
here's configuration files:
spring-config.xml
<?xml version="1.0" encoding="utf-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context" xsi:schemalocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <context:component-scan base-package="com.mycompany.myproject.business" /> <context:annotation-config /> <!-- beans declaration --> <bean id="infantinfo" class="com.mycompany.myproject.dataaccess.model.infantinfo"/> <bean id="user" class="com.mycompany.myproject.dataaccess.model.user"/> <!-- service declaration --> <bean id="infantinfoboimpl" class="com.mycompany.myproject.business.bo.impl.infantinfoboimpl"> <property name="infantinfodao" ref="infantinfodaoimpl" /> </bean> <bean id="userboimpl" class="com.mycompany.myproject.business.bo.impl.userboimpl"> <property name="userdao" ref="userdaoimpl" /> </bean> <!-- dao declaration --> <bean id="infantinfodaoimpl" class="com.mycompany.myproject.dataaccess.dao.impl.infantinfodaoimpl"> <property name="sessionfactory" ref="sessionfactory" /> </bean> <bean id="userdaoimpl" class="com.mycompany.myproject.dataaccess.dao.impl.userdaoimpl"> <property name="sessionfactory" ref="sessionfactory" /> </bean> </beans>
hibernate-config.xml
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemalocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd"> <bean id="propertyconfigurer" class="org.springframework.beans.factory.config.propertyplaceholderconfigurer"> <property name="locations"> <list> <value>/web-inf/database.properties</value> </list> </property> </bean> <bean id="datasource" class="com.mchange.v2.c3p0.combopooleddatasource"> <property name="driverclass" value="${jdbc.driver}" /> <property name="jdbcurl" value="${jdbc.url}" /> <property name="user" value="${jdbc.user}" /> <property name="password" value="${jdbc.password}" /> <!-- these c3p0 properties --> <property name="initialpoolsize" value="${initialpoolsize}"/> <property name="acquireincrement" value="${acquireincrement}" /> <property name="minpoolsize" value="${minpoolsize}" /> <property name="maxpoolsize" value="${maxpoolsize}" /> </bean> <bean id="sessionfactory" class="org.springframework.orm.hibernate4.localsessionfactorybean"> <property name="datasource" ref="datasource" /> <property name="annotatedclasses"> <list> <value>com.mycompany.myproject.dataaccess.model.infantinfo</value> <value>com.mycompany.myproject.dataaccess.model.user</value> </list> </property> <property name="hibernateproperties"> <props> <prop key="hibernate.dialect">org.hibernate.dialect.mysql5dialect</prop> <prop key="hibernate.show_sql">true</prop> </props> </property> </bean> <tx:annotation-driven transaction-manager="transactionmanager"/> <bean id="transactionmanager" class="org.springframework.orm.hibernate4.hibernatetransactionmanager"> <property name="sessionfactory" ref="sessionfactory"/> </bean>
database.properties
jdbc.driver=com.mysql.jdbc.driver jdbc.url=jdbc:mysql://localhost:3306/mydb?useunicode=true&characterencoding=utf-8 jdbc.user=user jdbc.password=password initialpoolsize=10 acquireincrement=10 minpoolsize=10 maxpoolsize=50
pom.xml
<properties> <mysql.version>5.1.25</mysql.version> <log4j.version>1.2.17</log4j.version> <jpa.version>2.0.beta-20090815</jpa.version> <spring.version>3.2.3.release</spring.version> <commons-dbcp.version>1.4</commons-dbcp.version> <hibernate.version>4.2.2.final</hibernate.version> <commons-codec.version>1.9</commons-codec.version> <hibernate-c3p0.version>3.6.3.final</hibernate-c3p0.version> <endorsed.dir>${project.build.directory}/endorsed</endorsed.dir> <project.build.sourceencoding>utf-8</project.build.sourceencoding> <hibernate-commons-annotations.version>3.3.0.ga</hibernate-commons-annotations.version> </properties> <dependencies> <dependency> <groupid>org.glassfish.metro</groupid> <artifactid>webservices-rt</artifactid> <version>2.3</version> </dependency> <dependency> <groupid>javax</groupid> <artifactid>javaee-web-api</artifactid> <version>7.0</version> <scope>provided</scope> </dependency> <!-- spring --> <dependency> <groupid>org.springframework</groupid> <artifactid>spring-core</artifactid> <version>${spring.version}</version> </dependency> <dependency> <groupid>org.springframework</groupid> <artifactid>spring-context</artifactid> <version>${spring.version}</version> </dependency> <dependency> <groupid>org.springframework</groupid> <artifactid>spring-jdbc</artifactid> <version>${spring.version}</version> </dependency> <dependency> <groupid>org.springframework</groupid> <artifactid>spring-orm</artifactid> <version>${spring.version}</version> </dependency> <dependency> <groupid>org.springframework</groupid> <artifactid>spring-tx</artifactid> <version>${spring.version}</version> </dependency> <dependency> <groupid>org.springframework</groupid> <artifactid>spring-expression</artifactid> <version>${spring.version}</version> </dependency> <dependency> <groupid>commons-dbcp</groupid> <artifactid>commons-dbcp</artifactid> <version>${commons-dbcp.version}</version> </dependency> <!--spring mvc--> <dependency> <groupid>org.springframework</groupid> <artifactid>spring-web</artifactid> <version>${spring.version}</version> </dependency> <dependency> <groupid>org.springframework</groupid> <artifactid>spring-webmvc</artifactid> <version>${spring.version}</version> </dependency> <!--hibernate--> <dependency> <groupid>org.hibernate</groupid> <artifactid>hibernate-core</artifactid> <version>${hibernate.version}</version> </dependency> <dependency> <groupid>org.hibernate.java-persistence</groupid> <artifactid>jpa-api</artifactid> <version>${jpa.version}</version> </dependency> <dependency> <groupid>org.hibernate</groupid> <artifactid>hibernate-c3p0</artifactid> <version>${hibernate-c3p0.version}</version> </dependency> <dependency> <groupid>org.hibernate</groupid> <artifactid>hibernate-commons-annotations</artifactid> <version>${hibernate-commons-annotations.version}</version> </dependency> <!--mysql--> <dependency> <groupid>mysql</groupid> <artifactid>mysql-connector-java</artifactid> <version>${mysql.version}</version> </dependency> <!--apache commons codec--> <dependency> <groupid>commons-codec</groupid> <artifactid>commons-codec</artifactid> <version>${commons-codec.version}</version> </dependency> <!--log4j--> <dependency> <groupid>log4j</groupid> <artifactid>log4j</artifactid> <version>${log4j.version}</version> </dependency> </dependencies>
it's somehow confusing... don't know reason ....
i appreciate comments.
edit:
maven dependency tree:
com.mycompany:myproject:war:1.0-snapshot +- org.glassfish.metro:webservices-rt:jar:2.3:compile | \- org.glassfish.metro:webservices-api:jar:2.3:compile | \- javax.annotation:javax.annotation-api:jar:1.2-b03:runtime +- javax:javaee-web-api:jar:7.0:provided +- org.springframework:spring-core:jar:3.2.3.release:compile | \- commons-logging:commons-logging:jar:1.1.1:compile +- org.springframework:spring-context:jar:3.2.3.release:compile | +- org.springframework:spring-aop:jar:3.2.3.release:compile | \- org.springframework:spring-beans:jar:3.2.3.release:compile +- org.springframework:spring-jdbc:jar:3.2.3.release:compile +- org.springframework:spring-orm:jar:3.2.3.release:compile | \- aopalliance:aopalliance:jar:1.0:compile +- org.springframework:spring-tx:jar:3.2.3.release:compile +- org.springframework:spring-expression:jar:3.2.3.release:compile +- commons-dbcp:commons-dbcp:jar:1.4:compile | \- commons-pool:commons-pool:jar:1.5.4:compile +- org.springframework:spring-web:jar:3.2.3.release:compile +- org.springframework:spring-webmvc:jar:3.2.3.release:compile +- org.hibernate:hibernate-core:jar:4.2.2.final:compile | +- antlr:antlr:jar:2.7.7:compile | +- org.jboss.logging:jboss-logging:jar:3.1.0.ga:compile | +- dom4j:dom4j:jar:1.6.1:compile | +- org.jboss.spec.javax.transaction:jboss-transaction-api_1.1_spec:jar:1.0.1.final:compile | +- org.hibernate.javax.persistence:hibernate-jpa-2.0-api:jar:1.0.1.final:compile | +- org.hibernate.common:hibernate-commons-annotations:jar:4.0.2.final:compile | \- org.javassist:javassist:jar:3.15.0-ga:compile +- org.hibernate.java-persistence:jpa-api:jar:2.0.beta-20090815:compile +- org.hibernate:hibernate-c3p0:jar:3.6.3.final:compile | \- org.slf4j:slf4j-api:jar:1.6.1:compile +- org.hibernate:hibernate-commons-annotations:jar:3.3.0.ga:compile | +- org.hibernate:hibernate:jar:3.2.1.ga:compile | | +- net.sf.ehcache:ehcache:jar:1.2.3:compile | | +- javax.transaction:jta:jar:1.1:compile | | +- asm:asm-attrs:jar:1.5.3:compile | | +- cglib:cglib:jar:2.1_3:compile | | +- asm:asm:jar:1.5.3:compile | | \- commons-collections:commons-collections:jar:2.1.1:compile | \- javax.persistence:persistence-api:jar:1.0:compile +- c3p0:c3p0:jar:0.9.1.2:compile +- mysql:mysql-connector-java:jar:5.1.25:compile +- commons-codec:commons-codec:jar:1.9:compile \- log4j:log4j:jar:1.2.17:compile
you're mixing hibernate dependencies:
- the spring-orm comes hibernate version (e.g. 3.3.2.ga)
- hibernate-core 4.2.2.final
- hibernate-c3p0 3.6.3.final
- the jpa version 2.0, supported hibernate 3.5+
run mvn:dependency:tree
, make sure use single spring version (e.g. 3.2.3.release) , single hibernate version (e.g. 3.6.3.final).
Comments
Post a Comment