Java 在drools中维护单独的规则文件
我有一个用例,需要为单独的实体维护单独的Java 在drools中维护单独的规则文件,java,drools,Java,Drools,我有一个用例,需要为单独的实体维护单独的drl文件。 例如, 实体1有一组事实,应该由drl1 实体2有一组事实,应该由drl2 我应该如何实现这一点 在单独的知识库和会话中加载drl和相应的事实 在单个会话中加载所有drl和事实 我不知道如何实现2如果您按照下面给出的思路构建知识库,您可以重复向文件系统添加另一个FileInputStream KieServices kieServices = KieServices.Factory.get(); KieFileSystem kfs = kie
drl
文件。例如,
实体1
有一组事实
,应该由drl1
实体2
有一组事实
,应该由drl2
我应该如何实现这一点
我不知道如何实现2如果您按照下面给出的思路构建知识库,您可以重复向文件系统添加另一个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();
你所说的实体是什么意思?一些服务API?您是否计划使用无状态会话或有状态会话?是否要同时评估来自drl1和drl2的所有规则?然后是一个知识库和一个会话。否则它将按照你的#1进行“实体”是你可能使用过的最模糊的术语……我想我应该使用
域这个词,而不是实体@laune drl1和drl2没有关系。它们将应用于不同的领域。那么我可以将它们加载到同一个会话中吗?如果可以,我将如何确保drl1应用于域1您一直在问如何实现#2,我在回答中已经说明了这一点。如果您不想将规则应用于事实,请不要将其放入创建会话的知识库中。就这么简单。