Ich bin neu in Kie Workbench. Ich benutze Java Ruheaufrufe, um Regeln in der kie workbench auszulösen. Bitte finden Sie den Code unten:Kie Workbench entfernen vorhandene Fakten aus der Sitzung
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;
}
}
Ich erhalte die Regeln richtig gebrannt und die Werte werden immer in AdapterRuleDO Klasse richtig aktualisiert, nachdem die Regel ausgelöst wird. Ein Problem ist, wenn ich diese Methode wieder anrufe, um Regeln zum zweiten Mal auszuführen, erhalte ich zwei AdapterRuleDO-Objekte und für jeden weiteren Aufruf bekomme ich ein zusätzliches Objekt. Es scheint, dass die Objekte in der Sitzung gespeichert und nicht für jeden Anruf gelöscht werden. Wie kann ich erreichen, dass ich bei jedem Anruf nur ein AdapterRuleDO-Objekt bekomme?
Bitte beachten Sie, dass ich nur eine solche Entscheidungstabelle habe, wo diese Tatsache verwendet wurde.
Ich habe versucht, die Sitzung explizit als statusfrei von Kie Workbench, auch das folgende Element im Deployment-Deskriptor geändert: PER_REQUEST runtime-strategie>. Aber jetzt, wenn ich versuche, die Regeln mit Java REST-Client auslösen, bekomme ich Container nicht instanziiert Fehler. –