[
https://issues.jboss.org/browse/WFLY-12329?page=com.atlassian.jira.plugin...
]
Eduardo Martins commented on WFLY-12329:
----------------------------------------
hi [~nimo22], can you please clarify what behaviour you expected?
Please note that from the spec point of view, the container should free apps from:
# creating, starting, stopping or destroying executors (you are actually forbidden to use
API lifecycle related methods)
# setup correct execution/thread context (class loader, security, Jndi, etc)
That's really the "managed by JEE", and the illegal state exception is
considered in spec for non running container states, preventing any container trouble
while task executes.
ManagedScheduledExecutorService should be only available after server
is ready
------------------------------------------------------------------------------
Key: WFLY-12329
URL:
https://issues.jboss.org/browse/WFLY-12329
Project: WildFly
Issue Type: Bug
Components: Concurrency Utilities
Affects Versions: 17.0.1.Final
Reporter: nimo stephan
Assignee: Eduardo Martins
Priority: Major
I use a *ManagedScheduledExecutorService* to execute tasks periodically:
{code:java}
@Startup
@Singleton
public class TaskScheduler {
@Resource
ManagedScheduledExecutorService executorService;
@PostConstruct
public void init() {
executorService.scheduleAtFixedRate(this::task, 0, 5, TimeUnit.SECONDS);
}
public void task() {
System.out.println("long running task:" + LocalTime.now());
}
}
{code}
Wildfly throws a few exceptions as long as server is not fully initiated and in
"suspend"-mode:
{code:java}
12:44:12,715 ERROR [org.jboss.as.ee]
(EE-ManagedScheduledExecutorService-default-Thread-3) WFLYEE0110: Failed to run scheduled
task: java.lang.IllegalStateException: WFLYEE0111: Cannot run scheduled task
my.Task$$Lambda$1041/0x000000080240a040@5ee966ec as container is suspended
at
org.jboss.as.ee@17.0.1.Final//org.jboss.as.ee.concurrent.ControlPointUtils$ControlledScheduledRunnable.run(ControlPointUtils.java:164)
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:383)
at
org.glassfish.javax.enterprise.concurrent//org.glassfish.enterprise.concurrent.internal.ManagedScheduledThreadPoolExecutor$ManagedScheduledFutureTask.run(ManagedScheduledThreadPoolExecutor.java:534)
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:835)
at
org.glassfish.javax.enterprise.concurrent//org.glassfish.enterprise.concurrent.ManagedThreadFactoryImpl$ManagedThread.run(ManagedThreadFactoryImpl.java:250)
{code}
I use _ManagedScheduledExecutorService_ instead of _ScheduledExecutorService_ in JEE
because, *ManagedScheduledExecutorService* should be managed by JEE. Hence, the server
should also manage and guarantee not to fire the executorService until the server is ready
(and EJBs are available).
--
This message was sent by Atlassian Jira
(v7.12.1#712002)