Author: supun
Date: Wed Apr 20 13:43:00 2011
New Revision: 1095409
URL: http://svn.apache.org/viewvc?rev=1095409&view=rev
Log:
adding the functionality to intilize a task class only once
Modified:
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/startup/quartz/SimpleQuartz.java
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/startup/quartz/SimpleQuartzJob.java
synapse/trunk/java/modules/tasks/src/main/java/org/apache/synapse/task/TaskDescription.java
synapse/trunk/java/modules/tasks/src/main/java/org/apache/synapse/task/TaskScheduler.java
Modified:
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/startup/quartz/SimpleQuartz.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/startup/quartz/SimpleQuartz.java?rev=1095409&r1=1095408&r2=1095409&view=diff
==============================================================================
---
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/startup/quartz/SimpleQuartz.java
(original)
+++
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/startup/quartz/SimpleQuartz.java
Wed Apr 20 13:43:00 2011
@@ -19,9 +19,12 @@
package org.apache.synapse.startup.quartz;
+import org.apache.axiom.om.OMElement;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.synapse.ManagedLifecycle;
import org.apache.synapse.SynapseException;
+import org.apache.synapse.commons.util.PropertyHelper;
import org.apache.synapse.core.SynapseEnvironment;
import org.apache.synapse.startup.AbstractStartup;
import org.apache.synapse.task.*;
@@ -32,6 +35,7 @@ import java.net.UnknownHostException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.Set;
/*
* This class is instantiated by SimpleQuartzFactory (or by hand)
@@ -48,6 +52,8 @@ public class SimpleQuartz extends Abstra
private SynapseTaskManager taskManager;
+ private Task task = null;
+
public QName getTagQName() {
return SimpleQuartzFactory.TASK;
}
@@ -61,6 +67,10 @@ public class SimpleQuartz extends Abstra
return;
}
+ if (task instanceof ManagedLifecycle) {
+ ((ManagedLifecycle) task).destroy();
+ }
+
if (taskManager.isInitialized()) {
TaskScheduler taskScheduler = taskManager.getTaskScheduler();
@@ -131,6 +141,24 @@ public class SimpleQuartz extends Abstra
}
}
+ try {
+ task = (Task) getClass().getClassLoader().loadClass(
+ taskDescription.getTaskClass()).newInstance();
+ } catch (Exception e) {
+ handleException("Cannot instantiate task : " +
taskDescription.getTaskClass(), e);
+ }
+
+ Set properties = taskDescription.getProperties();
+ for (Object property : properties) {
+ OMElement prop = (OMElement) property;
+ log.debug("Found Property : " + prop.toString());
+ PropertyHelper.setStaticProperty(prop, task);
+ }
+
+ if (task instanceof ManagedLifecycle) {
+ ((ManagedLifecycle)task).init(synapseEnvironment);
+ }
+
Map<String, Object> map = new HashMap<String, Object>();
map.put(SimpleQuartzJob.SYNAPSE_ENVIRONMENT, synapseEnvironment);
@@ -141,7 +169,7 @@ public class SimpleQuartz extends Abstra
if (!taskScheduler.isInitialized()) {
taskScheduler.init(synapseEnvironment.getSynapseConfiguration().getProperties());
}
- taskScheduler.scheduleTask(taskDescription, map,
SimpleQuartzJob.class);
+ taskScheduler.scheduleTask(taskDescription, map,
SimpleQuartzJob.class, task);
} else {
if (log.isDebugEnabled()) {
log.debug("TaskScheduler cannot be found for :" +
@@ -170,4 +198,9 @@ public class SimpleQuartz extends Abstra
log.error(message);
throw new SynapseException(message);
}
+
+ private static void handleException(String message, Exception e) {
+ log.error(message, e);
+ throw new SynapseException(message, e);
+ }
}
Modified:
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/startup/quartz/SimpleQuartzJob.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/startup/quartz/SimpleQuartzJob.java?rev=1095409&r1=1095408&r2=1095409&view=diff
==============================================================================
---
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/startup/quartz/SimpleQuartzJob.java
(original)
+++
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/startup/quartz/SimpleQuartzJob.java
Wed Apr 20 13:43:00 2011
@@ -26,6 +26,7 @@ import org.apache.synapse.commons.util.P
import org.apache.synapse.task.Task;
import org.apache.synapse.core.SynapseEnvironment;
+import org.apache.synapse.task.TaskDescription;
import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
@@ -53,24 +54,33 @@ public class SimpleQuartzJob implements
handleException("No " + CLASSNAME + " in JobDetails");
}
- Task task = null;
- try {
- task = (Task)
getClass().getClassLoader().loadClass(jobClassName).newInstance();
- } catch (Exception e) {
- handleException("Cannot instantiate task : " + jobClassName, e);
- }
+ boolean initRequired = false;
- Set properties = (Set) jdm.get(PROPERTIES);
- for (Object property : properties) {
- OMElement prop = (OMElement) property;
- log.debug("Found Property : " + prop.toString());
- PropertyHelper.setStaticProperty(prop, task);
+ Task task = (Task) jdm.get(TaskDescription.INSTANCE);
+ if (task == null) {
+ initRequired = true;
}
- // 1. Initialize
SynapseEnvironment se = (SynapseEnvironment)
jdm.get("SynapseEnvironment");
- if (task instanceof ManagedLifecycle && se != null) {
- ((ManagedLifecycle) task).init(se);
+
+ if (initRequired) {
+ try {
+ task = (Task)
getClass().getClassLoader().loadClass(jobClassName).newInstance();
+ } catch (Exception e) {
+ handleException("Cannot instantiate task : " + jobClassName,
e);
+ }
+
+ Set properties = (Set) jdm.get(PROPERTIES);
+ for (Object property : properties) {
+ OMElement prop = (OMElement) property;
+ log.debug("Found Property : " + prop.toString());
+ PropertyHelper.setStaticProperty(prop, task);
+ }
+
+ // 1. Initialize
+ if (task instanceof ManagedLifecycle && se != null) {
+ ((ManagedLifecycle) task).init(se);
+ }
}
// 2. Execute
@@ -78,9 +88,11 @@ public class SimpleQuartzJob implements
task.execute();
}
- // 3. Destroy
- if (task instanceof ManagedLifecycle && se != null) {
- ((ManagedLifecycle) task).destroy();
+ if (initRequired) {
+ // 3. Destroy
+ if (task instanceof ManagedLifecycle && se != null) {
+ ((ManagedLifecycle) task).destroy();
+ }
}
}
Modified:
synapse/trunk/java/modules/tasks/src/main/java/org/apache/synapse/task/TaskDescription.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/tasks/src/main/java/org/apache/synapse/task/TaskDescription.java?rev=1095409&r1=1095408&r2=1095409&view=diff
==============================================================================
---
synapse/trunk/java/modules/tasks/src/main/java/org/apache/synapse/task/TaskDescription.java
(original)
+++
synapse/trunk/java/modules/tasks/src/main/java/org/apache/synapse/task/TaskDescription.java
Wed Apr 20 13:43:00 2011
@@ -33,6 +33,7 @@ public class TaskDescription {
public static final String CLASSNAME = "ClassName";
public static final String PROPERTIES = "Properties";
+ public static final String INSTANCE = "Instance";
public static final String DEFAULT_GROUP = "synapse.simple.quartz";
private String cron;
private int repeatCount = SimpleTrigger.REPEAT_INDEFINITELY;
Modified:
synapse/trunk/java/modules/tasks/src/main/java/org/apache/synapse/task/TaskScheduler.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/tasks/src/main/java/org/apache/synapse/task/TaskScheduler.java?rev=1095409&r1=1095408&r2=1095409&view=diff
==============================================================================
---
synapse/trunk/java/modules/tasks/src/main/java/org/apache/synapse/task/TaskScheduler.java
(original)
+++
synapse/trunk/java/modules/tasks/src/main/java/org/apache/synapse/task/TaskScheduler.java
Wed Apr 20 13:43:00 2011
@@ -213,6 +213,63 @@ public class TaskScheduler {
}
/**
+ * Schedule a Task
+ *
+ * @param taskDescription TaskDescription , an information about Task
+ * @param resources Any initial resources for task
+ * @param jobClass Quartz job class
+ * @param task The task to be executed
+ */
+ public void scheduleTask(TaskDescription taskDescription, Map<String,
+ Object> resources, Class<? extends Job> jobClass, Task task) {
+
+ assertInitialized();
+ assertStarted();
+
+ if (taskDescription == null) {
+ throw new SynapseTaskException("Task Description cannot be found",
log);
+ }
+
+ if (jobClass == null) {
+ throw new SynapseTaskException("Job Class cannot be found", log);
+ }
+
+ if (triggerFactory == null) {
+ throw new SynapseTaskException("TriggerFactory cannot be found",
log);
+ }
+
+ if (jobDetailFactory == null) {
+ throw new SynapseTaskException("JobDetailFactory cannot be found",
log);
+ }
+
+ Trigger trigger = triggerFactory.createTrigger(taskDescription);
+ if (trigger == null) {
+ throw new SynapseTaskException("Trigger cannot be created from : "
+ + taskDescription, log);
+ }
+
+ JobDetail jobDetail = jobDetailFactory.createJobDetail(taskDescription,
+ resources, jobClass);
+ if (jobDetail == null) {
+ throw new SynapseTaskException("JobDetail cannot be created from :
" + taskDescription +
+ " and job class " + jobClass.getName(), log);
+ }
+
+ jobDetail.getJobDataMap().put(TaskDescription.INSTANCE, task);
+
+ try {
+ if (log.isDebugEnabled()) {
+ log.debug("scheduling job : " + jobDetail + " with trigger " +
trigger);
+ }
+ scheduler.scheduleJob(jobDetail, trigger);
+ } catch (SchedulerException e) {
+ throw new SynapseTaskException("Error scheduling job : " +
jobDetail
+ + " with trigger " + trigger);
+ }
+
+ }
+
+ /**
* ShutDown the underlying quartz scheduler
*/
public void shutDown() {