ServiceMix/JPA 集成 - LocalContainerEntityManagerFactoryBean 来输入 EntityManagerFactory [英] ServiceMix / JPA Integration - LocalContainerEntityManagerFactoryBean to type EntityManagerFactory

查看:26
本文介绍了ServiceMix/JPA 集成 - LocalContainerEntityManagerFactoryBean 来输入 EntityManagerFactory的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我对 ServiceMix/JPA/Camel/Spring 还很陌生.我正在尝试使用 camel-jpa 组件作为我的骆驼路线的一部分.我使用的是最新版本的 ServiceMix,即 4.5.1.这里使用camel 2.10.4和spring 3.0.7.

I'm fairly new to ServiceMix / JPA / Camel / Spring. I'm attempting to use the camel-jpa component as part of my camel route. I'm using the latest release of ServiceMix, which is 4.5.1. This uses camel 2.10.4 and spring 3.0.7.

更新 OSGi 清单并将一些附加模块部署到 servicemix 后,我被困在以下堆栈跟踪中:

After updating the OSGi manifest and deploying some additional modules to servicemix, I am stuck on the following stack trace:

org.osgi.service.blueprint.container.ComponentDefinitionException: Error setting property: PropertyDescriptor <name: entityManagerFactory, getter: class org.springframework.orm.jpa.JpaTransactionManager.getEntityManagerFactory(, setter: [class org.springframework.orm.jpa.JpaTransactionManager.setEntityManagerFactory(interface javax.persistence.EntityManagerFactory]
[...]
Caused by: java.lang.Exception: Unable to convert value org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean@46e9e26a to type javax.persistence.EntityManagerFactory
at org.apache.aries.blueprint.container.AggregateConverter.convert(AggregateConverter.java:172)[10:org.apache.aries.blueprint:0.3.2]
at org.apache.aries.blueprint.container.BlueprintRepository.convert(BlueprintRepository.java:373)[10:org.apache.aries.blueprint:0.3.2]
at org.apache.aries.blueprint.utils.ReflectionUtils$PropertyDescriptor.convert(ReflectionUtils.java:322)[10:org.apache.aries.blueprint:0.3.2]
at org.apache.aries.blueprint.utils.ReflectionUtils$MethodPropertyDescriptor.internalSet(ReflectionUtils.java:555)[10:org.apache.aries.blueprint:0.3.2]
at org.apache.aries.blueprint.utils.ReflectionUtils$PropertyDescriptor.set(ReflectionUtils.java:306)[10:org.apache.aries.blueprint:0.3.2]
at org.apache.aries.blueprint.container.BeanRecipe.setProperty(BeanRecipe.java:819)[10:org.apache.aries.blueprint:0.3.2]

我已经使用了我的persistence.xml、camel-context.xml(蓝图/spring xml)并且没有取得太大进展.我目前的配置是:

I've played around with my persistence.xml, camel-context.xml (blueprint/spring xml) and have not been able to make much progress. My current configuration is:

骆驼上下文.xml

<bean id="mysqlDataSource" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName"        value="com.mysql.jdbc.Driver"/>
    <property name="url"                    value="jdbc:mysql://localhost/prototype"/>
    <property name="username"               value="...."/>
    <property name="password"               value="...."/>
</bean>

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="dataSource"             ref="mysqlDataSource"/>
    <property name="persistenceUnitName"    value="customer1"/>
    <property name="loadTimeWeaver">
        <bean class="org.springframework.instrument.classloading.SimpleLoadTimeWeaver" />
    </property>
    <property name="jpaVendorAdapter">
        <bean class="org.springframework.orm.jpa.vendor.OpenJpaVendorAdapter">
            <property name="databasePlatform"   value="org.apache.openjpa.jdbc.sql.MySQLDictionary" />
            <property name="showSql"            value="true"/>
        </bean>
    </property>
</bean>

<bean id="jpaTxManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory"   ref="entityManagerFactory"/>
</bean>

<bean id="jpa" class="org.apache.camel.component.jpa.JpaComponent">
    <property name="entityManagerFactory"   ref="entityManagerFactory"/>
    <property name="transactionManager"     ref="jpaTxManager"/>
</bean>

持久性.xml

<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="customer1" transaction-type="RESOURCE_LOCAL">
    <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
    <class>....</class>
</persistence-unit>

任何帮助将不胜感激.我已经在这个问题上纠结了几天了.

Any help would be appreciated. I've been spinning on this problem for a couple days now.

推荐答案

因为您已经在使用使用 Aries JPA 和 JTA 功能的 Blueprint,这正是您所需要的.为此,您还需要安装这些功能 (JPA/JTA) 并确保您的事务是 JTA 类型,使用 Aries 的实体管理器而不是 spring,您应该是安全的.DAO 看起来更像以下内容:

As your already using Blueprint using the Aries JPA and JTA features is what you need. For this you need to install those features also (JPA/JTA) and make sure your transaction is of type JTA, with that and using the entity manager of Aries instead of spring you should be on the safe side. A DAO will look more like the following:

<bean id="daoBean" class="dummy.class.name.DaoBean">
   <jpa:context property="em" unitname="customer1" />
   <tx:transaction method="*" value="Required" />
</bean>

为了使其正常工作,您需要引用相应的蓝图模式.

For this to work properly you need to reference the corresponding blueprint schemas.

这篇关于ServiceMix/JPA 集成 - LocalContainerEntityManagerFactoryBean 来输入 EntityManagerFactory的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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