Hi Harald, The Aries project aims to provide a managed programming model, and as such the Aries JPA runtime is not an implementation of the JPA service specification.
As a result I'm afraid my first answer is no, Aries JPA cannot be used to get unmanaged JPA support, however if you declare your persistence units to use RESOURCE_LOCAL transactions then there shouldn't be a need for OpenJPA to load any JTA classes. Please let me know if OpenJPA continues to complain about the lack of JTA interfaces for RESOURCE_LOCAL persistence units and I'll try to get that fixed. For your requirements you should need two bundles from the Aries JPA project, the Aries JPA API bundle and the Aries JPA container bundle. You will also need the Aries Util bundle, which the JPA project uses. For reference, the JPA container bundles provide the following support: jpa-api :- Core interfaces used by the Aries JPA runtime and Service providers jpa-container :- The core JPA container, provides managed EntityManager factories for use in Application-Managed JPA jpa-container-context :- JPA managed persistence context support, allows for bundles to be registered as clients of a managed persistence context jpa-blueprint-aries :- Integration with the aries blueprint service providing a custom namespace for JPA resource injection The Aries JPA container is loosely coupled, so it is entirely possible to pick the bundles you need for the support you want, though each piece of support builds upon the previous one, so it doesn't make much sense to have managed persistence context support without managed persistence unit support. There's no need to use blueprint, Declarative Services is perfectly capable of retrieving EntityManagerFactory services from the service registry. How data sources are discovered depends upon how they are configured, if you use the <jta-data-source> or <non-jta-data-source> tag, then the Aries JPA container will use JNDI to get the resource registered with that JNDI name. In most cases you actually want to access a DataSource object in the service registry, which means you need the Aries JNDI support (available as a single bundle, or as separate core and URL handler bundles) which provides the osgi: namespace. If you want to specify database driver class names in the <properties> section of the persistence unit then the JPA provider needs to be able to load those drivers. I do not know whether OpenJPA has support for the OSGi JDBC service specification, or whether they will simply try to load the driver classes, and so this may not work. I hope this message has been helpful, and I agree that there is insufficient documentation in this area. I would be more than happy for any Aries users to contribute information that they find useful so that better documentation can be built. Regards, Tim ---------------------------------------- > From: [email protected] > To: [email protected] > Date: Thu, 16 Sep 2010 20:31:48 +0200 > Subject: OSGi JPA and JDBC Services > > I'm currently trying to make OpenJPA 2.0.1 work in an OSGi environment, and > while looking for examples, I found a pointer to Apache Aries on the OpenJPA > Users' mailing list. > > So I had a look at the Aries website, checked out the latest code from trunk, > played around with it for a couple of hours and was left with no usable > result - it sort of feels like being offered a four course meal when all you > were asking for was a plate of soup, and you don't even get a spoon... > > All I want to do is use OpenJPA in plain old unmanaged mode and have it > discover my persistence units and load classes from my application bundles > without DynamicImport-Package, buddy policies or fragments. I am currently > perfectly happy with Declarative Services and have no intention of converting > my application to Blueprint. > > Can Aries be used to achieve just that? If so, what is the minimum set of > Aries bundles I need to include in my application? > > I got as far as having my persistence unit discovered, but on creating an > EntityManagerFactory, OpenJPA always complained about missing JTA support. > Does Aries implement unmanaged JPA at all? (It is supported by the OSGi JPA > spec, at any rate.) I can only see a call of > PersistenceProvider.createContainerEntityManagerFactory() in Aries and no > occurrence of createEntityManagerFactory(). On the OpenJPA side, there is > some code related to OSGi classloaders, but again, this is just used for the > managed factories and not for the unmanaged ones. > > Another question: how does the Persistence Provider discover the data source > - where does the magic happen so that the lookup of > osgi:service:/javax.sql.DataSource will work? Is that done by Aries alone, or > does the persistence provider need to be OSGi aware in this respect? > > Thanks in advance for any hints! > > Best regards, > Harald
