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: [email protected]
> To: [email protected]
> 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$classresolveri...@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.persistenceunitinfoi...@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
                                          

Reply via email to