Maybe this has already been considered, but could one bundle be picking up XAResource from the JDK and the other from the Aries Transactions support? Javax.transaction.xa is a split package with only a subset coming from the jdk. The best solution IIRC is to make sure you don't resolve to the JDK for this package.
Regards, Graham. On 18 October 2012 08:46, Anatoly Osiko <a...@solveitsoftware.com> wrote: > Yes. I switched between openjpa and eclipselink. In any case, I import the > package as optional. > > > On 18/10/2012 6:13 PM, Christian Eugster wrote: > > Hi Anatoly, > > then is your org.eclipse.persistence.jpa.equinox.weaving@default:false > bundle dispensable? I the meantime I tried your configuration (see my other > message) > > Regards, > > Christian > > Am 18.10.12 09:36, schrieb Anatoly Osiko: > > Just a quick reply .... > > 1) There are no eclipselink bundles, there are only eclipse bundles. > 2) > $ grep 'javax.transaction.xa' *.jar > Binary file geronimo-jta_1.1_spec-1.1.1.jar matches > Binary file org.apache.aries.transaction.manager-1.0.0.jar matches > Binary file pax-web-jetty-bundle-0.8.1.jar matches > > So, geronimo-jta_1.1_spec-1.1.1.jar is an API bundle and > geronimo-transaction-2.1.3.jar > (bundle name org.apache.geronimo.components.geronimo-transaction) seems to > be an implementation bundle. As I recollect. > > org.apache.aries.transaction.manager-1.0.0.jar seems to use geronimo tx > implementation by default. > The aries has also option to use Spring transaction implementation. > Neither worked for me though. > > And I can't tell for sure that all geronimo bundles are required - I seem to > grab them from the aries blog sample's dependencies which I used as an > example. At least org.apache.aries.transaction.manager-1.0.0.jar depends on > geronimo-j2ee-connector_1.5_spec > > I attempted to assemble working JPA/JTA container solution for a standalone > application. > A good OSGi based app server should have had this work done. > > Regards, > Anatoly > > > On 18/10/2012 5:04 PM, Christian Eugster wrote: > > Hi Anatoly, > > thank you for your list of bundles. I searched my target platform but found > only one bundle with package javax.transaction.xa.* (if it is that package > that is doubled). But your list seems very interesting to me: I see that you > have an openjpa bundle and an eclipselink bundle in the runtime > configuration. And there is no javax.transaction bundle. Does this > configuration work? Do I need the org.apache.geronimo.* bundles in my > configuration if I work without an application server? I have a whole bunch > of bundles in my runtime configuration (a lot more than you), because I > don't know which of them are required or not. E.g. all aries bundles. So I > will try with your configuration to see if it works. Thanks a lot for your > hints. > > Christian > > Am 18.10.12 01:11, schrieb Anatoly Osiko: > > 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 > > > > > > -- > 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 > > > > > > -- > 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 > >