2016-11-18 4 views
1

Я сочинительство простого приложения с использованием Spring и Hibernate с помощью следующих фасоли определения XML-файл:Spring java.lang.NoClassDefFoundError в CCTOR

<?xml version="1.0" encoding="UTF-8"?> 

<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> 

    <bean id="hibernateConfiguration" class="pl.wicia.projector.database.DBConfiguration" scope="prototype"> 
     <constructor-arg name="path" value="pl/wicia/projector/database/cfg.xml"/> 
    </bean> 

    <bean id="sessionFactory" class="pl.wicia.projector.database.HibernateSessionFactory" scope="prototype"> 
     <constructor-arg name="dbConfig" ref="hibernateConfiguration"/> 
    </bean> 

</beans> 

Теперь я хотел создать конфигурации оболочки базы данных с помощью инъекции с помощью конструкторы-арга :

package pl.wicia.projector.database; 

import org.hibernate.cfg.Configuration; 

public class DBConfiguration { 

    private Configuration configuration; 

    public DBConfiguration(String path){ 
     this.configuration = new Configuration(); <--- this throws Exsception 
     this.configuration.configure(path); 
    } 

    public Configuration getConfiguration() { 
     return configuration; 
    } 
} 

И эта линия производит следующее исключение:

Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'hibernateConfiguration' defined in class path resource [pl/wicia/projector/spring/db_beans.xml]: Bean instantiation via constructor failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [pl.wicia.projector.database.DBConfiguration]: Constructor threw exception; nested exception is java.lang.NoClassDefFoundError: javax/transaction/SystemException 
    at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:279) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1148) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1051) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:510) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:325) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) 
    at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1076) 
    at pl.wicia.projector.main.Projector.main(Projector.java:23) 
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [pl.wicia.projector.database.DBConfiguration]: Constructor threw exception; nested exception is java.lang.NoClassDefFoundError: javax/transaction/SystemException 
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:154) 
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:122) 
    at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:271) 
    ... 8 more 
Caused by: java.lang.NoClassDefFoundError: javax/transaction/SystemException 
    at java.lang.Class.forName0(Native Method) 
    at java.lang.Class.forName(Class.java:348) 
    at org.jboss.logging.Logger$1.run(Logger.java:2554) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at org.jboss.logging.Logger.getMessageLogger(Logger.java:2529) 
    at org.jboss.logging.Logger.getMessageLogger(Logger.java:2516) 
    at org.hibernate.internal.CoreLogging.messageLogger(CoreLogging.java:28) 
    at org.hibernate.internal.CoreLogging.messageLogger(CoreLogging.java:24) 
    at org.hibernate.cfg.Configuration.<clinit>(Configuration.java:86) 
    at pl.wicia.projector.database.DBConfiguration.<init>(DBConfiguration.java:22) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423) 
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:142) 
    ... 10 more 
Caused by: java.lang.ClassNotFoundException: javax.transaction.SystemException 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    ... 25 more 

Вот как я создаю свои бобы:

ApplicationContext context = new ClassPathXmlApplicationContext("pl/wicia/projector/spring/db_beans.xml"); 
DBConfiguration config = (DBConfiguration)context.getBean("hibernateConfiguration"); 

Любая идея, что происходит? :)

+0

Для чего это стоит, 100% этой конфигурации можно просто устранить, используя Spring Boot. – chrylis

ответ

1

У вас нет javax.transaction.SystemException на пути прохождения пути. Это может быть исправлено путем добавления

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

зависимости к pom.xml, если вы используете Maven. Однако могут возникнуть более серьезные проблемы с зависимостями в вашем приложении, если вам не хватает такого важного класса. Даже если вы исправите это, вы можете столкнуться с реальной ситуацией, вызвавшей выброс javax.transaction.SystemException.

+0

Работа, спасибо :) –