Drools mode stream

1

I'm using drools 6 and I'm having a problem making it use the mode stream . I tried some things and they did not work out. Here is the code as it is, it works up to a moment, it inserts the facts, but it does not execute the drls, I do not know the reason.

final KieServices ks = KieServices.Factory.get();
        KieFileSystem kFileSystem = ks.newKieFileSystem();
        //FileInputStream fis = new FileInputStream("src/main/resources/rules/Sample.drl");
        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);

        KieModuleModel kmodule = ks.newKieModuleModel();
        KieBaseModel baseModel = kmodule.newKieBaseModel("defaultKBase")
                .setDefault(true)
                .setEventProcessingMode(EventProcessingOption.STREAM);
                baseModel.newKieSessionModel("defaultKSession")
                .setDefault(true)
                .setClockType(ClockTypeOption.get("pseudo"));

        KieBase kieBase = kContainer.newKieBase( config );

        KieSession kSession = kContainer.newKieSession();

        //go  
        Sensor sensorUm = new Sensor("SensorUm");
        Sensor sensorDois = new Sensor("SensorDois");
        Sensor sensorTres = new Sensor("SensorTres");
        FactHandle fsensorUm = kSession.insert( sensorUm );
        FactHandle fsensorDois = kSession.insert( sensorDois );
        FactHandle fsensorTres = kSession.insert( sensorTres );

        //test for see the facts is ok
        System.out.println( "Number facts : "+kSession.getFactCount() );

        Random gerador = new Random();
        for(int i=0;i<20;i++){

            sensorUm.estadoInterno = gerador.nextInt(100);
            sensorDois.estadoInterno = gerador.nextInt(100);
            sensorTres.estadoInterno = gerador.nextInt(100);
            sensorUm.temperatura= gerador.nextInt(100);; 
            System.out.println( sensorUm.estadoInterno +"  "+sensorDois.estadoInterno+"  "+sensorTres.estadoInterno);
            kSession.update(fsensorUm, sensorUm);
            kSession.update(fsensorDois, sensorDois);
            kSession.update(fsensorTres, sensorTres);
            try {  
                Thread.sleep(1000);  
             } catch (Exception e) {  
                e.printStackTrace();  
             }
            kSession.fireAllRules();
            //clock.advanceTime(4, TimeUnit.DAYS);
        }

        kSession.dispose();

    } catch (Throwable t) {
        t.printStackTrace();

    }

 }

And here are my rules:

  rule "Sensor 1 e sensor 2 e sensor 3"
      salience 10
   when
      Sensor( estadoInterno>20, nome=="SensorUm" )
      Sensor( estadoInterno>20, nome=="SensorDois" )
      Sensor( estadoInterno>20, nome=="SensorTres" )

   then
      System.out.println( "3 sensores > 20" );

   end

   rule "Sound the alarm in case temperature rises above threshold"
      when
          Number( doubleValue > 50 ) from accumulate(
          Sensor( $temp : temperatura ) over window:time( 10m ),
          average( $temp ) )
    then
       System.out.println( "explode" );
    end

I do not understand why he does not call the drls rules, and he puts the facts.

    
asked by anonymous 24.11.2014 / 12:38

0 answers