The issue is, that it tries to log something from OpenJPA in JULOpenJPALog and 
just calls o.toString().
This calls results in the exception since the BeanManager is not available at 
that moment.

This is due to the fact, that OpenJPA is trying to log its configuration here 
at log level FINE:

https://github.com/apache/openjpa/blob/6f4cf5b11b5bc5ffa0da1925260cdb7fbf7b8fe5/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceProductDerivation.java#L766
openjpa/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceProductDerivation.java
 at 6f4cf5b11b5bc5ffa0da1925260cdb7fbf7b8fe5 · apache/openjpa
github.com

The bean manager isn’t available at that moment though, so it will result in 
the exception you encounter here.
This can only happen in app composer though (afaik) -> TOMEE-4459 
<https://issues.apache.org/jira/browse/TOMEE-4459>

Gruß
Richard



> Am 19.02.2025 um 15:21 schrieb Egor Duda <egor.d...@gmail.com>:
> 
> On 19/02/2025 15:28, Richard Zowalla wrote:
> 
>> Can you push the reproducrr into a Git Repo, so we can have a look.
> 
> Done
> 
> https://github.com/egor-duda/tomee/tree/principal-injection-logging-error
> 
> With .level=INFO in logging.properties tests pass without any problems
> With .level=FINE tests fail
> 
>> Am 18. Februar 2025 20:45:00 MEZ schrieb Egor Duda <egor.d...@gmail.com>:
>>> Hello!
>>> 
>>> I've encountered some strange problem with tests with 
>>> @RunWith(ApplicationComposer.class) failing to start with error 
>>> java.lang.IllegalStateException: On a thread without an initialized context 
>>> nor a classloader mapping a deployed app
>>> 
>>> I've made a simple reproducer -- take application-composer example project, 
>>> add following logging.properties file to command line running MoviesTest:
>>> 
>>> handlers = java.util.logging.ConsoleHandler
>>> java.util.logging.ConsoleHandler.level = ALL
>>> .level = FINE
>>> 
>>> and add
>>> 
>>> @Inject
>>> private java.security.Principal principal;
>>> 
>>> to MoviesImpl.java
>>> 
>>> Then, running MovieTest results in failure to start application with root 
>>> error:
>>> 
>>> 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:367)
>>>       at 
>>> org.apache.openejb.cdi.ThreadSingletonServiceImpl.getContext(ThreadSingletonServiceImpl.java:343)
>>>       at 
>>> org.apache.openejb.cdi.ThreadSingletonServiceImpl.get(ThreadSingletonServiceImpl.java:378)
>>>       at 
>>> org.apache.openejb.cdi.ThreadSingletonServiceImpl.get(ThreadSingletonServiceImpl.java:72)
>>>       at 
>>> org.apache.webbeans.config.WebBeansFinder.getSingletonInstance(WebBeansFinder.java:57)
>>>       at 
>>> org.apache.webbeans.config.WebBeansContext.getInstance(WebBeansContext.java:197)
>>>       at 
>>> org.apache.webbeans.config.WebBeansContext.currentInstance(WebBeansContext.java:215)
>>>       at 
>>> org.apache.openejb.assembler.classic.EntityManagerFactoryCallable$BmHandler.findBm(EntityManagerFactoryCallable.java:180)
>>>       at 
>>> org.apache.openejb.assembler.classic.EntityManagerFactoryCallable$BmHandler.invoke(EntityManagerFactoryCallable.java:168)
>>>       at jdk.proxy2/jdk.proxy2.$Proxy26.toString(Unknown Source)
>>>       at java.base/java.lang.String.valueOf(String.java:4220)
>>>       at java.base/java.lang.StringBuilder.append(StringBuilder.java:173)
>>>       at java.base/java.util.AbstractMap.toString(AbstractMap.java:555)
>>>       at 
>>> java.base/java.text.MessageFormat.subformat(MessageFormat.java:1311)
>>>       at java.base/java.text.MessageFormat.format(MessageFormat.java:887)
>>>       at java.base/java.text.Format.format(Format.java:159)
>>>       at java.base/java.text.MessageFormat.format(MessageFormat.java:862)
>>>       at 
>>> org.apache.openjpa.lib.util.Localizer$Message.getMessage(Localizer.java:281)
>>>       at 
>>> org.apache.openjpa.lib.util.Localizer$Message.toString(Localizer.java:309)
>>>       at 
>>> org.apache.openejb.openjpa.JULOpenJPALog.record(JULOpenJPALog.java:130)
>>>       at 
>>> org.apache.openejb.openjpa.JULOpenJPALog.trace(JULOpenJPALog.java:72)
>>>       at 
>>> org.apache.openjpa.persistence.PersistenceProductDerivation$ConfigurationProviderImpl.setInto(PersistenceProductDerivation.java:766)
>>>       at 
>>> org.apache.openjpa.jdbc.kernel.JDBCBrokerFactory.newInstance(JDBCBrokerFactory.java:69)
>>>       at 
>>> java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native 
>>> Method)
>>>       at 
>>> java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
>>>       at 
>>> java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>>>       at java.base/java.lang.reflect.Method.invoke(Method.java:569)
>>>       at 
>>> org.apache.openjpa.kernel.Bootstrap.invokeFactory(Bootstrap.java:131)
>>>       at 
>>> org.apache.openjpa.kernel.Bootstrap.newBrokerFactory(Bootstrap.java:66)
>>> 
>>> Both changing logging level from FINE to INFO, and removing injected 
>>> Principal, make this error disappear and test works fine.
>>> 
>>> Is it a bug, or some missing configuration from my part?
> 

Reply via email to