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 и для каждого последующего вызова я получаю один дополнительный объект. Кажется, что объекты в сеансе сохраняются и не очищаются при каждом вызове. Как я могу добиться того, чтобы при каждом вызове я получал взамен только один объект AdapterRuleDO?

Обратите внимание, что у меня есть только одна такая таблица решений, в которой использовался этот факт.


person Joydeep Gupta    schedule 29.09.2016    source источник


Ответы (3)


После поиска в разных блогах и на форумах пользователей было найдено решение, которое работало нормально. Вышеупомянутую проблему можно решить, выполнив следующие действия:

1) Используйте «adapterRule» для получения результата вместо «get-adapter».

2) В KIE Workbench найдите дескриптор развертывания и внесите следующее изменение: <runtime-strategy>PER_REQUEST</runtime-strategy> По умолчанию стратегия выполнения - SINGLETON.

Надеюсь, это имеет смысл и поможет кому-нибудь.

person Joydeep Gupta    schedule 04.10.2016

Если вас интересует оценка без сохранения состояния, попробуйте настроить сеанс как без сохранения состояния. Это создаст новый сеанс для каждого запроса. Вы должны уметь это делать в kie-workbench.

Надеюсь, это поможет,

person Esteban Aliverti    schedule 29.09.2016
comment
Я попытался явно сделать сеанс без сохранения состояния из Kie Workbench, а также изменил следующий элемент в дескрипторе развертывания: ‹runtime-strategy› PER_REQUEST ‹/runtime-strategy›. Но теперь, когда я пытаюсь запустить правила с помощью клиента Java REST, я получаю ошибку, не созданную контейнером. - person Joydeep Gupta; 04.10.2016

Вместо строки ниже:

 BatchExecutionCommand batchExecution = commandsFactory.newBatchExecution(commands);

Используйте эту строку:

 BatchExecutionCommand batchExecution = commandsFactory.newBatchExecution(commands,Ksession_name);
person Samaresh Deyashi    schedule 08.05.2021