Christian,
I may suggest to look fist at the runtime configuration - it's
possible that there are two conflicting bundles exporting the same
version of the package.
I am attaching the list bundles from my runtime (eclipse launch
configuration).
Also it is always useful to make use of the equinox console for
analysis of the bundles, their content and state. I wasted a lot
of time before I discovered it.
<stringAttribute key="selected_target_plugins" value=
"javax.transaction@default:false,
org.apache.aries.blueprint@default:default,
org.apache.aries.jndi@default:default,
org.apache.aries.jpa.api@default:default,
org.apache.aries.jpa.blueprint.aries@default:default,
org.apache.aries.jpa.container.context@default:default,
org.apache.aries.jpa.container@default:default,
org.apache.aries.proxy@default:default,
org.apache.aries.transaction.blueprint@default:default,
org.apache.aries.transaction.manager@default:default,
org.apache.aries.transaction.wrappers@default:default,
org.apache.aries.util@default:default,
org.apache.commons.collections*3.2.1@default:default,
org.apache.commons.lang*2.5.0@default:default,
org.apache.commons.logging*1.1.1.v201005080502@default:default,
org.apache.commons.pool@default:default,
org.apache.geronimo.components.geronimo-transaction@default:default,
org.apache.geronimo.specs.geronimo-j2ee-connector_1.5_spec@default:default,
org.apache.geronimo.specs.geronimo-jpa_2.0_spec@default:default,
org.apache.geronimo.specs.geronimo-jta_1.1_spec@default:default,
org.apache.geronimo.specs.geronimo-servlet_2.5_spec@default:default,
org.apache.log4j@default:default,
org.apache.openjpa@default:default,
org.apache.servicemix.bundles.serp@default:default,
org.eclipse.equinox.cm@default:default,
org.eclipse.equinox.ds@1:true,
org.eclipse.equinox.io@default:default,
org.eclipse.equinox.util@default:default,
org.eclipse.osgi*3.7.2.v20120110-1415@-1:true,
org.eclipse.osgi.services*3.3.0.v20110513@default:default,
org.eclipse.persistence.jpa.equinox.weaving@default:false,
org.hamcrest.core@default:default,
org.junit*4.8.2.v4_8_2_v20110321-1705@default:default,
org.objectweb.asm.all@default:default,
org.ops4j.pax.logging.pax-logging-api@default:default,
org.ops4j.pax.logging.pax-logging-service@default:default"/>
On 17/10/2012 4:16 AM, Christian Eugster wrote:
Hi,
I have setup a little project with aries blueprint + jpa and
eclipselink (with aries.eclipselink.adapter). Backend is Derby
embedded driver. I have tree bundles, a datasource bundle for
derby (ch.eugster.herakles.datasource.derby), a jpa persistence
bundle (ch.eugster.herakles.persistence) with persistence.xml,
orm.xml and persistence classes (Tectonic, TectonicsLevel,
TectonicsLevelLink) and a junit test bundle
(ch.eugster.herakles.persistence.test).
The testclass contains two testmethods so far, one checks if a
TectonicsService exists (testValidService) and a method that tries
to persist an object of type Tectonic (testPersist). Running the
test, the first method passes, but the second throws the following
message:
[code]
java.lang.LinkageError: loader constraint violation: when
resolving interface method
"javax.transaction.Transaction.enlistResource(Ljavax/transaction/xa/XAResource;)Z"
the class loader (instance of
org/eclipse/osgi/internal/baseadaptor/DefaultClassLoader) of the
current class,
org/apache/aries/transaction/jdbc/XADatasourceEnlistingWrapper,
and the class loader (instance of
org/eclipse/osgi/internal/baseadaptor/DefaultClassLoader) for
resolved class, javax/transaction/Transaction, have different
Class objects for the type javax/transaction/xa/XAResource used in
the signature
at
org.apache.aries.transaction.jdbc.XADatasourceEnlistingWrapper.enlist(XADatasourceEnlistingWrapper.java:102)
at
org.apache.aries.transaction.jdbc.XADatasourceEnlistingWrapper.getConnection(XADatasourceEnlistingWrapper.java:65)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at
org.apache.aries.proxy.impl.ProxyHandler$1.invoke(ProxyHandler.java:54)
at
org.apache.aries.proxy.impl.ProxyHandler.invoke(ProxyHandler.java:119)
at $Proxy15.getConnection(Unknown Source)
at
org.apache.aries.jpa.container.unit.impl.DelayedLookupDataSource.getConnection(DelayedLookupDataSource.java:36)
at
org.eclipse.persistence.sessions.JNDIConnector.connect(JNDIConnector.java:123)
at
org.eclipse.persistence.sessions.DatasourceLogin.connectToDatasource(DatasourceLogin.java:162)
at
org.eclipse.persistence.internal.databaseaccess.DatasourceAccessor.connectInternal(DatasourceAccessor.java:330)
at
org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.connectInternal(DatabaseAccessor.java:295)
at
org.eclipse.persistence.internal.databaseaccess.DatasourceAccessor.connect(DatasourceAccessor.java:418)
at
org.eclipse.persistence.sessions.server.ConnectionPool.buildConnection(ConnectionPool.java:216)
at
org.eclipse.persistence.sessions.server.ExternalConnectionPool.startUp(ExternalConnectionPool.java:146)
at
org.eclipse.persistence.sessions.server.ServerSession.connect(ServerSession.java:489)
at
org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.loginAndDetectDatasource(DatabaseSessionImpl.java:639)
at
org.eclipse.persistence.internal.jpa.EntityManagerFactoryProvider.login(EntityManagerFactoryProvider.java:214)
at
org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:500)
at
org.eclipse.persistence.internal.jpa.EntityManagerFactoryDelegate.getDatabaseSession(EntityManagerFactoryDelegate.java:189)
at
org.eclipse.persistence.internal.jpa.EntityManagerFactoryDelegate.createEntityManagerImpl(EntityManagerFactoryDelegate.java:278)
at
org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManagerImpl(EntityManagerFactoryImpl.java:304)
at
org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:289)
at
org.apache.aries.jpa.container.impl.CountingEntityManagerFactory.createEntityManager(CountingEntityManagerFactory.java:71)
at
org.apache.aries.jpa.container.context.transaction.impl.JTAPersistenceContextRegistry.getCurrentPersistenceContext(JTAPersistenceContextRegistry.java:152)
at
org.apache.aries.jpa.container.context.transaction.impl.JTAEntityManager.getPersistenceContext(JTAEntityManager.java:84)
at
org.apache.aries.jpa.container.context.transaction.impl.JTAEntityManager.persist(JTAEntityManager.java:278)
at
ch.eugster.herakles.persistence.internal.service.AbstractEntityServiceComponent.persist(AbstractEntityServiceComponent.java:104)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at
org.apache.aries.proxy.impl.ProxyHandler$1.invoke(ProxyHandler.java:54)
at
org.apache.aries.proxy.impl.ProxyHandler.invoke(ProxyHandler.java:119)
at $Proxy6.persist(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at
org.apache.aries.proxy.impl.ProxyHandler$1.invoke(ProxyHandler.java:54)
at
org.apache.aries.proxy.impl.ProxyHandler.invoke(ProxyHandler.java:119)
at $Proxy6.persist(Unknown Source)
at
ch.eugster.herakles.persistence.test.TestCase.testPersist(TestCase.java:57)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at
org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
at
org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at
org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
at
org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at
org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
at
org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
at
org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java:79)
at
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:71)
at
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
at
org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
at
org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
at
org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at
org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at
org.eclipse.pde.internal.junit.runtime.RemotePluginTestRunner.main(RemotePluginTestRunner.java:62)
at
org.eclipse.pde.internal.junit.runtime.CoreTestApplication.run(CoreTestApplication.java:23)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at
org.eclipse.equinox.internal.app.EclipseAppContainer.callMethodWithException(EclipseAppContainer.java:587)
at
org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:198)
at
org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
at
org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
at
org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:353)
at
org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:180)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at
org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:629)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:584)
at org.eclipse.equinox.launcher.Main.run(Main.java:1438)
at org.eclipse.equinox.launcher.Main.main(Main.java:1414)
[/code]
I understand, that there is a classloader issue but I don't know
why it comes up and how I can resolve this problem. May anyone
give me a hint?
Thank you!
--
Anatoly Osiko
Software Engineer, Integration
SolveIT Software Pty Ltd
Adelaide | Brisbane | Chisinau | Melbourne | Perth
D: +61 8 7071 4918
T: +61 8 8221 5533
M: +61 4 1980 0386
F: +61 8 8221 5677
SolveIT Software Building
Level 1, 99 Frome Street,
Adelaide, SA 5000
www.SolveITSoftware.com