hi robert,

please file a jira-ticket, i've a fix for it locally.

thx & regards,
gerhard



2014-07-03 13:18 GMT+02:00 Bordo, Robert <[email protected]>:

> Hi All,
>
> When using the Scheduler Module (1.0.0) together with Quartz (2.2.1) and
> start more than one job at the same second, I’m getting
> ConcurrentModificationExceptions.
>
> This behavior can be reproduced with the following code snippet:
>
>
> package de.rb.sandbox;
>
>
> import javax.enterprise.context.ApplicationScoped;
>
> import javax.enterprise.context.SessionScoped;
>
>
> import org.apache.deltaspike.cdise.api.CdiContainer;
>
> import org.apache.deltaspike.cdise.api.CdiContainerLoader;
>
> import org.apache.deltaspike.cdise.api.ContextControl;
>
> import org.apache.deltaspike.scheduler.api.Scheduled;
>
> import org.junit.After;
>
> import org.junit.Assert;
>
> import org.junit.Before;
>
> import org.junit.Test;
>
> import org.quartz.Job;
>
> import org.quartz.JobExecutionContext;
>
> import org.quartz.JobExecutionException;
>
>
> public class SchedulerTest extends Assert {
>
>
> private CdiContainer cdiContainer;
>
>
> @Before
>
> public void setUp() {
>
> cdiContainer = CdiContainerLoader.getCdiContainer();
>
> cdiContainer.boot();
>
>
> ContextControl contextControl = cdiContainer.getContextControl();
>
> contextControl.startContext(ApplicationScoped.class);
>
> }
>
>
> @After
>
> public void tearDown() {
>
> cdiContainer.shutdown();
>
> }
>
>
> // runs every second
>
> @Scheduled(cronExpression = "0/1 * * * * ?", startScopes = {
> SessionScoped.class })
>
> public static class Job1 implements Job {
>
> public void execute(JobExecutionContext context) throws
> JobExecutionException {
>
> System.out.println("Job1");
>
>
> }
>
> }
>
>
> // runs every 2 seconds
>
> @Scheduled(cronExpression = "0/2 * * * * ?", startScopes = {
> SessionScoped.class })
>
> public static class Job2 implements Job {
>
> public void execute(JobExecutionContext context) throws
> JobExecutionException {
>
> System.out.println("Job1");
>
> }
>
> }
>
>
> @Test
>
> public void testIt() throws Exception {
>
> // run for a minute
>
> Thread.sleep(60000);
>
> }
>
> }
>
> Produces something like:
>
>
> Job1
>
> ERROR 2678  2014-07-03 12:10:42,714 [DefaultQuartzScheduler_Worker-1]
> org.quartz.core.ErrorLogger.schedulerError(2425) - Unable to notify
> JobListener(s) of Job to be executed: (Job will NOT be executed!). trigger=
> DEFAULT.6da64b5bd2ee-8e6928dd-89fe-47aa-a620-cb3b80f36aa6 job= DEFAULT.Job1
>
> org.quartz.SchedulerException: JobListener
> 'org.apache.deltaspike.scheduler.impl.QuartzScheduler$InjectionAwareJobListener'
> threw exception: null
>
> at
> org.quartz.core.QuartzScheduler.notifyJobListenersToBeExecuted(QuartzScheduler.java:1947)
> ~[quartz-2.2.1.jar:na]
>
> at
> org.quartz.core.JobRunShell.notifyListenersBeginning(JobRunShell.java:324)
> [quartz-2.2.1.jar:na]
>
> at org.quartz.core.JobRunShell.run(JobRunShell.java:173)
> [quartz-2.2.1.jar:na]
>
> at
> org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573)
> [quartz-2.2.1.jar:na]
>
> Caused by: java.util.ConcurrentModificationException: null
>
> at java.util.Vector$Itr.checkForComodification(Vector.java:1156)
> ~[na:1.7.0_60]
>
> at java.util.Vector$Itr.next(Vector.java:1133) ~[na:1.7.0_60]
>
> at
> org.apache.deltaspike.scheduler.impl.QuartzScheduler$InjectionAwareJobListener.jobToBeExecuted(QuartzScheduler.java:370)
> ~[deltaspike-scheduler-module-impl-1.0.0.jar:1.0.0]
>
> at
> org.quartz.core.QuartzScheduler.notifyJobListenersToBeExecuted(QuartzScheduler.java:1945)
> ~[quartz-2.2.1.jar:na]
>
> ... 3 common frames omitted
>
> ERROR 2678  2014-07-03 12:10:42,714 [DefaultQuartzScheduler_Worker-2]
> org.quartz.core.ErrorLogger.schedulerError(2425) - Unable to notify
> JobListener(s) of Job to be executed: (Job will NOT be executed!). trigger=
> DEFAULT.6da64b5bd2ee-8e6928dd-89fe-47aa-a620-cb3b80f36aa6 job= DEFAULT.Job1
>
> org.quartz.SchedulerException: JobListener
> 'org.apache.deltaspike.scheduler.impl.QuartzScheduler$InjectionAwareJobListener'
> threw exception: null
>
> at
> org.quartz.core.QuartzScheduler.notifyJobListenersToBeExecuted(QuartzScheduler.java:1947)
> ~[quartz-2.2.1.jar:na]
>
> at
> org.quartz.core.JobRunShell.notifyListenersBeginning(JobRunShell.java:324)
> [quartz-2.2.1.jar:na]
>
> at org.quartz.core.JobRunShell.run(JobRunShell.java:173)
> [quartz-2.2.1.jar:na]
>
> at
> org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573)
> [quartz-2.2.1.jar:na]
>
> Caused by: java.util.ConcurrentModificationException: null
>
> at java.util.Vector$Itr.checkForComodification(Vector.java:1156)
> ~[na:1.7.0_60]
>
> at java.util.Vector$Itr.next(Vector.java:1133) ~[na:1.7.0_60]
>
> at
> org.apache.deltaspike.scheduler.impl.QuartzScheduler$InjectionAwareJobListener.jobToBeExecuted(QuartzScheduler.java:370)
> ~[deltaspike-scheduler-module-impl-1.0.0.jar:1.0.0]
>
> at
> org.quartz.core.QuartzScheduler.notifyJobListenersToBeExecuted(QuartzScheduler.java:1945)
> ~[quartz-2.2.1.jar:na]
>
> ... 3 common frames omitted
>
> Job1
>
>
> <and so on…>
>
> The only way to omit the concurrency problems is to limit the scheduled
> scope to none:
>
>
> @Scheduled(cronExpression = "0/1 * * * * ?", startScopes = {})
>
> But this might not be intended.
>
> Could you please help?
>
> Thanks in advance.
>
> Robert
>
>

Reply via email to