在Drools Fusion中使用psuedo时钟进行Cron定时器测试?

在Drools Fusion中使用psuedo时钟进行Cron定时器测试?,drools,drools-fusion,Drools,Drools Fusion,我正在尝试使用Drools Fusion 5.5中的伪时钟测试基于cron计时器的规则触发。我希望规则每天凌晨1点生效: rule "CALCULATING DATE FOR NEXT DAY" timer (cron:00 00 01 * * ?) no-loop when $summary: FxSummary(sameDayCcyFlag == false) then BusinessDayUtil b = new BusinessDayUtil(); modi

我正在尝试使用Drools Fusion 5.5中的伪时钟测试基于cron计时器的规则触发。我希望规则每天凌晨1点生效:

rule "CALCULATING DATE FOR NEXT DAY"
timer (cron:00 00 01 * * ?)
no-loop
when 
     $summary: FxSummary(sameDayCcyFlag == false)
then
    BusinessDayUtil b = new BusinessDayUtil();
    modify($summary) {  
        setSettlementDate(b);
    }
end
然后,我在测试用例中执行以下操作:

PseudoClockScheduler timeService = ( PseudoClockScheduler ) ksession.getSessionClock();
DateFormat df = new SimpleDateFormat( "yyyy-MM-dd'T'HH:mm:ss.SSSZ" );
Date date = df.parse( "2014-01-16T01:00:00.000-0000" );

Summary sum = new Summary("YEN").setSameDayCcyFlag(false);
ksession.fireAllRules();
timeService.advanceTime( date.getTime(), TimeUnit.MILLISECONDS );
ksession.fireAllRules();

它似乎什么也没做…没有显示计时器启动或其他任何事情。我还尝试在12:59:50插入日期,并将时钟提前10秒。此外,在点火之前,发动机必须运转,等等。似乎什么都不起作用。我用得对吗?伪时钟与计时器一起工作吗?另外,如果我将时钟提前到应该触发的计时器之前,它是否会触发“错过”计时器?

思考如何实现cron。基本功能是定时器,它的工作原理类似于YeOlde kitchen的鸡蛋定时器:在某个时间点,你将其上发条,然后它会在4或5分钟后响起。因此,对于钟的下一个cron铃声,厨师必须查看时钟并计算到指定时间点的间隔

你必须让厨师在下一个凌晨1点之前的某个时间看钟,比如说,午夜前后。代码是这样的,advance()重载了Date和long来提前伪时钟:

    date = df.parse( "2014-01-15T00:00:00.000-0000" ); // Note: midnight
    advance( date );
    kSession.fireAllRules();  // (Ah, ring in one hour!)

    advance( 1000*60*60 );
    kSession.fireAllRules();  // Ring!

    advance( 24*1000*60*60 );
    kSession.fireAllRules();  // Ring!

邮递员只打了两次电话;-)

想想如何实现cron。基本功能是定时器,它的工作原理类似于YeOlde kitchen的鸡蛋定时器:在某个时间点,你将其上发条,然后它会在4或5分钟后响起。因此,对于钟的下一个cron铃声,厨师必须查看时钟并计算到指定时间点的间隔

你必须让厨师在下一个凌晨1点之前的某个时间看钟,比如说,午夜前后。代码是这样的,advance()重载了Date和long来提前伪时钟:

    date = df.parse( "2014-01-15T00:00:00.000-0000" ); // Note: midnight
    advance( date );
    kSession.fireAllRules();  // (Ah, ring in one hour!)

    advance( 1000*60*60 );
    kSession.fireAllRules();  // Ring!

    advance( 24*1000*60*60 );
    kSession.fireAllRules();  // Ring!

邮递员只打了两次电话;-)

想想如何实现cron。基本功能是定时器,它的工作原理类似于YeOlde kitchen的鸡蛋定时器:在某个时间点,你将其上发条,然后它会在4或5分钟后响起。因此,对于钟的下一个cron铃声,厨师必须查看时钟并计算到指定时间点的间隔

你必须让厨师在下一个凌晨1点之前的某个时间看钟,比如说,午夜前后。代码是这样的,advance()重载了Date和long来提前伪时钟:

    date = df.parse( "2014-01-15T00:00:00.000-0000" ); // Note: midnight
    advance( date );
    kSession.fireAllRules();  // (Ah, ring in one hour!)

    advance( 1000*60*60 );
    kSession.fireAllRules();  // Ring!

    advance( 24*1000*60*60 );
    kSession.fireAllRules();  // Ring!

邮递员只打了两次电话;-)

想想如何实现cron。基本功能是定时器,它的工作原理类似于YeOlde kitchen的鸡蛋定时器:在某个时间点,你将其上发条,然后它会在4或5分钟后响起。因此,对于钟的下一个cron铃声,厨师必须查看时钟并计算到指定时间点的间隔

你必须让厨师在下一个凌晨1点之前的某个时间看钟,比如说,午夜前后。代码是这样的,advance()重载了Date和long来提前伪时钟:

    date = df.parse( "2014-01-15T00:00:00.000-0000" ); // Note: midnight
    advance( date );
    kSession.fireAllRules();  // (Ah, ring in one hour!)

    advance( 1000*60*60 );
    kSession.fireAllRules();  // Ring!

    advance( 24*1000*60*60 );
    kSession.fireAllRules();  // Ring!

邮递员只打了两次电话;-)

不要认为这正是我的问题,但它确实让我走上了正确的道路!对我来说,最初的预付款(日期)似乎没有什么作用……我基本上可以向它传递任何东西,但它似乎没有预付款。但是,在第二个advance()之后,可以说它“开始工作”,并且工作正常。谢谢大家!@我知道,由于有预告电话,时钟提前了,但必须有人看一下我发布的代码序列经过测试,并按照注释中的描述工作。不要认为这正是我的问题,但它确实让我走上了正确的道路!对我来说,最初的预付款(日期)似乎没有什么作用……我基本上可以向它传递任何东西,但它似乎没有预付款。但是,在第二个advance()之后,可以说它“开始工作”,并且工作正常。谢谢大家!@我知道,由于有预告电话,时钟提前了,但必须有人看一下我发布的代码序列经过测试,并按照注释中的描述工作。不要认为这正是我的问题,但它确实让我走上了正确的道路!对我来说,最初的预付款(日期)似乎没有什么作用……我基本上可以向它传递任何东西,但它似乎没有预付款。但是,在第二个advance()之后,可以说它“开始工作”,并且工作正常。谢谢大家!@我知道,由于有预告电话,时钟提前了,但必须有人看一下我发布的代码序列经过测试,并按照注释中的描述工作。不要认为这正是我的问题,但它确实让我走上了正确的道路!对我来说,最初的预付款(日期)似乎没有什么作用……我基本上可以向它传递任何东西,但它似乎没有预付款。但是,在第二个advance()之后,可以说它“开始工作”,并且工作正常。谢谢大家!@我知道,由于有预告电话,时钟提前了,但必须有人看一下我发布的代码序列经过测试,并按照注释中的描述工作。