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)
@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