using System;
using System.Threading;
using Common.Logging;
using Quartz.Impl;
namespace Quartz.Server.Core{
/// <summary>
/// The main server logic.
/// </summary>
public class QuartzServer : IQuartzServer
{
private readonly ILog logger;
private ISchedulerFactory schedulerFactory;
private IScheduler scheduler;
/// <summary>
/// Initializes a new instance of the <see cref="QuartzServer"/> class.
/// </summary>
public QuartzServer()
{
logger = LogManager.GetLogger(GetType());
}
/// <summary>
/// Initializes the instance of the <see cref="QuartzServer"/> class.
/// </summary>
public virtual void Initialize()
{
try
{
schedulerFactory = CreateSchedulerFactory();
scheduler = GetScheduler();
}
catch (Exception e)
{
logger.Error("Server initialization failed:" + e.Message, e);
throw;
}
}
/// <summary>
/// Gets the scheduler with which this server should operate with.
/// </summary>
/// <returns></returns>
protected virtual IScheduler GetScheduler()
{
return schedulerFactory.GetScheduler();
}
/// <summary>
/// Returns the current scheduler instance (usually created in <see cref="Initialize" />
/// using the <see cref="GetScheduler" /> method).
/// </summary>
protected virtual IScheduler Scheduler
{
get { return scheduler; }
}
/// <summary>
/// Creates the scheduler factory that will be the factory
/// for all schedulers on this instance.
/// </summary>
/// <returns></returns>
protected virtual ISchedulerFactory CreateSchedulerFactory()
{
return new StdSchedulerFactory();
}
/// <summary>
/// Starts this instance, delegates to scheduler.
/// </summary>
public virtual void Start()
{
scheduler.Start();
try
{
Thread.Sleep(3000);
}
catch (ThreadInterruptedException)
{
}
logger.Info("Scheduler started successfully");
}
/// <summary>
/// Stops this instance, delegates to scheduler.
/// </summary>
public virtual void Stop()
{
scheduler.Shutdown(true);
logger.Info("Scheduler shutdown complete");
}
/// <summary>
/// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
/// </summary>
public virtual void Dispose()
{
// no-op for now
}
}
}
|