2014-09-17 10 views
7

Sto cercando di integrare Spring e Hibernate con mysql. Ho creato un semplice progetto java e un pacchetto con 3 classi, un file context.xml dell'applicazione e un hbm.xml per il mapping. Ma dopo l'esecuzione, ottengo questo errore:Eccezione java.lang.ClassNotFoundException: org.apache.commons.dbcp.BasicDataSource

Errore:

Sep 17, 2014 1:27:49 PM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions 
INFO: Loading XML bean definitions from class path resource [applicationContext.xml] 
Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'd' defined in class path resource [applicationContext.xml]: Cannot resolve reference to bean 'template' while setting bean property 'template'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'template' defined in class path resource [applicationContext.xml]: Cannot resolve reference to bean 'mysessionFactory' while setting bean property 'sessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mysessionFactory' defined in class path resource [applicationContext.xml]: Cannot resolve reference to bean 'dataSource' while setting bean property 'dataSource'; nested exception is org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [org.apache.commons.dbcp.BasicDataSource] for bean with name 'dataSource' defined in class path resource [applicationContext.xml]; nested exception is java.lang.ClassNotFoundException: org.apache.commons.dbcp.BasicDataSource 
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:329) 
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1417) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1158) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:296) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:293) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) 
    at com.javaspringhibernate.InsertTest.main(InsertTest.java:14) 
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'template' defined in class path resource [applicationContext.xml]: Cannot resolve reference to bean 'mysessionFactory' while setting bean property 'sessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mysessionFactory' defined in class path resource [applicationContext.xml]: Cannot resolve reference to bean 'dataSource' while setting bean property 'dataSource'; nested exception is org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [org.apache.commons.dbcp.BasicDataSource] for bean with name 'dataSource' defined in class path resource [applicationContext.xml]; nested exception is java.lang.ClassNotFoundException: org.apache.commons.dbcp.BasicDataSource 
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:329) 
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1417) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1158) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:296) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:293) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) 
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323) 
    ... 10 more 
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mysessionFactory' defined in class path resource [applicationContext.xml]: Cannot resolve reference to bean 'dataSource' while setting bean property 'dataSource'; nested exception is org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [org.apache.commons.dbcp.BasicDataSource] for bean with name 'dataSource' defined in class path resource [applicationContext.xml]; nested exception is java.lang.ClassNotFoundException: org.apache.commons.dbcp.BasicDataSource 
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:329) 
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1417) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1158) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:296) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:293) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) 
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323) 
    ... 20 more 
Caused by: org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [org.apache.commons.dbcp.BasicDataSource] for bean with name 'dataSource' defined in class path resource [applicationContext.xml]; nested exception is java.lang.ClassNotFoundException: org.apache.commons.dbcp.BasicDataSource 
    at org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1281) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:435) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:296) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:293) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) 
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323) 
    ... 30 more 
Caused by: java.lang.ClassNotFoundException: org.apache.commons.dbcp.BasicDataSource 
    at java.net.URLClassLoader$1.run(Unknown Source) 
    at java.net.URLClassLoader$1.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(Unknown Source) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
    at org.springframework.util.ClassUtils.forName(ClassUtils.java:257) 
    at org.springframework.beans.factory.support.AbstractBeanDefinition.resolveBeanClass(AbstractBeanDefinition.java:416) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doResolveBeanClass(AbstractBeanFactory.java:1302) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1273) 
    ... 36 more 

Questa è la Employee.java file di

package com.javaspringhibernate; 

public class Employee { 
    private int id; 
    private String name; 
    private float salary; 
    public int getId() { 
     return id; 
    } 
    public void setId(int id) { 
     this.id = id; 
    } 
    public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 
    public float getSalary() { 
     return salary; 
    } 
    public void setSalary(float salary) { 
     this.salary = salary; 
    } 
    public Employee() { 
     super(); 
     // TODO Auto-generated constructor stub 
    } 

    //getters and setters 


    } 

Questa è la InsertTest.java

package com.javaspringhibernate; 

import org.springframework.beans.factory.BeanFactory; 
import org.springframework.beans.factory.xml.XmlBeanFactory; 
import org.springframework.core.io.ClassPathResource; 
import org.springframework.core.io.Resource; 

public class InsertTest { 
public static void main(String[] args) { 

    Resource r=new ClassPathResource("applicationContext.xml"); 
    BeanFactory factory=new XmlBeanFactory(r); 

    EmployeeDao dao=(EmployeeDao)factory.getBean("d"); 

    Employee e=new Employee(); 
    e.setId(114); 
    e.setName("megha"); 
    e.setSalary(50000); 

    dao.saveEmployee(e); 

} 
} 

Questa è la EmployeeDao.java

package com.javaspringhibernate; 

import org.springframework.orm.hibernate3.HibernateTemplate; 

public class EmployeeDao { 
HibernateTemplate template; 
public void setTemplate(HibernateTemplate template) { 
    this.template = template; 
} 

public void saveEmployee(Employee e){ 
    template.save(e); 
} 

public void updateEmployee(Employee e){ 
    template.update(e); 
} 

public void deleteEmployee(Employee e){ 
    template.delete(e); 
} 
} 

Questa è la employee.hbm.xml

<?xml version='1.0' encoding='utf-8'?> 
<!DOCTYPE hibernate-configuration PUBLIC 
"-//Hibernate/Hibernate Configuration DTD//EN" 
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> 


<hibernate-mapping> 
<class name="com.javaspringhibernate.Employee" table="emp558"> 
      <id name="id"> 
      <generator class="assigned"></generator> 
      </id> 

      <property name="name"></property> 
      <property name="salary"></property> 
</class> 

</hibernate-mapping> 

Questa è la applicationContext.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:p="http://www.springframework.org/schema/p" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> 

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" > 
    <property name="driverClassName" value="com.mysql.jdbc.Driver" /> 
    <property name="url" value="jdbc:mysql://localhost:3306/userdb" /> 
    <property name="username" value="root" /> 
    <property name="password" value="root" /> 

</bean> 

    <bean id="mysessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> 
     <property name="dataSource" ref="dataSource"></property> 

     <property name="mappingResources"> 
     <list> 
     <value>employee.hbm.xml</value> 
     </list> 
     </property> 

     <property name="hibernateProperties"> 
      <props> 
       <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> 
       <prop key="hibernate.hbm2ddl.auto">update</prop> 
       <prop key="hibernate.show_sql">true</prop> 

      </props> 
     </property> 
    </bean> 

    <bean id="template" class="org.springframework.orm.hibernate3.HibernateTemplate"> 
    <property name="sessionFactory" ref="mysessionFactory"></property> 
    </bean> 

    <bean id="d" class="com.javaspringhibernate.EmployeeDao"> 
    <property name="template" ref="template"></property> 
    </bean> 

</beans> 
+0

avete risolto questo problema? se sì, come hai fatto? – Xstian

risposta

3

Sembra che jv m non è riuscito a trovare la classe org.apache.commons.dbcp.BasicDataSource.Per favore, controlla il percorso della classe o nel percorso di costruzione del progetto che commons-dbcp.jar sia presente o meno.

Se sì allora, aprite gli commons-dbcp.jar e verificare che particolare classe (org.apache.commons.dbcp.BasicDataSource) è disponibile o non

18

Il tuo problema è Caused by: java.lang.ClassNotFoundException: org.apache.commons.dbcp.BasicDataSource su "dataSource" fagioli .

Se utilizzando Maven aggiungere questa dipendenza

<dependency> 
    <groupId>commons-dbcp</groupId> 
    <artifactId>commons-dbcp</artifactId> 
    <version>1.2.2</version> 
</dependency> 

altro aggiungere questa libreria commons-dbcp-jar nel classpath.

+2

maven: http://mvnrepository.com/artifact/commons-dbcp/commons-dbcp – Timeless

5

se si utilizza la molla 4+ è necessario utilizzare SessionFactory. Inoltre hai bisogno di questi vasi: commons-pool, commons-dbcp. Questo è un esempio di codice che ho fatto, spero che aiuta

public class EmployeeDAOImpl implements EmployeeDAO{ 
 
\t 
 
\t private SessionFactory sessionFactory; 
 
\t 
 
\t @Override 
 
\t public void saveEmployee(Employee e) { 
 
\t \t Session session = this.sessionFactory.openSession(); 
 
\t \t Transaction tx = session.beginTransaction(); 
 
\t \t session.persist(e); 
 
\t \t tx.commit(); 
 
\t \t session.close(); 
 
\t } 
 

 
\t public SessionFactory getSessionFactory() { 
 
\t \t return sessionFactory; 
 
\t } 
 

 
\t public void setSessionFactory(SessionFactory sessionFactory) { 
 
\t \t this.sessionFactory = sessionFactory; 
 
\t } 
 

 
}

applicationContext.xml 
 

 
<?xml version="1.0" encoding="UTF-8"?> 
 
<beans 
 
\t xmlns="http://www.springframework.org/schema/beans" 
 
\t xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 
\t xmlns:p="http://www.springframework.org/schema/p" 
 
\t xsi:schemaLocation="http://www.springframework.org/schema/beans 
 
     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> 
 

 
\t <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> 
 
\t \t <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" /> 
 
\t \t <property name="url" value="jdbc:oracle:[email protected]:..." /> 
 
\t \t <property name="username" value="admin" /> 
 
\t \t <property name="password" value="admin" /> 
 
\t </bean> 
 
\t 
 
\t <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
 
\t \t <property name="dataSource" ref="dataSource"></property> 
 
\t \t 
 
\t \t <property name="mappingResources"> 
 
\t \t <list> 
 
\t \t \t <value>employee.hbm.xml</value> 
 
\t \t </list> 
 
\t \t </property> 
 
\t \t 
 
\t \t <property name="hibernateProperties"> 
 
\t \t \t <props> 
 
\t \t \t \t <prop key="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</prop> 
 
\t \t \t \t <prop key="hibernate.hbm2ddl.auto">update</prop> 
 
\t \t \t \t <prop key="hibernate.show_sql">true</prop> 
 
\t \t \t \t 
 
\t \t \t </props> 
 
\t \t </property> 
 
\t </bean> 
 
\t 
 
\t \t 
 
\t <bean id="d" class="com.orm.EmployeeDAOImpl"> 
 
\t \t <property name="sessionFactory" ref="sessionFactory"></property> 
 
\t </bean> 
 
\t 
 
</beans>

0

springframework.jdbc.datasource.DriverManagerDataSource invece di org.apache.commons.dbcp.BasicDataSource in applicationContext.xml file. Funziona bene.

-1

cambiamento org.apache.commons.dbcp.BasicDataSource a org.apache.commons.dbcp2.BasicDataSource, funziona bene

Problemi correlati