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