You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2012/02/05 21:27:47 UTC
svn commit: r1240799 - in /openejb/trunk/openejb: ./
container/openejb-core/src/main/java/org/apache/openejb/core/timer/
container/openejb-core/src/main/java/org/apache/openejb/resource/quartz/
examples/quartz-app/ examples/quartz-app/quartz-beans/src/...
Author: rmannibucau
Date: Sun Feb 5 20:27:46 2012
New Revision: 1240799
URL: http://svn.apache.org/viewvc?rev=1240799&view=rev
Log:
OPENEJB-1764 upgrading quartz to last major version.
Modified:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/timer/CalendarTimerData.java
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/timer/EJBCronTrigger.java
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/timer/EjbTimerServiceImpl.java
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/timer/IntervalTimerData.java
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/timer/SingleActionTimerData.java
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/timer/TimerData.java
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/resource/quartz/JobSpec.java
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/resource/quartz/QuartzResourceAdapter.java
openejb/trunk/openejb/examples/quartz-app/pom.xml
openejb/trunk/openejb/examples/quartz-app/quartz-beans/src/main/java/org/superbiz/quartz/JobBean.java
openejb/trunk/openejb/pom.xml
Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/timer/CalendarTimerData.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/timer/CalendarTimerData.java?rev=1240799&r1=1240798&r2=1240799&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/timer/CalendarTimerData.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/timer/CalendarTimerData.java Sun Feb 5 20:27:46 2012
@@ -17,13 +17,12 @@
package org.apache.openejb.core.timer;
-import java.lang.reflect.Method;
+import org.apache.openejb.core.timer.EJBCronTrigger.ParseException;
+import org.quartz.impl.triggers.AbstractTrigger;
import javax.ejb.ScheduleExpression;
import javax.ejb.TimerConfig;
-
-import org.apache.openejb.core.timer.EJBCronTrigger.ParseException;
-import org.quartz.Trigger;
+import java.lang.reflect.Method;
/**
* @version $Rev$ $Date$
@@ -47,7 +46,7 @@ public class CalendarTimerData extends T
}
@Override
- public Trigger initializeTrigger() {
+ public AbstractTrigger<?> initializeTrigger() {
try {
return new EJBCronTrigger(scheduleExpression);
} catch (ParseException e) {
Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/timer/EJBCronTrigger.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/timer/EJBCronTrigger.java?rev=1240799&r1=1240798&r2=1240799&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/timer/EJBCronTrigger.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/timer/EJBCronTrigger.java Sun Feb 5 20:27:46 2012
@@ -16,6 +16,11 @@
*/
package org.apache.openejb.core.timer;
+import org.apache.openejb.util.LogCategory;
+import org.apache.openejb.util.Logger;
+import org.quartz.impl.triggers.CronTriggerImpl;
+
+import javax.ejb.ScheduleExpression;
import java.text.DateFormatSymbols;
import java.util.ArrayList;
import java.util.Calendar;
@@ -27,23 +32,14 @@ import java.util.LinkedHashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
+import java.util.Map.Entry;
import java.util.Set;
import java.util.TimeZone;
-import java.util.Map.Entry;
import java.util.TreeSet;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
-import javax.ejb.ScheduleExpression;
-
-import org.quartz.JobExecutionContext;
-import org.quartz.JobExecutionException;
-import org.quartz.Trigger;
-
-import org.apache.openejb.util.LogCategory;
-import org.apache.openejb.util.Logger;
-
-public class EJBCronTrigger extends Trigger {
+public class EJBCronTrigger extends CronTriggerImpl {
private static final Logger log = Logger.getInstance(LogCategory.TIMER, EJBCronTrigger.class);
@@ -101,14 +97,6 @@ public class EJBCronTrigger extends Trig
private final FieldExpression[] expressions = new FieldExpression[7];
- // Optional settings
- private Date startTime;
- private Date endTime;
-
- // Internal variables
- private Date nextFireTime;
- private Date previousFireTime;
-
private TimeZone timezone;
public EJBCronTrigger(ScheduleExpression expr) throws ParseException {
@@ -123,8 +111,8 @@ public class EJBCronTrigger extends Trig
fieldValues.put(Calendar.SECOND, expr.getSecond());
timezone = expr.getTimezone() == null ? TimeZone.getDefault() : TimeZone.getTimeZone(expr.getTimezone());
- startTime = expr.getStart() == null ? new Date() : expr.getStart();
- endTime = expr.getEnd();
+ setStartTime(expr.getStart() == null ? new Date() : expr.getStart());
+ setEndTime(expr.getEnd());
// If parsing fails on a field, record the error and move to the next field
Map<Integer, ParseException> errors = new HashMap<Integer, ParseException>();
@@ -309,54 +297,6 @@ public class EJBCronTrigger extends Trig
}
}
-
-
- @Override
- public Date computeFirstFireTime(org.quartz.Calendar calendar) {
-
- log.debug("computeFirstFireTime starts, , current nextFireTime :"+nextFireTime);
-
- // Copied from org.quartz.CronTrigger
- nextFireTime = getFireTimeAfter(new Date(getStartTime().getTime() - 1000l));
-
- while (nextFireTime != null && calendar != null
- && !calendar.isTimeIncluded(nextFireTime.getTime())) {
- nextFireTime = getFireTimeAfter(nextFireTime);
- }
-
- log.debug("computeFirstFireTime completed, current nextFireTime :"+nextFireTime);
- return nextFireTime;
- }
-
- @Override
- public int executionComplete(JobExecutionContext context,
- JobExecutionException result) {
- log.debug("executionComplete");
- // Copied from org.quartz.CronTrigger
- if (result != null && result.refireImmediately()) {
- return INSTRUCTION_RE_EXECUTE_JOB;
- }
-
- if (result != null && result.unscheduleFiringTrigger()) {
- return INSTRUCTION_SET_TRIGGER_COMPLETE;
- }
-
- if (result != null && result.unscheduleAllTriggers()) {
- return INSTRUCTION_SET_ALL_JOB_TRIGGERS_COMPLETE;
- }
-
- if (!mayFireAgain()) {
- return INSTRUCTION_DELETE_TRIGGER;
- }
-
- return INSTRUCTION_NOOP;
- }
-
- @Override
- public Date getEndTime() {
- return endTime;
- }
-
/**
* Works similarly to getFireTimeAfter() but backwards.
*/
@@ -366,7 +306,7 @@ public class EJBCronTrigger extends Trig
//calendar.setLenient(false);
calendar.setFirstDayOfWeek(Calendar.SUNDAY);
- if (endTime == null) {
+ if (getEndTime() == null) {
// If the year field has been left default, there is no end time
if (expressions[0] instanceof AsteriskExpression) {
return null;
@@ -374,13 +314,13 @@ public class EJBCronTrigger extends Trig
resetFields(calendar, 0, true);
calendar.set(Calendar.MILLISECOND, 0);
} else {
- calendar.setTime(endTime);
+ calendar.setTime(getEndTime());
}
// Calculate time to give up scheduling
Calendar stopCalendar = new GregorianCalendar(timezone);
- if (startTime != null) {
- stopCalendar.setTime(startTime);
+ if (getStartTime() != null) {
+ stopCalendar.setTime(getStartTime());
} else {
stopCalendar.setTimeInMillis(0);
}
@@ -430,8 +370,8 @@ public class EJBCronTrigger extends Trig
calendar.setFirstDayOfWeek(Calendar.SUNDAY);
// Calculate starting time
- if (startTime != null && startTime.after(afterTime)) {
- calendar.setTime(startTime);
+ if (getStartTime() != null && getStartTime().after(afterTime)) {
+ calendar.setTime(getStartTime());
} else {
calendar.setTime(afterTime);
calendar.add(Calendar.SECOND, 1);
@@ -439,8 +379,8 @@ public class EJBCronTrigger extends Trig
// Calculate time to give up scheduling
Calendar stopCalendar = new GregorianCalendar(timezone);
- if (endTime != null) {
- stopCalendar.setTime(endTime);
+ if (getEndTime() != null) {
+ stopCalendar.setTime(getEndTime());
} else {
int stopYear = calendar.get(Calendar.YEAR) + 100;
stopCalendar.set(Calendar.YEAR, stopYear);
@@ -558,26 +498,6 @@ public class EJBCronTrigger extends Trig
return -1;
}
- @Override
- public Date getNextFireTime() {
- return nextFireTime;
- }
-
- @Override
- public Date getPreviousFireTime() {
- return previousFireTime;
- }
-
- @Override
- public Date getStartTime() {
- return startTime;
- }
-
- @Override
- public boolean mayFireAgain() {
- return getNextFireTime() != null;
- }
-
/**
* reset those sub field values, we need to configure from the end to begin, as getActualMaximun consider other fields' values
* @param calendar
@@ -596,72 +516,6 @@ public class EJBCronTrigger extends Trig
}
}
- @Override
- public void setEndTime(Date endTime) {
- this.endTime = endTime;
- }
-
- @Override
- public void setStartTime(Date startTime) {
- this.startTime = startTime;
- }
-
- @Override
- public void triggered(org.quartz.Calendar calendar) {
- // Copied from org.quartz.CronTrigger
- previousFireTime = nextFireTime;
-
- nextFireTime = getFireTimeAfter(nextFireTime);
-
-
- while (nextFireTime != null && calendar != null
- && !calendar.isTimeIncluded(nextFireTime.getTime())) {
- nextFireTime = getFireTimeAfter(nextFireTime);
- }
- log.debug("EJBCronTrigger is triggered by quartz scheduler");
- }
-
- @Override
- public void updateAfterMisfire(org.quartz.Calendar cal) {
- // TODO verify misfire policy
- if (isVolatile()) {
- Date newFireTime = getFireTimeAfter(new Date());
- while (newFireTime != null && cal != null
- && !cal.isTimeIncluded(newFireTime.getTime())) {
- newFireTime = getFireTimeAfter(newFireTime);
- }
- nextFireTime = newFireTime;
- } else {
- nextFireTime = new Date();
- }
-
- }
-
- @Override
- public void updateWithNewCalendar(org.quartz.Calendar cal, long misfireThreshold) {
- if (cal == null) {
- return;
- }
-
- Date now = new Date();
- nextFireTime = getFireTimeAfter(previousFireTime);
- while (nextFireTime != null && !cal.isTimeIncluded(nextFireTime.getTime())) {
- nextFireTime = getFireTimeAfter(nextFireTime);
- if (nextFireTime != null && nextFireTime.before(now)) {
- long diff = now.getTime() - nextFireTime.getTime();
- if (diff >= misfireThreshold) {
- nextFireTime = getFireTimeAfter(nextFireTime);
- }
- }
- }
-
- }
-
- @Override
- protected boolean validateMisfireInstruction(int misfireInstruction) {
- return misfireInstruction == MISFIRE_INSTRUCTION_SMART_POLICY;
- }
-
public static class ParseException extends Exception {
private final Map<Integer, ParseException> children;
Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/timer/EjbTimerServiceImpl.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/timer/EjbTimerServiceImpl.java?rev=1240799&r1=1240798&r2=1240799&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/timer/EjbTimerServiceImpl.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/timer/EjbTimerServiceImpl.java Sun Feb 5 20:27:46 2012
@@ -16,21 +16,6 @@
*/
package org.apache.openejb.core.timer;
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Date;
-import java.util.Properties;
-
-import javax.ejb.EJBContext;
-import javax.ejb.EJBException;
-import javax.ejb.ScheduleExpression;
-import javax.ejb.Timer;
-import javax.ejb.TimerConfig;
-import javax.transaction.Status;
-import javax.transaction.SystemException;
-import javax.transaction.TransactionManager;
-
import org.apache.openejb.BeanContext;
import org.apache.openejb.InterfaceType;
import org.apache.openejb.OpenEJBException;
@@ -41,12 +26,28 @@ import org.apache.openejb.loader.SystemI
import org.apache.openejb.util.LogCategory;
import org.apache.openejb.util.Logger;
import org.apache.openejb.util.SetAccessible;
+import org.quartz.JobBuilder;
import org.quartz.JobDataMap;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.Trigger;
import org.quartz.impl.StdSchedulerFactory;
+import org.quartz.impl.triggers.AbstractTrigger;
+
+import javax.ejb.EJBContext;
+import javax.ejb.EJBException;
+import javax.ejb.ScheduleExpression;
+import javax.ejb.Timer;
+import javax.ejb.TimerConfig;
+import javax.transaction.Status;
+import javax.transaction.SystemException;
+import javax.transaction.TransactionManager;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Date;
+import java.util.Properties;
public class EjbTimerServiceImpl implements EjbTimerService {
@@ -95,7 +96,12 @@ public class EjbTimerServiceImpl impleme
scheduler.start();
//durability is configured with true, which means that the job will be kept in the store even if no trigger is attached to it.
//Currently, all the EJB beans share with the same job instance
- scheduler.addJob(new JobDetail(OPENEJB_TIMEOUT_JOB_NAME, OPENEJB_TIMEOUT_JOB_GROUP_NAME, EjbTimeoutJob.class, false, true, false), true);
+ JobDetail job = JobBuilder.newJob(EjbTimeoutJob.class)
+ .withIdentity(OPENEJB_TIMEOUT_JOB_NAME, OPENEJB_TIMEOUT_JOB_GROUP_NAME)
+ .storeDurably(true)
+ .requestRecovery(false)
+ .build();
+ scheduler.addJob(job, true);
} catch (SchedulerException e) {
throw new RuntimeException("Fail to initialize the default scheduler", e);
}
@@ -150,8 +156,13 @@ public class EjbTimerServiceImpl impleme
timerData.setScheduler(scheduler);
Trigger trigger = timerData.getTrigger();
- trigger.setJobName(OPENEJB_TIMEOUT_JOB_NAME);
- trigger.setJobGroup(OPENEJB_TIMEOUT_JOB_GROUP_NAME);
+ if (trigger instanceof AbstractTrigger) { // is the case
+ AbstractTrigger<?> atrigger = (AbstractTrigger<?>) trigger;
+ atrigger.setJobName(OPENEJB_TIMEOUT_JOB_NAME);
+ atrigger.setJobGroup(OPENEJB_TIMEOUT_JOB_GROUP_NAME);
+ } else {
+ throw new RuntimeException("the trigger was not an AbstractTrigger - it shouldn't be possible");
+ }
JobDataMap triggerDataMap = trigger.getJobDataMap();
triggerDataMap.put(EjbTimeoutJob.EJB_TIMERS_SERVICE, this);
triggerDataMap.put(EjbTimeoutJob.TIMER_DATA,timerData);
Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/timer/IntervalTimerData.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/timer/IntervalTimerData.java?rev=1240799&r1=1240798&r2=1240799&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/timer/IntervalTimerData.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/timer/IntervalTimerData.java Sun Feb 5 20:27:46 2012
@@ -17,15 +17,15 @@
package org.apache.openejb.core.timer;
+import org.quartz.SimpleTrigger;
+import org.quartz.impl.triggers.AbstractTrigger;
+import org.quartz.impl.triggers.SimpleTriggerImpl;
+
+import javax.ejb.TimerConfig;
import java.lang.reflect.Method;
import java.text.DateFormat;
import java.util.Date;
-import javax.ejb.TimerConfig;
-
-import org.quartz.SimpleTrigger;
-import org.quartz.Trigger;
-
/**
* @version $Rev$ $Date$
*/
@@ -55,8 +55,8 @@ public class IntervalTimerData extends T
}
@Override
- public Trigger initializeTrigger() {
- SimpleTrigger simpleTrigger = new SimpleTrigger();
+ public AbstractTrigger<?> initializeTrigger() {
+ SimpleTriggerImpl simpleTrigger = new SimpleTriggerImpl();
Date startTime = new Date(initialExpiration.getTime() - intervalDuration);
simpleTrigger.setStartTime(startTime);
simpleTrigger.setRepeatInterval(intervalDuration);
Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/timer/SingleActionTimerData.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/timer/SingleActionTimerData.java?rev=1240799&r1=1240798&r2=1240799&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/timer/SingleActionTimerData.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/timer/SingleActionTimerData.java Sun Feb 5 20:27:46 2012
@@ -17,15 +17,14 @@
package org.apache.openejb.core.timer;
+import org.quartz.impl.triggers.AbstractTrigger;
+import org.quartz.impl.triggers.SimpleTriggerImpl;
+
+import javax.ejb.TimerConfig;
import java.lang.reflect.Method;
import java.text.DateFormat;
import java.util.Date;
-import javax.ejb.TimerConfig;
-
-import org.quartz.SimpleTrigger;
-import org.quartz.Trigger;
-
/**
* @version $Rev$ $Date$
*/
@@ -48,8 +47,8 @@ public class SingleActionTimerData exten
}
@Override
- public Trigger initializeTrigger() {
- final SimpleTrigger simpleTrigger = new SimpleTrigger();
+ public AbstractTrigger<?> initializeTrigger() {
+ final SimpleTriggerImpl simpleTrigger = new SimpleTriggerImpl();
simpleTrigger.setStartTime(expiration);
return simpleTrigger;
}
Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/timer/TimerData.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/timer/TimerData.java?rev=1240799&r1=1240798&r2=1240799&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/timer/TimerData.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/timer/TimerData.java Sun Feb 5 20:27:46 2012
@@ -17,8 +17,13 @@
package org.apache.openejb.core.timer;
-import java.lang.reflect.Method;
-import java.util.Date;
+import org.apache.openejb.util.LogCategory;
+import org.apache.openejb.util.Logger;
+import org.quartz.Scheduler;
+import org.quartz.SchedulerException;
+import org.quartz.Trigger;
+import org.quartz.TriggerKey;
+import org.quartz.impl.triggers.AbstractTrigger;
import javax.ejb.EJBException;
import javax.ejb.Timer;
@@ -26,12 +31,8 @@ import javax.ejb.TimerConfig;
import javax.transaction.Status;
import javax.transaction.Synchronization;
import javax.transaction.Transaction;
-
-import org.apache.openejb.util.LogCategory;
-import org.apache.openejb.util.Logger;
-import org.quartz.Scheduler;
-import org.quartz.SchedulerException;
-import org.quartz.Trigger;
+import java.lang.reflect.Method;
+import java.util.Date;
public abstract class TimerData {
@@ -48,7 +49,7 @@ public abstract class TimerData {
private final Object info;
private boolean persistent;
- protected Trigger trigger;
+ protected AbstractTrigger<?> trigger;
protected Scheduler scheduler;
@@ -102,8 +103,8 @@ public abstract class TimerData {
try {
final Scheduler s = timerService.getScheduler();
- if(!s.isShutdown()){
- s.unscheduleJob(trigger.getName(), trigger.getGroup());
+ if(!s.isShutdown()) {
+ s.unscheduleJob(trigger.getKey());
}
} catch (SchedulerException e) {
throw new EJBException("fail to cancel the timer", e);
@@ -157,7 +158,7 @@ public abstract class TimerData {
final Scheduler s = timerService.getScheduler();
if(!s.isShutdown()){
- s.unscheduleJob(trigger.getName(), trigger.getGroup());
+ s.unscheduleJob(trigger.getKey());
}
} catch (SchedulerException e) {
throw new EJBException("fail to cancel the timer", e);
@@ -232,8 +233,9 @@ public abstract class TimerData {
if (scheduler != null) {
try {
- if (scheduler.getTrigger(trigger.getName(), trigger.getGroup()) != null) {
- return scheduler.getTrigger(trigger.getName(), trigger.getGroup());
+ final TriggerKey key = new TriggerKey(trigger.getName(), trigger.getGroup());
+ if (scheduler.checkExists(key)) {
+ return scheduler.getTrigger(key);
}
} catch (SchedulerException e) {
return null;
@@ -277,5 +279,5 @@ public abstract class TimerData {
public abstract TimerType getType();
- protected abstract Trigger initializeTrigger();
+ protected abstract AbstractTrigger<?> initializeTrigger();
}
Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/resource/quartz/JobSpec.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/resource/quartz/JobSpec.java?rev=1240799&r1=1240798&r2=1240799&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/resource/quartz/JobSpec.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/resource/quartz/JobSpec.java Sun Feb 5 20:27:46 2012
@@ -16,19 +16,25 @@
*/
package org.apache.openejb.resource.quartz;
-import org.quartz.CronTrigger;
+import org.quartz.CronScheduleBuilder;
+import org.quartz.JobBuilder;
import org.quartz.JobDetail;
+import org.quartz.JobKey;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
+import org.quartz.Trigger;
+import org.quartz.TriggerBuilder;
+import org.quartz.TriggerKey;
+import org.quartz.impl.triggers.CronTriggerImpl;
import javax.resource.spi.ActivationSpec;
-import javax.resource.spi.ResourceAdapter;
import javax.resource.spi.InvalidPropertyException;
+import javax.resource.spi.ResourceAdapter;
import javax.resource.spi.endpoint.MessageEndpoint;
import java.text.ParseException;
import java.text.SimpleDateFormat;
-import java.util.TimeZone;
import java.util.Date;
+import java.util.TimeZone;
/**
* @version $Rev$ $Date$
@@ -37,130 +43,110 @@ public final class JobSpec implements Ac
private MessageEndpoint endpoint;
private ResourceAdapter resourceAdapter;
- private final CronTrigger trigger;
- private final JobDetail detail;
+ private Trigger trigger;
+ private JobDetail detail;
private InvalidPropertyException invalidProperty;
+ private String triggerName;
+ private String triggerGroup;
+ private String jobName;
+ private String jobGroup;
+ private String description;
+ private boolean recoverable;
+ private boolean durable;
+ private String calendarName;
+ private String cronExpression;
+ private String timeZone;
+ private String startTime;
+ private String endTime;
- public JobSpec() {
- int i = hashCode();
-
- detail = new JobDetail();
- trigger = new CronTrigger();
-
- detail.setJobClass(QuartzResourceAdapter.JobEndpoint.class);
- detail.getJobDataMap().setAllowsTransientData(true);
-
- setVolatile(true);
-
- setJobGroup(Scheduler.DEFAULT_GROUP);
- setJobName("Job" + i);
-
- setTriggerGroup(Scheduler.DEFAULT_GROUP);
- setTriggerName("Trigger" + i);
+ public TriggerKey triggerKey() {
+ return trigger.getKey();
}
public String getTriggerName() {
- return trigger.getName();
+ return triggerName;
}
public void setTriggerName(String s) {
- trigger.setName(s);
+ triggerName = s;
}
public String getTriggerGroup() {
- return trigger.getGroup();
+ return triggerGroup;
}
public void setTriggerGroup(String s) {
- trigger.setGroup(s);
+ triggerGroup = s;
}
// -- Job Name
public String getJobName() {
- return detail.getName();
+ return jobName;
}
public void setJobName(String s) {
- detail.setName(s);
- trigger.setJobName(s);
+ jobName = s;
}
// -- Job Group
public void setJobGroup(String s) {
- detail.setGroup(s);
- trigger.setJobGroup(s);
+ jobGroup = s;
}
public String getJobGroup() {
- return trigger.getJobGroup();
+ return jobGroup;
}
// -- Description
public String getDescription() {
- return trigger.getDescription();
+ return description;
}
public void setDescription(String s) {
- detail.setDescription(s);
- trigger.setDescription(s);
- }
-
- // -- Volatility
-
- public void setVolatile(boolean b) {
- detail.setVolatility(b);
- trigger.setVolatility(b);
- }
-
- public boolean isVolatile() {
- return trigger.isVolatile();
+ description = s;
}
// -- Recoverable
public void setRequestsRecovery(boolean b) {
- detail.setRequestsRecovery(b);
+ recoverable = b;
}
public boolean isRequestsRecovery() {
- return detail.requestsRecovery();
+ return recoverable;
}
// -- Durability
public boolean isDurable() {
- return detail.isDurable();
+ return durable;
}
public void setDurable(boolean b) {
- detail.setDurability(b);
+ durable = b;
}
// -- Calendar name
public void setCalendarName(String s) {
- trigger.setCalendarName(s);
+ calendarName = s;
}
public String getCalendarName() {
- return trigger.getCalendarName();
+ return calendarName;
}
// -- Expression
public void setCronExpression(String s) {
- try {
- trigger.setCronExpression(s);
- } catch (ParseException e) {
- invalidProperty = new InvalidPropertyException("Invalid cron expression " + s, e);
- }
+ cronExpression = s;
}
public String getCronExpression() {
- return trigger.getCronExpression();
+ return cronExpression;
}
/**
@@ -175,7 +161,7 @@ public final class JobSpec implements Ac
// --
public void setTimeZone(String timeZone) {
- trigger.setTimeZone(TimeZone.getTimeZone(timeZone));
+ this.timeZone = timeZone;
}
// --
@@ -183,14 +169,14 @@ public final class JobSpec implements Ac
public void setStartTime(String startTime) {
Date date = parse(startTime);
if (date != null) {
- trigger.setStartTime(date);
+ this.startTime = startTime;
}
}
public void setEndTime(String endTime) {
Date date = parse(endTime);
if (date != null) {
- trigger.setEndTime(date);
+ this.endTime = endTime;
}
}
@@ -235,9 +221,36 @@ public final class JobSpec implements Ac
public void validate() throws InvalidPropertyException {
if (invalidProperty != null) throw invalidProperty;
+ int i = hashCode();
+ detail = JobBuilder.newJob(QuartzResourceAdapter.JobEndpoint.class)
+ .withIdentity("Job" + i, Scheduler.DEFAULT_GROUP)
+ .withDescription(description)
+ .requestRecovery(recoverable)
+ .storeDurably(durable)
+ .build();
+ final TriggerBuilder tb = TriggerBuilder.newTrigger()
+ .forJob(detail)
+ .withIdentity("Trigger" + i, Scheduler.DEFAULT_GROUP)
+ .withDescription(description);
+ if (startTime != null) {
+ tb.startAt(parse(startTime));
+ }
+ if (endTime != null) {
+ tb.endAt(parse(endTime));
+ }
+ if (calendarName != null) {
+ tb.modifiedByCalendar(calendarName);
+ }
+ final CronScheduleBuilder csb = CronScheduleBuilder.cronSchedule(getCronExpression());
+ if (timeZone != null) {
+ csb.inTimeZone(TimeZone.getTimeZone(timeZone));
+ }
+ tb.withSchedule(CronScheduleBuilder.cronSchedule(getCronExpression()));
+ trigger = tb.build();
+
+
try {
- detail.validate();
- trigger.validate();
+ ((CronTriggerImpl) trigger).validate();
} catch (SchedulerException e) {
throw new InvalidPropertyException(e);
}
@@ -259,11 +272,15 @@ public final class JobSpec implements Ac
this.endpoint = endpoint;
}
- CronTrigger getTrigger() {
+ Trigger getTrigger() {
return trigger;
}
JobDetail getDetail() {
return detail;
}
+
+ public JobKey jobKey() {
+ return detail.getKey();
+ }
}
Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/resource/quartz/QuartzResourceAdapter.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/resource/quartz/QuartzResourceAdapter.java?rev=1240799&r1=1240798&r2=1240799&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/resource/quartz/QuartzResourceAdapter.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/resource/quartz/QuartzResourceAdapter.java Sun Feb 5 20:27:46 2012
@@ -16,23 +16,23 @@
*/
package org.apache.openejb.resource.quartz;
-import org.quartz.Scheduler;
-import org.quartz.SchedulerException;
+import org.apache.openejb.util.LogCategory;
import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
+import org.quartz.Scheduler;
+import org.quartz.SchedulerException;
import org.quartz.impl.StdSchedulerFactory;
+import javax.resource.ResourceException;
+import javax.resource.spi.ActivationSpec;
import javax.resource.spi.BootstrapContext;
import javax.resource.spi.ResourceAdapterInternalException;
-import javax.resource.spi.ActivationSpec;
-import javax.resource.spi.endpoint.MessageEndpointFactory;
import javax.resource.spi.endpoint.MessageEndpoint;
-import javax.resource.ResourceException;
+import javax.resource.spi.endpoint.MessageEndpointFactory;
import javax.transaction.xa.XAResource;
import java.lang.reflect.Method;
-import org.apache.openejb.util.LogCategory;
/**
* @version $Rev$ $Date$
@@ -182,7 +182,6 @@ public class QuartzResourceAdapter imple
Job job = (Job) endpoint;
JobDataMap jobDataMap = spec.getDetail().getJobDataMap();
- jobDataMap.setAllowsTransientData(true);
jobDataMap.put(Data.class.getName(), new Data(job));
scheduler.scheduleJob(spec.getDetail(), spec.getTrigger());
@@ -201,7 +200,7 @@ public class QuartzResourceAdapter imple
try {
spec = (JobSpec) activationSpec;
- scheduler.deleteJob(spec.getJobName(), spec.getJobGroup());
+ scheduler.deleteJob(spec.jobKey());
} catch (SchedulerException e) {
throw new IllegalStateException("Failed to delete job", e);
Modified: openejb/trunk/openejb/examples/quartz-app/pom.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/examples/quartz-app/pom.xml?rev=1240799&r1=1240798&r2=1240799&view=diff
==============================================================================
--- openejb/trunk/openejb/examples/quartz-app/pom.xml (original)
+++ openejb/trunk/openejb/examples/quartz-app/pom.xml Sun Feb 5 20:27:46 2012
@@ -63,7 +63,7 @@
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
- <version>1.8.4</version>
+ <version>2.1.3</version>
</dependency>
<dependency>
<groupId>org.apache.openejb</groupId>
Modified: openejb/trunk/openejb/examples/quartz-app/quartz-beans/src/main/java/org/superbiz/quartz/JobBean.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/examples/quartz-app/quartz-beans/src/main/java/org/superbiz/quartz/JobBean.java?rev=1240799&r1=1240798&r2=1240799&view=diff
==============================================================================
--- openejb/trunk/openejb/examples/quartz-app/quartz-beans/src/main/java/org/superbiz/quartz/JobBean.java (original)
+++ openejb/trunk/openejb/examples/quartz-app/quartz-beans/src/main/java/org/superbiz/quartz/JobBean.java Sun Feb 5 20:27:46 2012
@@ -18,11 +18,14 @@ package org.superbiz.quartz;
import org.apache.openejb.resource.quartz.QuartzResourceAdapter;
import org.quartz.Job;
+import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.Scheduler;
+import org.quartz.SimpleScheduleBuilder;
import org.quartz.SimpleTrigger;
+import org.quartz.TriggerBuilder;
import javax.ejb.Stateless;
import javax.naming.InitialContext;
@@ -38,11 +41,17 @@ public class JobBean implements JobSched
final Scheduler s = ra.getScheduler();
//Add a job type
- final JobDetail jd = new JobDetail("job1", "group1", JobBean.MyTestJob.class);
+ final JobDetail jd = JobBuilder.newJob(MyTestJob.class).withIdentity("job1", "group1").build();
jd.getJobDataMap().put("MyJobKey", "MyJobValue");
//Schedule my 'test' job to run now
- final SimpleTrigger trigger = new SimpleTrigger("trigger1", "group1", new Date());
+ final SimpleTrigger trigger = TriggerBuilder.newTrigger()
+ .withIdentity("trigger1", "group1")
+ .forJob(jd)
+ .withSchedule(SimpleScheduleBuilder.simpleSchedule()
+ .withRepeatCount(0)
+ .withIntervalInSeconds(0))
+ .build();
return s.scheduleJob(jd, trigger);
}
Modified: openejb/trunk/openejb/pom.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/pom.xml?rev=1240799&r1=1240798&r2=1240799&view=diff
==============================================================================
--- openejb/trunk/openejb/pom.xml (original)
+++ openejb/trunk/openejb/pom.xml Sun Feb 5 20:27:46 2012
@@ -134,7 +134,7 @@
<bval.version>0.4-incubating-SNAPSHOT</bval.version>
<org.apache.activemq.version>5.5.1</org.apache.activemq.version>
- <quartz.version>1.8.5</quartz.version>
+ <quartz.version>2.1.3</quartz.version>
<org.springframework.version>3.1.0.RELEASE</org.springframework.version>
<junit.version>4.9</junit.version>
<org.apache.axis2.version>1.4.1</org.apache.axis2.version>