>source
drools의 stateless session과 stateful session의 차이점은 무엇입니까? 다른 문서를 살펴본 결과 아래에 있습니다

상태 비 저장 세션   규칙을 실행하는 동안 팩트에 대한 변경 사항은 규칙 엔진에 인식되지 않으므로 규칙을 수정하면 규칙을 다시 활성화 할 수 없습니다.

스테이트 풀 세션     팩트 엔진에서 팩트의 변경 사항을 사용할 수 있으므로 특정 팩트에 대해 규칙을 수정하면이 변경 사항으로 모든 규칙이 다시 활성화되고 수정 된 팩트에 빌드 된 규칙이 실행됩니다.

예를 들어 위의 차이점을 설명해 줄 사람이 있습니까?

아래 규칙을 실행하려고했는데 같은 결과를 찾았습니다

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

    상태 비 저장 및 상태 저장 키오 세션의 차이점을 이해하기 위해 drools 설명서를 참조 할 수 있습니다. 예를 들어 설명합니다.

    Stateless KieSession-: Stateless KIE 세션은 추론이없는 세션입니다. 상태 비 저장 세션은 데이터를 전달한 다음 결과를 다시받는 데 사용할 수있는 함수처럼 호출 될 수 있습니다.

    Java 코드에서 fireAllRules ()를 지원하지 않습니다. Stateless KieSession의 execute 메소드는 내부적으로 KieSession을 인스턴스화하고 모든 사용자 데이터를 추가하고 사용자 명령을 실행하고 fireAllRules ()를 호출 한 다음 dispose ()를 호출합니다. 따라서 호출을 실행할 때마다 KieSession이 다시 인스턴스화되고 사용자 데이터가 다시 삽입되며 규칙이 실행되고 처리 메소드가 다시 호출됩니다.

    예 :-:

    kStatelessSession.execute(isertObject);
    kStatelessSession.execute(isertObjectAgain);
    
    
    Stateful KieSession-: Stateful 세션을 사용하면 시간이 지남에 따라 사실을 반복적으로 변경할 수 있습니다. KieSession에 삽입 된 사실은 kieSession이 유효 할 때까지 사용할 수 있습니다.

    예 :-:

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

    여기서 2 번 fireAllrules ()를 호출하더라도 object1, object2, object3을 세션에서 사용할 수 있습니다. 문서의 "stateful_kie_session"부분에 언급 된 예를 사용해보십시오. 차이점을 이해하게 될 것입니다.

  • 이전 $_FILE은 PHP로 파일을 보내지 않습니다
  • 다음 Forge API를 사용하여 REVIT 파일에서 패밀리 읽기