Hello,

 

I've got the following basic code that sets up drools in STREAM mode, with a pseudo clock.

And it fails on the last line that asserts there is an entrypoint named "testEntryPoint".

The DRL file references the entry-point which according to the documentation is enough.

 

What am I missing?

Itai

 

declare Message

@role(event)

@timestamp(timestamp)

end

 

declare AppInfo

@role(event)

@timestamp(timestamp)

end

 

rule "Change message type after one minute"

    dialect "mvel"

when

    $appinfo:AppInfo() from entry-point "testEntryPoint"

    $message:Message( type == "before", $msgtext : msgtext, this after[ 1m ] $appinfo )

        from entry-point "testEntryPoint"

then

    System.out.println( $msgtext );

    modify ( $message ) {

      type = "after"

    }

end

 

 

    private void initDrools() {

 

        KnowledgeBaseConfiguration config = KnowledgeBaseFactory.newKnowledgeBaseConfiguration();

        // Stream mode allows interacting with the clock (Drools Fusion)

        config.setOption(EventProcessingOption.STREAM);

        kbase = KnowledgeBaseFactory.newKnowledgeBase(config);

 

        kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();

        // this will parse and compile in one step

        kbuilder.add(ResourceFactory.newClassPathResource(RULE_FILE, DroolsExpertTest.class), ResourceType.DRL);

 

        // Check the builder for errors

        assertThat(kbuilder.hasErrors())

                .overridingErrorMessage(kbuilder.getErrors().toString())

                .isFalse();

 

        // get the compiled packages (which are serializable)

        Collection<KnowledgePackage> pkgs = kbuilder.getKnowledgePackages();

 

        // add the packages to a knowledgebase (deploy the knowledge packages).

        kbase.addKnowledgePackages(pkgs);

 

        KnowledgeSessionConfiguration conf = KnowledgeBaseFactory.newKnowledgeSessionConfiguration();

        conf.setOption(ClockTypeOption.get("pseudo"));

        ksession = kbase.newStatefulKnowledgeSession(conf,null);

        clock = ksession.getSessionClock();

        entryPoint = ksession.getWorkingMemoryEntryPoint("testEntryPoint");

        assertThat(entryPoint).isNotNull();

}