我有一个名为' controller'的maven Spring-boot项目,它有另一个项目' webservices'作为依赖。 ' web服务'是一个Drools项目(kmodule.xml位于webservices项目中的src / main / resources / META-INF /文件夹中)。
现在,当我从Eclipse启动控制器项目时,它工作正常。但是,当我将它打包为jar,并尝试使用java -jar controller.jar启动它时,它会说找到kmodule:jar:file:controller-0.1.jar!/lib/webservices-0.1.jar!/ META- INF / kmodule.xml并在此之后卡住。它不会抛出任何错误。但它也没有开始。
这有什么不对?它能够找到kmodule文件,所以这不是问题。为什么不开始?
===============更新=================
它正在开始,但它需要将近半个小时才能完成。早些时候,我将webservices作为一个单独的项目,它过去大约需要3分钟。然而它曾经在同一步骤停留约2分钟。现在,半小时后,我得到这个日志:
o.d.c.k.b.i.KieRepositoryImpl - 添加了KieModule:ZipKieModule [ReleaseId = controller:0.1file = Desktop / controller-0.1.jar]
然后立即开始。
==============更新2 =================
我尝试将kmodule.xml和规则文件移动到"控制器" project,在控制器中构建KSession对象,然后将其传递给webservices项目。现在还需要半小时。
这是我的项目结构:
调节器
| __ src / main / java
| __ src / main / resources
| __规则
| __ mypkg1
| __ rules1.drl
| __ mypkg2
| __ rules2.drl
| __ META-INF
| __ kmodule.xml
我的kmodule.xml文件如下:
<?xml version =" 1.0"编码=" UTF-8">
< kmodule xmlns:xsi =" http://www.w3.org/2001/XMLSchema-instance"
的xmlns =" HTTP://jboss.org/kie/6.0.0/kmodule">
< kbase name =" Kbase1"包=" rules.mypkg1.rules">
< ksession name =" abc"类型="无国籍" />
< / kbase>
< kbase name =" Kbase2"包=" rules.mypkg2.rules">
< ksession name =" xyz"类型="无国籍" />
< / kbase>
< / KMODULE>
从控制器,我调用webservices中的一个类,它使用drools。这就是我在使用drools的webservices项目中调用类的方法:
public class ControllerClass {
StatelessKieSession kSession;
KieServices kieService;
KieContainer kContainer;
public ReturnsController(){
kieService = KieServices.Factory.get();
kContainer = kieService.getKieClasspathContainer();
}
public void callWebservices(String kSessionName){
kSession = kContainer.newStatelessKieSession(kSessionName);
WebservicesClass wc = new WebservicesClass();
wc.callDroolsMethod(kSession);
}
}
规则文件很短,每个文件最多包含10条规则。直接从webservices项目启动drools引擎只需要大约3分钟。控制器项目本身很轻,所以我怀疑是因为内存问题。
谢谢。