quarkus: Quarkus has a NPE in CDI logic trying to provide a TransactionManager

In testing with 1.13.2.Final I found that Quarkus has a NPE in its CDI logic trying to provide a TransactionManager.

2021-05-14 16:14:00,380 ERROR (pool-17-thread-1) [com.app.util.AodrUtils.foregroundHistoryTask()] Cursor error by Bulk Data Request:: java.lang.RuntimeException: Error injecting javax.transaction.TransactionManager io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorBase.transactionManager
        at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorRequired_Bean.create(TransactionalInterceptorRequired_Bean.zig:173)
        at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorRequired_Bean.get(TransactionalInterceptorRequired_Bean.zig:211)
        at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorRequired_Bean.get(TransactionalInterceptorRequired_Bean.zig:246)
        at com.app.util.MongoHelper_Subclass.<init>(MongoHelper_Subclass.zig:32)
        at com.app.util.MongoHelper_Bean.create(MongoHelper_Bean.zig:188)
        at com.app.util.MongoHelper_Bean.create(MongoHelper_Bean.zig:378)
        at io.quarkus.arc.impl.AbstractSharedContext.createInstanceHandle(AbstractSharedContext.java:96)
        at io.quarkus.arc.impl.AbstractSharedContext.access$000(AbstractSharedContext.java:14)
        at io.quarkus.arc.impl.AbstractSharedContext$1.get(AbstractSharedContext.java:29)
        at io.quarkus.arc.impl.AbstractSharedContext$1.get(AbstractSharedContext.java:26)
        at io.quarkus.arc.impl.LazyValue.get(LazyValue.java:26)
        at io.quarkus.arc.impl.ComputingCache.computeIfAbsent(ComputingCache.java:69)
        at io.quarkus.arc.impl.AbstractSharedContext.get(AbstractSharedContext.java:26)
        at io.quarkus.arc.impl.ClientProxies.getApplicationScopedDelegate(ClientProxies.java:17)
        at com.app.util.MongoHelper_ClientProxy.arc$delegate(MongoHelper_ClientProxy.zig:67)
        at com.app.util.MongoHelper_ClientProxy.findAllCursor(MongoHelper_ClientProxy.zig:547)
        at com.app.util.AodrUtils.process(AodrUtils.java:126)
        at com.app.util.AodrUtils.foregroundHistoryTask(AodrUtils.java:85)
        at com.app.util.AodrProcessor.submit(AodrProcessor.java:76)
        at com.app.util.BaseAodrProcessor.process(BaseAodrProcessor.java:69)
        at com.app.AppLifecycle.lambda$afterStartup$10(AppLifecycle.java:325)
        at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
        at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305)
        at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
        at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: java.lang.NullPointerException
        at io.quarkus.narayana.jta.runtime.CDIDelegatingTransactionManager_Bean.get(CDIDelegatingTransactionManager_Bean.zig:533)
        at io.quarkus.narayana.jta.runtime.CDIDelegatingTransactionManager_Bean.get(CDIDelegatingTransactionManager_Bean.zig:556)
        at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorRequired_Bean.create(TransactionalInterceptorRequired_Bean.zig:155)
        ... 26 more

About this issue

  • Original URL
  • State: closed
  • Created 3 years ago
  • Comments: 15 (10 by maintainers)

Most upvoted comments

@gsmet it is pretty much impossible to guarantee a clean shutdown if user code is still running, graceful shutdown is the only answer for this.

Because shutdown can occur at literally any point in any runtime code path to guarantee this you would need to audit every single code path of every single library almost line by line and make sure that if a shutdown happens on a given line you end up throwing a meaningful exception rather than NPE (or whatever).

Please attach a reproducer project if possible