After implementing a similar SchedulerStarter, I still had the
problem.  So, I made my NoOpJob a little less trival

public class NoOpJob : IJob
    {
        public Boolean Execute(JobExecutionContext context)
        {
            context.Logger.DebugFormat("Hello World - {0}",
DateTime.Now.ToShortTimeString());
            Thread.Sleep(5000);
            return true;
        }
    }

I haven't seen it throw the error since this change.

Jason

On Thu, May 28, 2009 at 8:21 PM, jsmorris <[email protected]> wrote:
> Thanks for sharing your code.  I will give it a try.
>
> Are you using the DefaultJobRunner?  I took a look at the code and the
> comment in EndExecute explains the error I am seeing.  Now all we need
> is a fix for this.
>
>                public bool EndExecute(IAsyncResult asyncResult)
>                {
>                        JobAsyncResult jobResult = (JobAsyncResult)asyncResult;
>                        bool executed = jobResult.End();
>                        jobFactory.ReleaseJob(jobResult.Job);
>                        return executed;
>
>                        //TODO: Fix it.
>                        //Something is not right. Sometimes (dunno why) it 
> throws:
>                        //System.Runtime.Remoting.RemotingException: The async 
> result
> object is null or of an unexpected type.
>                }
>
> On Thu, May 28, 2009 at 5:44 AM, John Simons <[email protected]> 
> wrote:
>> nope, here is what my config looks like:
>>
>> <component
>>             id="scheduler.starter"
>>             type="DFAT.SWAT.WCF.Services.SchedulerStarter, DFAT.SWAT.WCF"
>>       service="Castle.Core.IStartable, Castle.Core" />
>>
>> And the implementation of SchedulerStarter: (Note: I've created a IJobSpec
>> interface to register jobs)
>>
>>     public class SchedulerStarter : IStartable
>>     {
>>         private readonly IScheduler scheduler;
>>         private readonly IKernel kernel;
>>         private ILogger logger;
>>
>>         public SchedulerStarter(IScheduler scheduler, IKernel kernel)
>>         {
>>             logger = NullLogger.Instance;
>>             this.scheduler = scheduler;
>>             this.kernel = kernel;
>>         }
>>
>>         public ILogger Logger
>>         {
>>             get { return logger; }
>>             set { logger = value; }
>>         }
>>
>>         #region Implementation of IStartable
>>
>>         /// <summary>
>>         /// Starts this instance.
>>         /// </summary>
>>         public void Start()
>>         {
>>             var jobSpecs = kernel.ResolveAll<IJobSpec>();
>>
>>             logger.InfoFormat("{0} jobs found.", jobSpecs.Length);
>>
>>             foreach (var spec in jobSpecs)
>>             {
>>                 var jobSpec = new JobSpec(spec.Name, spec.Description,
>> spec.JobId, spec.Trigger);
>>
>>                 scheduler.CreateJob(jobSpec,
>> CreateJobConflictAction.Replace);
>>                 logger.InfoFormat("{0} job found.", spec.Name);
>>             }
>>
>>             if (jobSpecs.Length > 0)
>>             {
>>                 logger.Debug("Starting Scheduler");
>>                 scheduler.Start();
>>             }
>>         }
>>
>>         /// <summary>
>>         /// Stops this instance.
>>         /// </summary>
>>         public void Stop()
>>         {
>>             if (scheduler.IsRunning)
>>             {
>>                 scheduler.Stop();
>>             }
>>
>>             scheduler.Dispose();
>>         }
>>
>>         #endregion
>>     }
>>
>> I hope this helps :)
>> John
>>
>> ________________________________
>> From: jsmorris <[email protected]>
>> To: [email protected]
>> Sent: Thursday, 28 May, 2009 12:04:32 PM
>> Subject: Re: Using Component.Scheduler in Monorail produces random job
>> failures
>>
>>
>> @John
>>
>> I am assuming you configured it something like this (since I didn't
>> see that the DefaultScheduler implemented IStartable)
>>
>> <components>
>>       <component id="Core.Scheduling.Scheduler"
>>                 service="Castle.Components.Scheduler.IScheduler,
>> Castle.Components.Scheduler"
>>                 type="Castle.Components.Scheduler.DefaultScheduler,
>> Castle.Components.Scheduler"
>>                 startable="true" startMethod="Start" stopMethod="Stop" />
>>       </components>
>>
>> After I tried this, I still got the errors...bummer.
>>
>> Jason
>>
>> On Wed, May 27, 2009 at 10:23 PM, John Simons
>> <[email protected]> wrote:
>>> Hi Jason,
>>>
>>> I use the Scheduler with Monorail and I'm not experiencing any problems.
>>>
>>> The difference is that I start my Scheduler using the Startable Facility
>>>
>>> (http://www.castleproject.org/container/facilities/trunk/startable/index.html),
>>> have a look at the doco.
>>>
>>> Not sure why it would be failing randomly! I'll try to replicate your
>>> setup
>>> today and report on the results later on.
>>>
>>> Cheers
>>> John
>>>
>>>
>>>
>>> ________________________________
>>> From: jsmorris <[email protected]>
>>> To: [email protected]
>>> Sent: Thursday, 28 May, 2009 6:05:51 AM
>>> Subject: Using Component.Scheduler in Monorail produces random job
>>> failures
>>>
>>>
>>> I am exploring the use of Component.Scheduler to execute a few, short
>>> duration jobs within my monorail web app.  I have read people's
>>> concern about asp.net killing your threads before the job is complete.
>>> Let's ignore that for the time being, unless using the
>>> Component.Scheduler in a monorail web app is impossible.
>>>
>>> I am running locally on the ASP.NET Development Server (not IIS)
>>> running castle nightly build 1126.
>>>
>>> I have written my Global.cs as such to start and stop the scheduler,
>>> plus adding a very basic job.
>>>
>>>     public class Global : HttpApplication, IContainerAccessor
>>>     {
>>>         private static IWindsorContainer _container;
>>>
>>>         public IWindsorContainer Container { get { return _container; } }
>>>
>>>         protected void Application_Start(Object sender, EventArgs e)
>>>         {
>>>             _container = new IoCContainer("Web.config");
>>>
>>>             var jobSpec = new JobSpec("NoOp job.", "A test job.",
>>> "NoOpJob", new PeriodicTrigger(new DateTime(1900, 1, 1), new
>>> DateTime(2900, 1, 1), new TimeSpan(0, 0, 10), 1000));
>>>
>>>             _container.Resolve<IScheduler>().CreateJob(jobSpec,
>>> CreateJobConflictAction.Ignore);
>>>             _container.Resolve<IScheduler>().Start();
>>>         }
>>>
>>>         protected void Application_End(Object sender, EventArgs e)
>>>         {
>>>             _container.Resolve<IScheduler>().Stop();
>>>             _container.Dispose();
>>>         }
>>>     }
>>>
>>> My job is
>>>
>>>     public class NoOpJob : IJob
>>>     {
>>>         public Boolean Execute(JobExecutionContext context)
>>>         {
>>>             context.Logger.DebugFormat("Hello World - {0}",
>>> DateTime.Now.ToShortTimeString());
>>>             return true;
>>>         }
>>>     }
>>>
>>> After starting my web app, I am seeing jobs fail sporadically.  I am
>>> not seeing any pattern.  A sample of my log is
>>>
>>> 2009-05-27 12:45:10,006 [Job Watcher for
>>> 'JMORRIS2-MOBL1/WebDev.WebServer, Scheduler #1'.] [INFO
>>> ]Castle.Components.Scheduler.DefaultScheduler.BeginExecuteJob - Job
>>> 'NoOp job.' started at 5/27/2009 7:45:10 PM.
>>> 2009-05-27 12:45:10,006 [4] [INFO
>>> ]Castle.Components.Scheduler.DefaultScheduler.EndExecuteJob - Job
>>> 'NoOp job.' completed successfully at 5/27/2009 7:45:10 PM.
>>> 2009-05-27 12:45:20,007 [Job Watcher for
>>> 'JMORRIS2-MOBL1/WebDev.WebServer, Scheduler #1'.] [INFO
>>> ]Castle.Components.Scheduler.DefaultScheduler.BeginExecuteJob - Job
>>> 'NoOp job.' started at 5/27/2009 7:45:20 PM.
>>> 2009-05-27 12:45:20,007 [4]
>>> [ERROR]Castle.Components.Scheduler.DefaultScheduler.EndExecuteJob -
>>> Job 'NoOp job.' completed with an error at 5/27/2009 7:45:20 PM.
>>> 2009-05-27 12:45:30,007 [Job Watcher for
>>> 'JMORRIS2-MOBL1/WebDev.WebServer, Scheduler #1'.] [INFO
>>> ]Castle.Components.Scheduler.DefaultScheduler.BeginExecuteJob - Job
>>> 'NoOp job.' started at 5/27/2009 7:45:30 PM.
>>> 2009-05-27 12:45:30,007 [4] [INFO
>>> ]Castle.Components.Scheduler.DefaultScheduler.EndExecuteJob - Job
>>> 'NoOp job.' completed successfully at 5/27/2009 7:45:30 PM.
>>> 2009-05-27 12:45:40,008 [Job Watcher for
>>> 'JMORRIS2-MOBL1/WebDev.WebServer, Scheduler #1'.] [INFO
>>> ]Castle.Components.Scheduler.DefaultScheduler.BeginExecuteJob - Job
>>> 'NoOp job.' started at 5/27/2009 7:45:40 PM.
>>> 2009-05-27 12:45:40,008 [9] [INFO
>>> ]Castle.Components.Scheduler.DefaultScheduler.EndExecuteJob - Job
>>> 'NoOp job.' completed successfully at 5/27/2009 7:45:40 PM.
>>> 2009-05-27 12:45:50,008 [Job Watcher for
>>> 'JMORRIS2-MOBL1/WebDev.WebServer, Scheduler #1'.] [INFO
>>> ]Castle.Components.Scheduler.DefaultScheduler.BeginExecuteJob - Job
>>> 'NoOp job.' started at 5/27/2009 7:45:50 PM.
>>> 2009-05-27 12:45:50,008 [9] [INFO
>>> ]Castle.Components.Scheduler.DefaultScheduler.EndExecuteJob - Job
>>> 'NoOp job.' completed successfully at 5/27/2009 7:45:50 PM.
>>> 2009-05-27 12:46:00,009 [Job Watcher for
>>> 'JMORRIS2-MOBL1/WebDev.WebServer, Scheduler #1'.] [INFO
>>> ]Castle.Components.Scheduler.DefaultScheduler.BeginExecuteJob - Job
>>> 'NoOp job.' started at 5/27/2009 7:46:00 PM.
>>> 2009-05-27 12:46:00,009 [4]
>>> [ERROR]Castle.Components.Scheduler.DefaultScheduler.EndExecuteJob -
>>> Job 'NoOp job.' completed with an error at 5/27/2009 7:46:00 PM.
>>> 2009-05-27 12:46:10,009 [Job Watcher for
>>> 'JMORRIS2-MOBL1/WebDev.WebServer, Scheduler #1'.] [INFO
>>> ]Castle.Components.Scheduler.DefaultScheduler.BeginExecuteJob - Job
>>> 'NoOp job.' started at 5/27/2009 7:46:10 PM.
>>> 2009-05-27 12:46:10,009 [9] [INFO
>>> ]Castle.Components.Scheduler.DefaultScheduler.EndExecuteJob - Job
>>> 'NoOp job.' completed successfully at 5/27/2009 7:46:10 PM.
>>> 2009-05-27 12:46:20,010 [Job Watcher for
>>> 'JMORRIS2-MOBL1/WebDev.WebServer, Scheduler #1'.] [INFO
>>> ]Castle.Components.Scheduler.DefaultScheduler.BeginExecuteJob - Job
>>> 'NoOp job.' started at 5/27/2009 7:46:20 PM.
>>> 2009-05-27 12:46:20,010 [4] [INFO
>>> ]Castle.Components.Scheduler.DefaultScheduler.EndExecuteJob - Job
>>> 'NoOp job.' completed successfully at 5/27/2009 7:46:20 PM.
>>>
>>> Before continuing on with this experiment (or debugging into the
>>> castle code), I had a few questions that maybe others have already
>>> answered.
>>>
>>> 1)  Why is the (rather simple) job sporadically failing?  Is there a
>>> way to see why the job is failing?
>>>
>>> 2)  Can I catch the exception and expose it to my code so I can do
>>> something with it?
>>>
>>> 2)  Is there a better way to configure the scheduler to start in a web
>>> app?
>>>
>>> Thanks,
>>> Jason
>>>
>>> ________________________________
>>> Need a Holiday? Win a $10,000 Holiday of your choice. Enter now..
>>> >
>>>
>>
>> ________________________________
>> Need a Holiday? Win a $10,000 Holiday of your choice. Enter now..
>> >>
>>
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Castle Project Users" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/castle-project-users?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to