DM-410: Added timeout to Drools execution #131
@ -2,7 +2,13 @@ package com.iqser.red.service.redaction.v1.server.service.drools;
|
|||||||
|
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.concurrent.CompletableFuture;
|
||||||
|
import java.util.concurrent.ExecutionException;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
import java.util.concurrent.TimeoutException;
|
||||||
|
|
||||||
|
import com.iqser.red.service.persistence.service.v1.api.shared.model.RuleFileType;
|
||||||
|
import com.iqser.red.service.redaction.v1.server.utils.exception.DroolsTimeoutException;
|
||||||
import org.kie.api.runtime.KieContainer;
|
import org.kie.api.runtime.KieContainer;
|
||||||
import org.kie.api.runtime.KieSession;
|
import org.kie.api.runtime.KieSession;
|
||||||
import org.kie.api.runtime.rule.QueryResults;
|
import org.kie.api.runtime.rule.QueryResults;
|
||||||
@ -39,7 +45,23 @@ public class ComponentDroolsExecutionService {
|
|||||||
entityLog.getEntityLogEntry().stream().map(Entity::fromEntityLogEntry).forEach(kieSession::insert);
|
entityLog.getEntityLogEntry().stream().map(Entity::fromEntityLogEntry).forEach(kieSession::insert);
|
||||||
fileAttributes.stream().filter(f -> f.getValue() != null).forEach(kieSession::insert);
|
fileAttributes.stream().filter(f -> f.getValue() != null).forEach(kieSession::insert);
|
||||||
|
|
||||||
kieSession.fireAllRules();
|
CompletableFuture<Void> completableFuture = CompletableFuture.supplyAsync(() -> {
|
||||||
|
kieSession.fireAllRules();
|
||||||
|
return null;
|
||||||
|
});
|
||||||
|
|
||||||
|
try {
|
||||||
|
completableFuture.orTimeout(settings.getDroolsExecutionTimeoutSecs(), TimeUnit.SECONDS).get();
|
||||||
|
} catch (ExecutionException e) {
|
||||||
|
kieSession.dispose();
|
||||||
|
if(e.getCause() instanceof TimeoutException){
|
||||||
|
throw new DroolsTimeoutException(e, false, RuleFileType.COMPONENT);
|
||||||
|
}
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
kieSession.dispose();
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
|
||||||
List<FileAttribute> resultingFileAttributes = getFileAttributes(kieSession);
|
List<FileAttribute> resultingFileAttributes = getFileAttributes(kieSession);
|
||||||
List<Component> components = getComponents(kieSession);
|
List<Component> components = getComponents(kieSession);
|
||||||
|
|||||||
@ -2,7 +2,13 @@ package com.iqser.red.service.redaction.v1.server.service.drools;
|
|||||||
|
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.concurrent.CompletableFuture;
|
||||||
|
import java.util.concurrent.ExecutionException;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
import java.util.concurrent.TimeoutException;
|
||||||
|
|
||||||
|
import com.iqser.red.service.persistence.service.v1.api.shared.model.RuleFileType;
|
||||||
|
import com.iqser.red.service.redaction.v1.server.utils.exception.DroolsTimeoutException;
|
||||||
import org.kie.api.runtime.KieContainer;
|
import org.kie.api.runtime.KieContainer;
|
||||||
import org.kie.api.runtime.KieSession;
|
import org.kie.api.runtime.KieSession;
|
||||||
import org.kie.api.runtime.rule.QueryResults;
|
import org.kie.api.runtime.rule.QueryResults;
|
||||||
@ -87,7 +93,24 @@ public class EntityDroolsExecutionService {
|
|||||||
|
|
||||||
kieSession.getAgenda().getAgendaGroup("LOCAL_DICTIONARY_ADDS").setFocus();
|
kieSession.getAgenda().getAgendaGroup("LOCAL_DICTIONARY_ADDS").setFocus();
|
||||||
|
|
||||||
kieSession.fireAllRules();
|
|
||||||
|
CompletableFuture<Void> completableFuture = CompletableFuture.supplyAsync(() -> {
|
||||||
|
kieSession.fireAllRules();
|
||||||
|
return null;
|
||||||
|
});
|
||||||
|
|
||||||
|
try {
|
||||||
|
completableFuture.orTimeout(settings.getDroolsExecutionTimeoutSecs(), TimeUnit.SECONDS).get();
|
||||||
|
} catch (ExecutionException e) {
|
||||||
|
kieSession.dispose();
|
||||||
|
if(e.getCause() instanceof TimeoutException){
|
||||||
|
throw new DroolsTimeoutException(e, false, RuleFileType.ENTITY);
|
||||||
|
}
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
kieSession.dispose();
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
|
||||||
List<FileAttribute> resultingFileAttributes = getFileAttributes(kieSession);
|
List<FileAttribute> resultingFileAttributes = getFileAttributes(kieSession);
|
||||||
kieSession.dispose();
|
kieSession.dispose();
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user