разница между состоянием и сеансом без состояния - PullRequest
0 голосов
/ 17 мая 2019

В чем разница между сеансом без сохранения состояния и сеансом с сохранением состояния в слюнах.Я просмотрел другой документ и обнаружил ниже

Сеанс без сохранения состояния. Любые изменения фактов при выполнении правил не доводятся до сведения механизма правил, поэтому, если какое-либо правило будет изменено, никакая другая повторная активация правил не произойдет.

Сеанс с отслеживанием состояния Так как любые изменения в фактах доступны для механизма правил, поэтому, если правило изменено для определенного факта, это изменение повторно активирует все правила и сработает правила, которые основаны на измененном факте.

может ли кто-нибудь объяснить мне приведенную выше разницу с примером.

Я пытался выполнить приведенные ниже правила и нашел тот же результат

rule "first rules"
    when
        m : Message( status == Message.HELLO , myMessage : message )
    then
        System.out.println("first Rule");
        System.out.println( myMessage );


end

rule "second rules"
    when
        m : Message( status == Message.GOODBYE , myMessage : message )
    then
        System.out.println("second Rule");
        System.out.println( myMessage );


end

rule "third rules"
    when
       m : Message(  status == Message.GOODBYE , myMessage : message )
    then
        System.out.println( "third Rule" );
        System.out.println( myMessage );

        m.setMessage( "Hello " );
        m.setStatus( Message.HELLO );
       update(m);


end

1 Ответ

0 голосов
/ 19 мая 2019

Вы можете обратиться к документации drools , чтобы понять разницу между сохранением состояния и сохранением состояния.Они объясняются примерами.

KieSession без состояния -: сеанс KIE без состояния - это сеанс без вывода.Сеанс без сохранения состояния можно вызвать как функцию, в которой вы можете использовать его для передачи данных, а затем для получения результата обратно.

Он не поддерживает fireAllRules () из кода Java.Метод execute Stateless KieSession будет внутренне создавать экземпляр KieSession, добавлять все пользовательские данные и выполнять пользовательские команды, вызывать fireAllRules (), а затем вызывать dispose ().Таким образом, каждый раз, когда вы вызываете execute, KieSession создается заново, пользовательские данные вставляются снова, правила запускаются, и метод dispose вызывается снова.

Например, -:

kStatelessSession.execute(isertObject);
kStatelessSession.execute(isertObjectAgain);

Stateful KieSession -:Сеанс с состоянием позволяет вам со временем вносить итерационные изменения в факты.Таким образом, здесь факты, вставленные в KieSession, будут доступны до тех пор, пока kieSession не будет действительным.

Например :-

kStatefulSession.insert(object1);
kStatefulSession.insert(object2);
kStatefulSession.insert(object3);
kStatefulSession.fireAllRules();
kStatefulSession.insert(object4);
kStatefulSession.insert(object5);
kStatefulSession.fireAllRules();

Здесь object1, object2, object3 будут доступны в сеансе, даже когда 2-й разfireAllrules () вызывается.Попробуйте пример, упомянутый в части «stateful_kie_session» документации.Вы поймете разницу.

...