2013-07-11 3 views
0

Я проводил неделю, пытаясь интегрировать JPA/ServiceMix 4.5.1/camel-jpa 2.10.4/Blueprint вместе. В настоящее время я использую OpenJPA, но я не привязан к нему. Версия aries jpa, используемая servicemix, составляет 0.3.0.ServiceMix/Blueprint/JPA Integration

Трассировка стека я не могу получить прошлое:

org.osgi.service.blueprint.container.ComponentDefinitionException: Error when instanciating bean workoutEntity of class class [...].WorkoutEntity 
at org.apache.aries.blueprint.container.BeanRecipe.getInstance(BeanRecipe.java:271)[10:org.apache.aries.blueprint:0.3.2] 
at org.apache.aries.blueprint.container.BeanRecipe.internalCreate(BeanRecipe.java:708)[10:org.apache.aries.blueprint:0.3.2] 
at org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:64)[10:org.apache.aries.blueprint:0.3.2] 
at org.apache.aries.blueprint.di.RefRecipe.internalCreate(RefRecipe.java:60)[10:org.apache.aries.blueprint:0.3.2] 
at org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:64)[10:org.apache.aries.blueprint:0.3.2] 
at org.apache.aries.blueprint.container.BlueprintRepository.createInstances(BlueprintRepository.java:219)[10:org.apache.aries.blueprint:0.3.2] 
[...] 
Caused by: <openjpa-2.2.0-r422266:1244990 nonfatal general error> org.apache.openjpa.persistence.PersistenceException: [javax.sql.DataSource] 
at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:218) 
at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:156) 
at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:227) 

[...] 
Caused by: java.lang.IllegalArgumentException: [javax.sql.DataSource] 
at org.apache.aries.jndi.services.ServiceHelper.proxyPriviledged(ServiceHelper.java:348) 
at org.apache.aries.jndi.services.ServiceHelper.access$700(ServiceHelper.java:65) 
at org.apache.aries.jndi.services.ServiceHelper$1.run(ServiceHelper.java:285) 
at java.security.AccessController.doPrivileged(Native Method)[:1.6.0_43] 
[...] 

Я попытался несколько вариаций. Вот моя текущая конфигурация:

persistence.xml:

<persistence-unit name="customer1" transaction-type="JTA"> 
    <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider> 
    <jta-data-source>osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=jdbc/prototypedb)</jta-data-source> 
    <class>...</class> 
</persistence-unit> 

верблюжьей context.xml

<service id="PrototypeDB" interface="javax.sql.DataSource"> 
    <service-properties> 
     <entry key="osgi.jndi.service.name" value="jdbc/prototypedb"/> 
    </service-properties> 
    <bean class="org.apache.commons.dbcp.BasicDataSource"> 
     <property name="driverClassName"  value="com.mysql.jdbc.Driver"/> 
     <property name="url"     value="jdbc:mysql://localhost:3306/prototype"/> 
     <property name="username"    value="root"/> 
     <property name="password"    value="..."/> 
    </bean> 
</service> 

<service ref="workoutEntity" interface="..."/> 
<bean id="workoutEntity" class="..."> 
    <jpa:unit index="0"   unitname="customer1" /> 
    <tx:transaction method="*" value="Required"/> 
</bean> 

Entity Bean (написано в заводной)

@Entity 
@Table(name='customer1') 
@Slf4j 
class WorkoutEntity implements IWorkoutEntity{ 

    private EntityManager entityManager 

    WorkoutEntity(final EntityManagerFactory entityManagerFactory) { 
     this.entityManager = entityManagerFactory.createEntityManager() 
    } 

    @Handler 
    void create(@Body final String input) { 
     // ... 
    } 
} 

Я предпринял попытку нескольких различных реализаций DataSource, включая BasicDataSource, org.springframework.jdbc.datasou rce.SimpleDriverDataSource и com.mysql.jdbc.jdbc2.optional.MysqlDataSource. Все вызывают исключение IllegalArgumentException.

Я также попытался отказаться от использования JNDI и вместо этого определить источник данных непосредственно в файле persistence.xml. Это вызывает ClassNotFoundException в пакете OpenJPA, поскольку он не импортирует драйвер mysql. Я бы предпочел определить это в моем camel-context.xml и предпочел бы не переустанавливать банку OpenJPA.

ответ

1

Возможно, вам также нужны установленные функции JNDI для овен. Это помогает вызывать службы OSGi с помощью запросов JNDI. Это должен быть недостающий кусок.