geronimo-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Rex Wang <>
Subject [Discussion] JPA Pluggability
Date Tue, 05 Apr 2011 09:16:21 GMT
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:

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:
    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

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:
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