2011-03-17 3 views
0

우리는 사용자가 규칙을 업데이트/편집 할 수있는 인터페이스와 함께 Drools를 사용합니다. 이러한 규칙은 데이터베이스에 저장 (및 버전 관리)됩니다. 그 후 규칙은 데이터베이스에서 다시 인출하고 다음과 같은 방식으로 하나 하나 추가됩니다Drools : 특정 규칙 만 업데이트하는 방법?

for (Rule rule ...) { 
knowledgeBuilder.add(ResourceFactory.newByteArrayResource(rule.getRuleContent().getBytes()), ResourceType.DRL); 

if (kbuilder.hasErrors()) { throw Error... } 
} 

kbase = KnowledgeBaseFactory.newKnowledgeBase(); 
kbase.addKnowledgePackages(knowledgeBuilder.getKnowledgePackages()); 

우리는 수백 규칙과/초 (2 개 노드) 백 또한 여러 규칙의 처리량을 검사하는 규칙이있다. 규칙 수가 증가하면이 KnowledgeBase 업데이트가 오래 걸리고 (모든 규칙을 컴파일하는)이 시간 동안 규칙을 확인할 수 없습니다. 따라서 시스템은 여전히 ​​사용자 관점에서 출발합니다.

규칙을 선택적으로 새로 고칠 가능성이없는 것 같습니다. 맞습니까? 그렇다면, 어떻게 그런 상황을 처리하는 가장 좋은 방법입니까? 가장 먼저 떠오르는 아이디어는 두 개의 기술 자료를 병렬로 사용하는 것입니다.

답변

0

KnowledgeBase API에는 규칙/패키지를 제거하고 패키지를 추가하는 방법이 있습니다. 따라서이를 수행하려면 업데이트 할 규칙을 제거한 다음 업데이트 된 버전을 지식 기반에 삽입하십시오. dispose() 메소드가 호출되지 않은 statefull 세션이있는 경우, KnowledgeBase의 변경 사항도 해당 세션으로 푸시되어야합니다.

관련 문제