2016-09-29 7 views
0

Я новичок в 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 взамен?

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

ответ

0

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

Надеется, что это помогает,

+0

Я попытался явно сделать сеанс как безгосударственный из Kie Workbench, также я изменил следующий элемент в дескрипторе развертывания: PER_REQUEST. Но теперь, когда я пытаюсь запустить правила с использованием Java REST-клиента, я получаю контейнер, не созданный при ошибке. –

0

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

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^