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

我应该如何实现这一点

  • 在单独的知识库和会话中加载drl和相应的事实
  • 在单个会话中加载所有drl和事实
    我不知道如何实现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,我在回答中已经说明了这一点。如果您不想将规则应用于事实,请不要将其放入创建会话的知识库中。就这么简单。