java - Kie Workbench 从 session 中删除现有事实

标签 java drools kie kie-workbench

我是 Kie Workbench 的新手。我正在使用 Java Rest 调用来触发 kie 工作台中的规则。请找到下面的代码:

public class RuleEngineConnector {

    @Value("${brms.execution.server.url}")
    private String SERVER_URL;

    @Value("${brms.execution.server.username}")
    private String USER;


    @Value("${brms.execution.server.password}")
    private String PASSWORD;

    @Value("${brms.containerId}")
    private String CONTAINER_ID;

    private static final MarshallingFormat FORMAT = MarshallingFormat.JAXB;


    public String getAdapter(AdapterRuleDO adapterRule) {
        KieServicesConfiguration cfg = KieServicesFactory.newRestConfiguration(SERVER_URL, USER, PASSWORD);
        cfg.setMarshallingFormat(FORMAT);
        Set<Class<?>> extraClasses = new HashSet<Class<?>>();
        extraClasses.add(AdapterRuleDO.class);
        cfg.addJaxbClasses(extraClasses);
        KieServicesClient kieServicesClient = KieServicesFactory.newKieServicesClient(cfg);
        ServiceResponse<ExecutionResults> response = getRulesResponse(adapterRule, kieServicesClient);
        List<AdapterRuleDO> listOfObjects = (List<AdapterRuleDO>) response.getResult().getValue("get-adapter");//to be changed
        return listOfObjects.get(0).getAdapterName();
    }

    private ServiceResponse<ExecutionResults> getRulesResponse(AdapterRuleDO adapterRule, KieServicesClient kieServicesClient) {
        List<Command<?>> commands = new ArrayList<Command<?>>();
        KieCommands commandsFactory = KieServices.Factory.get().getCommands();
        commands.add(commandsFactory.newInsert(adapterRule, "adapterRule"));
        commands.add(commandsFactory.newFireAllRules());
        commands.add(commandsFactory.newGetObjects("get-adapter"));
        BatchExecutionCommand batchExecution = commandsFactory.newBatchExecution(commands);
        RuleServicesClient ruleServicesClient = kieServicesClient.getServicesClient(RuleServicesClient.class);
        ServiceResponse<ExecutionResults> response = ruleServicesClient.executeCommandsWithResults(CONTAINER_ID, batchExecution);
        return response;
    }

}

我正确地触发了规则,并且在规则触发后,AdapterRuleDO 类中的值得到了正确的更新。一个问题是,当我再次调用此方法第二次执行规则时,我收到两个 AdapterRuleDO 对象,并且对于每个后续调用,我都会获得一个附加对象。 session 中的对象似乎已被存储,并且每次调用都不会被清除。如何才能实现每次调用都只返回一个 AdapterRuleDO 对象?

请注意,我只有一个这样的决策表,其中使用了这一事实。

最佳答案

经过搜索不同的博客和用户论坛得到了一个很好的解决方案。上述问题可以通过以下步骤解决:

1)使用“adapterRule”而不是“get-adapter”来获取结果。

2) 在 KIE Workbench 中,搜索部署描述符并进行以下更改: <runtime-strategy>PER_REQUEST</runtime-strategy> 默认情况下,运行时策略是SINGLETON。

希望这是有道理的并能帮助别人。

关于java - Kie Workbench 从 session 中删除现有事实,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39763208/

相关文章:

java - 如何加粗文本Android String的一部分

java - 为什么我们不能用 Java 文件而不是 .drl 文件来编写业务规则?

java - 取消部署 JBoss Drools 应用程序时出现异常

drools - 无法创建构造函数::Kie Workbench

java - 有没有什么简单的方法来执行所有的 .目录下的drl文件

java - 从 2.5.X 更新到 spring boot 2.6.3 后,hibernate 在某些查询语法中不起作用

java - 未在可执行 jar javafx8 中加载 css 文件

java - 如何使用 maven/travis 将二进制文件打包、压缩并部署为 zip/tar.gz 从 github 存储库到 bintray.com 通用存储库

java - Drools Kie Scanner 6.3.0 最终抛出 ProvisionException(未找到 RepositorySystem)

java - 如何获取 KieSession 所需的所有全局变量?