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);