2016-09-29 2 views
0

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.

Antwort

0

Wenn Sie an zustandsloser Auswertung interessiert sind, versuchen Sie, Ihre Sitzung als zustandslos zu konfigurieren. Dadurch wird für jede Anfrage eine neue Sitzung erstellt. Das sollte in der Kie-Workbench möglich sein.

Hoffe, dass es hilft,

+0

Ich habe versucht, die Sitzung explizit als statusfrei von Kie Workbench, auch das folgende Element im Deployment-Deskriptor geändert: PER_REQUEST. Aber jetzt, wenn ich versuche, die Regeln mit Java REST-Client auslösen, bekomme ich Container nicht instanziiert Fehler. –

0

Nach verschiedenen Blogs suchen und die Benutzerforen bekam eine Lösung, die fine.The obige Problem gearbeitet hat, kann durch die folgenden Schritte gelöst werden:

1) Verwenden Sie die „adapterRule“ zu Holen Sie das Ergebnis anstelle von "get-adapter".

2) In KIE Workbench für Deployment Descriptor suchen und diese folgende Änderung vornehmen: <runtime-strategy>PER_REQUEST</runtime-strategy> ist standardmäßig Laufzeitstrategie SINGLETON.

Hoffe das macht Sinn und hilft jemandem aus.

Verwandte Themen