aries-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Timothy Ward <timothyjw...@hotmail.com>
Subject RE: OSGi JPA and JDBC Services
Date Fri, 17 Sep 2010 08:18:57 GMT

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: Harald.Wellmann@multi-m.de
> To: aries-user@incubator.apache.org
> 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
 		 	   		  
Mime
View raw message