The contract requirement is the recommended way to use the JPA API in OSGi. The versioning applied by most JSRs (JPA included) is not semantic, and so cannot be relied upon (for example JPA 2.0 is backward compatible with 1.0, Servlet 4 is backward compatible with 3.1).
Portable Java Contract definitions have been around for a long time (several years), and the latest round of OSGi specifications are using them to guarantee compatibility between clients and implementations. As Aries JPA will be the reference implementation of the OSGi JPA service in OSGi Release 7 there was some work done to ensure that Aries JPA properly honours the JPA contract (release 2.7.0 of Aries JPA will be the RI release). This release is tested (and working) with Hibernate, EclipseLink and OpenJPA. Requiring a contract definition is very simple when using bnd, or a bnd-based tool. You can simply add: -contract: JavaJPA to your bnd configuration and it will make sure that your bundle uses the contract correctly. Regards, Tim Ward OSGi IoT Expert Group Chair [email protected] <mailto:[email protected]> > On 22 Nov 2017, at 09:20, João Assunção <[email protected]> wrote: > > I use Hibernate as the persistence engine and the following features: > > * jdbc > * pax-jdbc-h2 > * pax-jdbc-postgresql > * jpa > * hibernate > > In other projects I used eclipselink and they both work great. > > I noticed the missing requirement osgi.contract=JavaJPA. I don't use that in > my JPA bundles, and after some investigation I noticed it was introduced > recently in the snapshot version of aries JPA. > > Try to use the examples from aries.jpa version 2.6.1 > > > João Assunção > > Email: [email protected] <mailto:[email protected]> > Mobile: +351 916968984 > Phone: +351 211933149 > Web: www.exploitsys.com <http://www.exploitsys.com/> > > > > On Tue, Nov 21, 2017 at 4:24 PM, Jean-Baptiste Onofré <[email protected] > <mailto:[email protected]>> wrote: > Let me take a look'm. I was swamped on meetings today. > > Regards > JB > On Nov 21, 2017, at 17:23, Alex Soto <[email protected] > <mailto:[email protected]>> wrote: > Thank you Francois, I tried EclipseLink, but it still doesn’t work. I am > doing all this interactively on a fresh Karaf installation. In my case since > I do not have an actual database server, so I am using H2. I installed the > following features: > > feature:install jdbc > feature:install jndi > feature:install jpa > feature:install transaction > feature:install eclipselink > feature:install pax-jdbc > feature:install pax-jdbc-config > feature:install pax-jdbc-h2 > feature:install pax-jdbc-pool-dbcp2 > > list > > START LEVEL 100 , List Threshold: 50 > ID │ State │ Lvl │ Version │ Name > ───────────── > 28 │ Active │ 80 │ 4.1.3 │ Apache Karaf :: OSGi > Services :: Event > 53 │ Active │ 80 │ 1.9.2.1 │ Apache ServiceMix :: > Bundles :: jasypt > 54 │ Active │ 80 │ 1.5.0 │ OPS4J Base - Service > Provider Access > 55 │ Active │ 80 │ 1.1.0 │ OPS4J Pax JDBC Generic > Driver Extender > 56 │ Active │ 80 │ 1.1.0 │ OPS4J Pax JDBC Config > 57 │ Active │ 80 │ 1.1.0 │ OPS4J Pax JDBC Pooling > Support Base > 58 │ Active │ 80 │ 1.0.0.201505202023 │ > org.osgi:org.osgi.service.jdbc > 59 │ Active │ 80 │ 4.1.3 │ Apache Karaf :: JDBC :: Core > 67 │ Active │ 80 │ 3.0.0 │ Expression Language 3.0 API > 68 │ Active │ 80 │ 1.2.0 │ CDI APIs > 69 │ Active │ 80 │ 1.2 │ javax.interceptor API > 70 │ Active │ 80 │ 1.2 │ javax.transaction API > 71 │ Active │ 80 │ 2.6.1 │ Apache Aries JPA Container > API > 72 │ Active │ 80 │ 2.6.1 │ Apache Aries JPA blueprint > 73 │ Active │ 80 │ 2.6.1 │ Apache Aries JPA container > 74 │ Active │ 80 │ 2.6.1 │ Apache Aries JPA support > 77 │ Active │ 80 │ 1.6.0 │ Commons Pool > 78 │ Active │ 80 │ 1.0.2 │ Apache Felix Coordinator > Service > 79 │ Active │ 80 │ 1.1.1 │ geronimo-jms_1.1_spec > 81 │ Active │ 80 │ 1.2 │ geronimo-servlet_2.5_spec > 83 │ Active │ 80 │ 1.7.0.6 │ Apache ServiceMix :: > Bundles :: ant > 84 │ Active │ 80 │ 1.4.0.3 │ Apache ServiceMix :: > Bundles :: commons-dbcp > 85 │ Active │ 80 │ 1.0.0.2 │ Apache ServiceMix :: > Bundles :: javax.inject > 88 │ Active │ 80 │ 1.1.1 │ Apache Aries Transaction > Blueprint > 89 │ Active │ 80 │ 2.1.0 │ Apache Aries Transaction > Blueprint > 90 │ Active │ 80 │ 1.3.3 │ Apache Aries Transaction > Manager > 91 │ Active │ 80 │ 2.1.0.v201304241213 │ Java Persistence API 2.1 > 92 │ Active │ 80 │ 2.6.1 │ Apache Aries JPA Container > adapter for EclipseLink > 93 │ Active │ 80 │ 3.2.0.v201302191141 │ EclipseLink ANTLR > 94 │ Active │ 80 │ 5.0.1.v201405080102 │ EclipseLink ASM > 95 │ Active │ 80 │ 2.6.4.v20160829-44060b6 │ EclipseLink Core > 96 │ Active │ 80 │ 2.6.4.v20160829-44060b6 │ EclipseLink JPA > 97 │ Active │ 80 │ 2.6.4.v20160829-44060b6 │ EclipseLink Hermes Parser > 98 │ Active │ 80 │ 1.3.172 │ H2 Database Engine > 99 │ Active │ 80 │ 2.1.1 │ Apache Commons DBCP > 100 │ Active │ 80 │ 2.4.2 │ Apache Commons Pool > 101 │ Active │ 80 │ 3.2.4.1 │ Apache ServiceMix :: > Bundles :: cglib > 102 │ Active │ 80 │ 1.1.0 │ OPS4J Pax JDBC Pooling DBCP2 > 103 │ Installed │ 80 │ 2.7.0.SNAPSHOT │ Apache Aries JPA example > tasklist model > > > Copied file: org.ops4j.datasource-tasklist.cfg. to etc containing: > > osgi.jdbc.driver.name <http://osgi.jdbc.driver.name/>=H2 > databaseName=tasklist;create=true > dataSourceName=tasklist > pool=dbcp2 > xa=true > jdbc.pool.maxTotal=8 > > No data source is created, either command: service:list DataSource, or > jdbc:ds-list don't show any data source. > Trying to deploy Aries-example jar > > install -s > mvn:org.apache.aries.jpa.example/org.apache.aries.jpa.example.tasklist.model/2.7.0-SNAPSHOT > > Produces Error: > > Error executing command: Error installing bundles: > Unable to start bundle > mvn:org.apache.aries.jpa.example/org.apache.aries.jpa.example.tasklist.model/2.7.0-SNAPSHOT: > org.osgi.framework.BundleException: Unable to resolve > org.apache.aries.jpa.example.tasklist.model [103](R 103.0): missing > requirement [org.apache.aries.jpa.example.tasklist.model [103](R 103.0)] > osgi.contract; (&(osgi.contract=JavaJPA)(version=2.1.0)) Unresolved > requirements: [[org.apache.aries.jpa.example.tasklist.model [103](R 103.0)] > osgi.contract; (&(osgi.contract=JavaJPA)(version=2.1.0))] > > > I am at evaluation/proof-of-concept stage, just trying to figure out what > works out-of-the-box, so I don’t have a project created, I am just using the > Aries JPA example. It does not look good as a viable approach so far. > > Best regards, > Alex soto > > > >> On Nov 21, 2017, at 10:44 AM, Francois Papon < [email protected] >> <mailto:[email protected]>> wrote: >> >> Hi, >> >> I use EclipseLink for JPA implementation in a custo Karaf distribution and >> it work's well. >> >> In my persistence feature pom I have this dependencies : >> >> <dependency> >> <groupId>org.osgi</groupId> >> <artifactId>org.osgi.core</artifactId> >> <scope>provided</scope> >> </dependency> >> >> <dependency> >> <groupId>org.osgi</groupId> >> <artifactId>osgi.cmpn</artifactId> >> <scope>provided</scope> >> </dependency> >> <!-- JPA --> >> <dependency> >> <groupId>org.eclipse.persistence</groupId> >> <artifactId>javax.persistence</artifactId> >> <scope>provided</scope> >> </dependency> >> <dependency> >> <groupId>org.apache.aries.jpa</groupId> >> <artifactId>org.apache.aries.jpa.api</artifactId> >> <scope>provided</scope> >> </dependency> >> >> and in my assembly this feature on boot : >> <feature>jdbc</feature> >> <feature>jndi</feature> >> <feature>jpa</feature> >> >> <feature>transaction</feature> >> <feature>eclipselink</feature> >> >> <feature>pax-jdbc</feature> >> <feature>pax-jdbc-config</feature> >> <feature>pax-jdbc-pool-hikaricp</feature> >> <feature>pax-jdbc-pool-aries</feature> >> <feature>pax-jdbc-postgresql</feature> >> >> in the etc folder the database config file >> "org.ops4j.datasource-mydatasource.cfg" : >> >> osgi.jdbc.driver.class=org.postgresql.Driver >> dataSourceName=my-datasource >> databaseName=my-database >> serverName=172.17.0.2 >> portNumber=5432 >> user=dbuser >> password=dbpassword >> >> Hope this help. >> >> Le 21/11/2017 à 17:57, Alex Soto a écrit : >>> Does anybody know a good, simple step by step tutorial on how to quickly >>> start using JPA 2.1 with Karaf 4.1.3? >>> At this point I am not requiring any specific JPA implementation/version >>> (Hibernate vs. any other). >>> So far using Karaf’s default has not worked for me. I would expect Karaf’s >>> defaults should work out our the box. >>> >>> >>>> On Nov 20, 2017, at 2:54 PM, Jean-Baptiste Onofré < [email protected] >>>> <mailto:[email protected]>> wrote: >>>> >>>> Ok, I see hibernate now. Let me check if I see the jpa spec bundle. >>>> >>>> Regards >>>> JB >>>> On Nov 20, 2017, at 20:42, Alex Soto < [email protected] >>>> <mailto:[email protected]>> wrote: >>>> Thank you JB for the quick response. >>>> OK, so I installed the jpa feature: >>>> >>>> feature:install jpa >>>> >>>> karaf@root()> list >>>> START LEVEL 100 , List Threshold: 50 >>>> ID │ State │ Lvl │ Version │ Name >>>> ────┼───────────┼─────┼────────────────────┼────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── >>>> 28 │ Active │ 80 │ 4.1.3 │ Apache Karaf :: OSGi Services >>>> :: Event >>>> 52 │ Active │ 80 │ 1.3.0 │ ClassMate >>>> 53 │ Active │ 80 │ 3.20.0.GA <http://3.20.0.ga/> │ Javassist >>>> 54 │ Active │ 80 │ 1.2 │ javax.interceptor API >>>> 55 │ Active │ 80 │ 1.6.6 │ Byte Buddy (without >>>> dependencies) >>>> 56 │ Active │ 80 │ 2.7.7.5 │ Apache ServiceMix :: Bundles >>>> :: antlr >>>> 57 │ Active │ 80 │ 1.6.1.5 │ Apache ServiceMix :: Bundles >>>> :: dom4j >>>> 58 │ Active │ 80 │ 5.0.1.Final │ hibernate-commons-annotations >>>> 59 │ Active │ 80 │ 5.2.8.Final │ hibernate-core >>>> 60 │ Active │ 80 │ 1.0.0.Final │ hibernate-jpa-2.1-api >>>> 61 │ Active │ 80 │ 5.2.8.Final │ hibernate-osgi >>>> 62 │ Active │ 80 │ 2.0.3.Final │ Java Annotation Indexer >>>> 63 │ Active │ 80 │ 3.3.0.Final │ JBoss Logging 3 >>>> 65 │ Active │ 80 │ 1.9.2.1 │ Apache ServiceMix :: Bundles >>>> :: jasypt >>>> 66 │ Active │ 80 │ 1.1.0 │ OPS4J Pax JDBC Config >>>> 67 │ Active │ 80 │ 1.1.0 │ OPS4J Pax JDBC Pooling >>>> Support Base >>>> 68 │ Active │ 80 │ 1.0.0.201505202023 │ org.osgi:org.osgi.service.jdbc >>>> 69 │ Active │ 80 │ 1.3.172 │ H2 Database Engine >>>> 117 │ Active │ 80 │ 1.2.0 │ CDI APIs >>>> 118 │ Active │ 80 │ 1.2 │ javax.transaction API >>>> 119 │ Active │ 80 │ 1.1.1 │ Apache Aries Transaction >>>> Blueprint >>>> 120 │ Active │ 80 │ 2.1.0 │ Apache Aries Transaction >>>> Blueprint >>>> 121 │ Active │ 80 │ 1.3.3 │ Apache Aries Transaction >>>> Manager >>>> 122 │ Active │ 80 │ 1.0.2 │ Apache Felix Coordinator >>>> Service >>>> 123 │ Active │ 80 │ 1.0.0.2 │ Apache ServiceMix :: Bundles >>>> :: javax.inject >>>> 124 │ Installed │ 80 │ 2.7.0.SNAPSHOT │ Apache Aries JPA example >>>> tasklist model >>>> 125 │ Active │ 80 │ 2.6.1 │ Apache Aries JPA Container API >>>> 126 │ Active │ 80 │ 2.6.1 │ Apache Aries JPA blueprint >>>> 127 │ Active │ 80 │ 2.6.1 │ Apache Aries JPA container >>>> 128 │ Active │ 80 │ 2.6.1 │ Apache Aries JPA support >>>> 129 │ Active │ 80 │ 1.1.1 │ geronimo-jms_1.1_spec >>>> 130 │ Active │ 80 │ 1.7.0.6 │ Apache ServiceMix :: Bundles >>>> :: antThe same problem persists >>>> >>>> And >>>> >>>> karaf@root()> bundle:diag 124 >>>> Apache Aries JPA example tasklist model (124) >>>> --------------------------------------------- >>>> Status: Installed >>>> Unsatisfied Requirements: >>>> [org.apache.aries.jpa.example.tasklist.model [124](R 124.0)] osgi.service; >>>> (osgi.jndi.service.name <http://osgi.jndi.service.name/>=tasklist) >>>> [org.apache.aries.jpa.example.tasklist.model [124](R 124.0)] >>>> osgi.contract; (&(osgi.contract=JavaJPA)(version=2.1.0)) >>>> Declarative Services >>>> >>>> >>>> Or is it something else I need to install? >>>> >>>> Best regards, >>>> >>>> Alex soto >>>> [email protected] <mailto:[email protected]> >>>> >>>> >>>> >>>>> On Nov 20, 2017, at 2:31 PM, Jean-Baptiste Onofré < [email protected] >>>>> <mailto:[email protected]>> wrote: >>>>> >>>>> I don't see the jpa engine in your bundle list ? Openjpa, hibernate, >>>>> eclipselink ? >>>>> The jpa version depends of the engine. >>>>> >>>>> Regards >>>>> JB >>>>> On Nov 20, 2017, at 20:09, Alex Soto < [email protected] >>>>> <mailto:[email protected]>> wrote: >>>>> Hello, >>>>> >>>>> This is my first attempt to use JPA with Karaf, so I am trying to follow >>>>> example from https://github.com/apache/aries-jpa >>>>> <https://github.com/apache/aries-jpa> using Karaf 4.1.3, so far >>>>> unsuccessfully. >>>>> On a clean Karaf I have installed the following: >>>>> >>>>> feature:install hibernate-orm >>>>> feature:install pax-jdbc-config >>>>> feature:install pax-jdbc-h2 >>>>> feature:install http-whiteboard >>>>> feature:install scr >>>>> feature:install transaction >>>>> >>>>> Then I copied the data source config file >>>>> org.ops4j.datasource-tasklist.cfg to the Karaf’s etc directory. >>>>> >>>>> Now, when I install the first Example bundle: >>>>> >>>>> install -s >>>>> mvn:org.apache.aries.jpa.example/org.apache.aries.jpa.example.tasklist.model/2.7.0-SNAPSHOT >>>>> Error executing command: Error installing bundles: >>>>> Unable to start bundle >>>>> mvn:org.apache.aries.jpa.example/org.apache.aries.jpa.example.tasklist.model/2.7.0-SNAPSHOT: >>>>> org.osgi.framework.BundleException: Unable to resolve >>>>> org.apache.aries.jpa.example.tasklist.model [124](R 124.0): missing >>>>> requirement [org.apache.aries.jpa.example.tasklist.model [124](R 124.0)] >>>>> osgi.contract; (&(osgi.contract=JavaJPA)(version=2.1.0)) Unresolved >>>>> requirements: [[org.apache.aries.jpa.example.tasklist.model [124](R >>>>> 124.0)] osgi.contract; (&(osgi.contract=JavaJPA)(version=2.1.0))] >>>>> >>>>> list >>>>> START LEVEL 100 , List Threshold: 50 >>>>> ID │ State │ Lvl │ Version │ Name >>>>> ────┼────────┼─────┼────────────────────┼─────────────────────────────────────────── >>>>> 28 │ Active │ 80 │ 4.1.3 │ Apache Karaf :: OSGi Services >>>>> :: Event >>>>> 52 │ Active │ 80 │ 1.3.0 │ ClassMate >>>>> 53 │ Active │ 80 │ 3.20.0.GA <http://3.20.0.ga/> │ Javassist >>>>> 54 │ Active │ 80 │ 1.2 │ javax.interceptor API >>>>> 55 │ Active │ 80 │ 1.6.6 │ Byte Buddy (without >>>>> dependencies) >>>>> 56 │ Active │ 80 │ 2.7.7.5 │ Apache ServiceMix :: Bundles :: >>>>> antlr >>>>> 57 │ Active │ 80 │ 1.6.1.5 │ Apache ServiceMix :: Bundles :: >>>>> dom4j >>>>> 58 │ Active │ 80 │ 5.0.1.Final │ hibernate-commons-annotations >>>>> 59 │ Active │ 80 │ 5.2.8.Final │ hibernate-core >>>>> 60 │ Active │ 80 │ 1.0.0.Final │ hibernate-jpa-2.1-api >>>>> 61 │ Active │ 80 │ 5.2.8.Final │ hibernate-osgi >>>>> 62 │ Active │ 80 │ 2.0.3.Final │ Java Annotation Indexer >>>>> 63 │ Active │ 80 │ 3.3.0.Final │ JBoss Logging 3 >>>>> 65 │ Active │ 80 │ 1.9.2.1 │ Apache ServiceMix :: Bundles :: >>>>> jasypt >>>>> 66 │ Active │ 80 │ 1.1.0 │ OPS4J Pax JDBC Config >>>>> 67 │ Active │ 80 │ 1.1.0 │ OPS4J Pax JDBC Pooling Support >>>>> Base >>>>> 68 │ Active │ 80 │ 1.0.0.201505202023 │ org.osgi:org.osgi.service.jdbc >>>>> 69 │ Active │ 80 │ 1.3.172 │ H2 Database Engine >>>>> 117 │ Active │ 80 │ 1.2.0 │ CDI APIs >>>>> 118 │ Active │ 80 │ 1.2 │ javax.transaction API >>>>> 119 │ Active │ 80 │ 1.1.1 │ Apache Aries Transaction >>>>> Blueprint >>>>> 120 │ Active │ 80 │ 2.1.0 │ Apache Aries Transaction >>>>> Blueprint >>>>> 121 │ Active │ 80 │ 1.3.3 │ Apache Aries Transaction Manager >>>>> 122 │ Active │ 80 │ 1.0.2 │ Apache Felix Coordinator Service >>>>> 123 │ Active │ 80 │ 1.0.0.2 │ Apache ServiceMix :: Bundles :: >>>>> javax.injec >>>>> >>>>> bundle:diag 124 >>>>> Unsatisfied Requirements: >>>>> [org.apache.aries.jpa.example.tasklist.model [124](R 124.0)] >>>>> osgi.service; (osgi.jndi.service.name >>>>> <http://osgi.jndi.service.name/>=tasklist) >>>>> [org.apache.aries.jpa.example.tasklist.model [124](R 124.0)] >>>>> osgi.contract; (&(osgi.contract=JavaJPA)(version=2.1.0)) >>>>> >>>>> >>>>> Any idea how to troubleshoot this problem? >>>>> >>>>> Best regards, >>>>> Alex soto >>>>> >>>>> >>>>> >>>> >>> >> > >
