[
https://issues.jboss.org/browse/WFLY-12329?page=com.atlassian.jira.plugin...
]
nimo stephan updated WFLY-12329:
--------------------------------
Description:
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).
was:
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).
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)