Search in sources :

Example 1 with Task

use of org.apache.synapse.task.Task in project wso2-synapse by wso2.

the class QuartzTaskManager method schedule.

@Override
public boolean schedule(TaskDescription taskDescription) {
    assertInitialized();
    assertStarted();
    if (taskDescription == null) {
        throw new SynapseTaskException("Task Description cannot be found", logger);
    }
    Trigger trigger;
    JobDetail jobDetail;
    synchronized (lock) {
        if (triggerFactory == null) {
            throw new SynapseTaskException("TriggerFactory cannot be found", logger);
        }
        if (jobDetailFactory == null) {
            throw new SynapseTaskException("JobDetailFactory cannot be found", logger);
        }
        trigger = triggerFactory.createTrigger(taskDescription);
        if (trigger == null) {
            throw new SynapseTaskException("Trigger cannot be created from : " + taskDescription, logger);
        }
        jobDetail = jobDetailFactory.createJobDetail(taskDescription, taskDescription.getResources(), SimpleQuartzJob.class);
        if (jobDetail == null) {
            throw new SynapseTaskException("JobDetail cannot be created from : " + taskDescription + " and job class " + taskDescription.getTaskImplClassName(), logger);
        }
    }
    Object clsInstance = taskDescription.getResource(TaskDescription.INSTANCE);
    if (clsInstance == null) {
        String className = (String) taskDescription.getProperty(TaskDescription.CLASSNAME);
        try {
            clsInstance = Class.forName(className).newInstance();
            if (clsInstance instanceof ManagedLifecycle) {
                Object se = properties.get(TaskConstants.SYNAPSE_ENV);
                if (!(se instanceof SynapseEnvironment)) {
                    return false;
                }
                ((ManagedLifecycle) clsInstance).init((SynapseEnvironment) se);
            }
            for (Object property : taskDescription.getXmlProperties()) {
                OMElement prop = (OMElement) property;
                logger.debug("Found Property : " + prop.toString());
                PropertyHelper.setStaticProperty(prop, clsInstance);
            }
        } catch (ClassNotFoundException e) {
            logger.error("Could not schedule task[" + name + "].", e);
            return false;
        } catch (InstantiationException e) {
            logger.error("Could not schedule task[" + name + "].", e);
            return false;
        } catch (IllegalAccessException e) {
            logger.error("Could not schedule task[" + name + "].", e);
            return false;
        }
    }
    if (!(clsInstance instanceof Task)) {
        logger.error("Could not schedule task[" + name + "]. Cannot load class " + "org.apache.synapse.startup.quartz.SimpleQuartzJob");
        return false;
    }
    jobDetail.getJobDataMap().put(TaskDescription.INSTANCE, clsInstance);
    jobDetail.getJobDataMap().put(TaskDescription.CLASSNAME, clsInstance.getClass().toString());
    jobDetail.getJobDataMap().put(TaskConstants.SYNAPSE_ENV, getProperty(TaskConstants.SYNAPSE_ENV));
    try {
        if (logger.isDebugEnabled()) {
            logger.debug("scheduling job : " + jobDetail + " with trigger " + trigger);
        }
        if (taskDescription.getCount() != 0 && !isTaskRunning(jobDetail.getKey())) {
            try {
                synchronized (lock) {
                    scheduler.scheduleJob(jobDetail, trigger);
                }
            } catch (ObjectAlreadyExistsException e) {
                logger.warn("did not schedule the job : " + jobDetail + ". the job is already running.");
            }
        } else {
            if (logger.isDebugEnabled()) {
                logger.debug("did not schedule the job : " + jobDetail + ". count is zero.");
            }
        }
    } catch (SchedulerException e) {
        throw new SynapseTaskException("Error scheduling job : " + jobDetail + " with trigger " + trigger);
    }
    logger.info("Scheduled task [" + taskDescription.getName() + "::" + taskDescription.getTaskGroup() + "]");
    return true;
}
Also used : Task(org.apache.synapse.task.Task) SchedulerException(org.quartz.SchedulerException) SynapseEnvironment(org.apache.synapse.core.SynapseEnvironment) OMElement(org.apache.axiom.om.OMElement) SynapseTaskException(org.apache.synapse.task.SynapseTaskException) ManagedLifecycle(org.apache.synapse.ManagedLifecycle) JobDetail(org.quartz.JobDetail) Trigger(org.quartz.Trigger) ObjectAlreadyExistsException(org.quartz.ObjectAlreadyExistsException)

Example 2 with Task

use of org.apache.synapse.task.Task in project wso2-synapse by wso2.

the class SimpleQuartzJob method execute.

public void execute(JobExecutionContext ctx) throws JobExecutionException {
    String jobName = ctx.getJobDetail().getKey().getName();
    if (log.isDebugEnabled()) {
        log.debug("Executing task : " + jobName);
    }
    JobDataMap jdm = ctx.getMergedJobDataMap();
    String jobClassName = (String) jdm.get(CLASSNAME);
    if (jobClassName == null) {
        handleException("No " + CLASSNAME + " in JobDetails");
    }
    boolean initRequired = false;
    Task task = (Task) jdm.get(TaskDescription.INSTANCE);
    if (task == null) {
        initRequired = true;
    }
    SynapseEnvironment se = (SynapseEnvironment) jdm.get("SynapseEnvironment");
    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
    if (se != null && task != null && se.isInitialized()) {
        task.execute();
    }
    if (initRequired) {
        // 3. Destroy
        if (task instanceof ManagedLifecycle && se != null) {
            ((ManagedLifecycle) task).destroy();
        }
    }
}
Also used : JobDataMap(org.quartz.JobDataMap) Task(org.apache.synapse.task.Task) Set(java.util.Set) SynapseEnvironment(org.apache.synapse.core.SynapseEnvironment) OMElement(org.apache.axiom.om.OMElement) ManagedLifecycle(org.apache.synapse.ManagedLifecycle) JobExecutionException(org.quartz.JobExecutionException)

Aggregations

OMElement (org.apache.axiom.om.OMElement)2 ManagedLifecycle (org.apache.synapse.ManagedLifecycle)2 SynapseEnvironment (org.apache.synapse.core.SynapseEnvironment)2 Task (org.apache.synapse.task.Task)2 Set (java.util.Set)1 SynapseTaskException (org.apache.synapse.task.SynapseTaskException)1 JobDataMap (org.quartz.JobDataMap)1 JobDetail (org.quartz.JobDetail)1 JobExecutionException (org.quartz.JobExecutionException)1 ObjectAlreadyExistsException (org.quartz.ObjectAlreadyExistsException)1 SchedulerException (org.quartz.SchedulerException)1 Trigger (org.quartz.Trigger)1