2015-12-28 160 views
0

我試圖在沒有web.xml的情況下構建spring-mvc項目 在服務器上啓動應用程序時,它在sessionFactory上拋出以下異常。在類路徑資源中定義名稱爲'sessionFactory'的bean時出錯

AppConfig.class如下:它是用來初始化持久單元:

package com.myapp; 

import java.util.Properties; 

import org.apache.commons.dbcp.BasicDataSource; 
import org.hibernate.SessionFactory; 
import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.ComponentScan; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.orm.hibernate4.HibernateTransactionManager; 
import org.springframework.orm.hibernate4.LocalSessionFactoryBuilder; 
import org.springframework.transaction.annotation.EnableTransactionManagement; 
import org.springframework.web.servlet.config.annotation.EnableWebMvc; 
import org.springframework.web.servlet.view.InternalResourceViewResolver; 
import org.springframework.web.servlet.view.JstlView; 

@EnableWebMvc 
@Configuration 
@ComponentScan(basePackages="com.myapp") 
@EnableTransactionManagement 
public class AppConfig { 

@Bean 
public SessionFactory sessionFactory() { 
    LocalSessionFactoryBuilder builder = new LocalSessionFactoryBuilder(dataSource()); 
    builder 
     .scanPackages("com.myapp.model") 
     .addProperties(getHibernateProperties()); 

    return builder.buildSessionFactory(); 
} 

private Properties getHibernateProperties() { 
    Properties prop = new Properties(); 
    prop.put("hibernate.format_sql", "true"); 
    prop.put("hibernate.show_sql", "true"); 
    prop.put("hibernate.dialect", "org.hibernate.dialect.MySQL5Dialect"); 
    return prop; 
} 

@Bean(name = "dataSource") 
public BasicDataSource dataSource() { 

    BasicDataSource ds = new BasicDataSource(); 
    ds.setDriverClassName("com.mysql.jdbc.Driver"); 
    ds.setUrl("jdbc:mysql://localhost:3306/eventtracker"); 
    ds.setUsername("root"); 
    ds.setPassword("root"); 
    return ds; 
} 

@Bean 
public HibernateTransactionManager txManager() { 
    return new HibernateTransactionManager(sessionFactory()); 
} 

@Bean 
public InternalResourceViewResolver viewResolver() { 
    InternalResourceViewResolver viewResolver = new  InternalResourceViewResolver(); 
     viewResolver.setViewClass(JstlView.class); 
     viewResolver.setPrefix("/WEB-INF/pages/"); 
     viewResolver.setSuffix(".jsp"); 
     return viewResolver; 
    } 
} 

而且它引發異常:

Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [com/myapp/AppConfig.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.hibernate.SessionFactory]: Factory method 'sessionFactory' threw exception; nested exception is java.lang.NoClassDefFoundError: javax/transaction/SystemException

+0

'java.lang.NoClassDefFoundError:使用javax /交易/ SystemException' – sidgate

回答

0

看看你的最後一個異常。

nested exception is java.lang.NoClassDefFoundError: javax/transaction/SystemException 

這意味着類文件javax/transaction/SystemException是不是在類路徑中,因此JVM抱怨NoClassDefFoundError

把你所有的休眠相關的jar的類路徑上。

0

這是一個Hibernate 5.0.6發佈的問題,對於Hibernate 5.0.3一切正常。要解決的問題。此添加到pom.xml的(如果你使用Maven)

<dependency> 
     <groupId>javax.transaction</groupId> 
     <artifactId>jta</artifactId> 
     <version>1.1</version> 
</dependency> 

的搖籃建立

compile group: 'javax.transaction', name: 'transaction-api', version: '1.1' 

手動下載

http://central.maven.org/maven2/javax/transaction/transaction-api/1.1/transaction-api-1.1.jar

相關問題