我正在研究将多个Maven工件表示的多个KieModule
部署到单个KieContainer
中的方法。以下是我的要求:
KieModule
并添加它到KieContainer
。基本上最棒的是:
KieServices ks = KieServices.Factory.get();
KieContainer kContainer = ks.getKieClasspathContainer();
kContainer.addKieModule(someKieModule); // This doesn't exist
kContainer.addKieModule(someOtherKieModule); // This doesn't exist
到目前为止,我只能看到KieContainer
和KieModule
之间存在一对一的关系。这是真的?我也知道我可以将我的工件分组到父工件下并在每次更新时进行部署,但我不想强制我的业务用户对工件进行分组(因为这也会使他们彼此依赖)。
我也愿意接受有关如何实现此目标的其他建议(可能有多个KieModule
的文件,循环浏览它们,然后将它们逐个添加到KieContainer
)中?
提前致谢。
更新
我也正在尝试使用DeploymentService
,特别是KModuleDeploymentService
,但我不确定它是否达到了我想要实现的目标。如果你能在这方面给我启发,我也将不胜感激。
更新#2
根据this,似乎KieBuilder
可能会有所帮助。所以你认为:
KieFactory kf = KieFactory.Factory.get();
KieFileSystem kfs = kf.newKieFileSystem();
KieBuilder kb = ks.newKieBuilder(kfs);
kb.setDependencies(someKieModule, someOtherKieModule);
kb.build();
KieContainer kContainer = ks.getKieContainer(kr.getDefaultGAV());
会起作用吗?
答案 0 :(得分:2)
这是从许多资源构建KieBase的基本操作序列。
KieServices kieServices = KieServices.Factory.get();
KieFileSystem kfs = kieServices.newKieFileSystem();
FileInputStream fis = new FileInputStream( "simple/simple2.drl" );
kfs.write( "src/main/resources/simple.drl",
kieServices.getResources().newInputStreamResource( fis ) );
FileInputStream fis1 = new FileInputStream( "simple/simple.dsl" );
kfs.write( "src/main/resources/simple.dsl",
kieServices.getResources().newInputStreamResource( fis1 ) );
FileInputStream fis2 = new FileInputStream( "simple/simple.dslr" );
kfs.write( "src/main/resources/simple.dslr",
kieServices.getResources().newInputStreamResource( fis2 ) );
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();