/// <summary> /// Called by the QuartzScheduler before the <see cref="IJobStore" /> is /// used, in order to give it a chance to Initialize. /// </summary> public virtual void Initialize(ITypeLoadHelper loadHelper, ISchedulerSignaler s) { if (dataSource == null) { throw new SchedulerConfigException("DataSource name not set."); } typeLoadHelper = loadHelper; schedSignaler = s; // If the user hasn't specified an explicit lock handler, then // choose one based on CMT/Clustered/UseDBLocks. if (LockHandler == null) { // If the user hasn't specified an explicit lock handler, // then we *must* use DB locks with clustering if (Clustered) { UseDBLocks = true; } if (UseDBLocks) { if (Delegate is SqlServerDelegate) { if (SelectWithLockSQL == null) { const string DefaultLockSql = "SELECT * FROM {0}LOCKS WITH (UPDLOCK,ROWLOCK) WHERE " + ColumnSchedulerName + " = {1} AND LOCK_NAME = @lockName"; Log.InfoFormat("Detected usage of SqlServerDelegate - defaulting 'selectWithLockSQL' to '" + DefaultLockSql + "'.", TablePrefix, "'" + InstanceName + "'"); SelectWithLockSQL = DefaultLockSql; } } Log.Info("Using db table-based data access locking (synchronization)."); LockHandler = new StdRowLockSemaphore(TablePrefix, InstanceName, SelectWithLockSQL, DbProvider); } else { Log.Info("Using thread monitor-based data access locking (synchronization)."); LockHandler = new SimpleSemaphore(); } } else { // be ready to give a friendly warning if SQL Server is used and sub-optimal locking if (LockHandler is UpdateLockRowSemaphore && Delegate is SqlServerDelegate) { Log.Warn("Detected usage of SqlServerDelegate and UpdateLockRowSemaphore, removing 'quartz.jobStore.lockHandler.type' would allow more efficient SQL Server specific (UPDLOCK,ROWLOCK) row access"); } // be ready to give a friendly warning if SQL Server provider and wrong delegate if (DbProvider != null && DbProvider.Metadata.ConnectionType == typeof(SqlConnection) && !(Delegate is SqlServerDelegate)) { Log.Warn("Detected usage of SQL Server provider without SqlServerDelegate, SqlServerDelegate would provide better performance"); } } }
/// <summary> /// Called by the QuartzScheduler before the <see cref="IJobStore" /> is /// used, in order to give it a chance to Initialize. /// </summary> public virtual void Initialize(ITypeLoadHelper loadHelper, ISchedulerSignaler s) { if (dataSource == null) { throw new SchedulerConfigException("DataSource name not set."); } typeLoadHelper = loadHelper; schedSignaler = s; // If the user hasn't specified an explicit lock handler, then // choose one based on CMT/Clustered/UseDBLocks. if (LockHandler == null) { // If the user hasn't specified an explicit lock handler, // then we *must* use DB locks with clustering if (Clustered) { UseDBLocks = true; } if (UseDBLocks) { if (Delegate is SqlServerDelegate) { if (SelectWithLockSQL == null) { const string DefaultLockSql = "SELECT * FROM {0}LOCKS WITH (UPDLOCK,ROWLOCK) WHERE " + ColumnSchedulerName + " = {1} AND LOCK_NAME = @lockName"; Log.Info("Detected usage of MSSQLDelegate - defaulting 'selectWithLockSQL' to '" + DefaultLockSql + "'."); SelectWithLockSQL = DefaultLockSql; } } Log.Info("Using db table-based data access locking (synchronization)."); LockHandler = new StdRowLockSemaphore(TablePrefix, InstanceName, SelectWithLockSQL, DbProvider); } else { Log.Info("Using thread monitor-based data access locking (synchronization)."); LockHandler = new SimpleSemaphore(); } } }
/// <summary> /// Called by the QuartzScheduler before the <see cref="IJobStore" /> is /// used, in order to give it a chance to Initialize. /// </summary> public virtual void Initialize(ITypeLoadHelper loadHelper, ISchedulerSignaler s) { if (dataSource == null) { throw new SchedulerConfigException("DataSource name not set."); } typeLoadHelper = loadHelper; signaler = s; // If the user hasn't specified an explicit lock handler, then // choose one based on CMT/Clustered/UseDBLocks. if (LockHandler == null) { // If the user hasn't specified an explicit lock handler, // then we *must* use DB locks with clustering if (Clustered) { UseDBLocks = true; } if (UseDBLocks) { Log.Info("Using db table-based data access locking (synchronization)."); LockHandler = new StdRowLockSemaphore(TablePrefix, SelectWithLockSQL, DbProvider); } else { Log.Info("Using thread monitor-based data access locking (synchronization)."); LockHandler = new SimpleSemaphore(); } } }