Drools的。在Workbench中更新规则时,Kie服务器中的容器未更新

时间:2018-01-26 14:29:19

标签: docker drools workbench

我正在使用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());
        }

    }
}

1 个答案:

答案 0 :(得分:0)

在这种情况下,您可以考虑以下方法:

  1. 保留项目版本修复程序(例如1.0.0)并在kie-server上启用kie-Scanner。 Kie-Scanner API将继续扫描maven存储库以检查项目的最新版本是否可用。
  2. 在kie-server中部署项目(创建kie-container)时,在项目版本中使用LATEST,并启用kie-scanner。现在kie-scanner将始终使用maven存储库中可用的最新版本的项目。但是,如果您的项目有SNAPSHOT版本,其已知的maven限制,LATEST将不会起作用。

  3. 规则修改后,增加项目版本并立即创建kie-container以使用项目的最新版本。我个人不推荐这种方法。

  4. 浏览https://docs.jboss.org/drools/release/6.2.0.Final/drools-docs/html/ch19.html#d0e19362了解有关kie-scanner的详细信息。