2012-04-18 212 views
1

嘿,我嘗試運行此應用程序時出現問題。我沒有收到編譯錯誤,只是運行時錯誤。我想我錯過了一些東西,但我不確定,有人能幫我理解我出錯的地方嗎?從我所看到的applicationContext.xml中的sessionFactory bean沒有被創建。這裏是我的代碼:Spring Maven項目

主要

package com.apress.flexjava.usermanager.business; 

import java.util.List; 
import org.springframework.context.ApplicationContext; 
import org.springframework.context.support.ClassPathXmlApplicationContext; 
import com.apress.flexjava.usermanager.dao.UserDao; 
import com.apress.flexjava.usermanager.model.User; 

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

     ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); 
     UserDao userDao = (UserDao)context.getBean("userDao"); 
     List<User> users = userDao.findAll(); 
     for (User user : users) { 
      System.out.println(user.getForename() + " " + user.getSurname()); 
     } 
    } 
} 

______________________________________________________________________________________ 

userDAO的

package com.apress.flexjava.usermanager.dao; 

import java.util.List; 

import com.apress.flexjava.usermanager.model.User; 

public interface UserDao { 
    List<User> findAll(); 
} 
__________________________________________________________________________________ 

UserDaoSpringJdbcImpl

package com.apress.flexjava.usermanager.dao.jdbc; 

import java.util.List; 
import org.springframework.jdbc.core.simple.ParameterizedBeanPropertyRowMapper; 
import org.springframework.jdbc.core.simple.SimpleJdbcDaoSupport; 
import com.apress.flexjava.usermanager.dao.UserDao; 
import com.apress.flexjava.usermanager.model.User; 

public class UserDaoSpringJdbcImpl extends SimpleJdbcDaoSupport implements UserDao{ 


public List<User> findAll(){ 
    String sql= "SELECT * FROM users"; 
    return getSimpleJdbcTemplate().query(sql, ParameterizedBeanPropertyRowMapper.newInstance(User.class)); 
    } 
} 

____________________________________________________________________________________ 

用戶

package com.apress.flexjava.usermanager.model; 

public class User { 
    private int userid; 
    private String forename; 
    private String surname; 

    public User(){} 

    public User(int userid, String forename, String surname){ 
     this.userid = userid; 
     this.forename = forename; 
     this.surname = surname; 
    } 

    public User(String forename, String surname){ 
     this.forename = forename; 
     this.surname = surname; 
    } 

    public int getUserid() { 
     return userid; 
    } 

    public void setUserid(int userid) { 
     this.userid = userid; 
    } 

    public String getForename() { 
     return forename; 
    } 

    public void setForename(String forename) { 
     this.forename = forename; 
    } 

    public String getSurname() { 
     return surname; 
    } 

    public void setSurname(String surname) { 
     this.surname = surname; 
    } 
} 
_________________________________________________________________________________ 

的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:context="http://www.springframework.org/schema/context" 
    xmlns:jee="http://www.springframework.org/schema/jee" 
    xmlns:lang="http://www.springframework.org/schema/lang" 
    xmlns:p="http://www.springframework.org/schema/p" 
    xmlns:tx="http://www.springframework.org/schema/tx" 
    xmlns:util="http://www.springframework.org/schema/util" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
         http://www.springframework.org/schema/beans/spring-beans-2.5.xsd 
         http://www.springframework.org/schema/context 
         http://www.springframework.org/schema/context/spring-context-2.5.xsd 
         http://www.springframework.org/schema/jee 
         http://www.springframework.org/schema/jee/spring-jee-2.5.xsd 
         http://www.springframework.org/schema/lang 
         http://www.springframework.org/schema/lang/spring-lang-2.5.xsd 
         http://www.springframework.org/schema/tx 
         http://www.springframework.org/schema/tx/spring-tx-2.5.xsd 
         http://www.springframework.org/schema/util 
         http://www.springframework.org/schema/util/spring-util-2.5.xsd"> 

    <!-- @Required processor --> 
    <bean class="org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor" /> 


    <!-- Exception translation bean post processor --> 
    <bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/> 

    <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="locations"> 
    <list> 
    <value>classpath:jdbc.properties</value> 
    </list> 
    </property> 
    </bean> 

    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
    <property name= "driverClassName" value="${jdbc.driverClassName}"/> 
    <property name= "url" value="${jdbc.url}"/> 
    <property name= "username" value="${jdbc.username}"/> 
    <property name= "password" value="${jdbc.password}"/> 
    </bean> 

    <bean name="UserDao" class="com.apress.flexjava.usermanager.dao.jdbc.UserDaoSpringJdbcImpl"> 
    <property name="dataSource" ref="dataSource" /> 
    </bean> 

    <!-- Hibernate SessionFactory --> 
    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 
    <property name="dataSource" ref="dataSource" /> 
    <property name = "configLocation" value = "classpath:hibernate.cfg.xml"/> 
    <property name = "hibernateProperties"> 

    <value> 
    hibernate.dialect= org.hibernate.dialect.MySQLDialect 
    hibernate.query.substitutions=true 'Y', false 'N' 
    hibernate.cache.use_second_level_cache=true 
    hibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider 
    hibernate.hbm2ddl.auto=update 
    hibernate.use_sql_comments=true 
    hibernate.show_sql=true 
    </value> 

    </property> 

    </bean> 


</beans> 

________________________________________________________________________________________ 

JDBC屬性

jdbc.driverClassName=com.mysql.jdbc.Driver 
jdbc.url=jdbc:mysql://localhost:3306/usermanager_test 
jdbc.username=root 
jdbc.password=password 
_______________________________________________________________________________________ 

的pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.apress.flexjava</groupId> 
    <artifactId>usermanager</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <name>UserManager</name> 

<dependencies> 
    <dependency> 
     <groupId>mysql</groupId> 
     <artifactId>mysql-connector-java</artifactId> 
     <version>5.1.6</version> 
     <type>jar</type> 
     <scope>compile</scope> 
    </dependency> 

    <dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-context</artifactId> 
    <version>2.5.6</version> 
    </dependency> 

    <dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring</artifactId> 
    <version>2.5.6</version> 
</dependency> 

    <dependency> 
    <groupId>mysql</groupId> 
    <artifactId>mysql-connector-java</artifactId> 
    <version>5.1.6</version> 
    <type>jar</type> 
    <scope>compile</scope> 
    </dependency> 
</dependencies> 

</project> 
____________________________________________________________________________ 

控制檯運行時錯誤:

Apr 17, 2012 11:51:49 PM org.springframework.context.support.AbstractApplicationContext prepareRefresh 
INFO: Refreshing org[email protected]179c285: display name [org[email protected]179c285]; startup date [Tue Apr 17 23:51:49 BOT 2012]; root of context hierarchy 
Apr 17, 2012 11:51:49 PM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions 
INFO: Loading XML bean definitions from class path resource [applicationContext.xml] 
Apr 17, 2012 11:51:49 PM org.springframework.context.support.AbstractApplicationContext obtainFreshBeanFactory 
INFO: Bean factory for application context [org[email protected]179c285]: org.s[email protected]16a786 
Apr 17, 2012 11:51:49 PM org.springframework.core.io.support.PropertiesLoaderSupport loadProperties 
INFO: Loading properties file from class path resource [jdbc.properties] 
Apr 17, 2012 11:51:49 PM org.springframework.beans.factory.support.DefaultSingletonBeanRegistry destroySingletons 
INFO: Destroying singletons in org.s[email protected]16a786: defining beans [org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor#0,org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor#0,propertyConfigurer,dataSource,UserDao,sessionFactory]; root of factory hierarchy 
Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor#0' defined in class path resource [applicationContext.xml]: Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [applicationContext.xml]: Instantiation of bean failed; nested exception is java.lang.NoClassDefFoundError: org/hibernate/MappingException 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:480) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164) 
    at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:880) 
    at org.springframework.context.support.AbstractApplicationContext.registerBeanPostProcessors(AbstractApplicationContext.java:596) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:365) 
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139) 
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83) 
    at com.apress.flexjava.usermanager.business.Main.main(Main.java:15) 
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [applicationContext.xml]: Instantiation of bean failed; nested exception is java.lang.NoClassDefFoundError: org/hibernate/MappingException 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:883) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:839) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:440) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:308) 
    at org.springframework.beans.factory.BeanFactoryUtils.beansOfTypeIncludingAncestors(BeanFactoryUtils.java:270) 
    at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.detectPersistenceExceptionTranslators(PersistenceExceptionTranslationInterceptor.java:122) 
    at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.<init>(PersistenceExceptionTranslationInterceptor.java:78) 
    at org.springframework.dao.annotation.PersistenceExceptionTranslationAdvisor.<init>(PersistenceExceptionTranslationAdvisor.java:70) 
    at org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor.setBeanFactory(PersistenceExceptionTranslationPostProcessor.java:97) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1326) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:473) 
    ... 14 more 
Caused by: java.lang.NoClassDefFoundError: org/hibernate/MappingException 
    at java.lang.Class.getDeclaredConstructors0(Native Method) 
    at java.lang.Class.privateGetDeclaredConstructors(Class.java:2389) 
    at java.lang.Class.getConstructor0(Class.java:2699) 
    at java.lang.Class.getDeclaredConstructor(Class.java:1985) 
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:54) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:877) 
    ... 32 more 
Caused by: java.lang.ClassNotFoundException: org.hibernate.MappingException 
    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:306) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247) 
    ... 38 more 
+0

您在運行時缺少jar或存在版本衝突等。該錯誤告訴您什麼類def導致了問題。 – 2012-04-18 04:47:49

回答

6

此異常:

Caused by: java.lang.ClassNotFoundException: org.hibernate.MappingException 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:306) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) at java.lang.ClassLoader.loadClass(ClassLoader.java:247) ... 38 more

表示您缺少項目中的Hibernate庫。嘗試將以下內容添加到您的POM中:

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