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