没有从{classpath *:META-INF/persistence.xml}解析的持久性单元 [英] No persistence units parsed from {classpath*:META-INF/persistence.xml}

查看:64
本文介绍了没有从{classpath *:META-INF/persistence.xml}解析的持久性单元的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

使用Spring Core 3.0.5,Hibernate 3.6.0. 这个问题的标题是使用我维护的应用程序启动Tomcat Web服务器(6.0.29)时引发的java.lang.IllegalStateException消息.

Using Spring Core 3.0.5, Hibernate 3.6.0. The title of this question is the message of a java.lang.IllegalStateException raised on starting a Tomcat webserver (6.0.29) with an application I am maintaining.

applicationContext.xml说:

applicationContext.xml says:

<bean id="emf" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" scope="singleton">
   <property name="jpaVendorAdapter">
     <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" />
  </property>
</bean>

persistence.xml在项目包含的jar文件的META-INF目录中. Expedissimo.web.war有一个WEB-INF/classes文件夹,其内容为.jar.

persistence.xml is in the META-INF directory of a jar file the project includes. Expedissimo.web.war has a WEB-INF/classes folder with said .jar.

启动服务器时完整的异常回溯是:

The complete exception traceback on starting the server is:

GRAVE:初始上下文异常 (上下文已初始化)àl'instance de classe d'écoute(侦听器) org.springframework.web.context.ContextLoaderListener org.springframework.beans.factory.BeanCreationException:错误 创建在ServletContext资源中定义的名称为'emf'的bean [/WEB-INF/applicationContext.xml]:调用init方法失败; 嵌套异常是java.lang.IllegalStateException:没有持久性 从{classpath *:META-INF/persistence.xml}中解析的单位 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1420) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) 在 org.springframework.beans.factory.support.AbstractBeanFactory $ 1.getObject(AbstractBeanFactory.java:291) 在 org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) 在 org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288) 在 org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190) 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:563) 在 org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:895) 在 org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:425) 在 org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:276) 在 org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:197) 在 org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47) 在 org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4135) 在 org.apache.catalina.core.StandardContext.start(StandardContext.java:4630) 在 org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791) 在 org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771) 在 org.apache.catalina.core.StandardHost.addChild(StandardHost.java:546) 在 org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:637) 在 org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:563) 在 org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:498) 在org.apache.catalina.startup.HostConfig.start(HostConfig.java:1277) 在 org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:321) 在 org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119) 在 org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053) 在org.apache.catalina.core.StandardHost.start(StandardHost.java:785) 在 org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045) 在 org.apache.catalina.core.StandardEngine.start(StandardEngine.java:445) 在 org.apache.catalina.core.StandardService.start(StandardService.java:519) 在 org.apache.catalina.core.StandardServer.start(StandardServer.java:710) 在org.apache.catalina.startup.Catalina.start(Catalina.java:581)处 sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)位于 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 在java.lang.reflect.Method.invoke(Method.java:597)在 org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)在 org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)导致 作者:java.lang.IllegalStateException:没有从中解析任何持久性单元 {classpath *:META-INF/persistence.xml},网址为 org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager.obtainDefaultPersistenceUnitInfo(DefaultPersistenceUnitManager.java:373) 在 org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.determinePersistenceUnitInfo(LocalContainerEntityManagerFactoryBean.java:247) 在 org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:196) 在 org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:308) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1477) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1417)

GRAVE: Exception lors de l'envoi de l'évènement contexte initialisé (context initialized) à l'instance de classe d'écoute (listener) org.springframework.web.context.ContextLoaderListener org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'emf' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Invocation of init method failed; nested exception is java.lang.IllegalStateException: No persistence units parsed from {classpath*:META-INF/persistence.xml} at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1420) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:563) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:895) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:425) at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:276) at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:197) at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47) at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4135) at org.apache.catalina.core.StandardContext.start(StandardContext.java:4630) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:546) at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:637) at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:563) at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:498) at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1277) at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:321) at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053) at org.apache.catalina.core.StandardHost.start(StandardHost.java:785) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045) at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:445) at org.apache.catalina.core.StandardService.start(StandardService.java:519) at org.apache.catalina.core.StandardServer.start(StandardServer.java:710) at org.apache.catalina.startup.Catalina.start(Catalina.java:581) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414) Caused by: java.lang.IllegalStateException: No persistence units parsed from {classpath*:META-INF/persistence.xml} at org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager.obtainDefaultPersistenceUnitInfo(DefaultPersistenceUnitManager.java:373) at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.determinePersistenceUnitInfo(LocalContainerEntityManagerFactoryBean.java:247) at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:196) at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:308) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1477) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1417)

... 36 more

persistence.xml说:

persistence.xml says:

<persistence xmlns="http://java.sun.com/xml/ns/persistence"     xmlns:xsi="http://www.w3.org    /2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" version="2.0">
<persistence-unit name="serv2010pool" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider> 
    <properties>
        <property name="hibernate.show_sql" value="false" /> 
        <property name="hibernate.format_sql" value="true" /> 
        <property name="use_sql_comments" value="true" /> 
        <property name="hibernate.autocommit" value="false" /> 
        <property name="javax.persistence.jdbc.driver"     value="oracle.jdbc.OracleDriver"/>
        <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect"/>
        <property name="hibernate.connection.insee.poolName" value="serv2010pool" />
        <property name="hibernate.connection.provider_class" value=
            "fr.insee.config.hibernate.InseeConnectionProvider"/>           
    </properties>
</persistence-unit>

在批处理同级项目中的Spring外部使用相同的持久性单元描述符,并从中正确解析

The same persistence unit descriptor, when used outside Spring in the batch sibling project, is found and parsed correctly from

    emf = Persistence.createEntityManagerFactory("serv2010pool");

与Web项目一样,批处理项目包括Serv2010-1.0.jar,该文件具有META-INF/persistence.xml.所有带注释的类都在此通用jar中.

The batch project, just like the web project, includes Serv2010-1.0.jar, which has META-INF/persistence.xml . All annotated classes are in this common jar.

在Eclipse v3.6中进行部署会引发异常. .war中的WEB-INF/classes/文件夹没有persistence.xml文件.手动添加它并重新启动服务器无济于事.

Deploying inside Eclipse v3.6 raises the exception. The WEB-INF/classes/ folder in the .war doesn't have the persistence.xml file. Adding it manually and restarting the server doesn't help.

有什么主意吗?感谢您提供的所有技巧,我这里的技巧不多了. 克里斯(Chris)

Any idea? I'm running out of tricks here, thanks for providing any. CChris

推荐答案

这通常意味着Spring找不到persistence.xml.确保persistence.xml相对于您的类路径位于META-INF中.这可能意味着即使看起来很奇怪,也必须将文件放在WEB-INF \ classes \ META-INF中.

This usually means that Spring can't find persistence.xml. Make sure that persistence.xml is in META-INF in relation to your classpath. This might mean you have to put the file in WEB-INF\classes\META-INF, even though it seems strange.

这篇关于没有从{classpath *:META-INF/persistence.xml}解析的持久性单元的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆