我有一个用例,需要为单独的实体维护单独的drl
文件。
例如,entity 1
有一组facts
,应由drl1
驱动entity 2
有一组facts
,应由drl2
驱动
我应该如何实施呢?
在单独的知识库和会话中加载drl和相应的事实
在单个会话中加载所有drl和事实。
我不知道如何实现2
最佳答案
如果按照下面的方法构建知识库,则可以重复向KieFileSystem添加另一个FileInputStream。
KieServices kieServices = KieServices.Factory.get();
KieFileSystem kfs = kieServices.newKieFileSystem();
// repeat
FileInputStream fis = new FileInputStream( "simple/simple.drl" );
kfs.write( "src/main/resources/simple.drl",
kieServices.getResources().newInputStreamResource( fis ) );
// end
KieBuilder kieBuilder = kieServices.newKieBuilder( kfs ).buildAll();
Results results = kieBuilder.getResults();
if( results.hasMessages( Message.Level.ERROR ) ){
System.out.println( results.getMessages() );
throw new IllegalStateException( "### errors ###" );
}
KieContainer kieContainer =
kieServices.newKieContainer( kieServices.getRepository().getDefaultReleaseId() );
KieBase kieBase = kieContainer.getKieBase();
kieSession = kieContainer.newKieSession();