배경 : I이 샘은 규칙 세트에 기초하여 두 개의 출력 개체 중 하나에 입력 객체 변환 애플리케이션에 일하고런타임시 Drools DRL에서 작업 메모리에 팩트를 추가하고 상태 비 저장 세션의 실행 결과에서 팩트를 검색하려면 어떻게합니까?
. 출력 개체는 런타임까지 알 수 없으며 실행할 첫 번째 규칙에서 만들어집니다. 규칙을 호출하는 코드 여기
rule "Initialization"
dialect "java"
salience 1000
no-loop true
when
t : Trade()
then
if(t.getTran().getInsType().equalsIgnoreCase("EEO") ||
t.getTran().getInsType().equalsIgnoreCase("EEF"))
{
insert(new Option());
}
else
{
insert(new Swap());
}
end
rule "Example Rule"
dialect "java"
when
t : Trade()
opt : Option()
then
opt.setCounterpartyName(t.getTran().getCParty());
end
된다 :
private void test(){
for(File xmlFile : getXmlFilesFromDirectory(XML_DIRECTORY))
{
Trade trade = (Trade)unmarshall(xmlFile, Trade.class);
KnowledgeBase kbase = readKnowledgeBase();
StatelessKnowledgeSession ksession = kbase.newStatelessKnowledgeSession();
KnowledgeRuntimeLogger logger = KnowledgeRuntimeLoggerFactory.newConsoleLogger(ksession);
List<Command> commands = new ArrayList<Command>();
commands.add(CommandFactory.newInsert(trade, "trade"));
commands.add(CommandFactory.newFireAllRules());
ExecutionResults results = ksession.execute(CommandFactory.newBatchExecution(commands));
logger.close();
}
}
private static KnowledgeBase readKnowledgeBase() throws Exception
{
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add(ResourceFactory.newClassPathResource("security-transformation.drl"), ResourceType.DRL);
KnowledgeBuilderErrors errors = kbuilder.getErrors();
if (errors.size() > 0)
{
for (KnowledgeBuilderError error: errors)
{
System.err.println(error);
}
throw new IllegalArgumentException("Could not parse knowledge.");
}
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
return kbase;
}
문제점 :
여기 출력 객체 및 예시 변환 규칙을 생성하는 룰이며규칙을 실행할 때 반환 된 사실에 출력 개체를받지 못합니다. 무역 객체를 다시 받지만 첫 번째 규칙에 따라 작업 메모리에 추가 된 Option 또는 Swap 객체가 반환되지 않습니다.
질문 :
어떻게이 DRL에서 런타임에 작업 메모리에 사실을 추가하고 stateless 세션의 실행 결과를 검색 할 수 있습니까?
편집 : drools 쿼리를 사용해야합니까?
이 질문에 suugest하시기 바랍니다. 감사. http://stackoverflow.com/questions/20158726/dialect-error-message-drool – Kumar