2016-04-05 3 views
1

Первоначально в нашем проекте мы использовали пружину 3 + спящий режим 3 Недавно было решено модернизировать сторонние банки, так как часть из этой весны обновлен до 4, но не спящий режим (сохраняется спящий режим 3). Теперь мы не изменили код для обновления весны 4, и когда мы выполняем проект, запускается локальная инъекция LocalContainerEntityManagerFactoryBean. Я дал объявление контекстного файла & трассировку стека ошибок ниже. Теперь вопрос в том, как я могу сделать текущую работу над проектом весной 4 без обновления спящего режима.org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean терпит неудачу после обновления весенне-барабанной баночки до 4.1.6

С Spring ORM 4.1.6 LocalContainerEntityManagerFactoryBean пытается загрузить JPA 2.0 специфический импорт спящего режима (то есть hibernate 4 jar classes) и сбой.

<bean id="entityManagerFactory" 
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 

    <property name="persistenceXmlLocation" value="classpath:META-INF/persistence.xml"/> 
    <property name="persistenceUnitName" value="casp-portal"/> 
</bean> 
<!-- Transaction manager for a single JPA EntityManagerFactory (alternative to JTA --> 
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
    <property name="entityManagerFactory" ref="entityManagerFactory"/> 
</bean> 
    <!-- enable the configuration of transactional behavior based on annotations --> 
<tx:annotation-driven transaction-manager="transactionManager"/> 
<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" /> 

Ошибка стека трассировка

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [applicationContext-securityEJB-DBtest.xml]: Post-processing failed of bean type [class org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean] failed; nested exception is java.lang.IllegalStateException: Failed to introspect bean class [org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean] for persistence metadata: could not find class that it depends on at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:936) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:512) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476) at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:303) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:299) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:956) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:747) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:480) at org.springframework.context.support.ClassPathXmlApplicationContext.(ClassPathXmlApplicationContext.java:139) at org.springframework.context.support.ClassPathXmlApplicationContext.(ClassPathXmlApplicationContext.java:93) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184) ... 11 more Caused by: java.lang.IllegalStateException: Failed to introspect bean class [org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean] for persistence metadata: could not find class that it depends on at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.findPersistenceMetadata(PersistenceAnnotationBeanPostProcessor.java:396) at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(PersistenceAnnotationBeanPostProcessor.java:333) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:931) ... 44 more Caused by: java.lang.NoClassDefFoundError: javax/persistence/ValidationMode at java.lang.Class.getDeclaredMethods0(Native Method) at java.lang.Class.privateGetDeclaredMethods(Class.java:2615) at java.lang.Class.getDeclaredMethods(Class.java:1860) at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.buildPersistenceMetadata(PersistenceAnnotationBeanPostProcessor.java:420) at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.findPersistenceMetadata(PersistenceAnnotationBeanPostProcessor.java:392) ... 46 more Caused by: java.lang.ClassNotFoundException: javax.persistence.ValidationMode at java.net.URLClassLoader$1.run(URLClassLoader.java:366) at java.net.URLClassLoader$1.run(URLClassLoader.java:355) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:354) at java.lang.ClassLoader.loadClass(ClassLoader.java:425) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) at java.lang.ClassLoader.loadClass(ClassLoader.java:358) ... 51 more

ответ

0

Технология, используемая в настоящее время в проекте: Hibernate 3 + с недавним стеком технологий модернизируют Spring переоделся до 4.1 версии. Spring 4.1 - это сила использования JPA 2.0, в то же время она поддерживает обратную поддержку, что означает поддержку JPA 1.0, см. Ниже описание, взятое с сайта Spring.

Java EE version 6 or above is now considered the baseline for Spring Framework 4, with the JPA 2.0 and Servlet 3.0 specifications being of particular relevance. In order to remain compatible with Google App Engine and older application servers, it is possible to deploy a Spring 4 application into a Servlet 2.5 environment. However, Servlet 3.0+ is strongly recommended and a prerequisite in Spring’s test and mock packages for test setups in development environments.

Фактические выпуск: тест JUnit случаев терпят неудачу во время ниже выделены инъекции фасоли. LocalContainerEntityManagerFactoryBean, который расширяет классы Spring-ORM, пытается загрузить импорт JPA 2.0 и сбой в спящий режим.

<bean id="entityManagerFactory" 
    class="com.abc.persist.LocalContainerEntityManagerFactoryBean"> 

    <property name="persistenceXmlLocation" value="classpath:META-INF/persistence-security.xml"/> 
    <property name="persistenceUnitName" value="casp-portal"/> 
    <property name="jpaPropertyMap"> 
     <map> 
      <entry key="javax.persistence.sharedCache.mode" value="none" /> 
     </map> 
     </property> 
</bean> 
<!-- Transaction manager for a single JPA EntityManagerFactory (alternative to JTA --> 
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
    <property name="entityManagerFactory" ref="entityManagerFactory"/> 
</bean> 
    <!-- enable the configuration of transactional behavior based on annotations --> 
<tx:annotation-driven transaction-manager="transactionManager"/> 
<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" /> 

Solutions:

  1. Вариант I: Держите старую версию весна-ОРМ, чтобы заставить его работать как [Это то, что мы сейчас делаем, как произведение вокруг ].

  2. Вариант II: Скопируйте в наш проект классы из 34 классов весны-сплава и настройте код классов весны в соответствии с нашими потребностями [Я планирую реализовать этот путь].

  3. Вариант III: Это исследование, пытаясь найти другой альтернативный способ введения entityManager.
Смежные вопросы