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 = 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 = 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 = 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é <[email protected]> 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)
>> 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>
>>  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é
> [email protected]
> http://blog.nanthrax.net
> Talend - http://www.talend.com

Reply via email to