RED-937: Handle rules version per RuleSetId
This commit is contained in:
parent
2dd8dd73c8
commit
89f642ba90
@ -1,11 +1,11 @@
|
|||||||
package com.iqser.red.service.redaction.v1.server.redaction.service;
|
package com.iqser.red.service.redaction.v1.server.redaction.service;
|
||||||
|
|
||||||
import com.iqser.red.service.configuration.v1.api.model.RulesResponse;
|
import java.io.ByteArrayInputStream;
|
||||||
import com.iqser.red.service.redaction.v1.server.client.RulesClient;
|
import java.io.InputStream;
|
||||||
import com.iqser.red.service.redaction.v1.server.exception.RulesValidationException;
|
import java.nio.charset.StandardCharsets;
|
||||||
import com.iqser.red.service.redaction.v1.server.redaction.model.Section;
|
import java.util.HashMap;
|
||||||
import lombok.Getter;
|
import java.util.Map;
|
||||||
import lombok.RequiredArgsConstructor;
|
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.kie.api.KieServices;
|
import org.kie.api.KieServices;
|
||||||
import org.kie.api.builder.KieBuilder;
|
import org.kie.api.builder.KieBuilder;
|
||||||
@ -15,11 +15,12 @@ import org.kie.api.runtime.KieContainer;
|
|||||||
import org.kie.api.runtime.KieSession;
|
import org.kie.api.runtime.KieSession;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import java.io.ByteArrayInputStream;
|
import com.iqser.red.service.configuration.v1.api.model.RulesResponse;
|
||||||
import java.io.InputStream;
|
import com.iqser.red.service.redaction.v1.server.client.RulesClient;
|
||||||
import java.nio.charset.StandardCharsets;
|
import com.iqser.red.service.redaction.v1.server.exception.RulesValidationException;
|
||||||
import java.util.HashMap;
|
import com.iqser.red.service.redaction.v1.server.redaction.model.Section;
|
||||||
import java.util.Map;
|
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
@ -29,7 +30,11 @@ public class DroolsExecutionService {
|
|||||||
|
|
||||||
private Map<String, KieContainer> kieContainers = new HashMap<>();
|
private Map<String, KieContainer> kieContainers = new HashMap<>();
|
||||||
|
|
||||||
|
private Map<String, Long> rulesVersionPerRuleSetId = new HashMap<>();
|
||||||
|
|
||||||
|
|
||||||
public KieContainer getKieContainer(String ruleSetId) {
|
public KieContainer getKieContainer(String ruleSetId) {
|
||||||
|
|
||||||
KieContainer container = kieContainers.get(ruleSetId);
|
KieContainer container = kieContainers.get(ruleSetId);
|
||||||
if (container == null) {
|
if (container == null) {
|
||||||
return createOrUpdateKieContainer(ruleSetId);
|
return createOrUpdateKieContainer(ruleSetId);
|
||||||
@ -39,9 +44,6 @@ public class DroolsExecutionService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Getter
|
|
||||||
private long rulesVersion = -1;
|
|
||||||
|
|
||||||
public Section executeRules(KieContainer kieContainer, Section section) {
|
public Section executeRules(KieContainer kieContainer, Section section) {
|
||||||
|
|
||||||
KieSession kieSession = kieContainer.newKieSession();
|
KieSession kieSession = kieContainer.newKieSession();
|
||||||
@ -54,17 +56,24 @@ public class DroolsExecutionService {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public KieContainer updateRules(String ruleSetId) {
|
public KieContainer updateRules(String ruleSetId) {
|
||||||
|
|
||||||
long version = rulesClient.getVersion(ruleSetId);
|
long version = rulesClient.getVersion(ruleSetId);
|
||||||
if (version > rulesVersion) {
|
Long rulesVersion = rulesVersionPerRuleSetId.get(ruleSetId);
|
||||||
rulesVersion = version;
|
if (rulesVersion == null) {
|
||||||
|
rulesVersion = -1L;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (version > rulesVersion.longValue()) {
|
||||||
|
rulesVersionPerRuleSetId.put(ruleSetId, version);
|
||||||
return createOrUpdateKieContainer(ruleSetId);
|
return createOrUpdateKieContainer(ruleSetId);
|
||||||
}
|
}
|
||||||
return getKieContainer(ruleSetId);
|
return getKieContainer(ruleSetId);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private KieContainer createOrUpdateKieContainer(String ruleSetId) {
|
private KieContainer createOrUpdateKieContainer(String ruleSetId) {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@ -92,7 +101,9 @@ public class DroolsExecutionService {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private KieModule getKieModule(String ruleSetId, String rules, KieServices kieServices) {
|
private KieModule getKieModule(String ruleSetId, String rules, KieServices kieServices) {
|
||||||
|
|
||||||
KieFileSystem kieFileSystem = kieServices.newKieFileSystem();
|
KieFileSystem kieFileSystem = kieServices.newKieFileSystem();
|
||||||
InputStream input = new ByteArrayInputStream(rules.getBytes(StandardCharsets.UTF_8));
|
InputStream input = new ByteArrayInputStream(rules.getBytes(StandardCharsets.UTF_8));
|
||||||
kieFileSystem.write("src/main/resources/drools/rules" + ruleSetId + ".drl", kieServices.getResources()
|
kieFileSystem.write("src/main/resources/drools/rules" + ruleSetId + ".drl", kieServices.getResources()
|
||||||
@ -104,10 +115,22 @@ public class DroolsExecutionService {
|
|||||||
|
|
||||||
|
|
||||||
public void testRules(String rules) {
|
public void testRules(String rules) {
|
||||||
|
|
||||||
KieServices kieServices = KieServices.Factory.get();
|
KieServices kieServices = KieServices.Factory.get();
|
||||||
KieModule kieModule = getKieModule("test-rules", rules, kieServices);
|
KieModule kieModule = getKieModule("test-rules", rules, kieServices);
|
||||||
var container = kieServices.newKieContainer(kieModule.getReleaseId());
|
var container = kieServices.newKieContainer(kieModule.getReleaseId());
|
||||||
container.newKieSession();
|
container.newKieSession();
|
||||||
container.dispose();
|
container.dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public long getRulesVersion(String ruleSetId) {
|
||||||
|
|
||||||
|
Long rulesVersion = rulesVersionPerRuleSetId.get(ruleSetId);
|
||||||
|
if (rulesVersion == null) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
return rulesVersion.longValue();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -50,7 +50,7 @@ public class EntityRedactionService {
|
|||||||
|
|
||||||
dictionaryService.updateDictionary(ruleSetId);
|
dictionaryService.updateDictionary(ruleSetId);
|
||||||
KieContainer container = droolsExecutionService.updateRules(ruleSetId);
|
KieContainer container = droolsExecutionService.updateRules(ruleSetId);
|
||||||
long rulesVersion = droolsExecutionService.getRulesVersion();
|
long rulesVersion = droolsExecutionService.getRulesVersion(ruleSetId);
|
||||||
|
|
||||||
Dictionary dictionary = dictionaryService.getDeepCopyDictionary(ruleSetId);
|
Dictionary dictionary = dictionaryService.getDeepCopyDictionary(ruleSetId);
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user