The jndi feature! That did the trick! Thank you Francois and Jean-Baptiste for your help and support.
And thanks to the Karaf team for the new 4.2.x line ☺. Best regards, Matteo > On 7 Jan 2019, at 18:43, francois.papon <francois.pa...@openobject.fr> wrote: > > Hi, > > Did you installed the "jndi" feature? > > Regards, > > Francois > > > > Envoyé depuis mon smartphone Samsung Galaxy. > > -------- Message d'origine -------- > De : Matteo Rulli <matteo.ru...@gmail.com> > Date : 07/01/2019 21:34 (GMT+04:00) > À : user@karaf.apache.org > Objet : Re: OpenJPA 3 and Karaf 4.2 > > Hi! > > Thank you for the feedback. > > It seems the persistence unit name is ok. The blueprint component is > correctly wired with the services: > > karaf@root()> services -u myjpaservice.impl > > myjpaservice.impl (18) uses: > ---------------------------- > [javax.persistence.spi.PersistenceProvider] > [javax.sql.DataSource] > [javax.persistence.EntityManagerFactory] > [javax.transaction.TransactionManager, > javax.transaction.TransactionSynchronizationRegistry, > javax.transaction.UserTransaction, > org.apache.geronimo.transaction.manager.RecoverableTransactionManager] > > And both EntityManager and TransactionManager are available on the service > registry: > > karaf@root()> service:list EntityManager > [javax.persistence.EntityManager] > --------------------------------- > osgi.unit.name = myPersistenceUnit > service.bundleid = 18 > service.id <http://service.id/> = 147 > service.scope = singleton > Provided by : > myjpaservice.impl (18) > > karaf@root()> service:list TransactionManager > [javax.transaction.TransactionManager, > javax.transaction.TransactionSynchronizationRegistry, > javax.transaction.UserTransaction, > org.apache.geronimo.transaction.manager.RecoverableTransactionManager] > ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ > service.bundleid = 110 > service.id <http://service.id/> = 124 > service.scope = singleton > Provided by : > pax-transx-tm-geronimo (110) > Used by: > OpenJPA Aggregate Jar (69) > OPS4J Pax JDBC Pooling DBCP2 (101) > myjpaservice.impl (18) > > [org.ops4j.pax.transx.tm.TransactionManager] > -------------------------------------------- > service.bundleid = 110 > service.id <http://service.id/> = 126 > service.scope = singleton > Provided by : > pax-transx-tm-geronimo (110) > > Besides, the tables in the postgresqlDB database are correctly created during > pax-exam test boot-up: that should be a sign that the pax-jdbc and JPA are > running and well configured, right? The test fails as soon as the injected > entityManager is used, spitting out the stacktrace below. > > Could you please suggest what else I can check to identify what the problem > could be? The same project works fine with the previous version of Karaf and > OpenJPA: could the problem be triggered by some version incompatibilities > like the one you mentioned in your previous email? > > Thank you very much, > Matteo > > > Complete stack trace: > > 18:26:02,645 | WARN | ion(3)-127.0.0.1 | JpaInterceptor | > 29 - org.apache.aries.jpa.blueprint - 2.7.0 | Exception from > EmSupplier.preCall > java.lang.reflect.UndeclaredThrowableException: null > at com.sun.proxy.$Proxy70.createEntityManager(Unknown Source) ~[?:?] > at > org.apache.aries.jpa.support.impl.EMSupplierImpl.createEm(EMSupplierImpl.java:68) > ~[?:?] > at > org.apache.aries.jpa.support.impl.EMSupplierImpl.get(EMSupplierImpl.java:86) > ~[?:?] > at > org.apache.aries.jpa.support.osgi.impl.EmProxy.invoke(EmProxy.java:38) ~[?:?] > at com.sun.proxy.$Proxy71.getProperties(Unknown Source) ~[?:?] > at Proxy6f73aaf4_20c4_4127_846f_6f5c625740c9.getProperties(Unknown > Source) ~[?:?] > at > org.apache.aries.jpa.blueprint.impl.JpaInterceptor.isResourceLocalInternal(JpaInterceptor.java:109) > ~[?:?] > at > org.apache.aries.jpa.blueprint.impl.JpaInterceptor.isResourceLocal(JpaInterceptor.java:99) > ~[?:?] > at > org.apache.aries.jpa.blueprint.impl.JpaInterceptor.preCall(JpaInterceptor.java:62) > ~[?:?] > at > org.apache.aries.blueprint.proxy.Collaborator.preInvoke(Collaborator.java:73) > ~[?:?] > at Proxy2b756db4_920f_4f1f_ab3f_93eac79d479c.addEntity(Unknown Source) > ~[?:?] > at > com.flairbit.examples.postgresjpa.TestModule.testCase(TestModule.java:118) > ~[?:?] > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?] > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) > ~[?:?] > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > ~[?:?] > at java.lang.reflect.Method.invoke(Method.java:498) ~[?:?] > at > org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) > ~[?:?] > at > org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) > ~[?:?] > at > org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) > ~[?:?] > at > org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) > ~[?:?] > at > org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26) > ~[?:?] > at > org.ops4j.pax.exam.invoker.junit.internal.ContainerTestRunner.runLeafWithRetry(ContainerTestRunner.java:97) > ~[?:?] > at > org.ops4j.pax.exam.invoker.junit.internal.ContainerTestRunner.runChildWithRetry(ContainerTestRunner.java:84) > ~[?:?] > at > org.ops4j.pax.exam.invoker.junit.internal.ContainerTestRunner.runChild(ContainerTestRunner.java:75) > ~[?:?] > at > org.ops4j.pax.exam.invoker.junit.internal.ContainerTestRunner.runChild(ContainerTestRunner.java:43) > ~[?:?] > at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) ~[?:?] > at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) > ~[?:?] > at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) > ~[?:?] > at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) > ~[?:?] > at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) > ~[?:?] > at org.junit.runners.ParentRunner.run(ParentRunner.java:363) ~[?:?] > at org.junit.runner.JUnitCore.run(JUnitCore.java:137) ~[?:?] > at org.junit.runner.JUnitCore.run(JUnitCore.java:115) ~[?:?] > at > org.ops4j.pax.exam.invoker.junit.internal.JUnitProbeInvoker.invokeViaJUnit(JUnitProbeInvoker.java:124) > ~[?:?] > at > org.ops4j.pax.exam.invoker.junit.internal.JUnitProbeInvoker.findAndInvoke(JUnitProbeInvoker.java:97) > ~[?:?] > at > org.ops4j.pax.exam.invoker.junit.internal.JUnitProbeInvoker.call(JUnitProbeInvoker.java:73) > ~[?:?] > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?] > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) > ~[?:?] > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > ~[?:?] > at java.lang.reflect.Method.invoke(Method.java:498) ~[?:?] > at > org.ops4j.pax.exam.rbc.internal.RemoteBundleContextImpl.remoteCall(RemoteBundleContextImpl.java:85) > ~[97:org.ops4j.pax.exam.rbc:4.13.1] > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?] > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) > ~[?:?] > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > ~[?:?] > at java.lang.reflect.Method.invoke(Method.java:498) ~[?:?] > at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:357) > ~[?:?] > at sun.rmi.transport.Transport$1.run(Transport.java:200) ~[?:?] > at sun.rmi.transport.Transport$1.run(Transport.java:197) ~[?:?] > at java.security.AccessController.doPrivileged(Native Method) ~[?:?] > at sun.rmi.transport.Transport.serviceCall(Transport.java:196) ~[?:?] > at > sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:568) > ~[?:?] > at > sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:826) > ~[?:?] > at > sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:683) > ~[?:?] > at java.security.AccessController.doPrivileged(Native Method) ~[?:?] > at > sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:682) > [?:?] > at > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) > [?:?] > at > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) > [?:?] > at java.lang.Thread.run(Thread.java:748) [?:?] > Caused by: java.lang.reflect.InvocationTargetException > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?] > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) > ~[?:?] > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > ~[?:?] > at java.lang.reflect.Method.invoke(Method.java:498) ~[?:?] > at > org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder$2.invoke(AriesEntityManagerFactoryBuilder.java:395) > ~[?:?] > ... 58 more > Caused by: org.apache.openjpa.persistence.InvalidStateException: Could not > perform automatic lookup of EJB container's > javax.transaction.TransactionManager implementation. Please ensure that you > are running the application from within an EJB 1.1 compliant EJB container, > and then set the org.apache.openjpa.ManagedRuntime property to the > appropriate value to obtain the TransactionManager. > at > org.apache.openjpa.ee.AutomaticManagedRuntime.getTransactionManager(AutomaticManagedRuntime.java:253) > ~[?:?] > at > org.apache.openjpa.kernel.AbstractBrokerFactory.syncWithManagedTransaction(AbstractBrokerFactory.java:728) > ~[?:?] > at org.apache.openjpa.kernel.BrokerImpl.initialize(BrokerImpl.java:399) > ~[?:?] > at org.apache.openjpa.kernel.BrokerImpl.initialize(BrokerImpl.java:325) > ~[?:?] > at > org.apache.openjpa.kernel.AbstractBrokerFactory.initializeBroker(AbstractBrokerFactory.java:228) > ~[?:?] > at > org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:212) > ~[?:?] > at > org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:154) > ~[?:?] > at > org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:246) > ~[?:?] > at > org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:162) > ~[?:?] > at > org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:152) > ~[?:?] > at > org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:58) > ~[?:?] > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?] > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) > ~[?:?] > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > ~[?:?] > at java.lang.reflect.Method.invoke(Method.java:498) ~[?:?] > at > org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder$2.invoke(AriesEntityManagerFactoryBuilder.java:395) > ~[?:?] > ... 58 more > Caused by: javax.naming.NoInitialContextException: Need to specify class name > in environment or system property, or as an applet parameter, or in an > application resource file: java.naming.factory.initial > at > javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:662) > ~[?:?] > at > javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:313) ~[?:?] > at > javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:350) > ~[?:?] > at javax.naming.InitialContext.lookup(InitialContext.java:417) ~[?:?] > at > org.apache.openjpa.ee.RegistryManagedRuntime.getTransactionManager(RegistryManagedRuntime.java:63) > ~[?:?] > at > org.apache.openjpa.ee.AutomaticManagedRuntime.getTransactionManager(AutomaticManagedRuntime.java:171) > ~[?:?] > at > org.apache.openjpa.kernel.AbstractBrokerFactory.syncWithManagedTransaction(AbstractBrokerFactory.java:728) > ~[?:?] > at org.apache.openjpa.kernel.BrokerImpl.initialize(BrokerImpl.java:399) > ~[?:?] > at org.apache.openjpa.kernel.BrokerImpl.initialize(BrokerImpl.java:325) > ~[?:?] > at > org.apache.openjpa.kernel.AbstractBrokerFactory.initializeBroker(AbstractBrokerFactory.java:228) > ~[?:?] > at > org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:212) > ~[?:?] > at > org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:154) > ~[?:?] > at > org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:246) > ~[?:?] > at > org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:162) > ~[?:?] > at > org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:152) > ~[?:?] > at > org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:58) > ~[?:?] > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?] > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) > ~[?:?] > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > ~[?:?] > at java.lang.reflect.Method.invoke(Method.java:498) ~[?:?] > at > org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder$2.invoke(AriesEntityManagerFactoryBuilder.java:395) > ~[?:?] > ... 58 more > >> On 7 Jan 2019, at 16:01, Jean-Baptiste Onofré <j...@nanthrax.net >> <mailto:j...@nanthrax.net>> wrote: >> >> Hi Matteo, >> >> I just checked OpenJPA3 with JPA feature. The problem is about the >> javax.persistence version. Now, hibernate and eclipselink uses JPA 2.1 >> whereas OpenJPA uses JPA 2.2. >> >> So, we can have a ClassCastException while trying to deal with both >> version in the same container. >> >> That's what happening by default on the provided example. I'm improving it. >> >> Anyway, I don't reproduce the issue. I guess that problem is that you >> don't use the correct JNDI name in persistence.xml. >> >> Regards >> JB >> >> On 05/01/2019 22:42, Matteo Rulli wrote: >>> I tried to put together a project (here >>> <https://github.com/mrulli/myjpaservice >>> <https://github.com/mrulli/myjpaservice>>: >>> https://github.com/mrulli/myjpaservice >>> <https://github.com/mrulli/myjpaservice>) >>> to test how OpenJPA 3 and Karaf 4.2.x play together but I get the >>> following error: >>> >>> javax.naming.NoInitialContextException: Need to specify class name in >>> environment or system property, or as an applet parameter, or in an >>> application resource file: java.naming.factory.initial >>> at >>> javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:662) >>> ~[?:?] >>> at >>> javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:313) >>> ~[?:?] >>> at >>> javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:350) >>> ~[?:?] >>> at javax.naming.InitialContext.lookup(InitialContext.java:417) ~[?:?] >>> at >>> org.apache.openjpa.ee.RegistryManagedRuntime.getTransactionManager(RegistryManagedRuntime.java:63) >>> ~[?:?] >>> at >>> org.apache.openjpa.ee.AutomaticManagedRuntime.getTransactionManager(AutomaticManagedRuntime.java:171) >>> ~[?:?] >>> at >>> org.apache.openjpa.kernel.AbstractBrokerFactory.syncWithManagedTransaction(AbstractBrokerFactory.java:728) >>> ~[?:?] >>> at org.apache.openjpa.kernel.BrokerImpl.initialize(BrokerImpl.java:399) >>> ~[?:?] >>> at org.apache.openjpa.kernel.BrokerImpl.initialize(BrokerImpl.java:325) >>> ~[?:?] >>> at >>> org.apache.openjpa.kernel.AbstractBrokerFactory.initializeBroker(AbstractBrokerFactory.java:228) >>> ~[?:?] >>> at >>> org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:212) >>> ~[?:?] >>> at >>> org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:154) >>> ~[?:?] >>> at >>> org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:246) >>> ~[?:?] >>> at >>> org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:162) >>> ~[?:?] >>> at >>> org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:152) >>> ~[?:?] >>> at >>> org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:58) >>> ~[?:?] >>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?] >>> at >>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) >>> ~[?:?] >>> at >>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) >>> ~[?:?] >>> at java.lang.reflect.Method.invoke(Method.java:498) ~[?:?] >>> at >>> org.apache.aries.jpa.container.impl.AriesEntityManagerFactoryBuilder$2.invoke(AriesEntityManagerFactoryBuilder.java:395) >>> ~[?:?] >>> ... 58 more >>> >>> A similar project works fine with OpenJPA 2.4.1 and Karaf 4.1. >>> >>> I saw an example project >>> <https://github.com/apache/karaf/blob/master/examples/karaf-jpa-example/karaf-jpa-example-features/src/main/feature/feature.xml >>> >>> <https://github.com/apache/karaf/blob/master/examples/karaf-jpa-example/karaf-jpa-example-features/src/main/feature/feature.xml>> >>> in >>> Karaf repo but the openjpa case seems unsupported/commented out. Is >>> openjpa 3 supported in Karaf 4.2? >>> >>> Thank you for your help, >>> >>> Matteo >>> >>> >> >> -- >> Jean-Baptiste Onofré >> jbono...@apache.org <mailto:jbono...@apache.org> >> http://blog.nanthrax.net >> Talend - http://www.talend.com >