Thanks, I think I finally understood now. I first thought that I should continue to publish my datasource with Blueprint but that they would automagically be wrapped. But I now understand that this is an alternative to publishing the datasources with Blueprint. I have replaced my Blueprint with the pax-jdbc system. It seems to work fine.
A follow-up question. We also use Microsoft SQLServer which is not supported by pax-jdbc. How is that solved? /Bengt 2016-07-08 10:52 GMT+02:00 Christian Schneider <[email protected]>: > To make JTA work you have to wrap the XADataSource inside a DataSource > that announces the connection to the jta server as a transactional > resource. This is quite difficult to do by hand. > So pax-jdbc makes that easier. > > Pax jdbc provides access to DataSources based on the OSGi jdbc spec which > defines a DataSourceFactory. This allows to create a DataSource without > directly depending on a driver. > Then there is pax-jdbc-pool-dbcp2 which wraps a plain DataSourceFactory to > provide a DataSourceFactory that creates correctly wrapped DataSources. > The last part is pax-jdbc-config which automatically creates DataSource > based on a config admin config. > > So you just have to install the pax-jdbc features and create a config and > you get a fully XA capable DataSource. The nice thing is that you just have > to use a different db driver bundle and > a changed config to switch from one db to another. So it is really easy to > use derby in tests and oracle in prod. > > See > > https://github.com/cschneider/Karaf-Tutorial/blob/master/tasklist-ds/features/src/main/resources/features.xml > For the features you need > > and > > https://github.com/cschneider/Karaf-Tutorial/blob/master/tasklist-ds/org.ops4j.datasource-tasklist.cfg > for the config. > > The example uses H2 but you can adapt it to derby. I suggest to first get > it working with H2. > > Christian > > On 08.07.2016 10:14, Bengt Rodehav wrote: > > Hi again Christian, > > You are right. If I provide a DataSource instead of an XADataSource it > works. I tested it quickly by using my <non-jta-data-source> as the > <jta-data-source>. Then things hooked up and I can access the database. > > Now, the DataSource I use underneath is > an org.apache.derby.jdbc.EmbeddedDataSource (instead > of org.apache.derby.jdbc.EmbeddedXADataSource) so I guess XA transactions > won't work. > > I didn't quite understand the documentation you referred to. Today I > publish two datasources: > > *[javax.sql.DataSource]* > *----------------------* > * osgi.jndi.service.name <http://osgi.jndi.service.name> = > jdbc/filetransferhistorynojta* > * osgi.service.blueprint.compname = derbyDataSource* > * service.bundleid = 178* > * service.id <http://service.id> = 341* > * service.scope = bundle* > *Provided by :* > * Connect :: filetransfer-history-datasource (178)* > *Used by:* > * Apache Aries JPA container (38)* > > *karaf@root()> service:list XADataSource* > *[javax.sql.XADataSource]* > *------------------------* > * osgi.jndi.service.name <http://osgi.jndi.service.name> = > jdbc/filetransferhistoryjta* > * osgi.service.blueprint.compname = derbyXADataSource* > * service.bundleid = 178* > * service.id <http://service.id> = 342* > * service.scope = bundle* > *Provided by :* > * Connect :: filetransfer-history-datasource (178)* > > I do this with Blueprint (doesn't matter I guess). > > Now, which one of them should I publish? I assume the DataSource. > > If I install the pax-jdbc-pool-aries (is this the one you recommend?). I > now get: > > *karaf@root()> service:list DataSource* > *[javax.sql.DataSource]* > *----------------------* > * osgi.jndi.service.name <http://osgi.jndi.service.name> = > jdbc/filetransferhistorynojta* > * osgi.service.blueprint.compname = derbyDataSource* > * service.bundleid = 178* > * service.id <http://service.id> = 332* > * service.scope = bundle* > *Provided by :* > * Connect :: filetransfer-history-datasource (178)* > *Used by:* > * Connect :: filetransfer-history-datasource (178)* > * Apache Aries JPA container (38)* > > *[javax.sql.DataSource]* > *----------------------* > * aries.managed = true* > * osgi.jndi.service.name <http://osgi.jndi.service.name> = > jdbc/filetransferhistorynojta* > * osgi.service.blueprint.compname = derbyDataSource* > * service.bundleid = 178* > * service.id <http://service.id> = 410* > * service.ranking = 1000* > * service.scope = singleton* > *Provided by :* > * Connect :: filetransfer-history-datasource (178)* > *Used by:* > * Apache Aries JPA container (38)* > > *[javax.sql.DataSource]* > *----------------------* > * aries.managed = true* > * aries.xa.aware = true* > * osgi.jndi.service.name <http://osgi.jndi.service.name> = > jdbc/filetransferhistoryjta* > * osgi.service.blueprint.compname = derbyXADataSource* > * service.bundleid = 178* > * service.id <http://service.id> = 415* > * service.ranking = 1000* > * service.scope = singleton* > *Provided by :* > * Connect :: filetransfer-history-datasource (178)* > > *karaf@root()> service:list XADataSource* > *[javax.sql.XADataSource]* > *------------------------* > * osgi.jndi.service.name <http://osgi.jndi.service.name> = > jdbc/filetransferhistoryjta* > * osgi.service.blueprint.compname = derbyXADataSource* > * service.bundleid = 178* > * service.id <http://service.id> = 331* > * service.scope = bundle* > *Provided by :* > * Connect :: filetransfer-history-datasource (178)* > *Used by:* > * Connect :: filetransfer-history-datasource (178)* > > What I do not understand is that I now have two services of each class but > the osgi.jndi.service.name hasn't changed. Which one will actually be > used? I thought the wrapper would have a different name (with "-pool" at > the end) and that name is what I would refer to in the persistence.xml. > > I can see that two of the services have "service.ranking = 1000". Are > these the wrappers? Does the high rank ensure that it will be chosen > instead of changing the name? > > /Bengt > > > > > > 2016-07-08 9:08 GMT+02:00 Christian Schneider <[email protected]>: > >> You can have two DataSources in the persistence.xml but only one will be >> used. If you set *transaction-type="JTA" * >> then only the jta DataSource will be used. So this is not the problem. >> >> The problem is that you set an XADataSource >> *<jta-data-source>osgi:service/javax.sql.XADataSource/(osgi.jndi.service.name >> <http://osgi.jndi.service.name>=jdbc/filetransferhistoryjta)</jta-data-source>* >> >> What you need is an OSGi service of type DataSource that internally wraps >> an XADataSource. This is a common pattern that also JEE servers use. >> The easiest way to achieve this is to use the config, pooling and XA >> support of pax-jdbc. See >> >> https://ops4j1.jira.com/wiki/display/PAXJDBC/Pooling+and+XA+support+for+DataSourceFactory >> >> Apart from that I think your setup looks good now. >> >> Could you open an issue in the karaf jira about the problems with the >> openjpa feature? I will fix it then for the next karaf version. >> >> Christian >> >> >> On 07.07.2016 16:18, Bengt Rodehav wrote: >> >> I assume that I cannot reference two datasources from my persistence.xml. >> I therefore removed the <non-jta-data-source>. >> >> This makes the JNDI problem go away. >> >> I now have a EntityManagerFactoryBuilder published as a service: >> >> *karaf@root()> service:list EntityManagerFactoryBuilder* >> *[org.osgi.service.jpa.EntityManagerFactoryBuilder]* >> *--------------------------------------------------* >> * osgi.unit.name <http://osgi.unit.name> = filetransferhistoryPU* >> * osgi.unit.provider = >> org.apache.openjpa.persistence.PersistenceProviderImpl* >> * osgi.unit.version = 2.8.0.SNAPSHOT* >> * service.bundleid = 38* >> * service.id <http://service.id> = 346* >> * service.scope = singleton* >> *Provided by :* >> * Apache Aries JPA container (38)* >> >> But no EntityManager or EntityManagerFactory: >> >> >> *karaf@root()> service:list EntityManagerFactory * >> >> *karaf@root()> service:list EntityManager * >> >> *karaf@root()> * >> >> Which (after a while of "grace period") causes this: >> >> *2016-07-07 16:10:07,546 | ERROR | rint Extender: 1 | >> BlueprintContainerImpl | ntainer.BlueprintContainerImpl$1 374 | >> Unable to start blueprint container for bundle >> se.digia.connect.services.filetransfer.history-db/2.8.0.SNAPSHOT due to >> unresolved dependencies [(&(osgi.unit.name >> <http://osgi.unit.name>=filetransferhistoryPU)(objectClass=javax.persistence.EntityManager))]* >> *java.util.concurrent.TimeoutException* >> * at >> org.apache.aries.blueprint.container.BlueprintContainerImpl$1.run(BlueprintContainerImpl.java:371)[24:org.apache.aries.blueprint.core:1.6.1]* >> * at >> org.apache.aries.blueprint.utils.threading.impl.DiscardableRunnable.run(DiscardableRunnable.java:48)[24:org.apache.aries.blueprint.core:1.6.1]* >> * at >> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)[:1.8.0_74]* >> * at java.util.concurrent.FutureTask.run(FutureTask.java:266)[:1.8.0_74]* >> * at >> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)[:1.8.0_74]* >> * at >> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)[: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]* >> >> >> I feel like I'm getting closer but there is still something missing to >> get all the way to an EntityManager... >> >> /Bengt >> >> >> >> >> >> >> >> >> >> >> >> 2016-07-07 15:56 GMT+02:00 Bengt Rodehav < <[email protected]> >> [email protected]>: >> >>> Both data sources are published: >>> >>> *karaf@root()> service:list DataSource* >>> *[javax.sql.DataSource]* >>> *----------------------* >>> * osgi.jndi.service.name <http://osgi.jndi.service.name> = >>> jdbc/filetransferhistorynojta* >>> * osgi.service.blueprint.compname = derbyDataSource* >>> * service.bundleid = 178* >>> * service.id <http://service.id> = 323* >>> * service.scope = bundle* >>> *Provided by :* >>> * Connect :: filetransfer-history-datasource (178)* >>> >>> *karaf@root()> service:list XADataSource* >>> *[javax.sql.XADataSource]* >>> *------------------------* >>> * osgi.jndi.service.name <http://osgi.jndi.service.name> = >>> jdbc/filetransferhistoryjta* >>> * osgi.service.blueprint.compname = derbyXADataSource* >>> * service.bundleid = 178* >>> * service.id <http://service.id> = 324* >>> * service.scope = bundle* >>> *Provided by :* >>> * Connect :: filetransfer-history-datasource (178)* >>> >>> The problem seems to be that I cannot refer to both of them in >>> persistence.xml... >>> >>> /Bengt >>> >>> >>> 2016-07-07 15:48 GMT+02:00 Bengt Rodehav < <[email protected]> >>> [email protected]>: >>> >>>> 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 >>>> <http://java.sun.com/xml/ns/persistence>" xmlns:xsi=" >>>> <http://www.w3.org/2001/XMLSchema-instance>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> >>>> 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]> >>>> [email protected]>: >>>> >>>>> OK - I'll try. >>>>> >>>>> Thanks, >>>>> >>>>> /Bengt >>>>> >>>>> 2016-07-07 15:22 GMT+02:00 Christian Schneider < >>>>> <[email protected]>[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> >>>>>> 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]> >>>>>> [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 >>>>>> >>>>>> >>>>> >>>> >>> >> >> >> -- >> Christian Schneiderhttp://www.liquid-reality.de >> >> Open Source Architecthttp://www.talend.com >> >> > > > -- > Christian Schneiderhttp://www.liquid-reality.de > > Open Source Architecthttp://www.talend.com > >
