geronimo-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Ivan <>
Subject Re: [Discussion] JPA Pluggability
Date Tue, 05 Apr 2011 10:02:31 GMT
I like the idea in #2, and it is reasonable to analysis the persitence.xml
and add the proper import packages.

2011/4/5 Rex Wang <>

> HI Devs,
> These days I am looking into this new feature that we need implement to
> comply the Java EE 6 Spec.
> This feature requires the ability to "plug-in" a vendor JPA Provider to the
> Java EE server, and the JPA app can "pick-up" the vendor provider and get
> the corresponding EntityManagerFactory. That is, let's take a use case for
> example, the steps are:
> a. User put a Oracle topLink.jar into the server's lib folder.
> b. In the JPA app's persistence.xml, specify the provider as following:
> <provider>oracle.toplink.essentials.ejb.cmp3.EntityManagerFactoryProvider</provider>
> Then the entity manager factory should be created from the toplink's
> EntityManagerFactoryProvider by our server.
> Currently, we don't have such ability because of the following obstacles:
> 1. We are running server on OSGi framework. There is not way to just put-in
> a jar file and make it work for other Bundles' classloader.
> 2. We are tight coupling the JPA20 builder to Openjpa. In the
> PersistenceUnitBuilder, we set the defaultEnvironment with:
>                 <dependencies>
>                     <dependency>
>                         <groupId>org.apache.geronimo.configs</groupId>
>                         <artifactId>openjpa2</artifactId>
>                         <version>${version}</version>
>                         <type>car</type>
>                     </dependency>
>                 </dependencies>
>     This will add all the export-packages from openjpa to the JPA app
> bundle when deploy, but it is actually useless for the ones specified other
> vendor providers.
> For #1, I think we should add the ability to convert a normal jar to OSGi
> bundle. I looked into the maven-bundle-plugin, and the aQute bndlib should
> be a good tool to do this. We can just provide the basic function that wrap
> a jar and:
>   Export-Package: *
>   Import-Package: <packages inside the target jar>
> to make it as bundle. And in the long term, we can provide a portlet in
> admin console for user to customizing his bundle.
> For #2, User need input the dependency in the jpa app's deployment plan and
> specify to the bundle generated by geronimo in #1, such as:
>                 <dependencies>
>                     <dependency>
>                         <groupId>geronimo.generated.bundles</groupId>
>                         <artifactId>topLink</artifactId>
>                         <version>1.0</version>
>                         <type>jar</type>
>                     </dependency>
>                 </dependencies>
> Then all the topLink export-packages will be imported by the jpa app bundle
> of user. We won't need merge the defaultEnviroment(i.e. openjpa) in the
> PersistenceUnitBuilder if use specify a vendor provider in persistence.xml.
> Another approach is we can add the
> imports "oracle.toplink.essentials.ejb.cmp3;" when analyzing the
> persistence.xml in PersistenceUnitBuilder so that user won't need manually
> add a deployment plan and input the dependency.
> Any comments?
> --
> Lei Wang (Rex)
> rwonly AT


View raw message