openjpa-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Bengt Rodehav <be...@rodehav.com>
Subject Re: Auditor and OSGi
Date Tue, 06 Sep 2011 19:43:33 GMT
Hello again,

As I didn't get any replies on this post here on the OpenJPA forum I tried
on the Aries list since I thought the problem might lie in Aries JPA
container. I got the following reply from Timothy Ward:

*"This sort of problem is usually caused by a JPA provider using the wrong
> classloader to try and find your class. If you import the
> se.digia.maia.common.auditlog.impl package into your persistence bundle
> *and* OpenJPA uses the Persistence Unit classloader (rather than its own) to
> load it then everything should work fine. Realistically they should try both
> their classloader and the persistence unit classloader in case the config
> property is for their own internals.
> Unfortunately there is a limit to how much Aries can shield JPA providers
> from OSGi classloading!"*


Looking at the stack trace it seems clear that OpenJPA tries to load my
Auditor implementation using its own class loader. Unless OpenJPA
dynamically imports "*" this won't work. OpenJPA needs to use the class
loader of the bundle containing the persistence.xml. In my case this will
work since that bundle does import the package containing my Auditor
implementation.

Can someone on the OpenJPA team confirm this? Shalll I create a JIRA?

/Bengt


2011/9/4 Bengt Rodehav <bengt@rodehav.com>

> Hello everyone,
>
> After a long discussion about audit logging on this mailing list, Pinaki
> developed an audit logging facility that he describes on:
>
> http://openjpa.208410.n2.nabble.com/OpenJPA-Audit-Facility-tc6722915.html
>
> It provides very interesting functionality and I've tried it in simple
> JUnit scenarios using RESOURCE_LOCAL and it seems to work fine. However, my
> production environment nowadays is OSGi using Karaf+Felix. I use Aries for
> transaction support and also for it's JPA support. In that environment,
> OpenJPA doesn't seem to be able to find my auditor implementation
> (se.digia.maia.common.auditlog.impl.MaiaAuditor) that I specify in my
> persistence.xml.
>
> Has anyone else tried OpenJPA's new audit log facility? How can I make
> OpenJPA find classes specified in the persistence.xml? I have double-checked
> that the se.digia.maia.common.auditlog.impl is exported from my implementing
> bundle.
>
> I get the following exception:
>
> *ERROR: Bundle org.apache.aries.jpa.container [21] EventDispatcher: Error
>> during dispatch. (<openjpa-2.2.0-SNAPSHOT-runknown fatal user error>
>> org.apache.openjpa.persistence.ArgumentException: Could not invoke the
>> static newInstance method on the named factory class
>> "org.apache.openjpa.jdbc.kernel.JDBCBrokerFactory".)
>> <openjpa-2.2.0-SNAPSHOT-runknown fatal user error>
>> org.apache.openjpa.persistence.ArgumentException: Could not invoke the
>> static newInstance method on the named factory class
>> "org.apache.openjpa.jdbc.kernel.JDBCBrokerFactory".
>>  at
>> org.apache.openjpa.kernel.Bootstrap.newBrokerFactory(Bootstrap.java:76)
>> at
>> org.apache.openjpa.persistence.PersistenceProviderImpl.getBrokerFactory(PersistenceProviderImpl.java:147)
>>  at
>> org.apache.openjpa.persistence.PersistenceProviderImpl.createContainerEntityManagerFactory(PersistenceProviderImpl.java:185)
>> at
>> org.apache.openjpa.persistence.PersistenceProviderImpl.createContainerEntityManagerFactory(PersistenceProviderImpl.java:62)
>>  at
>> org.apache.aries.jpa.container.impl.EntityManagerFactoryManager.createEntityManagerFactories(EntityManagerFactoryManager.java:263)
>> at
>> org.apache.aries.jpa.container.impl.EntityManagerFactoryManager.bundleStateChange(EntityManagerFactoryManager.java:153)
>>  at
>> org.apache.aries.jpa.container.impl.PersistenceBundleManager.modifiedBundle(PersistenceBundleManager.java:283)
>> at
>> org.osgi.util.tracker.BundleTracker$Tracked.customizerModified(BundleTracker.java:453)
>>  at org.osgi.util.tracker.AbstractTracked.track(AbstractTracked.java:237)
>> at
>> org.osgi.util.tracker.BundleTracker$Tracked.bundleChanged(BundleTracker.java:413)
>>  at
>> org.apache.felix.framework.util.EventDispatcher.invokeBundleListenerCallback(EventDispatcher.java:807)
>> at
>> org.apache.felix.framework.util.EventDispatcher.fireEventImmediately(EventDispatcher.java:729)
>>  at
>> org.apache.felix.framework.util.EventDispatcher.fireBundleEvent(EventDispatcher.java:610)
>> at org.apache.felix.framework.Felix.fireBundleEvent(Felix.java:3879)
>>  at org.apache.felix.framework.Felix.access$800(Felix.java:79)
>> at
>> org.apache.felix.framework.Felix$StatefulResolver.fireResolvedEvents(Felix.java:4491)
>>  at
>> org.apache.felix.framework.Felix$StatefulResolver.resolve(Felix.java:4162)
>> at org.apache.felix.framework.Felix.resolveBundle(Felix.java:3557)
>>  at org.apache.felix.framework.Felix.startBundle(Felix.java:1797)
>> at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1192)
>>  at
>> org.apache.felix.framework.StartLevelImpl.run(StartLevelImpl.java:266)
>> at java.lang.Thread.run(Thread.java:662)
>> Caused by: org.apache.openjpa.lib.util.ParseException: Instantiation of
>> plugin "Auditor" with value "se.digia.maia.common.auditlog.impl.MaiaAuditor"
>> caused an error "java.lang.IllegalArgumentException:
>> java.lang.ClassNotFoundException:
>> se.digia.maia.common.auditlog.impl.MaiaAuditor". The alias or class name may
>> have been misspelled, or the class may not have be available in the class
>> path. Valid aliases for this plugin are: [default]
>>  at
>> org.apache.openjpa.lib.conf.Configurations.getCreateException(Configurations.java:409)
>> at
>> org.apache.openjpa.lib.conf.Configurations.newInstance(Configurations.java:219)
>>  at
>> org.apache.openjpa.lib.conf.ObjectValue.newInstance(ObjectValue.java:124)
>> at
>> org.apache.openjpa.lib.conf.PluginValue.instantiate(PluginValue.java:103)
>>  at
>> org.apache.openjpa.lib.conf.ObjectValue.instantiate(ObjectValue.java:83)
>> at
>> org.apache.openjpa.conf.OpenJPAConfigurationImpl.getAuditorInstance(OpenJPAConfigurationImpl.java:1822)
>>  at
>> org.apache.openjpa.kernel.AbstractBrokerFactory.postCreationCallback(AbstractBrokerFactory.java:854)
>> at
>> org.apache.openjpa.jdbc.kernel.JDBCBrokerFactory.postCreationCallback(JDBCBrokerFactory.java:105)
>>  at
>> org.apache.openjpa.kernel.Bootstrap.newBrokerFactory(Bootstrap.java:67)
>> ... 21 more
>> Caused by: java.lang.IllegalArgumentException:
>> java.lang.ClassNotFoundException:
>> se.digia.maia.common.auditlog.impl.MaiaAuditor
>>  at serp.util.Strings.toClass(Strings.java:164)
>> at serp.util.Strings.toClass(Strings.java:108)
>> at
>> org.apache.openjpa.lib.conf.Configurations.newInstance(Configurations.java:211)
>>  ... 28 more*
>
>
> /Bengt
>
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message