aries-user mailing list archives

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

Hi Harald,

I have two questions:

1. Are you pre-enhancing your Entity classes? This is a requirement using the base Aries JPA
container as load-time weaving cannot be supported in a generic OSGi framework (although some
runtimes extend the Aries code to provide this, e.g. Geronimo and WebSphere).

2. Are you listing all of your entity classes in the persistence unit definition and setting
<exclude-unlisted-classes>false</exclude-unlisted-classes>? In unmanaged JPA you
are supposed to do this (though many providers support scanning in unmanaged environments).
In OSGi scanning doesn't work the same way, and is, once again, not supported in the Aries
JPA container (though it is provided in WebSphere).

Both of these limitations will (hopefully) be lifted in the future, but they will need to
rely on features proposed for version 4.3 of OSGi, and so there's not a lot we can do about
them at the moment.

Regards,

Tim

----------------------------------------
> From: Harald.Wellmann@multi-m.de
> To: aries-user@incubator.apache.org
> Date: Fri, 17 Sep 2010 14:41:06 +0200
> Subject: AW: OSGi JPA and JDBC Services
>
> Thanks, Tim and Alasdair, for your clarifications - I wasn't aware of the Aries JNDI
service before, and I didn't have an explicit transaction-type="RESOURCE_LOCAL" in persistence.xml.
>
> I had another try with the aries.jpa.api, aries.jpa.container and aries.util bundles
added to my application. My persistence unit gets discovered, and I can see an EntityManagerFactory
in the service registry. However, this factory is not usable, because of the following errors:
>
>
> 36 test.openjpa TRACE [Start Level Event Dispatcher] openjpa.MetaData - Scanning URL
"bundleresource://11.fwk1603837828/" for persistent types.
> 0 test.openjpa TRACE [Start Level Event Dispatcher] openjpa.Runtime - Setting the following
properties from "?" into configuration: {openjpa.BrokerFactory=jdbc, javax.persistence.validation.mode=AUTO,
openjpa.RuntimeUnenhancedClasses=supported, openjpa.BrokerImpl=non-finalizing, openjpa.MetaDataFactory=jpa(URLs=bundleresource://11.fwk1603837828/,
Types=test.openjpa.model.Book), openjpa.ClassResolver=org.apache.openjpa.persistence.PersistenceUnitInfoImpl$ClassResolverImpl@42f1916f,
javax.persistence.sharedCache.mode=UNSPECIFIED, openjpa.jdbc.DBDictionary=org.apache.openjpa.jdbc.sql.PostgresDictionary(storeCharsAsNumbers=false),
openjpa.Log=DefaultLevel=TRACE, PersistenceVersion=2.0, openjpa.Id=test.openjpa}
> 15 test.openjpa WARN [Start Level Event Dispatcher] openjpa.Runtime - An error occurred
while registering a ClassTransformer with org.apache.aries.jpa.container.unit.impl.PersistenceUnitInfoImpl@69264eab.
The error is logged along with this warning. Load-time class transformation will not be available.
> org.apache.commons.lang.exception.NestableRuntimeException: Error extracting class information
from "bundleresource://11.fwk1603837828/".
> at org.apache.openjpa.lib.meta.ClassArgParser.parseTypeNames(ClassArgParser.java:249)
> at org.apache.openjpa.meta.AbstractCFMetaDataFactory.parsePersistentTypeNames(AbstractCFMetaDataFactory.java:724)
>
> ...
> Caused by: java.io.FileNotFoundException: /appl/plugins/test.openjpa/bin (Is a directory)
> at java.io.FileInputStream.open(Native Method)
> at java.io.FileInputStream.(FileInputStream.java:106)
> at org.eclipse.osgi.framework.util.SecureAction.getFileInputStream(SecureAction.java:124)
> at org.eclipse.osgi.baseadaptor.bundlefile.FileBundleEntry.getInputStream(FileBundleEntry.java:56)
> at org.eclipse.osgi.framework.internal.core.BundleURLConnection.connect(BundleURLConnection.java:53)
> at org.eclipse.osgi.framework.internal.core.BundleURLConnection.getInputStream(BundleURLConnection.java:99)
> at java.net.URL.openStream(URL.java:1010)
> at org.apache.openjpa.lib.util.J2DoPrivHelper$41.run(J2DoPrivHelper.java:907)
> at org.apache.openjpa.lib.util.J2DoPrivHelper$41.run(J2DoPrivHelper.java:905)
> at java.security.AccessController.doPrivileged(Native Method)
> at org.apache.openjpa.lib.meta.URLMetaDataIterator.getInputStream(URLMetaDataIterator.java:67)
> at org.apache.openjpa.lib.meta.ClassArgParser.parseTypeNames(ClassArgParser.java:246)
>
>
>
> The problem appears to be the bundleresource://... URL returned by PersistenceUnitInfoImpl.getPersistenceUnitRootUrl(),
which OpenJPA thinks is a file, not a directory. I'm not really intimate with pax-exam, but
apparently it installs all bundles as JARs, whereas I'm launching Equinox directly from the
Eclipse IDE, so my bundles are installed from class folders, not from JARs, which might explain
why the Aries integration tests work and my setup does not...
>
> Anyway, it seems this is an issue on the OpenJPA side and not in Aries, so I'm going
to cross-post this on the OpenJPA mailing list.
>
> Best regards,
>
> Harald
 		 	   		  
Mime
View raw message