예제 #1
0
        public void MarkItemFailed(FtpOutboundData jobData, Exception err)
        {
            var errorObject = _eventReporter.ExceptionForObject(err, jobData);

            jobData.Status = EnumJobStatus.Error;
            jobData.AddException(err);
            jobData.ExceptionIdList.Add(errorObject.Id);
            _documentSession.SaveChanges();
        }
 public override void Run(ConfigType configuration)
 {
     _eventReporter.Trace(this.GetType().Name + ": job run started");
     if (_singletonJob)
     {
         lock (typeof(EmailSenderJob))
         {
             if (_isRunning)
             {
                 _eventReporter.Info("EmailSenderJob already running");
                 return;
             }
             else
             {
                 _isRunning = true;
             }
         }
     }
     try
     {
         bool done              = false;
         int  counter           = 0;
         int  maxItemsToProcess = this.GetMaxItemsToProcess(configuration);
         while (!done)
         {
             if (counter > maxItemsToProcess)
             {
                 done = true;
             }
             JobDataType jobData = this.GetNextItemToProcess(configuration);
             if (jobData == null)
             {
                 done = true;
                 _eventReporter.Trace(this.GetType().Name + ": job run done");
             }
             else
             {
                 try
                 {
                     _eventReporter.InfoForObject(this.GetType().Name + ": processing item", jobData);
                     this.ProcessItem(configuration, jobData);
                     this.MarkItemSuccessful(jobData);
                     _eventReporter.InfoForObject(this.GetType().Name + ": item done", jobData);
                 }
                 catch (Exception err)
                 {
                     this.MarkItemFailed(jobData, err);
                     _eventReporter.ExceptionForObject(err, jobData);
                 }
             }
         }
     }
     catch (Exception err)
     {
         _eventReporter.Exception(err);
     }
     finally
     {
         _isRunning = false;
     }
 }