Interesting...

I now changed the jpa feature to the following:

*    <feature name="jpa" description="OSGi Persistence Container"
version="2.3.0">*
*        <details>JPA implementation provided by Apache Aries JPA 2.x. NB:
this feature doesn't provide the JPA engine, you have to install one by
yourself (OpenJPA for instance)</details>*
*        <feature version="[1.1,2)" prerequisite="false"
dependency="false">transaction-api</feature>*
*        <bundle
dependency="true">mvn:org.osgi/org.osgi.service.jpa/1.0.0</bundle>*

*        <feature version="[2.0.0,2.1.0)" prerequisite="false"
dependency="false">persistence-api</feature>*

Which removed the previous error I had. But I now get JNDI problems:

2016-07-07 15:32:37,240 | ERROR | pool-7-thread-1  | BootFeaturesInstaller
           | al.service.BootFeaturesInstaller  128 | Error installing boot
features
org.apache.karaf.features.internal.util.MultiException: Error restarting
bundles
at
org.apache.karaf.features.internal.service.Deployer.deploy(Deployer.java:848)[9:org.apache.karaf.features.core:4.0.5]
at
org.apache.karaf.features.internal.service.FeaturesServiceImpl.doProvision(FeaturesServiceImpl.java:1152)[9:org.apache.karaf.features.core:4.0.5]
at
org.apache.karaf.features.internal.service.FeaturesServiceImpl$1.call(FeaturesServiceImpl.java:1048)[9:org.apache.karaf.features.core:4.0.5]
at java.util.concurrent.FutureTask.run(FutureTask.java:266)[:1.8.0_74]
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)[:1.8.0_74]
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)[:1.8.0_74]
at java.lang.Thread.run(Thread.java:745)[:1.8.0_74]
Caused by: org.osgi.framework.BundleException: Activator start error in
bundle org.apache.aries.jpa.container [38].
at
org.apache.felix.framework.Felix.activateBundle(Felix.java:2276)[org.apache.felix.framework-5.4.0.jar:]
at
org.apache.felix.framework.Felix.startBundle(Felix.java:2144)[org.apache.felix.framework-5.4.0.jar:]
at
org.apache.felix.framework.BundleImpl.start(BundleImpl.java:998)[org.apache.felix.framework-5.4.0.jar:]
at
org.apache.felix.framework.BundleImpl.start(BundleImpl.java:984)[org.apache.felix.framework-5.4.0.jar:]
at
org.apache.karaf.features.internal.service.FeaturesServiceImpl.startBundle(FeaturesServiceImpl.java:1262)[9:org.apache.karaf.features.core:4.0.5]
at
org.apache.karaf.features.internal.service.Deployer.deploy(Deployer.java:840)[9:org.apache.karaf.features.core:4.0.5]
... 6 more
Caused by: java.lang.IllegalArgumentException:
org.osgi.framework.InvalidSyntaxException: Only one top-level operation
allowed: (&(objectClass=javax.sql.DataSource)(osgi.jndi.service.name
=osgi:service/javax.sql.XADataSource/(osgi.jndi.service.name
=jdbc/filetransferhistoryjta)))
at
org.apache.aries.jpa.container.impl.DataSourceTracker.createFilter(DataSourceTracker.java:64)[38:org.apache.aries.jpa.container:2.3.0]
at
org.apache.aries.jpa.container.impl.DataSourceTracker.<init>(DataSourceTracker.java:46)[38:org.apache.aries.jpa.container:2.3.0]
at
org.apache.aries.jpa.container.impl.PersistenceProviderTracker.createDataSourceTracker(PersistenceProviderTracker.java:120)[38:org.apache.aries.jpa.container:2.3.0]
at
org.apache.aries.jpa.container.impl.PersistenceProviderTracker.addingService(PersistenceProviderTracker.java:87)[38:org.apache.aries.jpa.container:2.3.0]
at
org.apache.aries.jpa.container.impl.PersistenceProviderTracker.addingService(PersistenceProviderTracker.java:44)[38:org.apache.aries.jpa.container:2.3.0]
at
org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:941)[org.osgi.core-6.0.0.jar:]
at
org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:870)[org.osgi.core-6.0.0.jar:]
at
org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:256)[org.osgi.core-6.0.0.jar:]
at
org.osgi.util.tracker.AbstractTracked.trackInitial(AbstractTracked.java:183)[org.osgi.core-6.0.0.jar:]
at
org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:318)[org.osgi.core-6.0.0.jar:]
at
org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:261)[org.osgi.core-6.0.0.jar:]
at
org.apache.aries.jpa.container.impl.PersistenceBundleTracker.trackProvider(PersistenceBundleTracker.java:106)[38:org.apache.aries.jpa.container:2.3.0]
at
org.apache.aries.jpa.container.impl.PersistenceBundleTracker.findPersistenceUnits(PersistenceBundleTracker.java:90)[38:org.apache.aries.jpa.container:2.3.0]
at
org.apache.aries.jpa.container.impl.PersistenceBundleTracker.addingBundle(PersistenceBundleTracker.java:69)[38:org.apache.aries.jpa.container:2.3.0]
at
org.apache.aries.jpa.container.impl.PersistenceBundleTracker.addingBundle(PersistenceBundleTracker.java:40)[38:org.apache.aries.jpa.container:2.3.0]
at
org.osgi.util.tracker.BundleTracker$Tracked.customizerAdding(BundleTracker.java:469)[org.osgi.core-6.0.0.jar:]
at
org.osgi.util.tracker.BundleTracker$Tracked.customizerAdding(BundleTracker.java:415)[org.osgi.core-6.0.0.jar:]
at
org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:256)[org.osgi.core-6.0.0.jar:]
at
org.osgi.util.tracker.AbstractTracked.trackInitial(AbstractTracked.java:183)[org.osgi.core-6.0.0.jar:]
at
org.osgi.util.tracker.BundleTracker.open(BundleTracker.java:156)[org.osgi.core-6.0.0.jar:]
at
org.apache.aries.jpa.container.impl.Activator.start(Activator.java:43)[38:org.apache.aries.jpa.container:2.3.0]
at
org.apache.felix.framework.util.SecureAction.startActivator(SecureAction.java:697)[org.apache.felix.framework-5.4.0.jar:]
at
org.apache.felix.framework.Felix.activateBundle(Felix.java:2226)[org.apache.felix.framework-5.4.0.jar:]
... 11 more
Caused by: org.osgi.framework.InvalidSyntaxException: Only one top-level
operation allowed: (&(objectClass=javax.sql.DataSource)(
osgi.jndi.service.name=osgi:service/javax.sql.XADataSource/(
osgi.jndi.service.name=jdbc/filetransferhistoryjta)))
at
org.apache.felix.framework.FilterImpl.<init>(FilterImpl.java:51)[org.apache.felix.framework-5.4.0.jar:]
at
org.apache.felix.framework.BundleContextImpl.createFilter(BundleContextImpl.java:134)[org.apache.felix.framework-5.4.0.jar:]
at
org.apache.aries.jpa.container.impl.DataSourceTracker.createFilter(DataSourceTracker.java:62)[38:org.apache.aries.jpa.container:2.3.0]
... 33 more

It seems like the JNDI search has two top-level operations which doesn't
seem to be allowed. Looking at the exception it looks like one top level
operation to me. The operation is "&" ("and") and the two expressions that
should be "anded" together are:


*(objectClass=javax.sql.DataSource)*

and


*(osgi.jndi.service.name
<http://osgi.jndi.service.name>=osgi:service/javax.sql.XADataSource/(osgi.jndi.service.name
<http://osgi.jndi.service.name>=jdbc/filetransferhistoryjta))*

But the second expression looks a bit fishy to me although I'm not a JNDI
expert.


I assume the expressions has its origins in my persistence.xml:

*<?xml version="1.0" encoding="UTF-8"?>*
*<persistence xmlns="http://java.sun.com/xml/ns/persistence
<http://java.sun.com/xml/ns/persistence>"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance
<http://www.w3.org/2001/XMLSchema-instance>"*
*  xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
<http://java.sun.com/xml/ns/persistence>
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd
<http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd>"*
*  version="2.0">*
*  <persistence-unit name="filetransferhistoryPU" transaction-type="JTA">*
*
<provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>*
*
<jta-data-source>osgi:service/javax.sql.XADataSource/(osgi.jndi.service.name
<http://osgi.jndi.service.name>=jdbc/filetransferhistoryjta)</jta-data-source>*
*
<non-jta-data-source>osgi:service/javax.sql.DataSource/(osgi.jndi.service.name
<http://osgi.jndi.service.name>=jdbc/filetransferhistorynojta)</non-jta-data-source>*
*    <class>se.digia.connect.filetransfer.history.domain.Entry</class>*
*    <class>se.digia.connect.filetransfer.history.domain.FileEntry</class>*
*    <class>se.digia.connect.filetransfer.history.domain.Retry</class>*
*    <class>se.digia.connect.util.persistence.EntityBase</class>*
*    <exclude-unlisted-classes>true</exclude-unlisted-classes>*
*    <validation-mode>NONE</validation-mode>*
*    <properties>*
*      <property name="openjpa.ConnectionFactoryMode" value="managed" />*
*      <property name="openjpa.jdbc.SynchronizeMappings"
value="buildSchema(ForeignKeys=true)" />*
*      <property name="openjpa.jdbc.DBDictionary" value="derby" />*
*      <property name="openjpa.jdbc.UpdateManager" value="operation-order"
/>*
*      <property name="openjpa.Log" value="DefaultLevel=WARN, Tool=INFO" />*
*    </properties>*
*  </persistence-unit>*
*</persistence>*

I have both a <jta-data-source> and a <non-jta-data-source>. Is that not
supported anymore?

/Bengt














2016-07-07 15:28 GMT+02:00 Bengt Rodehav <[email protected]>:

> OK - I'll try.
>
> Thanks,
>
> /Bengt
>
> 2016-07-07 15:22 GMT+02:00 Christian Schneider <[email protected]>:
>
>> Hmm this could actually explain the problems we see. I always wondered
>> why karaf insists to install the 2.1 version of the jpa spec bundle but
>> this explains it.
>>
>> Luckily this should be easy to solve. Try to install the OSGi jpa spec
>> bundle:
>>
>> http://search.maven.org/#artifactdetails%7Corg.osgi%7Corg.osgi.service.jpa%7C1.0.0%7Cjar
>>
>> It should contain exactly the missing package. I think we are missing
>> this bundle in the feature. We just did not see it as it is embeded in the
>> jpa 2.1 spec bundle we use.
>> You could also try to simply add this bundle to the persistence-api 2.0.0
>> feature. Maybe then karaf already does the right thing.
>>
>> Christian
>>
>>
>> On 07.07.2016 15:04, Bengt Rodehav wrote:
>>
>>
>> It seems like the or.apache.aries.jpa.container requires the package
>> org.osgi.service.jpa (at least version 1.0.0) and that package is only
>> provided by the JPA 2.1 bundle...
>>
>> Hope you understand this a bit better than me but it does not seem to be
>> easy to come up with a working solution including OpenJPA 2.4.1 in Karar
>> 4.0.5. If you have a workaround to try before you get a fix inte Karaf
>> 4.0.6 I would be grateful.
>>
>> /Bengt
>>
>>
>>
>> 2016-07-07 14:17 GMT+02:00 Bengt Rodehav <[email protected]>:
>>
>>> OK - thanks a lot for all your help Christian.
>>>
>>> /Bengt
>>>
>>>
>>> 2016-07-07 14:14 GMT+02:00 Christian Schneider <
>>> <[email protected]>[email protected]>:
>>>
>>>> Genereally Aries JPA should work with OpenJPA 2.4.1 but I think there
>>>> is some bug in karaf 4.0.5.
>>>>
>>>> I just tested again and found that persistence api 2.0 and 2.1 are both
>>>> installed. This fails as Aries JPA can only bind to one of these and will
>>>> choose the higher version.
>>>> As a workaround you should be able to create your own feature copied
>>>> from the Aries JPA feature but make sure you install the persistence api
>>>> only in version 2.0.
>>>>
>>>> I will try to create a working version of the features for karaf 4.0.6.
>>>>
>>>> Christian
>>>>
>>>>
>>>>
>>>> On 07.07.2016 14:07, Bengt Rodehav wrote:
>>>>
>>>> Installing feature "openjpa" also installs JPA 2.0 (version 1.1) so I
>>>> shouldn't need to install JPA manually as well. However, then I won't get
>>>> the Aries support for JPA. Feels a bit weird.
>>>>
>>>> What Aries JPa version should be used together with OpenJPA 2.4.1?
>>>>
>>>> /Bengt
>>>>
>>>> 2016-07-07 14:04 GMT+02:00 Bengt Rodehav < <[email protected]>
>>>> [email protected]>:
>>>>
>>>>> It seems to be the "jpa" feature that installs JPA 2.1.
>>>>>
>>>>> 2016-07-07 13:58 GMT+02:00 Bengt Rodehav < <[email protected]>
>>>>> [email protected]>:
>>>>>
>>>>>> On a fresh Karaf 4.0.5 I do:
>>>>>>
>>>>>> *la | grep -i jpa*
>>>>>> *la | grep -i persistence*
>>>>>>
>>>>>> Nothing is displayed. I then do:
>>>>>>
>>>>>>
>>>>>> *feature:install openjpa jpa *
>>>>>>
>>>>>> If I then execute the above commands I get:
>>>>>>
>>>>>> *karaf@root()> la | grep -i jpa*
>>>>>> *62 | Active   |  80 | 2.3.0               | Apache Aries JPA
>>>>>> Container API*
>>>>>> *63 | Active   |  80 | 2.3.0               | Apache Aries JPA
>>>>>> blueprint*
>>>>>> *64 | Active   |  80 | 2.3.0               | Apache Aries JPA
>>>>>> container*
>>>>>> *65 | Active   |  80 | 2.3.0               | Apache Aries JPA support*
>>>>>> *71 | Active   |  80 | 1.1                 | Apache Geronimo JSR-317
>>>>>> JPA 2.0 Spec AP*
>>>>>> *73 | Active   |  80 | 2.4.1               | OpenJPA Aggregate Jar*
>>>>>> *karaf@root()> la | grep -i persistence*
>>>>>> *55 | Active   |  80 | 2.1.0.v201304241213 | Java Persistence API 2.1*
>>>>>> *karaf@root()>*
>>>>>>
>>>>>> So JPA 2.1 has indeed been installed. I don't know if this is why I
>>>>>> have problems but it still seems strange.
>>>>>>
>>>>>> /Bengt
>>>>>>
>>>>>>
>>>>>> 2016-07-07 13:11 GMT+02:00 Christian Schneider <
>>>>>> <[email protected]>[email protected]>:
>>>>>>
>>>>>>> Can you start from an empty karaf 4.0.5 and then do
>>>>>>>
>>>>>>> feature:install openjpa jpa
>>>>>>>
>>>>>>> This should install openjpa 2.4.1 and aries jpa 2.3.0 with
>>>>>>> javax.persistence 2.0 and jta 1.2.
>>>>>>>
>>>>>>> This configuration should work. So maybe something else you install
>>>>>>> requires the jpa 2.1 spec.
>>>>>>>
>>>>>>> Christian
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On 07.07.2016 10:28, Bengt Rodehav wrote:
>>>>>>>
>>>>>>> Reading your post again Christian I realize that I should not use
>>>>>>> JPA 2.1 but JPA 2.0.
>>>>>>>
>>>>>>> I seem to have JPA 2.0 and JPA 2.1 installed at runtime:
>>>>>>>
>>>>>>> *karaf@root()> la | grep -i jpa*
>>>>>>> * 37 | Active   |  80 | 2.3.0                 | Apache Aries JPA
>>>>>>> Container API*
>>>>>>> * 38 | Active   |  80 | 2.3.0                 | Apache Aries JPA
>>>>>>> blueprint*
>>>>>>> * 39 | Active   |  80 | 2.3.0                 | Apache Aries JPA
>>>>>>> container*
>>>>>>> * 40 | Active   |  80 | 2.3.0                 | Apache Aries JPA
>>>>>>> support*
>>>>>>> * 70 | Active   |  80 | 1.1                   | Apache Geronimo
>>>>>>> JSR-317 JPA 2.0 Spec API*
>>>>>>> *106 | Active   |  80 | 2.4.1                 | OpenJPA Aggregate
>>>>>>> Jar*
>>>>>>> *karaf@root()> la | grep -i persistence*
>>>>>>> * 17 | Active   |  80 | 2.1.0.v201304241213   | Java Persistence API
>>>>>>> 2.1*
>>>>>>> *175 | Active   |  80 | 2.8.0.SNAPSHOT        | Connect ::
>>>>>>> persistence-util*
>>>>>>>
>>>>>>> I don't really know why the JPA version 2.1 (2.1.0.v201304241213) is
>>>>>>> being installed. I do not do this explicitly.
>>>>>>>
>>>>>>> Looking at OpenJPA 2.4.1, it seems to depend on JTA 1.1 not JTA 1.2.
>>>>>>>
>>>>>>> Looked again at my JPA version. I do use JPA 2.0. But I use version
>>>>>>> 1.1 of artifact geronimo-jpa_2.0_spec which caused me to believe I was
>>>>>>> using JPA 1.1....
>>>>>>>
>>>>>>> I'm still kind of confused. It would be thankful if you could tell
>>>>>>> me what features (and versions of those features) I should install in 
>>>>>>> order
>>>>>>> to use the latest version (2.4.1) of OpenJPA.
>>>>>>>
>>>>>>> /Bengt
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> Christian Schneiderhttp://www.liquid-reality.de
>>>>>>>
>>>>>>> Open Source Architecthttp://www.talend.com
>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>> Christian Schneiderhttp://www.liquid-reality.de
>>>>
>>>> Open Source Architecthttp://www.talend.com
>>>>
>>>>
>>>
>>
>>
>> --
>> Christian Schneiderhttp://www.liquid-reality.de
>>
>> Open Source Architecthttp://www.talend.com
>>
>>
>

Reply via email to