Usually a DRL file defines a package. Java classes declared to be in a package with the same name are accessible in the DRL, without an import. This is also true for classes with package visibility.<br><br>However, evaluation of constraints using fields from classes with package visibility only fails at runtime. A couple of stack dumps are shown below.<br>
<br>I'm not sure what the intended behaviour is, but if runtime execution is not possible, compilation ought to fail since the reason is known at compile time.<br><br>-W<br><br><br> Exception in thread "main" java.lang.IllegalAccessError: tried to access class anno.AnnIntRange from class org.drools.base.anno.AnnIntRange21716810$getAnnotation<br>
at org.drools.base.anno.AnnIntRange21716810$getAnnotation.getValue(Unknown Source)<br> at org.drools.base.ClassFieldReader.getValue(ClassFieldReader.java:86)<br> at org.drools.rule.Declaration.getValue(Declaration.java:219)<br>
at anno.Rule_ChkIntRange_0Eval1Invoker.evaluate(Rule_ChkIntRange_0Eval1Invoker.java:16)<br> at org.drools.rule.EvalCondition.isAllowed(EvalCondition.java:114)<br> at org.drools.reteoo.EvalConditionNode.assertLeftTuple(EvalConditionNode.java:173)<br>
at org.drools.reteoo.SingleLeftTupleSinkAdapter.doPropagateAssertLeftTuple(SingleLeftTupleSinkAdapter.java:197)<br> at org.drools.reteoo.SingleLeftTupleSinkAdapter.propagateAssertLeftTuple(SingleLeftTupleSinkAdapter.java:72)<br>
at org.drools.reteoo.JoinNode.assertLeftTuple(JoinNode.java:101)<br> at org.drools.reteoo.SingleLeftTupleSinkAdapter.doPropagateAssertLeftTuple(SingleLeftTupleSinkAdapter.java:197)<br> at org.drools.reteoo.SingleLeftTupleSinkAdapter.createAndPropagateAssertLeftTuple(SingleLeftTupleSinkAdapter.java:146)<br>
at org.drools.reteoo.LeftInputAdapterNode.assertObject(LeftInputAdapterNode.java:154)<br> at org.drools.reteoo.SingleObjectSinkAdapter.propagateAssertObject(SingleObjectSinkAdapter.java:59)<br> at org.drools.reteoo.ObjectTypeNode.assertObject(ObjectTypeNode.java:193)<br>
at org.drools.reteoo.EntryPointNode.assertObject(EntryPointNode.java:191)<br> at org.drools.common.NamedEntryPoint.insert(NamedEntryPoint.java:332)<br> at org.drools.common.NamedEntryPoint.insert(NamedEntryPoint.java:293)<br>
at org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:905)<br> at org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:864)<br> at org.drools.impl.StatefulKnowledgeSessionImpl.insert(StatefulKnowledgeSessionImpl.java:255)<br>
<br>==================================================================<br><br>Exception in thread "main" org.drools.RuntimeDroolsException: [Error: could not access field: anno.AnnIntRange.method]<br>[Near : {... method.declaringClass ....}]<br>
^<br>[Line: 1, Column: 1]<br> at org.drools.rule.ReturnValueRestriction.isAllowedCachedRight(ReturnValueRestriction.java:297)<br> at org.drools.rule.VariableConstraint.isAllowedCachedRight(VariableConstraint.java:121)<br>
at org.drools.common.SingleBetaConstraints.isAllowedCachedRight(SingleBetaConstraints.java:136)<br> at org.drools.reteoo.JoinNode.assertObject(JoinNode.java:154)<br> at org.drools.reteoo.SingleObjectSinkAdapter.propagateAssertObject(SingleObjectSinkAdapter.java:59)<br>
at org.drools.reteoo.ObjectTypeNode.assertObject(ObjectTypeNode.java:193)<br> at org.drools.reteoo.EntryPointNode.assertObject(EntryPointNode.java:191)<br> at org.drools.common.NamedEntryPoint.insert(NamedEntryPoint.java:332)<br>
at org.drools.common.NamedEntryPoint.insert(NamedEntryPoint.java:293)<br> at org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:905)<br> at org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:864)<br>
at org.drools.impl.StatefulKnowledgeSessionImpl.insert(StatefulKnowledgeSessionImpl.java:255)<br> at anno.Main.insertAnnotations(Main.java:90)<br> at anno.Main.makeFacts(Main.java:102)<br> at anno.Main.execute(Main.java:70)<br>
at anno.Main.main(Main.java:119)<br>Caused by: [Error: could not access field: anno.AnnIntRange.method]<br>[Near : {... method.declaringClass ....}]<br> ^<br>[Line: 1, Column: 1]<br> at org.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.getBeanProperty(ReflectiveAccessorOptimizer.java:550)<br>
at org.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.compileGetChain(ReflectiveAccessorOptimizer.java:336)<br> at org.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.optimizeAccessor(ReflectiveAccessorOptimizer.java:141)<br>
at org.mvel2.optimizers.dynamic.DynamicOptimizer.optimizeAccessor(DynamicOptimizer.java:67)<br> at org.mvel2.ast.ASTNode.optimize(ASTNode.java:161)<br> at org.mvel2.ast.ASTNode.getReducedValueAccelerated(ASTNode.java:117)<br>
at org.mvel2.MVELRuntime.execute(MVELRuntime.java:89)<br> at org.mvel2.compiler.CompiledExpression.getValue(CompiledExpression.java:125)<br> at org.mvel2.compiler.CompiledExpression.getValue(CompiledExpression.java:118)<br>
at org.mvel2.MVEL.executeExpression(MVEL.java:952)<br> at org.drools.base.extractors.MVELClassFieldReader.getValue(MVELClassFieldReader.java:153)<br> at org.drools.base.evaluators.EqualityEvaluatorsDefinition$ObjectEqualEvaluator.evaluate(EqualityEvaluatorsDefinition.java:1671)<br>
at org.drools.rule.ReturnValueRestriction.isAllowedCachedRight(ReturnValueRestriction.java:292)<br> ... 15 more<br><br>