application-composer example with injected Principal fails to start with enabled logging

Egor Duda <[email protected]> Tue, 18 Feb 2025 22:45:00 +0300
Newsgroups gmane.comp.java.openejb.user
Message-ID <[email protected]>
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?