This is an automated email from the ASF dual-hosted git repository.
mariofusco pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-kie-drools.git
The following commit(s) were added to refs/heads/main by this push:
new d483461cd5 Removed getActivationsManager from ReteEvaluator (#6516)
d483461cd5 is described below
commit d483461cd5e616fb3851558ca313d0ce2d321c4a
Author: Paolo Bizzarri <[email protected]>
AuthorDate: Wed Nov 12 08:12:48 2025 +0100
Removed getActivationsManager from ReteEvaluator (#6516)
---
.../org/drools/core/common/ActivationsManager.java | 2 --
.../drools/core/common/AgendaGroupsManager.java | 2 +-
.../core/concurrent/AbstractGroupEvaluator.java | 13 ++++----
.../core/concurrent/ParallelGroupEvaluator.java | 7 +++--
.../core/concurrent/SequentialGroupEvaluator.java | 5 +--
.../drools/core/impl/ActivationsManagerImpl.java | 13 +++-----
.../org/drools/core/phreak/EagerPhreakBuilder.java | 4 +--
.../org/drools/core/phreak/LazyPhreakBuilder.java | 4 +--
.../org/drools/core/phreak/PhreakBranchNode.java | 8 ++---
.../drools/core/phreak/PhreakRuleTerminalNode.java | 20 +++++++-----
.../org/drools/core/phreak/PhreakTimerNode.java | 8 ++---
.../java/org/drools/core/phreak/RuleExecutor.java | 36 ++++++++++------------
.../org/drools/core/reteoo/AlphaTerminalNode.java | 14 ++++-----
.../kiesession/agenda/CompositeDefaultAgenda.java | 5 ---
.../drools/kiesession/agenda/DefaultAgenda.java | 15 +++------
.../protobuf/ProtobufInputMarshaller.java | 4 +--
.../protobuf/ProtobufOutputMarshaller.java | 2 +-
.../integrationtests/ExecutionFlowControlTest.java | 10 +++---
18 files changed, 79 insertions(+), 93 deletions(-)
diff --git
a/drools-core/src/main/java/org/drools/core/common/ActivationsManager.java
b/drools-core/src/main/java/org/drools/core/common/ActivationsManager.java
index 05c093f6ca..1e810d1c7a 100644
--- a/drools-core/src/main/java/org/drools/core/common/ActivationsManager.java
+++ b/drools-core/src/main/java/org/drools/core/common/ActivationsManager.java
@@ -36,8 +36,6 @@ public interface ActivationsManager {
String ON_AFTER_ALL_FIRES_CONSEQUENCE_NAME = "$onAfterAllFire$";
String ON_DELETE_MATCH_CONSEQUENCE_NAME = "$onDeleteMatch$";
- ReteEvaluator getReteEvaluator();
-
AgendaGroupsManager getAgendaGroupsManager();
AgendaEventSupport getAgendaEventSupport();
diff --git
a/drools-core/src/main/java/org/drools/core/common/AgendaGroupsManager.java
b/drools-core/src/main/java/org/drools/core/common/AgendaGroupsManager.java
index 8dd066683d..6c2064ecc6 100644
--- a/drools-core/src/main/java/org/drools/core/common/AgendaGroupsManager.java
+++ b/drools-core/src/main/java/org/drools/core/common/AgendaGroupsManager.java
@@ -326,7 +326,7 @@ public interface AgendaGroupsManager extends Externalizable
{
private void clearAndCancelAgendaGroup(InternalAgendaGroup
agendaGroup, InternalAgenda agenda) {
// enforce materialization of all activations of this group before
removing them
for (RuleAgendaItem activation : agendaGroup.getActivations()) {
- activation.getRuleExecutor().evaluateNetworkIfDirty( agenda );
+
activation.getRuleExecutor().evaluateNetworkIfDirty(workingMemory, agenda );
}
final EventSupport eventsupport = this.workingMemory;
diff --git
a/drools-core/src/main/java/org/drools/core/concurrent/AbstractGroupEvaluator.java
b/drools-core/src/main/java/org/drools/core/concurrent/AbstractGroupEvaluator.java
index 50d91ed4f7..eba9c64745 100644
---
a/drools-core/src/main/java/org/drools/core/concurrent/AbstractGroupEvaluator.java
+++
b/drools-core/src/main/java/org/drools/core/concurrent/AbstractGroupEvaluator.java
@@ -20,6 +20,7 @@ package org.drools.core.concurrent;
import org.drools.core.common.ActivationsManager;
import org.drools.core.common.InternalAgendaGroup;
+import org.drools.core.common.ReteEvaluator;
import org.drools.core.impl.InternalRuleBase;
import org.drools.core.phreak.RuleAgendaItem;
import org.drools.core.rule.consequence.KnowledgeHelper;
@@ -34,11 +35,11 @@ public abstract class AbstractGroupEvaluator implements
GroupEvaluator {
private boolean haltEvaluation;
- private InternalRuleBase ruleBase;
+ protected ReteEvaluator reteEvaluator;
- public AbstractGroupEvaluator(InternalRuleBase ruleBase,
ActivationsManager activationsManager) {
- this.ruleBase = ruleBase;
- this.activationsManager = activationsManager;
+ public AbstractGroupEvaluator(InternalRuleBase ruleBase, ReteEvaluator
reteEvaluator, ActivationsManager activationsManager) {
+ this.reteEvaluator = reteEvaluator;
+ this.activationsManager = activationsManager;
this.sequential = ruleBase.getRuleBaseConfiguration().isSequential();
this.knowledgeHelper = newKnowledgeHelper();
}
@@ -49,7 +50,7 @@ public abstract class AbstractGroupEvaluator implements
GroupEvaluator {
int loopFireCount = 0;
while (item != null && !haltEvaluation && (fireLimit < 0 || (fireCount
+ loopFireCount) < fireLimit)) {
activationsManager.evaluateQueriesForRule( item );
- loopFireCount +=
item.getRuleExecutor().evaluateNetworkAndFire(activationsManager, filter,
fireCount, fireLimit);
+ loopFireCount +=
item.getRuleExecutor().evaluateNetworkAndFire(reteEvaluator,
activationsManager, filter, fireCount, fireLimit);
activationsManager.flushPropagations();
item = nextActivation(group);
}
@@ -57,7 +58,7 @@ public abstract class AbstractGroupEvaluator implements
GroupEvaluator {
}
private KnowledgeHelper newKnowledgeHelper() {
- return activationsManager.getReteEvaluator().createKnowledgeHelper();
+ return reteEvaluator.createKnowledgeHelper();
}
private RuleAgendaItem nextActivation(InternalAgendaGroup group) {
diff --git
a/drools-core/src/main/java/org/drools/core/concurrent/ParallelGroupEvaluator.java
b/drools-core/src/main/java/org/drools/core/concurrent/ParallelGroupEvaluator.java
index e1250ff520..16849e4f78 100644
---
a/drools-core/src/main/java/org/drools/core/concurrent/ParallelGroupEvaluator.java
+++
b/drools-core/src/main/java/org/drools/core/concurrent/ParallelGroupEvaluator.java
@@ -26,6 +26,7 @@ import java.util.stream.Collectors;
import org.drools.base.common.RuleBasePartitionId;
import org.drools.core.common.ActivationsManager;
import org.drools.core.common.InternalAgendaGroup;
+import org.drools.core.common.ReteEvaluator;
import org.drools.core.impl.InternalRuleBase;
import org.drools.core.phreak.RuleAgendaItem;
@@ -34,8 +35,8 @@ import static
org.drools.base.common.PartitionsManager.doOnForkJoinPool;
public class ParallelGroupEvaluator extends AbstractGroupEvaluator {
- public ParallelGroupEvaluator(InternalRuleBase ruleBase,
ActivationsManager activationsManager ) {
- super(ruleBase, activationsManager);
+ public ParallelGroupEvaluator(InternalRuleBase ruleBase, ReteEvaluator
reteEvaluator, ActivationsManager activationsManager ) {
+ super(ruleBase, reteEvaluator, activationsManager);
}
protected void startEvaluation(InternalAgendaGroup group) {
@@ -62,7 +63,7 @@ public class ParallelGroupEvaluator extends
AbstractGroupEvaluator {
doOnForkJoinPool(() ->
partitionedActivations.values().parallelStream()
.forEach( items -> items
- .forEach( item ->
item.getRuleExecutor().evaluateNetworkIfDirty(activationsManager) ) )
+ .forEach( item ->
item.getRuleExecutor().evaluateNetworkIfDirty(reteEvaluator,
activationsManager) ) )
);
}
}
diff --git
a/drools-core/src/main/java/org/drools/core/concurrent/SequentialGroupEvaluator.java
b/drools-core/src/main/java/org/drools/core/concurrent/SequentialGroupEvaluator.java
index e3b8125fc5..e7c7025ce5 100644
---
a/drools-core/src/main/java/org/drools/core/concurrent/SequentialGroupEvaluator.java
+++
b/drools-core/src/main/java/org/drools/core/concurrent/SequentialGroupEvaluator.java
@@ -19,12 +19,13 @@
package org.drools.core.concurrent;
import org.drools.core.common.ActivationsManager;
+import org.drools.core.common.ReteEvaluator;
import org.drools.core.impl.InternalRuleBase;
public class SequentialGroupEvaluator extends AbstractGroupEvaluator {
- public SequentialGroupEvaluator(InternalRuleBase ruleBase,
ActivationsManager activationsManager) {
- super(ruleBase, activationsManager);
+ public SequentialGroupEvaluator(InternalRuleBase ruleBase, ReteEvaluator
reteEvaluator, ActivationsManager activationsManager) {
+ super(ruleBase, reteEvaluator, activationsManager);
}
}
diff --git
a/drools-core/src/main/java/org/drools/core/impl/ActivationsManagerImpl.java
b/drools-core/src/main/java/org/drools/core/impl/ActivationsManagerImpl.java
index 617fb876f2..0525061239 100644
--- a/drools-core/src/main/java/org/drools/core/impl/ActivationsManagerImpl.java
+++ b/drools-core/src/main/java/org/drools/core/impl/ActivationsManagerImpl.java
@@ -89,17 +89,12 @@ public class ActivationsManagerImpl implements
ActivationsManager {
this.factHandleFactory = factHandleFactory;
this.agendaGroupsManager = new
AgendaGroupsManager.SimpleAgendaGroupsManager(ruleBase, reteEvaluator,
factHandleFactory);
this.propagationList = new SynchronizedPropagationList(reteEvaluator);
- this.groupEvaluator = new SequentialGroupEvaluator( ruleBase, this );
+ this.groupEvaluator = new SequentialGroupEvaluator( ruleBase,
reteEvaluator, this );
if (ruleBase.getRuleBaseConfiguration().getEventProcessingMode() ==
EventProcessingOption.STREAM) {
expirationContexts = new ArrayList<>();
}
}
- @Override
- public ReteEvaluator getReteEvaluator() {
- return reteEvaluator;
- }
-
@Override
public AgendaGroupsManager getAgendaGroupsManager() {
return agendaGroupsManager;
@@ -139,7 +134,7 @@ public class ActivationsManagerImpl implements
ActivationsManager {
@Override
public void removeQueryAgendaItem(RuleAgendaItem item) {
- queries.remove( (QueryImpl) item.getRule() );
+ queries.remove(item.getRule());
}
@Override
@@ -240,7 +235,7 @@ public class ActivationsManagerImpl implements
ActivationsManager {
if (item.isRuleInUse()) { // this rule could have been removed by
an incremental compilation
evaluateQueriesForRule( item );
RuleExecutor ruleExecutor = item.getRuleExecutor();
- ruleExecutor.evaluateNetwork( this );
+ ruleExecutor.evaluateNetwork(reteEvaluator, this);
}
}
}
@@ -252,7 +247,7 @@ public class ActivationsManagerImpl implements
ActivationsManager {
for (QueryImpl query : rule.getDependingQueries()) {
RuleAgendaItem queryAgendaItem = queries.remove(query);
if (queryAgendaItem != null) {
- queryAgendaItem.getRuleExecutor().evaluateNetwork(this);
+
queryAgendaItem.getRuleExecutor().evaluateNetwork(reteEvaluator, this);
}
}
}
diff --git
a/drools-core/src/main/java/org/drools/core/phreak/EagerPhreakBuilder.java
b/drools-core/src/main/java/org/drools/core/phreak/EagerPhreakBuilder.java
index a9eca6c6d8..1d6ade47cd 100644
--- a/drools-core/src/main/java/org/drools/core/phreak/EagerPhreakBuilder.java
+++ b/drools-core/src/main/java/org/drools/core/phreak/EagerPhreakBuilder.java
@@ -1098,8 +1098,8 @@ public class EagerPhreakBuilder implements PhreakBuilder {
if (insert) {
TerminalNode rtn = (TerminalNode) node;
InternalAgenda agenda = wm.getAgenda();
- RuleAgendaItem agendaItem =
AlphaTerminalNode.getRuleAgendaItem(wm, agenda, rtn, insert);
- PhreakRuleTerminalNode.doLeftTupleInsert(rtn,
agendaItem.getRuleExecutor(), agenda, agendaItem,
+ RuleAgendaItem agendaItem =
AlphaTerminalNode.getRuleAgendaItem(wm, rtn, insert);
+ PhreakRuleTerminalNode.doLeftTupleInsert(wm, rtn,
agendaItem.getRuleExecutor(), agenda, agendaItem,
(RuleTerminalNodeLeftTuple) peer);
}
return peer;
diff --git
a/drools-core/src/main/java/org/drools/core/phreak/LazyPhreakBuilder.java
b/drools-core/src/main/java/org/drools/core/phreak/LazyPhreakBuilder.java
index 8fa435e129..1ebc2da7d4 100644
--- a/drools-core/src/main/java/org/drools/core/phreak/LazyPhreakBuilder.java
+++ b/drools-core/src/main/java/org/drools/core/phreak/LazyPhreakBuilder.java
@@ -1010,8 +1010,8 @@ class LazyPhreakBuilder implements PhreakBuilder {
if (insert) {
TerminalNode rtn = (TerminalNode) node;
InternalAgenda agenda = wm.getAgenda();
- RuleAgendaItem agendaItem =
AlphaTerminalNode.getRuleAgendaItem(wm, agenda, rtn, insert);
- PhreakRuleTerminalNode.doLeftTupleInsert(rtn,
agendaItem.getRuleExecutor(), agenda, agendaItem,
+ RuleAgendaItem agendaItem =
AlphaTerminalNode.getRuleAgendaItem(wm, rtn, insert);
+ PhreakRuleTerminalNode.doLeftTupleInsert(wm, rtn,
agendaItem.getRuleExecutor(), agenda, agendaItem,
(RuleTerminalNodeLeftTuple) peer);
}
return peer;
diff --git
a/drools-core/src/main/java/org/drools/core/phreak/PhreakBranchNode.java
b/drools-core/src/main/java/org/drools/core/phreak/PhreakBranchNode.java
index 20fb11a1a4..20768d5df6 100644
--- a/drools-core/src/main/java/org/drools/core/phreak/PhreakBranchNode.java
+++ b/drools-core/src/main/java/org/drools/core/phreak/PhreakBranchNode.java
@@ -92,7 +92,7 @@ public class PhreakBranchNode {
RuleTerminalNodeLeftTuple branchedLeftTuple =
(RuleTerminalNodeLeftTuple) TupleFactory.createLeftTuple(leftTuple,
rtn,
leftTuple.getPropagationContext(), useLeftMemory);
- PhreakRuleTerminalNode.doLeftTupleInsert( rtn, executor,
activationsManager,
+ PhreakRuleTerminalNode.doLeftTupleInsert( reteEvaluator, rtn,
executor, activationsManager,
executor.getRuleAgendaItem(), branchedLeftTuple) ;
breaking = conditionalExecution.isBreaking();
}
@@ -149,7 +149,7 @@ public class PhreakBranchNode {
} else if (newRtn == oldRtn) {
// old and new on same branch, so update
- PhreakRuleTerminalNode.doLeftTupleUpdate(newRtn, executor,
activationsManager, branchTuples.rtnLeftTuple) ;
+ PhreakRuleTerminalNode.doLeftTupleUpdate(reteEvaluator,
newRtn, executor, activationsManager, branchTuples.rtnLeftTuple) ;
} else {
// old and new on different branches, delete one and
insert the other
@@ -161,7 +161,7 @@ public class PhreakBranchNode {
branchTuples.rtnLeftTuple = (RuleTerminalNodeLeftTuple)
TupleFactory.createLeftTuple(leftTuple,
newRtn,
leftTuple.getPropagationContext(), true);
- PhreakRuleTerminalNode.doLeftTupleInsert( newRtn,
executor, activationsManager,
+ PhreakRuleTerminalNode.doLeftTupleInsert( reteEvaluator,
newRtn, executor, activationsManager,
executor.getRuleAgendaItem(), branchTuples.rtnLeftTuple) ;
}
@@ -169,7 +169,7 @@ public class PhreakBranchNode {
// old does not exist, new exists, so insert
branchTuples.rtnLeftTuple = (RuleTerminalNodeLeftTuple)
TupleFactory.createLeftTuple(leftTuple, newRtn,
leftTuple.getPropagationContext(), true);
- PhreakRuleTerminalNode.doLeftTupleInsert( newRtn, executor,
activationsManager,
+ PhreakRuleTerminalNode.doLeftTupleInsert( reteEvaluator,
newRtn, executor, activationsManager,
executor.getRuleAgendaItem(), branchTuples.rtnLeftTuple) ;
}
diff --git
a/drools-core/src/main/java/org/drools/core/phreak/PhreakRuleTerminalNode.java
b/drools-core/src/main/java/org/drools/core/phreak/PhreakRuleTerminalNode.java
index fc8500c708..74a5e67242 100644
---
a/drools-core/src/main/java/org/drools/core/phreak/PhreakRuleTerminalNode.java
+++
b/drools-core/src/main/java/org/drools/core/phreak/PhreakRuleTerminalNode.java
@@ -83,7 +83,7 @@ public class PhreakRuleTerminalNode {
for (RuleTerminalNodeLeftTuple leftTuple = (RuleTerminalNodeLeftTuple)
srcLeftTuples.getInsertFirst(); leftTuple != null; ) {
RuleTerminalNodeLeftTuple next = (RuleTerminalNodeLeftTuple)
leftTuple.getStagedNext();
- doLeftTupleInsert(rtnNode, executor, activationsManager,
ruleAgendaItem, leftTuple);
+ doLeftTupleInsert(reteEvaluator, rtnNode, executor,
activationsManager, ruleAgendaItem, leftTuple);
leftTuple.clearStaged();
leftTuple = next;
@@ -99,10 +99,12 @@ public class PhreakRuleTerminalNode {
return rule1.getName().equals(rule2.getName()) &&
rule1.getPackageName().equals(rule2.getPackageName()) &&
((RuleTerminalNode)rtn1).getConsequenceName().equals(((RuleTerminalNode)rtn2).getConsequenceName());
}
- public static void doLeftTupleInsert(TerminalNode rtnNode, RuleExecutor
executor,
- ActivationsManager
activationsManager, RuleAgendaItem ruleAgendaItem,
+ public static void doLeftTupleInsert(ReteEvaluator reteEvaluator,
+ TerminalNode rtnNode,
+ RuleExecutor executor,
+ ActivationsManager
activationsManager,
+ RuleAgendaItem ruleAgendaItem,
RuleTerminalNodeLeftTuple leftTuple) {
- ReteEvaluator reteEvaluator = activationsManager.getReteEvaluator();
if ( reteEvaluator.getRuleSessionConfiguration().isDirectFiring() ) {
executor.addActiveTuple(leftTuple);
return;
@@ -169,16 +171,18 @@ public class PhreakRuleTerminalNode {
for (RuleTerminalNodeLeftTuple leftTuple = (RuleTerminalNodeLeftTuple)
srcLeftTuples.getUpdateFirst(); leftTuple != null; ) {
RuleTerminalNodeLeftTuple next = (RuleTerminalNodeLeftTuple)
leftTuple.getStagedNext();
- doLeftTupleUpdate(rtnNode, executor, activationsManager,
leftTuple);
+ doLeftTupleUpdate(reteEvaluator, rtnNode, executor,
activationsManager, leftTuple);
leftTuple.clearStaged();
leftTuple = next;
}
}
- public static void doLeftTupleUpdate(TerminalNode rtnNode, RuleExecutor
executor,
- ActivationsManager
activationsManager, RuleTerminalNodeLeftTuple leftTuple) {
- ReteEvaluator reteEvaluator = activationsManager.getReteEvaluator();
+ public static void doLeftTupleUpdate(ReteEvaluator reteEvaluator,
+ TerminalNode rtnNode,
+ RuleExecutor executor,
+ ActivationsManager
activationsManager,
+ RuleTerminalNodeLeftTuple leftTuple) {
if ( reteEvaluator.getRuleSessionConfiguration().isDirectFiring() ) {
if (!leftTuple.isQueued() ) {
diff --git
a/drools-core/src/main/java/org/drools/core/phreak/PhreakTimerNode.java
b/drools-core/src/main/java/org/drools/core/phreak/PhreakTimerNode.java
index 3e0951a8b2..5b7c9b916c 100644
--- a/drools-core/src/main/java/org/drools/core/phreak/PhreakTimerNode.java
+++ b/drools-core/src/main/java/org/drools/core/phreak/PhreakTimerNode.java
@@ -418,15 +418,15 @@ public class PhreakTimerNode {
pmem.doLinkRule( );
if (needEvaluation && filter.accept(new
Rule[]{pmem.getRule()})) {
- evaluateAndFireRule( pmem, activationsManager );
+ evaluateAndFireRule( pmem, reteEvaluator,
activationsManager );
}
}
}
- private void evaluateAndFireRule(PathMemory pmem, ActivationsManager
activationsManager) {
+ private void evaluateAndFireRule(PathMemory pmem, ReteEvaluator
reteEvaluator, ActivationsManager activationsManager) {
RuleExecutor ruleExecutor =
pmem.getRuleAgendaItem().getRuleExecutor();
- ruleExecutor.evaluateNetworkIfDirty( activationsManager );
- ruleExecutor.fire( activationsManager );
+ ruleExecutor.evaluateNetworkIfDirty(reteEvaluator,
activationsManager);
+ ruleExecutor.fire( reteEvaluator, activationsManager );
}
}
diff --git a/drools-core/src/main/java/org/drools/core/phreak/RuleExecutor.java
b/drools-core/src/main/java/org/drools/core/phreak/RuleExecutor.java
index 26e3dea77a..431e966c07 100644
--- a/drools-core/src/main/java/org/drools/core/phreak/RuleExecutor.java
+++ b/drools-core/src/main/java/org/drools/core/phreak/RuleExecutor.java
@@ -77,14 +77,13 @@ public class RuleExecutor {
AgendaFilter filter,
int fireCount,
int fireLimit ) {
- evaluateNetworkIfDirty( );
+ evaluateNetworkIfDirty(reteEvaluator);
return fire(reteEvaluator, pmem.getActualActivationsManager( ),
filter, fireCount, fireLimit);
}
- public int evaluateNetworkAndFire( ActivationsManager activationsManager,
AgendaFilter filter, int fireCount, int fireLimit ) {
- evaluateNetworkIfDirty( activationsManager );
+ public int evaluateNetworkAndFire(ReteEvaluator reteEvaluator,
ActivationsManager activationsManager, AgendaFilter filter, int fireCount, int
fireLimit ) {
+ evaluateNetworkIfDirty(reteEvaluator, activationsManager );
- ReteEvaluator reteEvaluator = activationsManager.getReteEvaluator();
if ( reteEvaluator.getRuleSessionConfiguration().isDirectFiring() ) {
return doDirectFirings(activationsManager, filter, reteEvaluator);
}
@@ -108,15 +107,11 @@ public class RuleExecutor {
return directFirings;
}
- public void fire(ActivationsManager activationsManager) {
- fire(activationsManager.getReteEvaluator(), activationsManager, null,
0, Integer.MAX_VALUE);
+ public void fire(ReteEvaluator reteEvaluator, ActivationsManager
activationsManager) {
+ fire(reteEvaluator, activationsManager, null, 0, Integer.MAX_VALUE);
}
- public int fire(ActivationsManager activationsManager, AgendaFilter
filter, int fireCount, int fireLimit) {
- return fire(activationsManager.getReteEvaluator(), activationsManager,
filter, fireCount, fireLimit);
- }
-
- private int fire( ReteEvaluator reteEvaluator, ActivationsManager
activationsManager, AgendaFilter filter, int fireCount, int fireLimit) {
+ public int fire( ReteEvaluator reteEvaluator, ActivationsManager
activationsManager, AgendaFilter filter, int fireCount, int fireLimit) {
int localFireCount = 0;
if (!activeMatches.isEmpty()) {
@@ -175,7 +170,7 @@ public class RuleExecutor {
break;
}
if (!reteEvaluator.isSequential()) {
- evaluateNetworkIfDirty( activationsManager );
+ evaluateNetworkIfDirty(reteEvaluator,
activationsManager );
}
}
}
@@ -226,18 +221,19 @@ public class RuleExecutor {
}
}
- public void evaluateNetwork(ActivationsManager activationsManager) {
-
activationsManager.getReteEvaluator().getRuleNetworkEvaluator().evaluateNetwork(
activationsManager, this, pmem );
+ public void evaluateNetwork(ReteEvaluator reteEvaluator,
ActivationsManager activationsManager) {
+ reteEvaluator.getRuleNetworkEvaluator().evaluateNetwork(
activationsManager, this, pmem );
setDirty( false );
}
-
- public void evaluateNetworkIfDirty() {
- evaluateNetworkIfDirty(pmem.getActualActivationsManager( ));
+
+
+ public void evaluateNetworkIfDirty(ReteEvaluator reteEvaluator) {
+ evaluateNetworkIfDirty(reteEvaluator,
pmem.getActualActivationsManager( ));
}
-
- public void evaluateNetworkIfDirty(ActivationsManager activationsManager) {
+
+ public void evaluateNetworkIfDirty(ReteEvaluator reteEvaluator,
ActivationsManager activationsManager) {
if ( isDirty() ) {
- evaluateNetwork(activationsManager);
+ evaluateNetwork(reteEvaluator, activationsManager);
}
}
diff --git
a/drools-core/src/main/java/org/drools/core/reteoo/AlphaTerminalNode.java
b/drools-core/src/main/java/org/drools/core/reteoo/AlphaTerminalNode.java
index a0377dd594..ac69addafc 100644
--- a/drools-core/src/main/java/org/drools/core/reteoo/AlphaTerminalNode.java
+++ b/drools-core/src/main/java/org/drools/core/reteoo/AlphaTerminalNode.java
@@ -46,13 +46,13 @@ public class AlphaTerminalNode extends LeftInputAdapterNode
{
NetworkNode[] sinks = getSinks();
for (int i = 0; i < sinks.length; i++) {
TerminalNode rtn = ( TerminalNode ) sinks[i];
- RuleAgendaItem agendaItem = getRuleAgendaItem( reteEvaluator,
activationsManager, rtn, true );
+ RuleAgendaItem agendaItem = getRuleAgendaItem( reteEvaluator, rtn,
true );
RuleTerminalNodeLeftTuple leftTuple = (RuleTerminalNodeLeftTuple)
TupleFactory.createLeftTuple(rtn, factHandle, true );
leftTuple.setPropagationContext( propagationContext );
autoFocusIfNeeded(rtn, agendaItem, activationsManager);
- PhreakRuleTerminalNode.doLeftTupleInsert( rtn,
agendaItem.getRuleExecutor(), activationsManager, agendaItem, leftTuple );
+ PhreakRuleTerminalNode.doLeftTupleInsert( reteEvaluator, rtn,
agendaItem.getRuleExecutor(), activationsManager, agendaItem, leftTuple );
}
}
@@ -66,7 +66,7 @@ public class AlphaTerminalNode extends LeftInputAdapterNode {
ObjectTypeNodeId otnId = rtn.getInputOtnId();
TupleImpl leftTuple =
processDeletesFromModify(modifyPreviousTuples, context, reteEvaluator, otnId);
- RuleAgendaItem agendaItem = getRuleAgendaItem( reteEvaluator,
activationsManager, rtn, true );
+ RuleAgendaItem agendaItem = getRuleAgendaItem( reteEvaluator, rtn,
true );
RuleExecutor executor = agendaItem.getRuleExecutor();
if ( leftTuple != null && leftTuple.getInputOtnId().equals(otnId)
) {
@@ -74,7 +74,7 @@ public class AlphaTerminalNode extends LeftInputAdapterNode {
leftTuple.reAdd();
if ( context.getModificationMask().intersects(
rtn.getInferredMask()) ) {
leftTuple.setPropagationContext( context );
- PhreakRuleTerminalNode.doLeftTupleUpdate( rtn, executor,
activationsManager, (RuleTerminalNodeLeftTuple) leftTuple );
+ PhreakRuleTerminalNode.doLeftTupleUpdate( reteEvaluator,
rtn, executor, activationsManager, (RuleTerminalNodeLeftTuple) leftTuple );
if (leftTuple.isFullMatch()) {
((InternalMatch) leftTuple).setActive(true);
}
@@ -86,7 +86,7 @@ public class AlphaTerminalNode extends LeftInputAdapterNode {
autoFocusIfNeeded(rtn, agendaItem, activationsManager);
- PhreakRuleTerminalNode.doLeftTupleInsert( rtn, executor,
activationsManager, agendaItem, (RuleTerminalNodeLeftTuple) leftTuple );
+ PhreakRuleTerminalNode.doLeftTupleInsert( reteEvaluator,
rtn, executor, activationsManager, agendaItem, (RuleTerminalNodeLeftTuple)
leftTuple );
}
}
}
@@ -108,10 +108,10 @@ public class AlphaTerminalNode extends
LeftInputAdapterNode {
if (((InternalMatch)leftTuple).isMatched()) {
leftTuple.setStagedType(Tuple.DELETE);
}
- PhreakRuleTerminalNode.doLeftDelete( activationsManager,
getRuleAgendaItem( reteEvaluator, activationsManager, rtn, false
).getRuleExecutor(), (RuleTerminalNodeLeftTuple) leftTuple );
+ PhreakRuleTerminalNode.doLeftDelete( activationsManager,
getRuleAgendaItem( reteEvaluator, rtn, false ).getRuleExecutor(),
(RuleTerminalNodeLeftTuple) leftTuple );
}
- public static RuleAgendaItem getRuleAgendaItem(ReteEvaluator
reteEvaluator, ActivationsManager activationsManager, TerminalNode rtn, boolean
linkPmem ) {
+ public static RuleAgendaItem getRuleAgendaItem(ReteEvaluator
reteEvaluator, TerminalNode rtn, boolean linkPmem ) {
PathMemory pathMemory = reteEvaluator.getNodeMemory( rtn );
if (linkPmem) {
pathMemory.doLinkRule( );
diff --git
a/drools-kiesession/src/main/java/org/drools/kiesession/agenda/CompositeDefaultAgenda.java
b/drools-kiesession/src/main/java/org/drools/kiesession/agenda/CompositeDefaultAgenda.java
index f8a04df8fa..12d6d25977 100644
---
a/drools-kiesession/src/main/java/org/drools/kiesession/agenda/CompositeDefaultAgenda.java
+++
b/drools-kiesession/src/main/java/org/drools/kiesession/agenda/CompositeDefaultAgenda.java
@@ -105,11 +105,6 @@ public class CompositeDefaultAgenda implements
Externalizable, InternalAgenda {
return agendas[0].getWorkingMemory();
}
- @Override
- public ReteEvaluator getReteEvaluator() {
- return agendas[0].getWorkingMemory();
- }
-
@Override
public AgendaGroupsManager getAgendaGroupsManager() {
return agendas[0].getAgendaGroupsManager();
diff --git
a/drools-kiesession/src/main/java/org/drools/kiesession/agenda/DefaultAgenda.java
b/drools-kiesession/src/main/java/org/drools/kiesession/agenda/DefaultAgenda.java
index c82eb1080f..f65b418eb4 100644
---
a/drools-kiesession/src/main/java/org/drools/kiesession/agenda/DefaultAgenda.java
+++
b/drools-kiesession/src/main/java/org/drools/kiesession/agenda/DefaultAgenda.java
@@ -162,8 +162,8 @@ public class DefaultAgenda implements InternalAgenda {
// for fully parallel execution the parallelism is implemented at the
level of CompositeDefaultAgenda
this.groupEvaluator = ruleBaseConf.isParallelEvaluation() &&
!ruleBaseConf.isParallelExecution() ?
- new ParallelGroupEvaluator( kieBase, this ) :
- new SequentialGroupEvaluator( kieBase, this );
+ new ParallelGroupEvaluator( kieBase, workingMemory, this ) :
+ new SequentialGroupEvaluator( kieBase, workingMemory, this );
this.propagationList = createPropagationList();
}
@@ -284,7 +284,7 @@ public class DefaultAgenda implements InternalAgenda {
for ( RuleAgendaItem item :
((InternalAgendaGroup)systemRuleFlowGroup).getActivations() ) {
// The lazy RuleAgendaItem must be fully evaluated, to see if
there is a rule match
RuleExecutor ruleExecutor = item.getRuleExecutor();
- ruleExecutor.evaluateNetwork(this);
+ ruleExecutor.evaluateNetwork(workingMemory, this);
TupleList list = ruleExecutor.getActiveMatches();
for (RuleTerminalNodeLeftTuple lt = (RuleTerminalNodeLeftTuple)
list.getFirst(); lt != null; lt = (RuleTerminalNodeLeftTuple) lt.getNext()) {
if ( ruleName.equals( lt.getRule().getName() ) && (
lt.checkProcessInstance( workingMemory, processInstanceId ) )) {
@@ -340,11 +340,6 @@ public class DefaultAgenda implements InternalAgenda {
return getAgendaGroupsManager().setFocus( agendaGroup );
}
- @Override
- public ReteEvaluator getReteEvaluator() {
- return this.workingMemory;
- }
-
@Override
public AgendaGroupsManager getAgendaGroupsManager() {
return agendaGroupsManager;
@@ -501,7 +496,7 @@ public class DefaultAgenda implements InternalAgenda {
RuleAgendaItem item = eager.removeFirst();
if (item.isRuleInUse()) { // this rule could have been removed by
an incremental compilation
evaluateQueriesForRule( item );
- item.getRuleExecutor().evaluateNetwork( this );
+ item.getRuleExecutor().evaluateNetwork(workingMemory, this);
}
}
}
@@ -512,7 +507,7 @@ public class DefaultAgenda implements InternalAgenda {
for (QueryImpl query : rule.getDependingQueries()) {
RuleAgendaItem queryAgendaItem = queries.remove(query);
if (queryAgendaItem != null) {
- queryAgendaItem.getRuleExecutor().evaluateNetwork(this);
+
queryAgendaItem.getRuleExecutor().evaluateNetwork(workingMemory, this);
}
}
}
diff --git
a/drools-serialization-protobuf/src/main/java/org/drools/serialization/protobuf/ProtobufInputMarshaller.java
b/drools-serialization-protobuf/src/main/java/org/drools/serialization/protobuf/ProtobufInputMarshaller.java
index 01cf029657..00bda04200 100644
---
a/drools-serialization-protobuf/src/main/java/org/drools/serialization/protobuf/ProtobufInputMarshaller.java
+++
b/drools-serialization-protobuf/src/main/java/org/drools/serialization/protobuf/ProtobufInputMarshaller.java
@@ -755,7 +755,7 @@ public class ProtobufInputMarshaller {
public void evaluateRNEAs(final InternalWorkingMemory wm) {
for ( RuleAgendaItem rai : rneaToFire ) {
- rai.getRuleExecutor().evaluateNetworkIfDirty( );
+ rai.getRuleExecutor().evaluateNetworkIfDirty(wm);
}
}
@@ -769,7 +769,7 @@ public class ProtobufInputMarshaller {
public void fireRNEAs(final InternalWorkingMemory wm) {
for ( RuleAgendaItem rai : rneaToFire ) {
RuleExecutor ruleExecutor = rai.getRuleExecutor();
- ruleExecutor.evaluateNetworkIfDirty( );
+ ruleExecutor.evaluateNetworkIfDirty(wm);
ruleExecutor.removeRuleAgendaItemWhenEmpty( );
}
rneaToFire.clear();
diff --git
a/drools-serialization-protobuf/src/main/java/org/drools/serialization/protobuf/ProtobufOutputMarshaller.java
b/drools-serialization-protobuf/src/main/java/org/drools/serialization/protobuf/ProtobufOutputMarshaller.java
index 5f961bd548..3b57ec5a25 100644
---
a/drools-serialization-protobuf/src/main/java/org/drools/serialization/protobuf/ProtobufOutputMarshaller.java
+++
b/drools-serialization-protobuf/src/main/java/org/drools/serialization/protobuf/ProtobufOutputMarshaller.java
@@ -239,7 +239,7 @@ public class ProtobufOutputMarshaller {
// this must clone as re-evaluation will under underlying
Collection
for ( RuleAgendaItem activation : new
ArrayList<>(wm.getAgenda().getAgendaGroupsManager().getActivations())) {
// evaluate it
- activation.getRuleExecutor().evaluateNetworkIfDirty( );
+ activation.getRuleExecutor().evaluateNetworkIfDirty(wm);
activation.getRuleExecutor().removeRuleAgendaItemWhenEmpty( );
}
dirty = false;
diff --git
a/drools-test-coverage/test-compiler-integration/src/test/java/org/drools/mvel/integrationtests/ExecutionFlowControlTest.java
b/drools-test-coverage/test-compiler-integration/src/test/java/org/drools/mvel/integrationtests/ExecutionFlowControlTest.java
index 25b578f4a5..28de7ef493 100644
---
a/drools-test-coverage/test-compiler-integration/src/test/java/org/drools/mvel/integrationtests/ExecutionFlowControlTest.java
+++
b/drools-test-coverage/test-compiler-integration/src/test/java/org/drools/mvel/integrationtests/ExecutionFlowControlTest.java
@@ -483,26 +483,26 @@ public class ExecutionFlowControlTest {
agenda.getAgendaGroupsManager().setFocus( group1 );
assertThat(group1.size()).isEqualTo(1);
RuleAgendaItem ruleItem1 = group1.getActivations().iterator().next();
- ruleItem1.getRuleExecutor().evaluateNetwork(wm.getAgenda());
+ ruleItem1.getRuleExecutor().evaluateNetwork(wm, wm.getAgenda());
assertThat(ruleItem1.getRuleExecutor().getActiveMatches().size()).isEqualTo(3);
- ruleItem1.getRuleExecutor().fire(agenda);
+ ruleItem1.getRuleExecutor().fire(wm, agenda);
assertThat(group1.size()).isEqualTo(1);
assertThat(ruleItem1.getRuleExecutor().getActiveMatches().size()).isEqualTo(2);
ksession.update( brieHandle, brie );
assertThat(group1.size()).isEqualTo(1);
- ruleItem1.getRuleExecutor().evaluateNetwork(wm.getAgenda());
+ ruleItem1.getRuleExecutor().evaluateNetwork(wm, wm.getAgenda());
assertThat(ruleItem1.getRuleExecutor().getActiveMatches().size()).isEqualTo(2);
InternalAgendaGroup group2 =
agenda.getAgendaGroupsManager().getAgendaGroup( "group2" );
agenda.getAgendaGroupsManager().setFocus( group2);
assertThat(group2.size()).isEqualTo(1);
RuleAgendaItem ruleItem2 = group2.getActivations().iterator().next();
- ruleItem2.getRuleExecutor().evaluateNetwork(wm.getAgenda());
+ ruleItem2.getRuleExecutor().evaluateNetwork(wm, wm.getAgenda());
assertThat(ruleItem2.getRuleExecutor().getActiveMatches().size()).isEqualTo(3);
- ruleItem2.getRuleExecutor().fire(agenda);
+ ruleItem2.getRuleExecutor().fire(wm, agenda);
assertThat(group2.size()).isEqualTo(1);
assertThat(ruleItem2.getRuleExecutor().getActiveMatches().size()).isEqualTo(2);
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]