Kie Workbench удаляет существующие факты из сессии

Я новичок в Kie Workbench. Я использую вызовы Java Rest для запуска правил в kie workbench. Пожалуйста, найдите код ниже:

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 взамен?

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

3 ответа

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

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

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

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

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

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

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

       BatchExecutionCommand batchExecution = commandsFactory.newBatchExecution(commands);

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

       BatchExecutionCommand batchExecution = commandsFactory.newBatchExecution(commands,Ksession_name);
Другие вопросы по тегам