All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.codehaus.plexus.scheduler.DefaultScheduler Maven / Gradle / Ivy

package org.codehaus.plexus.scheduler;

import org.codehaus.plexus.logging.AbstractLogEnabled;
import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException;
import org.codehaus.plexus.personality.plexus.lifecycle.phase.Startable;
import org.codehaus.plexus.personality.plexus.lifecycle.phase.StartingException;
import org.codehaus.plexus.personality.plexus.lifecycle.phase.StoppingException;
import org.quartz.JobDetail;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.Trigger;
import org.quartz.JobListener;
import org.quartz.TriggerListener;
import org.quartz.impl.StdScheduler;
import org.quartz.impl.StdSchedulerFactory;

import java.util.Properties;

public class DefaultScheduler
    extends AbstractLogEnabled
    implements Scheduler, Initializable, Startable
{
    private Properties properties;

    private StdScheduler scheduler;

    public void scheduleJob( JobDetail jobDetail, Trigger trigger )
        throws SchedulerException
    {
        if ( jobExists( jobDetail.getName(), jobDetail.getGroup() ) )
        {
            getLogger().warn( "Will not schedule this job as a job {" + jobDetail.getName() + ":" +
                              jobDetail.getGroup() + "} already exists." );

            return;
        }

        try
        {
            scheduler.scheduleJob( jobDetail, trigger );
        }
        catch ( SchedulerException e )
        {
            throw new SchedulerException( "Error scheduling job.", e );
        }
        catch ( Exception e )
        {
            throw new SchedulerException( "Error scheduling job (Verify your cron expression).", e );
        }
    }

    public void addGlobalJobListener( JobListener listener )
    {
        scheduler.addGlobalJobListener( listener );
    }

    public void addGlobalTriggerListener( TriggerListener listener )
    {
        scheduler.addGlobalTriggerListener( listener );
    }

    public void initialize()
        throws InitializationException
    {
        try
        {
            SchedulerFactory factory = new StdSchedulerFactory( properties );

            scheduler = (StdScheduler) factory.getScheduler();
        }
        catch ( SchedulerException e )
        {
            throw new InitializationException( "Cannot create scheduler.", e );
        }
    }

    public void start()
        throws StartingException
    {
        try
        {
            scheduler.start();
        }
        catch ( SchedulerException e )
        {
            throw new StartingException( "Cannot start scheduler.", e );
        }
    }

    public void stop()
        throws StoppingException
    {
        scheduler.shutdown();
    }

    public void unscheduleJob( String jobName, String groupName )
        throws SchedulerException
    {
        try
        {
            if ( jobExists( jobName, groupName ) )
            {
                scheduler.deleteJob( jobName, groupName );
            }
        }
        catch ( SchedulerException e )
        {
            throw new SchedulerException( "Error unscheduling job.", e );
        }
    }

    public boolean interruptSchedule( String jobName, String groupName )
        throws SchedulerException
    {
        try
        {
            return scheduler.interrupt( jobName, groupName );
        }
        catch ( Exception e )
        {
            throw new SchedulerException( "Can't interrup job \"" + jobName + "\".", e );
        }
    }

    private boolean jobExists( String jobName, String jobGroup )
        throws SchedulerException
    {
        String[] jobNames;

        try
        {
            jobNames = scheduler.getJobNames( jobGroup );
        }
        catch ( SchedulerException e )
        {
            throw new SchedulerException( "Error getting job.", e );
        }

        for ( int i = 0; i < jobNames.length; i++ )
        {
            String name = jobNames[i];

            if ( jobName.equals( name ) )
            {
                return true;
            }
        }

        return false;
    }

    public StdScheduler getScheduler()
    {
        return scheduler;
    }

    public void setProperties( Properties properties )
    {
        this.properties = properties;
    }

    public Properties getProperties()
    {
        return properties;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy