Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[DROOLS-7489] Use standard getOption and setOption in RuleSessionConfiguration #5360

Closed
wants to merge 7 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@
import org.kie.api.runtime.conf.QueryListenerOption;
import org.kie.api.runtime.conf.SingleValueKieSessionOption;
import org.kie.api.runtime.conf.ThreadSafeOption;
import org.kie.api.runtime.conf.TimedRuleExecutionFilter;
import org.kie.api.runtime.conf.TimedRuleExecutionOption;
import org.kie.internal.conf.CompositeConfiguration;
import org.kie.internal.conf.InternalPropertiesConfiguration;
Expand All @@ -47,27 +46,28 @@ public class RuleSessionConfiguration extends BaseConfiguration<KieSessionOption

private static final long serialVersionUID = 510l;

private boolean directFiring;

private boolean threadSafe;

private boolean accumulateNullPropagation;

private ForceEagerActivationFilter forceEagerActivationFilter;
private TimedRuleExecutionFilter timedRuleExecutionFilter;

private BeliefSystemType beliefSystemType;

private QueryListenerOption queryListener;
private AccumulateNullPropagationOption accumulateNullPropagation;

private DirectFiringOption directFiringOption;

private QueryListenerOption queryListenerOption;

private ThreadSafeOption threadSafeOption;

private TimedRuleExecutionOption timedRuleExecutionOption;

public void writeExternal(ObjectOutput out) throws IOException {
super.writeExternal(out);
out.writeObject( queryListener );
out.writeObject( queryListenerOption );
}

public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
super.readExternal(in);
queryListener = (QueryListenerOption) in.readObject();
queryListenerOption = (QueryListenerOption) in.readObject();
}

public final boolean hasForceEagerActivationFilter() {
Expand All @@ -84,49 +84,46 @@ public RuleSessionConfiguration(CompositeConfiguration<KieSessionOption, SingleV
}

private void init() {
setDirectFiring(Boolean.parseBoolean(getPropertyValue(DirectFiringOption.PROPERTY_NAME, "false")));
setAccumulateNullPropagation(AccumulateNullPropagationOption.resolve(getPropertyValue(AccumulateNullPropagationOption.PROPERTY_NAME, "false")));

setThreadSafe(Boolean.parseBoolean(getPropertyValue(ThreadSafeOption.PROPERTY_NAME, "true")));
setBeliefSystemType(BeliefSystemType.resolveBeliefSystemType( getPropertyValue( BeliefSystemTypeOption.PROPERTY_NAME, BeliefSystemType.SIMPLE.getId() ) ) );

setAccumulateNullPropagation(Boolean.parseBoolean(getPropertyValue(AccumulateNullPropagationOption.PROPERTY_NAME, "false")));
setDirectFiringOption(DirectFiringOption.resolve(getPropertyValue(DirectFiringOption.PROPERTY_NAME, "false")));

setForceEagerActivationFilter(ForceEagerActivationOption.resolve( getPropertyValue( ForceEagerActivationOption.PROPERTY_NAME, "false" ) ).getFilter());

setTimedRuleExecutionFilter(TimedRuleExecutionOption.resolve( getPropertyValue( TimedRuleExecutionOption.PROPERTY_NAME, "false" ) ).getFilter());
setQueryListenerOption(QueryListenerOption.determineQueryListenerClassOption( getPropertyValue( QueryListenerOption.PROPERTY_NAME, QueryListenerOption.STANDARD.getAsString() ) ) );

setBeliefSystemType( BeliefSystemType.resolveBeliefSystemType( getPropertyValue( BeliefSystemTypeOption.PROPERTY_NAME, BeliefSystemType.SIMPLE.getId() ) ) );
setThreadSafeOption(ThreadSafeOption.resolve(getPropertyValue(ThreadSafeOption.PROPERTY_NAME, "true")));

setQueryListenerOption( QueryListenerOption.determineQueryListenerClassOption( getPropertyValue( QueryListenerOption.PROPERTY_NAME, QueryListenerOption.STANDARD.getAsString() ) ) );
setTimedRuleExecutionFilter(TimedRuleExecutionOption.resolve( getPropertyValue( TimedRuleExecutionOption.PROPERTY_NAME, "false" ) ));
}

public void setDirectFiring(boolean directFiring) {
private void setDirectFiringOption(DirectFiringOption directFiringOption) {
checkCanChange(); // throws an exception if a change isn't possible;
this.directFiring = directFiring;
this.directFiringOption = directFiringOption;
}

public boolean isDirectFiring() {
return this.directFiring;
private boolean isDirectFiring() {
return directFiringOption.isDirectFiring();
}

public void setThreadSafe(boolean threadSafe) {
private void setAccumulateNullPropagation(AccumulateNullPropagationOption accumulateNullPropagation) {
checkCanChange(); // throws an exception if a change isn't possible;
this.threadSafe = threadSafe;
this.accumulateNullPropagation = accumulateNullPropagation;
}

public boolean isThreadSafe() {
return this.threadSafe;
private void setQueryListenerOption( QueryListenerOption queryListener ) {
checkCanChange();
this.queryListenerOption = queryListener;
}

public void setAccumulateNullPropagation(boolean accumulateNullPropagation) {
private void setTimedRuleExecutionFilter(TimedRuleExecutionOption timedRuleExecutionOption) {
checkCanChange(); // throws an exception if a change isn't possible;
this.accumulateNullPropagation = accumulateNullPropagation;
this.timedRuleExecutionOption = timedRuleExecutionOption;
}

public boolean isAccumulateNullPropagation() {
return this.accumulateNullPropagation;
}

public void setForceEagerActivationFilter(ForceEagerActivationFilter forceEagerActivationFilter) {

private void setForceEagerActivationFilter(ForceEagerActivationFilter forceEagerActivationFilter) {
checkCanChange(); // throws an exception if a change isn't possible;
this.forceEagerActivationFilter = forceEagerActivationFilter;
}
Expand All @@ -135,15 +132,6 @@ public ForceEagerActivationFilter getForceEagerActivationFilter() {
return this.forceEagerActivationFilter;
}

public void setTimedRuleExecutionFilter(TimedRuleExecutionFilter timedRuleExecutionFilter) {
checkCanChange(); // throws an exception if a change isn't possible;
this.timedRuleExecutionFilter = timedRuleExecutionFilter;
}

public TimedRuleExecutionFilter getTimedRuleExecutionFilter() {
return this.timedRuleExecutionFilter;
}

public BeliefSystemType getBeliefSystemType() {
return this.beliefSystemType;
}
Expand All @@ -153,68 +141,68 @@ public void setBeliefSystemType(BeliefSystemType beliefSystemType) {
this.beliefSystemType = beliefSystemType;
}

public QueryListenerOption getQueryListenerOption() {
return this.queryListener;
}

public void setQueryListenerOption( QueryListenerOption queryListener ) {
checkCanChange();
this.queryListener = queryListener;
}


public final <T extends KieSessionOption> void setOption(T option) {
switch (option.propertyName()) {
case DirectFiringOption.PROPERTY_NAME: {
setDirectFiring(((DirectFiringOption) option).isDirectFiring());
break;
}
case ThreadSafeOption.PROPERTY_NAME: {
setThreadSafe(((ThreadSafeOption) option).isThreadSafe());
case AccumulateNullPropagationOption.PROPERTY_NAME: {
setAccumulateNullPropagation(((AccumulateNullPropagationOption) option));
break;
}
case BeliefSystemTypeOption.PROPERTY_NAME: {
setBeliefSystemType(((BeliefSystemType.resolveBeliefSystemType(((BeliefSystemTypeOption) option).getBeliefSystemType()))));
break;
}
case AccumulateNullPropagationOption.PROPERTY_NAME: {
setAccumulateNullPropagation(((AccumulateNullPropagationOption) option).isAccumulateNullPropagation());
case DirectFiringOption.PROPERTY_NAME: {
setDirectFiringOption(((DirectFiringOption) option));
break;
}
case ForceEagerActivationOption.PROPERTY_NAME: {
setForceEagerActivationFilter(((ForceEagerActivationOption) option).getFilter());
break;
}
case TimedRuleExecutionOption.PROPERTY_NAME: {
setTimedRuleExecutionFilter(((TimedRuleExecutionOption) option).getFilter());
break;
}
case QueryListenerOption.PROPERTY_NAME: {
setQueryListenerOption((QueryListenerOption) option);
break;
}
case BeliefSystemTypeOption.PROPERTY_NAME: {
setBeliefSystemType(((BeliefSystemType.resolveBeliefSystemType(((BeliefSystemTypeOption) option).getBeliefSystemType()))));
case ThreadSafeOption.PROPERTY_NAME: {
setThreadSafeOption(((ThreadSafeOption) option));
break;
}
case TimedRuleExecutionOption.PROPERTY_NAME: {
setTimedRuleExecutionFilter(((TimedRuleExecutionOption) option));
break;
}
default:
compConfig.setOption(option);
}
}

@SuppressWarnings("unchecked")
private void setThreadSafeOption(ThreadSafeOption threadSafeOption) {
checkCanChange();
this.threadSafeOption = threadSafeOption;

}

@SuppressWarnings("unchecked")
public final <T extends SingleValueKieSessionOption> T getOption(OptionKey<T> option) {
switch (option.name()) {
case DirectFiringOption.PROPERTY_NAME: {
return (T) (isDirectFiring() ? DirectFiringOption.YES : DirectFiringOption.NO);
}
case ThreadSafeOption.PROPERTY_NAME: {
return (T) (isThreadSafe() ? ThreadSafeOption.YES : ThreadSafeOption.NO);
case AccumulateNullPropagationOption.PROPERTY_NAME: {
return (T) accumulateNullPropagation;
}
case BeliefSystemTypeOption.PROPERTY_NAME: {
return (T) BeliefSystemTypeOption.get( this.getBeliefSystemType().getId() );
}
case AccumulateNullPropagationOption.PROPERTY_NAME: {
return (T) (isAccumulateNullPropagation() ? AccumulateNullPropagationOption.YES : AccumulateNullPropagationOption.NO);
case DirectFiringOption.PROPERTY_NAME: {
return (T) directFiringOption;
}
case QueryListenerOption.PROPERTY_NAME: {
return (T) getQueryListenerOption();
return (T) queryListenerOption;
}
case BeliefSystemTypeOption.PROPERTY_NAME: {
return (T) BeliefSystemTypeOption.get( this.getBeliefSystemType().getId() );
case ThreadSafeOption.PROPERTY_NAME: {
return (T) threadSafeOption;
}
case TimedRuleExecutionOption.PROPERTY_NAME: {
return (T) timedRuleExecutionOption;
}
default:
return compConfig.getOption(option);
Expand All @@ -234,23 +222,23 @@ public <C extends MultiValueKieSessionOption> Set<String> getOptionSubKeys(Optio
public boolean setInternalProperty(String name, String value) {
switch(name) {
case DirectFiringOption.PROPERTY_NAME: {
setDirectFiring(!StringUtils.isEmpty(value) && Boolean.parseBoolean(value));
setDirectFiringOption(DirectFiringOption.resolve(value));
break;
}
case ThreadSafeOption.PROPERTY_NAME: {
setThreadSafe(StringUtils.isEmpty(value) || Boolean.parseBoolean(value));
setThreadSafeOption(ThreadSafeOption.resolve(value));
break;
}
case AccumulateNullPropagationOption.PROPERTY_NAME: {
setAccumulateNullPropagation(!StringUtils.isEmpty(value) && Boolean.parseBoolean(value));
setAccumulateNullPropagation(AccumulateNullPropagationOption.resolve(value));
break;
}
case ForceEagerActivationOption.PROPERTY_NAME: {
setForceEagerActivationFilter(ForceEagerActivationOption.resolve(StringUtils.isEmpty(value) ? "false" : value).getFilter());
break;
}
case TimedRuleExecutionOption.PROPERTY_NAME: {
setTimedRuleExecutionFilter(TimedRuleExecutionOption.resolve(StringUtils.isEmpty(value) ? "false" : value).getFilter());
setTimedRuleExecutionFilter(TimedRuleExecutionOption.resolve(StringUtils.isEmpty(value) ? "false" : value));
break;
}
case QueryListenerOption.PROPERTY_NAME: {
Expand All @@ -273,13 +261,13 @@ public boolean setInternalProperty(String name, String value) {
public String getInternalProperty(String name) {
switch(name) {
case DirectFiringOption.PROPERTY_NAME: {
return Boolean.toString(isDirectFiring());
return Boolean.toString(directFiringOption.isDirectFiring());
} case ThreadSafeOption.PROPERTY_NAME: {
return Boolean.toString(isThreadSafe());
return Boolean.toString(threadSafeOption.isThreadSafe());
} case AccumulateNullPropagationOption.PROPERTY_NAME: {
return Boolean.toString(isAccumulateNullPropagation());
return Boolean.toString(accumulateNullPropagation.isAccumulateNullPropagation());
} case QueryListenerOption.PROPERTY_NAME: {
return getQueryListenerOption().getAsString();
return this.queryListenerOption.getAsString();
} case BeliefSystemTypeOption.PROPERTY_NAME: {
return getBeliefSystemType().getId();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
import org.drools.core.util.ArrayQueue;
import org.drools.core.util.Queue;
import org.drools.core.util.QueueFactory;
import org.kie.api.runtime.conf.DirectFiringOption;

/**
* <code>AgendaGroup</code> implementation that uses a <code>PriorityQueue</code> to prioritise the evaluation of added
Expand Down Expand Up @@ -89,7 +90,7 @@ public String getName() {
public void setReteEvaluator(ReteEvaluator reteEvaluator) {
this.reteEvaluator = reteEvaluator;
// workingMemory can be null during deserialization
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If the reteEvaluator can never be null, and that's why you removed the null check below, than you should also delete this comment.

if (reteEvaluator != null && reteEvaluator.getRuleSessionConfiguration().isDirectFiring()) {
if ( reteEvaluator.getRuleSessionConfiguration().getOption(DirectFiringOption.KEY).isDirectFiring()) {
this.priorityQueue = new ArrayQueue<>();
} else {
this.priorityQueue = QueueFactory.createQueue(RuleAgendaConflictResolver.INSTANCE);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,4 @@ default FactHandleClassStore getStoreForClass(Class<?> clazz) {

void cancelActivation(InternalMatch internalMatch, boolean declarativeAgenda);

default boolean isThreadSafe() {
return getRuleSessionConfiguration().isThreadSafe();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -94,9 +94,7 @@ default Collection<TimerJobInstance> getTimerJobInstances(long id) {

long getNextPropagationIdCounter();

default boolean isThreadSafe() {
return true;
}
boolean isThreadSafe();

default FactHandleClassStore getStoreForClass(Class<?> clazz) {
return getDefaultEntryPoint().getObjectStore().getStoreForClass(clazz);
Expand Down Expand Up @@ -137,6 +135,8 @@ default KnowledgeHelper createKnowledgeHelper() {
int fireAllRules(int max);
int fireAllRules(AgendaFilter agendaFilter);
int fireAllRules(AgendaFilter agendaFilter, int max);



default void setWorkingMemoryActionListener(Consumer<PropagationEntry> listener) {
throw new UnsupportedOperationException();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
import org.drools.core.reteoo.Tuple;
import org.drools.core.util.AbstractHashTable;
import org.drools.core.util.FastIterator;
import org.kie.api.runtime.conf.AccumulateNullPropagationOption;
import org.kie.api.runtime.rule.FactHandle;

import static org.drools.core.phreak.RuleNetworkEvaluator.normalizeStagedTuples;
Expand Down Expand Up @@ -633,7 +634,7 @@ protected void evaluateResultConstraints(final AccumulateNode accNode,

Object result = accumulate.getResult(memory.workingMemoryContext, accctx, leftTuple, reteEvaluator);
propagateResult( accNode, sink, leftTuple, context, reteEvaluator, memory, trgLeftTuples, stagedLeftTuples,
null, result, (AccumulateContextEntry) accctx, propagationContext, reteEvaluator.getRuleSessionConfiguration().isAccumulateNullPropagation());
null, result, (AccumulateContextEntry) accctx, propagationContext, reteEvaluator.getRuleSessionConfiguration().getOption(AccumulateNullPropagationOption.KEY).isAccumulateNullPropagation());
}

protected final void propagateResult(AccumulateNode accNode, LeftTupleSink sink, LeftTuple leftTuple, PropagationContext context,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
import org.drools.core.rule.consequence.InternalMatch;
import org.kie.api.definition.rule.Rule;
import org.kie.api.event.rule.MatchCancelledCause;
import org.kie.api.runtime.conf.DirectFiringOption;

/**
* Created with IntelliJ IDEA.
Expand Down Expand Up @@ -93,7 +94,7 @@ public static void doLeftTupleInsert(TerminalNode rtnNode, RuleExecutor executor
ActivationsManager activationsManager, RuleAgendaItem ruleAgendaItem,
LeftTuple leftTuple) {
ReteEvaluator reteEvaluator = activationsManager.getReteEvaluator();
if ( reteEvaluator.getRuleSessionConfiguration().isDirectFiring() ) {
if ( reteEvaluator.getRuleSessionConfiguration().getOption(DirectFiringOption.KEY).isDirectFiring()) {
executor.addLeftTuple(leftTuple);
return;
}
Expand Down Expand Up @@ -172,7 +173,7 @@ public static void doLeftTupleUpdate(TerminalNode rtnNode, RuleExecutor executor
RuleTerminalNodeLeftTuple rtnLeftTuple = (RuleTerminalNodeLeftTuple) leftTuple;
ReteEvaluator reteEvaluator = activationsManager.getReteEvaluator();

if ( reteEvaluator.getRuleSessionConfiguration().isDirectFiring() ) {
if ( reteEvaluator.getRuleSessionConfiguration().getOption(DirectFiringOption.KEY).isDirectFiring()) {
if (!rtnLeftTuple.isQueued() ) {
executor.addLeftTuple( leftTuple );
reteEvaluator.getRuleEventSupport().onUpdateMatch( rtnLeftTuple );
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@
import org.kie.api.definition.rule.Rule;
import org.kie.api.runtime.Calendars;
import org.kie.api.runtime.conf.TimedRuleExecutionFilter;
import org.kie.api.runtime.conf.TimedRuleExecutionOption;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

Expand Down Expand Up @@ -376,7 +377,7 @@ private TimerAction( TimerNodeJobContext timerJobCtx ) {

@Override
public boolean requiresImmediateFlushing() {
return timerJobCtx.getReteEvaluator().getRuleSessionConfiguration().getTimedRuleExecutionFilter() != null;
return timerJobCtx.getReteEvaluator().getRuleSessionConfiguration().getOption(TimedRuleExecutionOption.KEY).getFilter() != null;
}

@Override
Expand Down Expand Up @@ -404,7 +405,7 @@ public void execute( final ReteEvaluator reteEvaluator, boolean needEvaluation )

timerJobCtx.getTimerNodeMemory().setNodeDirtyWithoutNotify();

TimedRuleExecutionFilter filter = reteEvaluator.getRuleSessionConfiguration().getTimedRuleExecutionFilter();
TimedRuleExecutionFilter filter = reteEvaluator.getRuleSessionConfiguration().getOption(TimedRuleExecutionOption.KEY).getFilter();
needEvaluation &= filter != null;

for (final PathMemory pmem : timerJobCtx.getPathMemories()) {
Expand Down
Loading
Loading