enhance performance
This commit is contained in:
parent
a237631653
commit
2ed32a94a4
12 changed files with 142 additions and 26 deletions
|
|
@ -105,7 +105,7 @@ public class RuleBaseStatefulSession implements RuleBaseSession {
|
|||
this.processInstanceList = new HashMap<>();
|
||||
|
||||
this.historyListener = historyListener;
|
||||
if (this.historyListener != null) {
|
||||
if (this.historyListener != null && this.historyListener.withDetails()) {
|
||||
this.factListener = new FactHandlerListener(this,cloner);
|
||||
this.ruleHandlerListener = new RuleHandlerListener(this,cloner);
|
||||
this.processHandlerListener = new ProcessHandlerListener(this,cloner);
|
||||
|
|
|
|||
|
|
@ -91,11 +91,25 @@ public class SimpleRuleHandlerListener extends DefaultAgendaEventListener implem
|
|||
@Override
|
||||
public void afterMatchFired(AfterMatchFiredEvent event) {
|
||||
logger.debug(">>afterActivationFired", event);
|
||||
|
||||
nbRuleFired++;
|
||||
Match match = event.getMatch();
|
||||
logger.info(" {} rules name {}", nbRuleFired, match.getRule().toString());
|
||||
//____ Getting the Rule Object Summary from the session
|
||||
DroolsRuleObject droolsRuleObject = ruleBaseSession.getDroolsRuleObject(match.getRule());
|
||||
|
||||
//____ Creating the specific "After Rule Fired" History Event
|
||||
AfterRuleFiredHistoryEvent newAfterRuleEvent = new AfterRuleFiredHistoryEvent(this.ruleBaseSession.nextEventId(), this.nbRuleFired, droolsRuleObject, this.ruleBaseSession.getRuleBaseID(), this.ruleBaseSession.getSessionId());
|
||||
ruleBaseSession.addHistoryElement(newAfterRuleEvent);
|
||||
|
||||
if (nbRuleFired >= maxNumberRuleToExecute) {
|
||||
logger.warn(String.format("%d rules have been fired. This is the limit.", maxNumberRuleToExecute));
|
||||
logger.warn("The session execution will be stop");
|
||||
KieRuntime runtime = event.getKieRuntime();
|
||||
this.maxNumerExecutedRulesReached = true;
|
||||
//(int eventID, int sessionId, int numberOfRulesExecuted, int maxNumberOfRulesForSession)
|
||||
SessionFireAllRulesMaxNumberReachedEvent sessionFireAllRulesMaxNumberReachedEvent = new SessionFireAllRulesMaxNumberReachedEvent(this.ruleBaseSession.nextEventId(), nbRuleFired, maxNumberRuleToExecute, this.ruleBaseSession.getRuleBaseID(), this.ruleBaseSession.getSessionId());
|
||||
ruleBaseSession.addHistoryElement(sessionFireAllRulesMaxNumberReachedEvent);
|
||||
runtime.halt();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -0,0 +1,36 @@
|
|||
package org.chtijbug.drools.runtime;
|
||||
|
||||
import org.chtijbug.drools.entity.history.HistoryEvent;
|
||||
import org.chtijbug.drools.runtime.listener.HistoryListener;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Created by nheron on 07/07/2016.
|
||||
*/
|
||||
public class TestHistoryListener implements HistoryListener {
|
||||
|
||||
private boolean withDetails=true;
|
||||
|
||||
private List<HistoryEvent> historyEventLinkedList = new ArrayList<>();
|
||||
|
||||
public List<HistoryEvent> getHistoryEventLinkedList() {
|
||||
return historyEventLinkedList;
|
||||
}
|
||||
|
||||
public void setWithDetails(boolean withDetails) {
|
||||
this.withDetails = withDetails;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fireEvent(HistoryEvent newHistoryEvent) throws DroolsChtijbugException {
|
||||
historyEventLinkedList.add(newHistoryEvent);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean withDetails() {
|
||||
return withDetails;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,6 +1,9 @@
|
|||
package org.chtijbug.drools.runtime.impl;
|
||||
|
||||
import org.chtijbug.drools.entity.DroolsFactObject;
|
||||
import org.chtijbug.drools.entity.history.HistoryEvent;
|
||||
import org.chtijbug.drools.runtime.DroolsChtijbugException;
|
||||
import org.chtijbug.drools.runtime.listener.HistoryListener;
|
||||
import org.chtijbug.drools.runtime.resource.FileKnowledgeResource;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
|
@ -31,7 +34,17 @@ public class RuleBaseStatefulSessionTestCase {
|
|||
// TODO Créer une kbase
|
||||
ruleBase.createKBase(Arrays.asList(fibonacciFile));
|
||||
// TODO créer une session à partir dela KBase
|
||||
session = (RuleBaseStatefulSession) ruleBase.createRuleBaseSession();
|
||||
session = (RuleBaseStatefulSession) ruleBase.createRuleBaseSession(20, new HistoryListener() {
|
||||
@Override
|
||||
public void fireEvent(HistoryEvent newHistoryEvent) throws DroolsChtijbugException {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean withDetails() {
|
||||
return true;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
|
|||
|
|
@ -6,9 +6,8 @@ import org.chtijbug.drools.entity.history.HistoryEvent;
|
|||
import org.chtijbug.drools.entity.history.fact.DeletedFactHistoryEvent;
|
||||
import org.chtijbug.drools.entity.history.fact.InsertedFactHistoryEvent;
|
||||
import org.chtijbug.drools.entity.history.fact.UpdatedFactHistoryEvent;
|
||||
import org.chtijbug.drools.runtime.RuleBaseBuilder;
|
||||
import org.chtijbug.drools.runtime.RuleBasePackage;
|
||||
import org.chtijbug.drools.runtime.RuleBaseSession;
|
||||
import org.chtijbug.drools.runtime.*;
|
||||
import org.chtijbug.drools.runtime.listener.HistoryListener;
|
||||
import org.junit.*;
|
||||
|
||||
/**
|
||||
|
|
@ -46,11 +45,11 @@ public class FactHandlerListernerTestTest {
|
|||
@Test
|
||||
public void test1ObjectInserted() throws Exception {
|
||||
ruleBasePackage = RuleBaseBuilder.createRuleBasePackage(new Long(1L), "com.pymmasoftware.test", "fibonacci", "1.0.0_SNAPSHOT)", "insert1.drl");
|
||||
session = ruleBasePackage.createRuleBaseSession();
|
||||
session = ruleBasePackage.createRuleBaseSession(1000,new TestHistoryListener());
|
||||
Fibonacci newObject = new Fibonacci(0);
|
||||
session.insertObject(newObject);
|
||||
Assert.assertEquals(session.getHistoryContainer().getListHistoryEvent().size(), 1);
|
||||
HistoryEvent event = session.getHistoryContainer().getListHistoryEvent().get(0);
|
||||
Assert.assertEquals(session.getHistoryContainer().getListHistoryEvent().size(), 2);
|
||||
HistoryEvent event = session.getHistoryContainer().getListHistoryEvent().get(1);
|
||||
if (event instanceof InsertedFactHistoryEvent) {
|
||||
Assert.assertEquals(1, 1);
|
||||
Assert.assertEquals(session.getRuleBaseID(), event.getRuleBaseID());
|
||||
|
|
@ -70,13 +69,13 @@ public class FactHandlerListernerTestTest {
|
|||
@Test
|
||||
public void test1ObjectUpdated() throws Exception {
|
||||
ruleBasePackage = RuleBaseBuilder.createRuleBasePackage(new Long(1L), "com.pymmasoftware.test", "fibonacci", "1.0.0_SNAPSHOT)", "insert1.drl");
|
||||
session = ruleBasePackage.createRuleBaseSession();
|
||||
session = ruleBasePackage.createRuleBaseSession(1000,new TestHistoryListener());
|
||||
Fibonacci newObject = new Fibonacci(0);
|
||||
session.insertObject(newObject);
|
||||
newObject.setValue(100);
|
||||
session.updateObject(newObject);
|
||||
Assert.assertEquals(session.getHistoryContainer().getListHistoryEvent().size(), 2);
|
||||
HistoryEvent event = session.getHistoryContainer().getListHistoryEvent().get(1);
|
||||
Assert.assertEquals(session.getHistoryContainer().getListHistoryEvent().size(), 3);
|
||||
HistoryEvent event = session.getHistoryContainer().getListHistoryEvent().get(2);
|
||||
if (event instanceof UpdatedFactHistoryEvent) {
|
||||
Assert.assertEquals(1, 1);
|
||||
Assert.assertEquals(session.getRuleBaseID(), event.getRuleBaseID());
|
||||
|
|
@ -105,12 +104,12 @@ public class FactHandlerListernerTestTest {
|
|||
@Test
|
||||
public void retracted() throws Exception {
|
||||
ruleBasePackage = RuleBaseBuilder.createRuleBasePackage(new Long(1L), "com.pymmasoftware.test", "fibonacci", "1.0.0_SNAPSHOT)", "insert1.drl");
|
||||
session = ruleBasePackage.createRuleBaseSession();
|
||||
session = ruleBasePackage.createRuleBaseSession(1000,new TestHistoryListener());
|
||||
Fibonacci newObject = new Fibonacci(0);
|
||||
session.insertObject(newObject);
|
||||
session.retractObject(newObject);
|
||||
Assert.assertEquals(session.getHistoryContainer().getListHistoryEvent().size(), 2);
|
||||
HistoryEvent event = session.getHistoryContainer().getListHistoryEvent().get(1);
|
||||
Assert.assertEquals(session.getHistoryContainer().getListHistoryEvent().size(), 3);
|
||||
HistoryEvent event = session.getHistoryContainer().getListHistoryEvent().get(2);
|
||||
if (event instanceof DeletedFactHistoryEvent) {
|
||||
Assert.assertEquals(1, 1);
|
||||
Assert.assertEquals(session.getRuleBaseID(), event.getRuleBaseID());
|
||||
|
|
@ -130,7 +129,7 @@ public class FactHandlerListernerTestTest {
|
|||
@Test
|
||||
public void test1RuleFired() throws Exception {
|
||||
ruleBasePackage = RuleBaseBuilder.createRuleBasePackage(new Long(1L), "com.pymmasoftware.test", "fibonacci", "1.0.0_SNAPSHOT)", "insert1.drl");
|
||||
session = ruleBasePackage.createRuleBaseSession();
|
||||
session = ruleBasePackage.createRuleBaseSession(1000,new TestHistoryListener());
|
||||
session.fireAllRules();
|
||||
Assert.assertEquals(session.listRules().size(), 1);
|
||||
Assert.assertEquals(session.listLastVersionObjects().size(), 1);
|
||||
|
|
|
|||
|
|
@ -39,6 +39,11 @@ public class FactHistoryEventTest {
|
|||
public void fireEvent(HistoryEvent newHistoryEvent) throws DroolsChtijbugException {
|
||||
historyEvents.add(newHistoryEvent);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean withDetails() {
|
||||
return true;
|
||||
}
|
||||
};
|
||||
RuleBasePackage ruleBasePackage = RuleBaseBuilder.createRuleBasePackage(new Long(1L), historyListener, "com.pymmasoftware.test", "fibonacci", "1.0.0_SNAPSHOT", "fibonacci.drl");
|
||||
Long rulePackageID = ruleBasePackage.getRuleBaseID();
|
||||
|
|
@ -133,6 +138,11 @@ public class FactHistoryEventTest {
|
|||
public void fireEvent(HistoryEvent newHistoryEvent) throws DroolsChtijbugException {
|
||||
historyEvents.add(newHistoryEvent);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean withDetails() {
|
||||
return true;
|
||||
}
|
||||
};
|
||||
RuleBasePackage ruleBasePackage = RuleBaseBuilder.createRuleBasePackage(new Long(1L), historyListener, "com.pymmasoftware.test", "fibonacci", "1.0.0_SNAPSHOT", "fibonacci.drl");
|
||||
Long rulePackageID = ruleBasePackage.getRuleBaseID();
|
||||
|
|
|
|||
|
|
@ -42,6 +42,11 @@ public class KnowledgeBaseHistoryEventTest {
|
|||
public void fireEvent(HistoryEvent newHistoryEvent) throws DroolsChtijbugException {
|
||||
historyEvents.add(newHistoryEvent);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean withDetails() {
|
||||
return true;
|
||||
}
|
||||
};
|
||||
RuleBasePackage ruleBasePackage = RuleBaseBuilder.createRuleBasePackage(new Long(1L), historyListener, "com.pymmasoftware.test", "fibonacci", "1.0.0_SNAPSHOT)", "fibonacci.drl");
|
||||
Long rulePackageID = ruleBasePackage.getRuleBaseID();
|
||||
|
|
@ -75,10 +80,17 @@ public class KnowledgeBaseHistoryEventTest {
|
|||
|
||||
final List<HistoryEvent> historyEvents = new ArrayList<HistoryEvent>();
|
||||
HistoryListener historyListener = new HistoryListener() {
|
||||
|
||||
|
||||
@Override
|
||||
public void fireEvent(HistoryEvent newHistoryEvent) throws DroolsChtijbugException {
|
||||
historyEvents.add(newHistoryEvent);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean withDetails() {
|
||||
return true;
|
||||
}
|
||||
};
|
||||
RuleBasePackage ruleBasePackage = RuleBaseBuilder.createRuleBasePackage(new Long(1L), historyListener, "com.pymmasoftware.test", "fibonacci", "1.0.0_SNAPSHOT)", "fibonacci.drl");
|
||||
Long rulePackageID = ruleBasePackage.getRuleBaseID();
|
||||
|
|
@ -119,6 +131,9 @@ public class KnowledgeBaseHistoryEventTest {
|
|||
SessionDisposedEvent sessionDisposedEvent = (SessionDisposedEvent) historyEvents.get(7);
|
||||
assertThat(sessionDisposedEvent.getRuleBaseID()).isEqualTo(rulePackageID);
|
||||
assertThat(sessionDisposedEvent.getEventID()).isEqualTo(2);
|
||||
|
||||
|
||||
|
||||
assertThat(sessionDisposedEvent.getSessionId()).isEqualTo(1);
|
||||
assertThat(sessionCreatedEvent.getTypeEvent()).isEqualTo(HistoryEvent.TypeEvent.Session);
|
||||
ruleBaseSession2.dispose();
|
||||
|
|
@ -140,6 +155,11 @@ public class KnowledgeBaseHistoryEventTest {
|
|||
public void fireEvent(HistoryEvent newHistoryEvent) throws DroolsChtijbugException {
|
||||
historyEvents.add(newHistoryEvent);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean withDetails() {
|
||||
return true;
|
||||
}
|
||||
};
|
||||
RuleBasePackage ruleBasePackage = RuleBaseBuilder.createRuleBasePackage(new Long(1L), historyListener, "com.pymmasoftware.test", "fibonacci", "1.0.0_SNAPSHOT)", "fibonacci.drl");
|
||||
Long rulePackageID = ruleBasePackage.getRuleBaseID();
|
||||
|
|
|
|||
|
|
@ -41,6 +41,11 @@ public class RuleBaseHistoryEventTest {
|
|||
public void fireEvent(HistoryEvent newHistoryEvent) throws DroolsChtijbugException {
|
||||
historyEvents.add(newHistoryEvent);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean withDetails() {
|
||||
return true;
|
||||
}
|
||||
};
|
||||
RuleBasePackage ruleBasePackage = RuleBaseBuilder.createRuleBasePackage(new Long(1L), historyListener, "com.pymmasoftware.test", "fibonacci", "1.0.0_SNAPSHOT)", "fibonacci.drl");
|
||||
Long rulePackageID = ruleBasePackage.getRuleBaseID();
|
||||
|
|
|
|||
|
|
@ -4,10 +4,7 @@ import org.chtijbug.drools.entity.DroolsFactObjectAttribute;
|
|||
import org.chtijbug.drools.entity.history.HistoryEvent;
|
||||
import org.chtijbug.drools.entity.history.rule.AfterRuleFiredHistoryEvent;
|
||||
import org.chtijbug.drools.entity.history.rule.BeforeRuleFiredHistoryEvent;
|
||||
import org.chtijbug.drools.runtime.DroolsChtijbugException;
|
||||
import org.chtijbug.drools.runtime.RuleBaseBuilder;
|
||||
import org.chtijbug.drools.runtime.RuleBasePackage;
|
||||
import org.chtijbug.drools.runtime.RuleBaseSession;
|
||||
import org.chtijbug.drools.runtime.*;
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.junit.BeforeClass;
|
||||
|
|
@ -91,7 +88,7 @@ public class RuleHandlerListenerTest {
|
|||
public void RuleEvent() throws DroolsChtijbugException {
|
||||
ruleBasePackage = RuleBaseBuilder.createRuleBasePackage(1L, "com.pymmasoftware.test", "fibonacci", "1.0.0_SNAPSHOT", "infiniteLoop.drl");
|
||||
|
||||
session = ruleBasePackage.createRuleBaseSession();
|
||||
session = ruleBasePackage.createRuleBaseSession(1000,new TestHistoryListener());
|
||||
|
||||
Fibonacci newObject = new Fibonacci(0);
|
||||
session.insertObject(newObject);
|
||||
|
|
@ -101,11 +98,11 @@ public class RuleHandlerListenerTest {
|
|||
e.printStackTrace();
|
||||
}
|
||||
List<HistoryEvent> eventList = session.getHistoryContainer().getListHistoryEvent();
|
||||
assertThat(eventList).hasSize(6002);
|
||||
assertThat(eventList).hasSize(3005);
|
||||
/*
|
||||
BeforeRuleFiredHistoryEvent
|
||||
*/
|
||||
HistoryEvent event1 = eventList.get(1);
|
||||
HistoryEvent event1 = eventList.get(3);
|
||||
assertThat(event1).isInstanceOf(BeforeRuleFiredHistoryEvent.class);
|
||||
BeforeRuleFiredHistoryEvent beforeRuleFiredHistoryEvent = (BeforeRuleFiredHistoryEvent) event1;
|
||||
assertThat(beforeRuleFiredHistoryEvent.getRule().getRuleName()).isEqualTo("infiniteLoop");
|
||||
|
|
@ -117,7 +114,7 @@ public class RuleHandlerListenerTest {
|
|||
/*
|
||||
AfterRuleFiredHistoryEvent
|
||||
*/
|
||||
HistoryEvent event3 = eventList.get(3);
|
||||
HistoryEvent event3 = eventList.get(5);
|
||||
assertThat(event3).isInstanceOf(AfterRuleFiredHistoryEvent.class);
|
||||
AfterRuleFiredHistoryEvent afterRuleFiredHistoryEvent = (AfterRuleFiredHistoryEvent) event3;
|
||||
assertThat(afterRuleFiredHistoryEvent.getRule().getRuleName()).isEqualTo("infiniteLoop");
|
||||
|
|
|
|||
|
|
@ -45,6 +45,11 @@ public class RuleHistoryEventTest {
|
|||
public void fireEvent(HistoryEvent newHistoryEvent) throws DroolsChtijbugException {
|
||||
historyEvents.add(newHistoryEvent);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean withDetails() {
|
||||
return true;
|
||||
}
|
||||
};
|
||||
RuleBasePackage ruleBasePackage = RuleBaseBuilder.createRuleBasePackage(1L, historyListener, "com.pymmasoftware.test", "fibonacci", "1.0.0_SNAPSHOT", "fibonacci.drl");
|
||||
Long rulePackageID = ruleBasePackage.getRuleBaseID();
|
||||
|
|
@ -85,6 +90,11 @@ public class RuleHistoryEventTest {
|
|||
public void fireEvent(HistoryEvent newHistoryEvent) throws DroolsChtijbugException {
|
||||
historyEvents.add(newHistoryEvent);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean withDetails() {
|
||||
return true;
|
||||
}
|
||||
};
|
||||
RuleBasePackage ruleBasePackage = RuleBaseBuilder.createRuleBasePackage(1L, historyListener, "com.pymmasoftware.test", "fibonacci", "1.0.0_SNAPSHOT", "ruleflow2.drl", "RuleFlowProcess2.bpmn2");
|
||||
Long rulePackageID = ruleBasePackage.getRuleBaseID();
|
||||
|
|
|
|||
Loading…
Add table
editor.link_modal.header
Reference in a new issue