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
-~----------~----~----~----~------~----~------~--~---