I have a Rule implementation as below which works as expected, here
Vehicles() and RuleConstant are facts.

/rule "Rule|1"
no-loop true
when
        $CONSTANT : RuleConstant();
        $vehicles : Vehicles();
        $vehicle:Vehicle(modelYear > 2000, type = $CONSTANT.SEDAN) from
$vehicles.Vehicle;
then
        $vehicle.setValue(100);
        update($vehicles);
end     /

But am planning to abstract the rules in the below fashion so that we can
reuse the LHS conditions which doesn't work and throws the below said Null
Pointer Exception

*BaseRule.drl*

/package com.xyz.base

rule "Base|1"
no-loop true
enabled false
when
        $CONSTANT : RuleConstant();
        $vehicles : Vehicles();
then

end     /

*CustomRule.drl*

/package com.xyz.custom

rule "Custom|1" extends "Base|1"
no-loop true
enabled true
when
    $vehicle:Vehicle(modelYear > 2000, type = $CONSTANT.SEDAN) from
$vehicles.Vehicle;
then
        $vehicle.setValue(100);
        update($vehicles);
end

rule "Custom|2" extends "Base|1"
no-loop true
enabled true
when
    $vehicle:Vehicle(modelYear > 2000, type = $CONSTANT.COUPE) from
$vehicles.Vehicle;
then
        $vehicle.setValue(100);
        update($vehicles);
end/

*Exception:*

Caused by: [Error: drools.update($vehicles): null]
[Line: 1, Column: 1]
        at
org.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.compileGetChain(ReflectiveAccessorOptimizer.java:416)
        at
org.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.optimizeAccessor(ReflectiveAccessorOptimizer.java:143)
        at org.mvel2.ast.ASTNode.optimize(ASTNode.java:159)
        at org.mvel2.ast.ASTNode.getReducedValueAccelerated(ASTNode.java:115)
        at org.mvel2.MVELRuntime.execute(MVELRuntime.java:85)
        at
org.mvel2.compiler.CompiledExpression.getValue(CompiledExpression.java:123)
        at
org.mvel2.compiler.CompiledExpression.getValue(CompiledExpression.java:116)
        at org.mvel2.MVEL.executeExpression(MVEL.java:930)
        at 
org.drools.base.mvel.MVELConsequence.evaluate(MVELConsequence.java:101)
        at 
org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:1273)
        ... 33 more
Caused by: java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at
org.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.getMethod(ReflectiveAccessorOptimizer.java:1105)
        at
org.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.getMethod(ReflectiveAccessorOptimizer.java:987)
        at
org.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.compileGetChain(ReflectiveAccessorOptimizer.java:377)
        ... 42 more
Caused by: java.lang.NullPointerException
        at 
org.drools.common.DefaultAgenda.createActivation(DefaultAgenda.java:569)
        at
org.drools.reteoo.RuleTerminalNode.modifyLeftTuple(RuleTerminalNode.java:297)
        at
org.drools.reteoo.SingleLeftTupleSinkAdapter.propagateModifyChildLeftTuple(SingleLeftTupleSinkAdapter.java:246)
        at org.drools.reteoo.JoinNode.modifyLeftTuple(JoinNode.java:363)
        at
org.drools.reteoo.SingleLeftTupleSinkAdapter.propagateModifyChildLeftTuple(SingleLeftTupleSinkAdapter.java:272)
        at
org.drools.reteoo.EvalConditionNode.modifyLeftTuple(EvalConditionNode.java:213)
        at
org.drools.reteoo.SingleLeftTupleSinkAdapter.propagateModifyChildLeftTuple(SingleLeftTupleSinkAdapter.java:259)
        at
org.drools.reteoo.FromNode.checkConstraintsAndPropagate(FromNode.java:337)
        at org.drools.reteoo.FromNode.modifyLeftTuple(FromNode.java:281)
        at
org.drools.reteoo.CompositeLeftTupleSinkAdapter.propagateModifyChildLeftTuple(CompositeLeftTupleSinkAdapter.java:316)
        at org.drools.reteoo.JoinNode.modifyRightTuple(JoinNode.java:273)
        at org.drools.reteoo.BetaNode.modifyObject(BetaNode.java:531)
        at org.drools.reteoo.JoinNode.modifyObject(JoinNode.java:446)
        at
org.drools.reteoo.CompositeObjectSinkAdapter.doPropagateModifyObject(CompositeObjectSinkAdapter.java:507)
        at
org.drools.reteoo.CompositeObjectSinkAdapter.propagateModifyObject(CompositeObjectSinkAdapter.java:432)
        at 
org.drools.reteoo.ObjectTypeNode.modifyObject(ObjectTypeNode.java:314)
        at 
org.drools.reteoo.EntryPointNode.modifyObject(EntryPointNode.java:265)
        at org.drools.common.NamedEntryPoint.update(NamedEntryPoint.java:470)
        at org.drools.common.NamedEntryPoint.update(NamedEntryPoint.java:370)
        at
org.drools.base.DefaultKnowledgeHelper.update(DefaultKnowledgeHelper.java:317)
        at
org.drools.base.DefaultKnowledgeHelper.update(DefaultKnowledgeHelper.java:329)
        at
org.drools.base.DefaultKnowledgeHelper.update(DefaultKnowledgeHelper.java:325)
        ... 49 more




-----
- Prashanth
--
View this message in context: 
http://drools.46999.n3.nabble.com/Abstracting-Rules-using-extends-tp4023217.html
Sent from the Drools: User forum mailing list archive at Nabble.com.
_______________________________________________
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users

Reply via email to