流口水模式流和容器



嗨,这是我的代码。

public static KieContainer createKieContainerForProject() {
        KieServices ks = KieServices.Factory.get();
        // Create a module model
        KieModuleModel kieModuleModel = ks.newKieModuleModel();
        // Base Model from the module model
        KieBaseModel kieBaseModel = kieModuleModel.newKieBaseModel( "KBase" )
                .setDefault( true )
                .setEqualsBehavior( EqualityBehaviorOption.EQUALITY)
                .setEventProcessingMode( EventProcessingOption.STREAM );                
        // Create session model for the Base Model
        KieSessionModel ksessionModel = kieBaseModel.newKieSessionModel( "KSession" )
                .setDefault( true )
                .setType( KieSessionModel.KieSessionType.STATEFUL )
                .setClockType( ClockTypeOption.get("realtime") );
        // Create File System services
        KieFileSystem kFileSystem = ks.newKieFileSystem();
        File file = new File("src/main/resources/rules/Sample.drl");
        Resource resource = ks.getResources().newFileSystemResource(file).setResourceType(ResourceType.DRL);
    kFileSystem.write( resource );       
        KieBuilder kbuilder = ks.newKieBuilder( kFileSystem );
        // kieModule is automatically deployed to KieRepository if successfully built.
        kbuilder.buildAll();
        if (kbuilder.getResults().hasMessages(org.kie.api.builder.Message.Level.ERROR)) {
            throw new RuntimeException("Build time Errors: " + kbuilder.getResults().toString());
        }    
        KieContainer kContainer = ks.newKieContainer(ks.getRepository().getDefaultReleaseId());
        return kContainer;
    }

}

当我调用功能时,它不起作用,我的规则也不起作用。

我的规则是

    rule "Sound the alarm in case temperature rises above threshold"
        when
          TemperatureThreshold( $max : max )
          Number( doubleValue > $max ) from accumulate(
              SensorReading( $temp : temperature ) over window:time( 10m ),
              average( $temp ) )
    then
        // sound the alarm
    end

当我运行该程序时,他说它有错误,模式不是流,代码不起作用。

如何将程序置于流模式?

减少你的代码,并添加 -KieBase 和 KieSession 创建:

    KieServices ks = KieServices.Factory.get();
    KieFileSystem kFileSystem = ks.newKieFileSystem();
    FileInputStream fis = new FileInputStream( "...drl" );
    kFileSystem.write("src/main/resources/somename.drl",
              ks.getResources().newInputStreamResource( fis ) ); //XXX
    KieBuilder kbuilder = ks.newKieBuilder( kFileSystem );
    kbuilder.buildAll();
    if (kbuilder.getResults().hasMessages(org.kie.api.builder.Message.Level.ERROR)) {
        throw new RuntimeException("Build time Errors: " + kbuilder.getResults().toString());
    }    
    KieContainer kContainer = ks.newKieContainer(ks.getRepository().getDefaultReleaseId());
    KieBaseConfiguration config = ks.newKieBaseConfiguration();
    config.setOption(EventProcessingOption.STREAM);
    KieBase kieBase = kContainer.newKieBase( config );
    KieSession kieSession = kieBase.newKieSession();

这应该会为您提供一个能够运行规则的会话。(

根据文档,如下所示:

KieBaseConfiguration config = KieServices.Factory.get().newKieBaseConfiguration();
config.setOption( EventProcessingOption.STREAM );

但是可能值得看看这个流口水测试作为一个工作示例。

相关内容

  • 没有找到相关文章

最新更新