You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomee.apache.org by Darjan Oblak <da...@gmail.com> on 2016/11/18 08:24:42 UTC
CDI issues tomee 7.0.2
Hi,
our app deployed successfully on 7.0.1, but fails on 7.0.2. However, the
problem disappears if I replace lib/openejb-core-7.0.2.jar in tomee 7.0.2
distribution by openejb-core-7.0.1.jar
Any clues what could be the problem?
The exception we get:
Caused by: java.lang.IllegalStateException: On a thread without an
initialized context nor a classloader mapping a deployed app
at
org.apache.openejb.cdi.ThreadSingletonServiceImpl.get(ThreadSingletonServiceImpl.java:287)
at
org.apache.openejb.cdi.ThreadSingletonServiceImpl.getContext(ThreadSingletonServiceImpl.java:263)
at
org.apache.openejb.cdi.ThreadSingletonServiceImpl.get(ThreadSingletonServiceImpl.java:298)
at
org.apache.openejb.cdi.ThreadSingletonServiceImpl.get(ThreadSingletonServiceImpl.java:60)
at
org.apache.webbeans.config.WebBeansFinder.getSingletonInstance(WebBeansFinder.java:51)
at
org.apache.webbeans.config.WebBeansContext.getInstance(WebBeansContext.java:185)
at
org.apache.webbeans.config.WebBeansContext.currentInstance(WebBeansContext.java:203)
at
org.apache.openejb.assembler.classic.EntityManagerFactoryCallable$1.findBm(EntityManagerFactoryCallable.java:105)
at
org.apache.openejb.assembler.classic.EntityManagerFactoryCallable$1.invoke(EntityManagerFactoryCallable.java:96)
at com.sun.proxy.$Proxy121.createAnnotatedType(Unknown Source)
at
org.hibernate.jpa.event.internal.jpa.BeanManagerListenerFactory$BeanMetaData.<init>(BeanManagerListenerFactory.java:77)
at
org.hibernate.jpa.event.internal.jpa.BeanManagerListenerFactory$BeanMetaData.<init>(BeanManagerListenerFactory.java:71)
at
org.hibernate.jpa.event.internal.jpa.BeanManagerListenerFactory.buildListener(BeanManagerListenerFactory.java:57)
at
org.hibernate.jpa.event.internal.jpa.LegacyCallbackProcessor.resolveCallbacks(LegacyCallbackProcessor.java:167)
at
org.hibernate.jpa.event.internal.jpa.LegacyCallbackProcessor.processCallbacksForEntity(LegacyCallbackProcessor.java:70)
at
org.hibernate.jpa.event.spi.JpaIntegrator.integrate(JpaIntegrator.java:150)
at
org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:312)
at
org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1859)
at
org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:852)
at
org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:845)
at
org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.withTccl(ClassLoaderServiceImpl.java:398)
at
org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:844)
at
org.hibernate.jpa.HibernatePersistenceProvider.createContainerEntityManagerFactory(HibernatePersistenceProvider.java:152)
at
org.apache.openejb.assembler.classic.EntityManagerFactoryCallable.call(EntityManagerFactoryCallable.java:122)
at
org.apache.openejb.assembler.classic.ReloadableEntityManagerFactory.createDelegate(ReloadableEntityManagerFactory.java:134)
... 68 more
Thank you,
Best Regards,
Darjan Oblak
Re: CDI issues tomee 7.0.2
Posted by Romain Manni-Bucau <rm...@gmail.com>.
2016-11-18 10:10 GMT+01:00 Emmanuel Touzery <em...@lecip-its.com>
:
> Hello,
>
> thank you. Darjan is my colleague, I can confirm both solutions solve
> the issue.
>
> May I ask... My understanding is that tomee.jpa.cdi=false is the 7.0.1
> behaviour (which worked fine for us), while "tomee.jpa.factory.lazy=true"
> is a "trick" to avoid the problem we've just hit while enabling a new
> feature.
>
>
This is true. This is a "trick" for the JPA provider doing eager JPA lookup
of listeners etc where the spec kind of require it to be lazy to work.
Hibernate is part of this category.
> So for us, cdi=false is a safe, known state, while lazy=true could be
> risky (from what I understand, there could be problems if hibernate
> attempts to make use of CDI in the early startup?). But then if lazy=true
> is the "future" and it's likely hibernate will make use or require the
> feature in the future, it's probably best to go that way?
>
>
Both should be fine but hibernate will be initialize later with the lazy
option which can make one request slow at the beginning depending the
application.
> Can you tell us more about the compromise here?
>
>
If you dont care of JPA/CDI integration first one is enough, if you need it
then you need second one.
> Thank you!
>
> Emmanuel
>
>
> On 18/11/16 09:43, Romain Manni-Bucau wrote:
>
>> Hello
>>
>> You can disable cdi for hibernate tomee.jpa.cdi=false in the persistence
>> unit or system properties.
>>
>> If you want it - was not part if 7.0.1 - you can in the same locations set
>> tomee.jpa.factory.lazy to true.
>>
>> Idea is to let hibernate initialize ince cdi is started but let cdi have
>> jpa entity manager or factory - yes chicken egg problem but spec is
>> written
>> this way ;).
>>
>> Le 18 nov. 2016 09:25, "Darjan Oblak" <da...@gmail.com> a écrit :
>>
>> Hi,
>>>
>>> our app deployed successfully on 7.0.1, but fails on 7.0.2. However, the
>>> problem disappears if I replace lib/openejb-core-7.0.2.jar in tomee 7.0.2
>>> distribution by openejb-core-7.0.1.jar
>>>
>>> Any clues what could be the problem?
>>>
>>> The exception we get:
>>>
>>> Caused by: java.lang.IllegalStateException: On a thread without an
>>> initialized context nor a classloader mapping a deployed app
>>> at
>>> org.apache.openejb.cdi.ThreadSingletonServiceImpl.get(
>>> ThreadSingletonServiceImpl.java:287)
>>> at
>>> org.apache.openejb.cdi.ThreadSingletonServiceImpl.getContext(
>>> ThreadSingletonServiceImpl.java:263)
>>> at
>>> org.apache.openejb.cdi.ThreadSingletonServiceImpl.get(
>>> ThreadSingletonServiceImpl.java:298)
>>> at
>>> org.apache.openejb.cdi.ThreadSingletonServiceImpl.get(
>>> ThreadSingletonServiceImpl.java:60)
>>> at
>>> org.apache.webbeans.config.WebBeansFinder.getSingletonInstance(
>>> WebBeansFinder.java:51)
>>> at
>>> org.apache.webbeans.config.WebBeansContext.getInstance(
>>> WebBeansContext.java:185)
>>> at
>>> org.apache.webbeans.config.WebBeansContext.currentInstance(
>>> WebBeansContext.java:203)
>>> at
>>> org.apache.openejb.assembler.classic.EntityManagerFactoryCallable$
>>> 1.findBm(EntityManagerFactoryCallable.java:105)
>>> at
>>> org.apache.openejb.assembler.classic.EntityManagerFactoryCallable$
>>> 1.invoke(EntityManagerFactoryCallable.java:96)
>>> at com.sun.proxy.$Proxy121.createAnnotatedType(Unknown Source)
>>> at
>>> org.hibernate.jpa.event.internal.jpa.BeanManagerListenerFactory$
>>> BeanMetaData.<init>(BeanManagerListenerFactory.java:77)
>>> at
>>> org.hibernate.jpa.event.internal.jpa.BeanManagerListenerFactory$
>>> BeanMetaData.<init>(BeanManagerListenerFactory.java:71)
>>> at
>>> org.hibernate.jpa.event.internal.jpa.BeanManagerListenerFactory.
>>> buildListener(BeanManagerListenerFactory.java:57)
>>> at
>>> org.hibernate.jpa.event.internal.jpa.LegacyCallbackProcessor.
>>> resolveCallbacks(LegacyCallbackProcessor.java:167)
>>> at
>>> org.hibernate.jpa.event.internal.jpa.LegacyCallbackProcessor.
>>> processCallbacksForEntity(LegacyCallbackProcessor.java:70)
>>> at
>>> org.hibernate.jpa.event.spi.JpaIntegrator.integrate(
>>> JpaIntegrator.java:150)
>>> at
>>> org.hibernate.internal.SessionFactoryImpl.<init>(
>>> SessionFactoryImpl.java:312)
>>> at
>>> org.hibernate.cfg.Configuration.buildSessionFactory(
>>> Configuration.java:1859)
>>> at
>>> org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderI
>>> mpl$4.perform(
>>> EntityManagerFactoryBuilderImpl.java:852)
>>> at
>>> org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderI
>>> mpl$4.perform(
>>> EntityManagerFactoryBuilderImpl.java:845)
>>> at
>>> org.hibernate.boot.registry.classloading.internal.ClassLoade
>>> rServiceImpl.
>>> withTccl(ClassLoaderServiceImpl.java:398)
>>> at
>>> org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(
>>> EntityManagerFactoryBuilderImpl.java:844)
>>> at
>>> org.hibernate.jpa.HibernatePersistenceProvider.
>>> createContainerEntityManagerFactory(HibernatePersistenceProv
>>> ider.java:152)
>>> at
>>> org.apache.openejb.assembler.classic.EntityManagerFactoryCallable.call(
>>> EntityManagerFactoryCallable.java:122)
>>> at
>>> org.apache.openejb.assembler.classic.ReloadableEntityManagerFactory
>>> .createDelegate(ReloadableEntityManagerFactory.java:134)
>>> ... 68 more
>>>
>>> Thank you,
>>> Best Regards,
>>> Darjan Oblak
>>>
>>>
>
Re: CDI issues tomee 7.0.2
Posted by Emmanuel Touzery <em...@lecip-its.com>.
Hello,
thank you. Darjan is my colleague, I can confirm both solutions
solve the issue.
May I ask... My understanding is that tomee.jpa.cdi=false is the
7.0.1 behaviour (which worked fine for us), while
"tomee.jpa.factory.lazy=true" is a "trick" to avoid the problem we've
just hit while enabling a new feature.
So for us, cdi=false is a safe, known state, while lazy=true could
be risky (from what I understand, there could be problems if hibernate
attempts to make use of CDI in the early startup?). But then if
lazy=true is the "future" and it's likely hibernate will make use or
require the feature in the future, it's probably best to go that way?
Can you tell us more about the compromise here?
Thank you!
Emmanuel
On 18/11/16 09:43, Romain Manni-Bucau wrote:
> Hello
>
> You can disable cdi for hibernate tomee.jpa.cdi=false in the persistence
> unit or system properties.
>
> If you want it - was not part if 7.0.1 - you can in the same locations set
> tomee.jpa.factory.lazy to true.
>
> Idea is to let hibernate initialize ince cdi is started but let cdi have
> jpa entity manager or factory - yes chicken egg problem but spec is written
> this way ;).
>
> Le 18 nov. 2016 09:25, "Darjan Oblak" <da...@gmail.com> a écrit :
>
>> Hi,
>>
>> our app deployed successfully on 7.0.1, but fails on 7.0.2. However, the
>> problem disappears if I replace lib/openejb-core-7.0.2.jar in tomee 7.0.2
>> distribution by openejb-core-7.0.1.jar
>>
>> Any clues what could be the problem?
>>
>> The exception we get:
>>
>> Caused by: java.lang.IllegalStateException: On a thread without an
>> initialized context nor a classloader mapping a deployed app
>> at
>> org.apache.openejb.cdi.ThreadSingletonServiceImpl.get(
>> ThreadSingletonServiceImpl.java:287)
>> at
>> org.apache.openejb.cdi.ThreadSingletonServiceImpl.getContext(
>> ThreadSingletonServiceImpl.java:263)
>> at
>> org.apache.openejb.cdi.ThreadSingletonServiceImpl.get(
>> ThreadSingletonServiceImpl.java:298)
>> at
>> org.apache.openejb.cdi.ThreadSingletonServiceImpl.get(
>> ThreadSingletonServiceImpl.java:60)
>> at
>> org.apache.webbeans.config.WebBeansFinder.getSingletonInstance(
>> WebBeansFinder.java:51)
>> at
>> org.apache.webbeans.config.WebBeansContext.getInstance(
>> WebBeansContext.java:185)
>> at
>> org.apache.webbeans.config.WebBeansContext.currentInstance(
>> WebBeansContext.java:203)
>> at
>> org.apache.openejb.assembler.classic.EntityManagerFactoryCallable$
>> 1.findBm(EntityManagerFactoryCallable.java:105)
>> at
>> org.apache.openejb.assembler.classic.EntityManagerFactoryCallable$
>> 1.invoke(EntityManagerFactoryCallable.java:96)
>> at com.sun.proxy.$Proxy121.createAnnotatedType(Unknown Source)
>> at
>> org.hibernate.jpa.event.internal.jpa.BeanManagerListenerFactory$
>> BeanMetaData.<init>(BeanManagerListenerFactory.java:77)
>> at
>> org.hibernate.jpa.event.internal.jpa.BeanManagerListenerFactory$
>> BeanMetaData.<init>(BeanManagerListenerFactory.java:71)
>> at
>> org.hibernate.jpa.event.internal.jpa.BeanManagerListenerFactory.
>> buildListener(BeanManagerListenerFactory.java:57)
>> at
>> org.hibernate.jpa.event.internal.jpa.LegacyCallbackProcessor.
>> resolveCallbacks(LegacyCallbackProcessor.java:167)
>> at
>> org.hibernate.jpa.event.internal.jpa.LegacyCallbackProcessor.
>> processCallbacksForEntity(LegacyCallbackProcessor.java:70)
>> at
>> org.hibernate.jpa.event.spi.JpaIntegrator.integrate(
>> JpaIntegrator.java:150)
>> at
>> org.hibernate.internal.SessionFactoryImpl.<init>(
>> SessionFactoryImpl.java:312)
>> at
>> org.hibernate.cfg.Configuration.buildSessionFactory(
>> Configuration.java:1859)
>> at
>> org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(
>> EntityManagerFactoryBuilderImpl.java:852)
>> at
>> org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(
>> EntityManagerFactoryBuilderImpl.java:845)
>> at
>> org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.
>> withTccl(ClassLoaderServiceImpl.java:398)
>> at
>> org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(
>> EntityManagerFactoryBuilderImpl.java:844)
>> at
>> org.hibernate.jpa.HibernatePersistenceProvider.
>> createContainerEntityManagerFactory(HibernatePersistenceProvider.java:152)
>> at
>> org.apache.openejb.assembler.classic.EntityManagerFactoryCallable.call(
>> EntityManagerFactoryCallable.java:122)
>> at
>> org.apache.openejb.assembler.classic.ReloadableEntityManagerFactory
>> .createDelegate(ReloadableEntityManagerFactory.java:134)
>> ... 68 more
>>
>> Thank you,
>> Best Regards,
>> Darjan Oblak
>>
Re: CDI issues tomee 7.0.2
Posted by Romain Manni-Bucau <rm...@gmail.com>.
Hello
You can disable cdi for hibernate tomee.jpa.cdi=false in the persistence
unit or system properties.
If you want it - was not part if 7.0.1 - you can in the same locations set
tomee.jpa.factory.lazy to true.
Idea is to let hibernate initialize ince cdi is started but let cdi have
jpa entity manager or factory - yes chicken egg problem but spec is written
this way ;).
Le 18 nov. 2016 09:25, "Darjan Oblak" <da...@gmail.com> a écrit :
> Hi,
>
> our app deployed successfully on 7.0.1, but fails on 7.0.2. However, the
> problem disappears if I replace lib/openejb-core-7.0.2.jar in tomee 7.0.2
> distribution by openejb-core-7.0.1.jar
>
> Any clues what could be the problem?
>
> The exception we get:
>
> Caused by: java.lang.IllegalStateException: On a thread without an
> initialized context nor a classloader mapping a deployed app
> at
> org.apache.openejb.cdi.ThreadSingletonServiceImpl.get(
> ThreadSingletonServiceImpl.java:287)
> at
> org.apache.openejb.cdi.ThreadSingletonServiceImpl.getContext(
> ThreadSingletonServiceImpl.java:263)
> at
> org.apache.openejb.cdi.ThreadSingletonServiceImpl.get(
> ThreadSingletonServiceImpl.java:298)
> at
> org.apache.openejb.cdi.ThreadSingletonServiceImpl.get(
> ThreadSingletonServiceImpl.java:60)
> at
> org.apache.webbeans.config.WebBeansFinder.getSingletonInstance(
> WebBeansFinder.java:51)
> at
> org.apache.webbeans.config.WebBeansContext.getInstance(
> WebBeansContext.java:185)
> at
> org.apache.webbeans.config.WebBeansContext.currentInstance(
> WebBeansContext.java:203)
> at
> org.apache.openejb.assembler.classic.EntityManagerFactoryCallable$
> 1.findBm(EntityManagerFactoryCallable.java:105)
> at
> org.apache.openejb.assembler.classic.EntityManagerFactoryCallable$
> 1.invoke(EntityManagerFactoryCallable.java:96)
> at com.sun.proxy.$Proxy121.createAnnotatedType(Unknown Source)
> at
> org.hibernate.jpa.event.internal.jpa.BeanManagerListenerFactory$
> BeanMetaData.<init>(BeanManagerListenerFactory.java:77)
> at
> org.hibernate.jpa.event.internal.jpa.BeanManagerListenerFactory$
> BeanMetaData.<init>(BeanManagerListenerFactory.java:71)
> at
> org.hibernate.jpa.event.internal.jpa.BeanManagerListenerFactory.
> buildListener(BeanManagerListenerFactory.java:57)
> at
> org.hibernate.jpa.event.internal.jpa.LegacyCallbackProcessor.
> resolveCallbacks(LegacyCallbackProcessor.java:167)
> at
> org.hibernate.jpa.event.internal.jpa.LegacyCallbackProcessor.
> processCallbacksForEntity(LegacyCallbackProcessor.java:70)
> at
> org.hibernate.jpa.event.spi.JpaIntegrator.integrate(
> JpaIntegrator.java:150)
> at
> org.hibernate.internal.SessionFactoryImpl.<init>(
> SessionFactoryImpl.java:312)
> at
> org.hibernate.cfg.Configuration.buildSessionFactory(
> Configuration.java:1859)
> at
> org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(
> EntityManagerFactoryBuilderImpl.java:852)
> at
> org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(
> EntityManagerFactoryBuilderImpl.java:845)
> at
> org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.
> withTccl(ClassLoaderServiceImpl.java:398)
> at
> org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(
> EntityManagerFactoryBuilderImpl.java:844)
> at
> org.hibernate.jpa.HibernatePersistenceProvider.
> createContainerEntityManagerFactory(HibernatePersistenceProvider.java:152)
> at
> org.apache.openejb.assembler.classic.EntityManagerFactoryCallable.call(
> EntityManagerFactoryCallable.java:122)
> at
> org.apache.openejb.assembler.classic.ReloadableEntityManagerFactory
> .createDelegate(ReloadableEntityManagerFactory.java:134)
> ... 68 more
>
> Thank you,
> Best Regards,
> Darjan Oblak
>