I pass ManagedScheduledExecutorService
to external library in my WAR application. I do it in method called when context is initialized inside @ApplicationScoped CDI bean:
public void init( @Observes @Initialized( ApplicationScoped.class ) Object aInit )
{
//pass ManagedScheduledExecutorService to library
//initialize library
}
I get following exception:
13:08:23,639 ERROR [org.jboss.as.ee] (EE-ManagedScheduledExecutorService-default-Thread-2) WFLYEE0110: Failed to run scheduled task: java.lang.IllegalStateException: WFLYEE0111: Cannot run scheduled task org.apache.activemq.artemis.core.client.impl.ClientSessionFactoryImpl$ActualScheduledPinger@4cb08cda as container is suspended
at org.jboss.as.ee@21.0.1-2-PSI//org.jboss.as.ee.concurrent.ControlPointUtils$ControlledScheduledRunnable.run(ControlPointUtils.java:184)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305)
at org.glassfish.javax.enterprise.concurrent//org.glassfish.enterprise.concurrent.internal.ManagedScheduledThreadPoolExecutor$ManagedScheduledFutureTask.access$201(ManagedScheduledThreadPoolExecutor.java:360)
at org.glassfish.javax.enterprise.concurrent//org.glassfish.enterprise.concurrent.internal.ManagedScheduledThreadPoolExecutor$ManagedScheduledFutureTask.run(ManagedScheduledThreadPoolExecutor.java:511)
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:834)
at org.glassfish.javax.enterprise.concurrent//org.glassfish.enterprise.concurrent.ManagedThreadFactoryImpl$ManagedThread.run(ManagedThreadFactoryImpl.java:227)
I saw How to delay ManagedScheduledExecutorService until container is not suspended? question but I am not satisfied with the answer. I use external library (artemis client) and I have no direct control over when it schedules the first task. I do not want to modify this library. I cannot use javax.ejb.TimerService
for it, I can only pass ScheduledExecutorService
to it. I can delay initialization of this library but I don't want to guess what delay is sufficient and safe. How to solve this issue?