我正在使用Java和Drools开发一个应用程序。
首先,我创建了一个新规则服务,创建了一个数据对象,最后创建了一个引导规则,我将其构建并部署到kie服务器中。
之后,我创建了一个用于测试它的java类,它正在按预期工作。问题是,如果我更新规则并再次部署它,那么服务器将继续给出相同的答案,就好像什么都没有改变一样。
我也是通过REST界面尝试邮递服务,但问题是一样的。
我已经重新启动了kie服务器,工作台(每个工作台都有一个docker,链接),即使我从服务器上删除项目并再次部署它也无法工作。
我认为它必须与服务器和工作台的通知方式有关,但我已经尝试了所有内容并且问题仍然存在。
这是我实际用于执行规则服务的代码:
public void executeCommands() {
ErrorWK err=new ErrorWK();
err.setErrorApp("NotifyEmployee");
err.setErrorCode("111");
err.setErrorDesc("Error in the service");
KieServicesConfiguration config = KieServicesFactory.newRestConfiguration(
URL,USER,PASSWORD);
Set<Class<?>> allClasses = new HashSet<Class<?>>();
allClasses.add(ErrorWK.class);
config.addExtraClasses(allClasses);
KieServicesClient rulesClient = KieServicesFactory.newKieServicesClient(config);
System.out.println("== Sending commands to the server ==");
KieCommands commandsFactory = KieServices.Factory.get().getCommands();
Command<?> insert = commandsFactory.newInsert(err, "InObject", false, "");
Command<?> fireAllRules = commandsFactory.newFireAllRules("Fired");
Command<?> getObjects = commandsFactory.newGetObjects("OutObject");
Command<?> dispose=commandsFactory.newDispose();
Command<?> batchCommand = commandsFactory.newBatchExecution(Arrays.asList(insert, fireAllRules,getObjects, dispose));
ServiceResponse<String> executeResponse = rulesClient.executeCommands("WorkshopBRMS_1.0.1", batchCommand);
Marshaller marshaller = MarshallerFactory.getMarshaller(config.getExtraClasses(), MarshallingFormat.JAXB, this.getClass().getClassLoader());
ExecutionResultImpl results = marshaller.unmarshall(executeResponse.getResult(), ExecutionResultImpl.class);
ArrayList<Object> objects = (ArrayList<Object>) results.getResults().get("OutObject");
System.out.println("Rules fired: " + results.getValue("Fired"));
//System.out.println(objects);
for(java.util.Iterator<Object> it=objects.iterator();it.hasNext();) {
Object obj=(Object) it.next();
if(obj instanceof ErrorWK){
ErrorWK test= (ErrorWK)obj;
System.out.println("Error: " + test.getErrorApp() + "/" + test.getErrorCode() + "/" + test.getErrorDesc());
System.out.println("_________________________________________________________________________________");
}else {
System.out.println("Object does not belong to any of the defined classes:" + obj.toString());
}
}
}
答案 0 :(得分:0)
在这种情况下,您可以考虑以下方法:
在kie-server中部署项目(创建kie-container)时,在项目版本中使用LATEST,并启用kie-scanner。现在kie-scanner将始终使用maven存储库中可用的最新版本的项目。但是,如果您的项目有SNAPSHOT版本,其已知的maven限制,LATEST将不会起作用。
规则修改后,增加项目版本并立即创建kie-container以使用项目的最新版本。我个人不推荐这种方法。
浏览https://docs.jboss.org/drools/release/6.2.0.Final/drools-docs/html/ch19.html#d0e19362了解有关kie-scanner的详细信息。