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() {


Reply via email to