简体   繁体   English

没有可用于OSGi应用程序的'javax.persistence.EntityManagerFactory'类型的合格Bean

[英]No qualifying bean of type 'javax.persistence.EntityManagerFactory' available for OSGi Application

I am working on a Maven OSGi bundle that incorporates JPA (through EclipseLink ) and when I deploy the bundle into the OSGi container (Virgo), I receive the following error: 我正在使用(通过EclipseLink )合并了JPA的Maven OSGi捆绑软件,并且将捆绑软件部署到OSGi容器(处女座)时,收到以下错误:

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'javax.persistence.EntityManagerFactory' available

The class in question that causes the error is: 引起错误的相关类为:

@Configurable
@Entity
@Table(name = "SCHEDULE")
@RooJavaBean
@RooToString
@RooJpaActiveRecord(versionField = "", table = "SCHEDULE")
@RooDbManaged(automaticallyDelete = true)
public class Schedule {

    @PersistenceContext
    transient EntityManager entityManager;

    ...
}

Both the persistence.xml and orm.xml files have been placed in the src/main/resource/META-INF directory. persistence.xmlorm.xml文件都已放置在src/main/resource/META-INF目录中。 The contents of the persistence.xml file is as follows: persistence.xml文件的内容如下:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
    <persistence-unit name="PGSQLPersistence" transaction-type="RESOURCE_LOCAL">
        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
        <properties>
            <property name="eclipselink.target-database" value="org.eclipse.persistence.platform.database.PostgreSQLPlatform"/>
            <property name="eclipselink.ddl-generation" value="none"/>
            <property name="eclipselink.ddl-generation.output-mode" value="database"/>
            <property name="eclipselink.weaving" value="static"/>
            <property name="eclipselink.connection-pool.default.initial" value="1" />
            <property name="eclipselink.connection-pool.default.max" value="64" />
            <property name="eclipselink.logging.level" value="INFO"/> 
            <property name="eclipselink.logging.level.sql" value="INFO"/>
            <property name="eclipselink.logging.parameters" value="false"/>
            <property name="eclipselink.logging.exceptions" value="true"/>
            <property name="eclipselink.logging.logger" value="ServerLogger"/>
        </properties>
        ...
        <class>com.syncsort.dp.xsb.persistence.jpa.entities.Schedule</class>
        ...
    </persistence-unit>

    <persistence-unit name="PGSQLTESTPersistence" transaction-type="RESOURCE_LOCAL">
        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
        <properties>
            <property name="eclipselink.target-database" value="org.eclipse.persistence.platform.database.PostgreSQLPlatform"/>
            <property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>
            <property name="eclipselink.ddl-generation.output-mode" value="database"/>  
            <property name="eclipselink.weaving" value="static"/>
            <property name="eclipselink.connection-pool.default.initial" value="1" />
            <property name="eclipselink.connection-pool.default.min" value="64" />
            <property name="eclipselink.connection-pool.default.max" value="64" />
            <property name="eclipselink.logging.level" value="INFO"/> 
            <property name="eclipselink.logging.level.sql" value="FINE"/>
            <property name="eclipselink.logging.parameters" value="true"/>
            <property name="eclipselink.logging.exceptions" value="true"/>
        </properties>
        ...
        <class>com.syncsort.dp.xsb.persistence.jpa.entities.Schedule</class>
        ...
    </persistence-unit>

    <persistence-unit name="DERBYPersistence" transaction-type="RESOURCE_LOCAL">
        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
        <properties>
            <property name="eclipselink.target-database" value="org.eclipse.persistence.platform.database.DerbyPlatform"/>
           <property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>
            <property name="eclipselink.ddl-generation.output-mode" value="database"/>
            <property name="eclipselink.weaving" value="static"/>
        </properties>
        ..
        <class>com.syncsort.dp.xsb.persistence.jpa.entities.Schedule</class>
        ...
    </persistence-unit>

</persistence>

Likewise, the contents of the orm.xml file is as follows: 同样, orm.xml文件的内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<entity-mappings version="2.3" 
    xmlns="http://www.eclipse.org/eclipselink/xsds/persistence/orm" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.eclipse.org/eclipselink/xsds/persistence/orm http://www.eclipse.org/eclipselink/xsds/eclipselink_orm_2_3.xsd">

    <named-query name="Node.findByNodeName">
        <query>...</query>
    </named-query>

    ...

    <persistence-unit-metadata>
        <persistence-unit-defaults>
            <delimited-identifiers/>
        </persistence-unit-defaults>
    </persistence-unit-metadata>
</entity-mappings>

The JPA-related dependencies and Maven bundle configuration ( maven-bundle-plugin contents) included in the pom.xml file are as follows: pom.xml文件中包含的与JPA相关的依赖关系和Maven软件包配置( maven-bundle-plugin内容)如下:

<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>
    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>com.springsource.org.aspectj.runtime</artifactId>
        <version>1.7.1.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>com.springsource.org.aspectj.weaver</artifactId>
        <version>1.7.1.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.roo</groupId>
        <artifactId>org.springframework.roo.annotations</artifactId>
        <version>1.3.0.BUILD-SNAPSHOT</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>4.3.9.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-test</artifactId>
        <version>4.3.9.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>4.3.9.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context-support</artifactId>
        <version>4.3.9.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>javax.cache</groupId>
        <artifactId>cache-api</artifactId>
        <version>1.0.0</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aop</artifactId>
        <version>4.3.9.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aspects</artifactId>
        <version>4.3.9.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.eclipse.persistence</groupId>
        <artifactId>org.eclipse.persistence.jpa</artifactId>
        <version>2.6.4</version>
    </dependency>
    <dependency>
        <groupId>org.eclipse.persistence</groupId>
        <artifactId>org.eclipse.persistence.core</artifactId>
        <version>2.6.4</version>
    </dependency>
    <dependency>
        <groupId>org.eclipse.persistence</groupId>
        <artifactId>org.eclipse.persistence.asm</artifactId>
        <version>2.6.4</version>
    </dependency>
    <dependency>
        <groupId>org.eclipse.persistence</groupId>
        <artifactId>org.eclipse.persistence.antlr</artifactId>
        <version>2.6.4</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate.javax.persistence</groupId>
        <artifactId>hibernate-jpa-2.1-api</artifactId>
        <version>1.0.0.Final</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-entitymanager</artifactId>
        <version>4.3.11.Final</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>5.2.10.Final</version>
    </dependency>
    <dependency>
        <groupId>javax.transaction</groupId>
        <artifactId>javax.transaction-api</artifactId>
        <version>1.2</version>
    </dependency>
    <dependency>
        <groupId>javax.jdo</groupId>
        <artifactId>jdo-api</artifactId>
        <version>3.1</version>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.0.1</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>javax.validation</groupId>
        <artifactId>validation-api</artifactId>
        <version>1.1.0.Final</version>
    </dependency>
    <dependency>
        <groupId>net.sourceforge.cglib</groupId>
        <artifactId>com.springsource.net.sf.cglib</artifactId>
        <version>2.2.0</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>4.3.9.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-orm</artifactId>
        <version>4.3.9.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>commons-pool</groupId>
        <artifactId>commons-pool</artifactId>
        <version>1.5.6</version>
    </dependency>
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-dbcp2</artifactId>
        <version>2.1.1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
        <version>3.1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.derby</groupId>
        <artifactId>derby</artifactId>
        <version>10.8.2.2</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <version>9.4.1208-jdbc42-atlassian-hosted</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>6.0.6</version>
    </dependency>
</dependencies>
<plugins>
    ...
    <plugin>
        <groupId>org.apache.felix</groupId>
        <artifactId>maven-bundle-plugin</artifactId>
        <extensions>true</extensions>
        <configuration>
            <instructions>
                <Import-Package>
                    javax.sql,
                    org.aspectj.lang.annotation,
                    org.aspectj.internal.lang.annotation,
                    org.springframework.beans.factory.config,
                    org.springframework.core,
                    org.springframework.core.io.support,
                    *
                </Import-Package>
                <Require-Bundle>
                    org.eclipse.persistence.antlr,
                    org.eclipse.persistence.asm,
                    org.eclipse.persistence.core,
                    org.eclipse.persistence.jpa,
                    javax.persistence,
                    org.springframework.orm
                </Require-Bundle>
                <Export-Package>com.syncsort.dp.xsb.persistence.jpa.daoImpl</Export-Package>
                <Bundle-SymbolicName>com.syncsort.dp.xsb.persistence.jpa</Bundle-SymbolicName>
            </instructions>
        </configuration>
    </plugin>
</plugins>

The Spring bean XML (contained in src/main/resource/META-INF/spring/ ) definitions are as follows: Spring bean XML(包含在src/main/resource/META-INF/spring/ )的定义如下:

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"
    xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
                        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd 
                        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd
                        http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.1.xsd
                        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd">

    <context:property-placeholder location="classpath:database.properties"
       ignore-resource-not-found="true" ignore-unresolvable="true" /> 

    <bean class="com.example.encryption.EncryptedPropertyOverrideConfigurer">
        <property name="ignoreResourceNotFound" value="true" />
        <property name="ignoreInvalidKeys" value="true" />
        <property name="location" value="classpath:database.properties"/>
        <property name="properties" ref="database.props" />
    </bean>

    <context:spring-configured/>
    <context:component-scan base-package="com.syncsort.dp.xsb.persistence.jpa.*">
        <context:exclude-filter expression=".*_Roo_.*" type="regex" />
        <context:exclude-filter expression="org.springframework.stereotype.Controller"
            type="annotation" />
    </context:component-scan>

    <bean class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close" id="database">
        <property name="driverClassName" value="${database.driverClassName}" />
        <property name="url" value="${database.url}" />
        <property name="username" value="${database.username}" />
        <property name="password" value="${database.password}" />    
        <property name="testOnBorrow" value="true" />
        <property name="testOnReturn" value="true" />
        <property name="testWhileIdle" value="true" />
        <property name="timeBetweenEvictionRunsMillis" value="1800000" />
        <property name="numTestsPerEvictionRun" value="3" />
        <property name="minEvictableIdleTimeMillis" value="1800000" />
    </bean>

    <bean class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"
        id="entityManagerFactory">
        <property name="dataSource" ref="database" />
        <property name="persistenceUnitName" value="${database.persistence}" />        
    </bean>

    <bean class="org.springframework.orm.jpa.JpaTransactionManager" id="transactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory" />
        <property name="persistenceUnitName" value="${database.persistence}" />        
    </bean>

    <tx:annotation-driven mode="aspectj" transaction-manager="transactionManager" />
    <context:annotation-config />
    <aop:aspectj-autoproxy />
    ...
    <bean class="com.example" name="schedule" scope="prototype" />
</beans>

Lastly, there is a database.properties file in src/main/resource/META-INF/spring/ that contains the following: 最后,在src/main/resource/META-INF/spring/中有一个database.properties文件,其中包含以下内容:

database.driverClassName=com.mysql.jdbc.Driver
database.url=jdbc\:mysql\://localhost\:3306/<hidden>
database.username=<hidden>
database.password=<hidden>

Am I making a configuration or wiring mistake somewhere that is causing the EntityManagerFactory not to be created or wired correctly upon deployment? 我是否在某个地方配置或接线错误导致EntityManagerFactory在部署时无法正确创建或接线?

Thank you for the help. 感谢您的帮助。


Aside 在旁边

I have also attempted to follow A Guide to Hibernate with Spring 4 and include the following in the definition of org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean : 我还尝试遵循Spring 4的《休眠指南》,并在org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean的定义中包括以下内容:

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

I follow through and added all of the OSGi bundles that go along with the HibernateJpaVendorAdapter class (eg hibernate-core, hibernate-osgi, etc.) and that led back to the same error as above. 我遵循并添加了所有与HibernateJpaVendorAdapter类一起使用的OSGi捆绑软件(例如hibernate-core,hibernate-osgi等),并导致了与上述相同的错误。


Full Stack-Trace 全栈跟踪

[2018-04-03 10:24:55.356] start-signalling-18          <DE0006E> Start failed for plan 'example-app' version '2.0.0'. org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'autoUpgradeImpl': Invocation of init method failed; nested exception is com.example.persistence.dao.ExampleDAOException: Error creating bean with name 'com.example.persistence.jpa.entities.Schedule': Injection of persistence dependencies failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'javax.persistence.EntityManagerFactory' available
    at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:137)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:409)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1620)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:761)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:867)
    at org.eclipse.gemini.blueprint.context.support.AbstractDelegatedExecutionApplicationContext.access$1600(AbstractDelegatedExecutionApplicationContext.java:57)
    at org.eclipse.gemini.blueprint.context.support.AbstractDelegatedExecutionApplicationContext$4.run(AbstractDelegatedExecutionApplicationContext.java:322)
    at org.eclipse.gemini.blueprint.util.internal.PrivilegedUtils.executeWithCustomTCCL(PrivilegedUtils.java:85)
    at org.eclipse.gemini.blueprint.context.support.AbstractDelegatedExecutionApplicationContext.completeRefresh(AbstractDelegatedExecutionApplicationContext.java:287)
    at org.eclipse.gemini.blueprint.extender.internal.dependencies.startup.DependencyWaiterApplicationContextExecutor$CompleteRefreshTask.run(DependencyWaiterApplicationContextExecutor.java:137)
    at org.eclipse.virgo.kernel.agent.dm.ContextPropagatingTaskExecutor$2.run(ContextPropagatingTaskExecutor.java:95)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)
Caused by: com.example.persistence.dao.ExampleDAOException: Error creating bean with name 'com.example.persistence.jpa.entities.Schedule': Injection of persistence dependencies failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'javax.persistence.EntityManagerFactory' available
    at com.example.persistence.jpa.aspect.ExceptionAspect.analyze(ExceptionAspect.java:312)
    at com.example.persistence.jpa.aspect.ExceptionAspect.exceptionAnalyzer(ExceptionAspect.java:229)
    at com.example.persistence.jpa.aspect.ExceptionAspect.afterThrow(ExceptionAspect.java:132)
    at com.example.persistence.jpa.daoImpl.ScheduleSQLDAOImpl.listAll_aroundBody18(ScheduleSQLDAOImpl.java:324)
    at com.example.persistence.jpa.daoImpl.ScheduleSQLDAOImpl.listAll(ScheduleSQLDAOImpl.java:1)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:333)
    at org.eclipse.gemini.blueprint.service.importer.support.internal.aop.ServiceInvoker.doInvoke(ServiceInvoker.java:56)
    at org.eclipse.gemini.blueprint.service.importer.support.internal.aop.ServiceInvoker.invoke(ServiceInvoker.java:60)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
    at org.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:133)
    at org.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:121)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
    at org.eclipse.gemini.blueprint.service.importer.support.LocalBundleContextAdvice.invoke(LocalBundleContextAdvice.java:57)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
    at org.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:133)
    at org.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:121)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:213)
    at com.sun.proxy.$Proxy1552.listAll(Unknown Source)
    at com.example.autoupdate.ScheduleUpgrade.copySchedulesToMongodb(ScheduleUpgrade.java:39)
    at com.example.autoupdate.ScheduleUpgrade.upgradeSchdules(ScheduleUpgrade.java:59)
    at com.example.autoupdate.ScheduleUpgrade.upgrade(ScheduleUpgrade.java:67)
    at com.example.autoupdate.AutoUpgradeImpl.upgrade(AutoUpgradeImpl.java:60)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:366)
    at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:311)
    at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:134)
    ... 19 common frames omitted
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'com.example.persistence.jpa.entities.Schedule': Injection of persistence dependencies failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'javax.persistence.EntityManagerFactory' available
    at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.postProcessPropertyValues(PersistenceAnnotationBeanPostProcessor.java:357)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1264)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireBeanProperties(AbstractAutowireCapableBeanFactory.java:386)
    at org.springframework.beans.factory.wiring.BeanConfigurerSupport.configureBean(BeanConfigurerSupport.java:141)
    at org.springframework.beans.factory.aspectj.AnnotationBeanConfigurerAspect.configureBean(AnnotationBeanConfigurerAspect.aj:63)
    at org.springframework.beans.factory.aspectj.AbstractDependencyInjectionAspect.ajc$afterReturning$org_springframework_beans_factory_aspectj_AbstractDependencyInjectionAspect$2$1ea6722c(AbstractDependencyInjectionAspect.aj:88)
    at com.example.persistence.jpa.entities.Schedule.<init>(Schedule.java:41)
    at com.example.persistence.jpa.entities.Schedule.entityManager_aroundBody0(Schedule.java:47)
    at com.example.persistence.jpa.entities.Schedule.entityManager(Schedule.java:1)
    at com.example.persistence.jpa.entities.Schedule.findAllSchedules_aroundBody4(Schedule.java:57)
    at com.example.persistence.jpa.entities.Schedule.findAllSchedules(Schedule.java:1)
    at com.example.persistence.jpa.daoImpl.ScheduleSQLDAOImpl.listAll_aroundBody18(ScheduleSQLDAOImpl.java:316)
    ... 49 common frames omitted
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'javax.persistence.EntityManagerFactory' available
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveNamedBean(DefaultListableBeanFactory.java:996)
    at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.findDefaultEntityManagerFactory(PersistenceAnnotationBeanPostProcessor.java:579)
    at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.findEntityManagerFactory(PersistenceAnnotationBeanPostProcessor.java:546)
    at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor$PersistenceElement.resolveEntityManager(PersistenceAnnotationBeanPostProcessor.java:707)
    at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor$PersistenceElement.getResourceToInject(PersistenceAnnotationBeanPostProcessor.java:680)
    at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:169)
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
    at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.postProcessPropertyValues(PersistenceAnnotationBeanPostProcessor.java:354)
    ... 60 common frames omitted

I'm hazarding a guess at this but you have two persistence units defined, name="PGSQLPersistence" and name="PGSQLTESTPersistence" . 我对此很冒险,但是您定义了两个持久性单元,分别为name="PGSQLPersistence"name="PGSQLTESTPersistence"

I think you need to specify which PU you want to use in your @PersistenceContext annotation, eg @PersistenceContext(unitName = "PGSQLPersistence") although I would have expected a slightly different exception thrown as a single PU cannot be automatically determined. 我认为您需要指定要在@PersistenceContext批注中使用的PU,例如@PersistenceContext(unitName = "PGSQLPersistence")尽管我希望抛出一个略有不同的异常,因为无法自动确定单个PU。

尝试按照Kerry的建议通过名称更改@PersistenceContext上的unitName属性

The solution I found was to circumvent the JPA portion of the bundle I was creating and directly create a HibernatePersistenceProvider : 我发现的解决方案是规避我正在创建的捆绑软件的JPA部分,并直接创建HibernatePersistenceProvider

EntityManagerFactory factory = new HibernatePersistenceProvider().createEntityManagerFactory("persistenceUnitName", null);

This does not solve the issue itself but removes the issue of resolution entirely. 这并不能解决问题本身,而是可以彻底消除解决问题。 My suspicion is that OSGi and JPA are not being configured correctly in our environment and therefore, OSGi cannot find any EntityManagerFactory instances to inject. 我怀疑OSGi和JPA在我们的环境中配置不正确,因此OSGi找不到要注入的任何EntityManagerFactory实例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 NoSuchBeanDefinitionException:没有可用的“javax.persistence.EntityManagerFactory”类型的合格 bean - NoSuchBeanDefinitionException: No qualifying bean of type 'javax.persistence.EntityManagerFactory' available Spring JPA(Hibernate)没有类型的限定bean:javax.persistence.EntityManagerFactory - Spring JPA (Hibernate) No qualifying bean of type: javax.persistence.EntityManagerFactory 没有定义类型为[javax.persistence.EntityManagerFactory]的合格Bean。“}} - No qualifying bean of type [javax.persistence.EntityManagerFactory] is defined"}} 使用Spring 4未定义类型为[javax.persistence.EntityManagerFactory]的合格Bean - No qualifying bean of type [javax.persistence.EntityManagerFactory] is defined Using Spring 4 没有定义类型为[javax.persistence.EntityManagerFactory]的合格bean - No qualifying bean of type [javax.persistence.EntityManagerFactory] is defined MultitenantConfiguration:未定义类型为[javax.persistence.EntityManagerFactory]的合格Bean:预期的单个匹配Bean,但找到2 - MultitenantConfiguration: No qualifying bean of type [javax.persistence.EntityManagerFactory] is defined: expected single matching bean but found 2 没有定义类型为[javax.persistence.EntityManagerFactory]的合格Bean ::期望单个匹配的Bean,但找到2 - No qualifying bean of type [javax.persistence.EntityManagerFactory] is defined:: expected single matching bean but found 2 错误:没有定义类型为[javax.persistence.EntityManagerFactory]的合格bean:期望的单个匹配bean,但找到2 - error No qualifying bean of type [javax.persistence.EntityManagerFactory] is defined: expected single matching bean but found 2 没有定义类型为[javax.persistence.EntityManagerFactory]的合格Bean:期望单个匹配的Bean,但找到2 - No qualifying bean of type [javax.persistence.EntityManagerFactory] is defined: expected single matching bean but found 2 Spring MVC测试中未定义类型为[javax.persistence.EntityManagerFactory]的合格Bean - No qualifying bean of type [javax.persistence.EntityManagerFactory] is defined issue in Spring MVC test
 
粤ICP备18138465号  © 2020-2025 STACKOOM.COM