Leon,

   This specific problem was fixed in the 4.0.x branch a few weeks ago. I believe we covered all the scenarios, but in case we missed any, please let us know asap.

   []s
   Edson

2008/3/13, Leon Stein <leon@farecast.com>:
I'll test with the latest from 4.0.x branch, in the meanwhile, more info
on the actual error:

Stack trace:


org.drools.RuntimeDroolsException: Exception executing predicate

org.drools.base.mvel.MVELPredicateExpression@3863aa2c
        at
org.drools.rule.PredicateConstraint.isAllowed(PredicateConstraint.java:216)
        at org.drools.reteoo.AlphaNode.assertObject(AlphaNode.java:132)
        at

org.drools.reteoo.CompositeObjectSinkAdapter.propagateAssertObject(CompositeObjectSinkAdapter.java:318)
        at
org.drools.reteoo.ObjectTypeNode.assertObject(ObjectTypeNode.java:153)
        at org.drools.reteoo.Rete.assertObject(Rete.java:175)
        at
org.drools.reteoo.ReteooRuleBase.assertObject(ReteooRuleBase.java:192)
        at
org.drools.reteoo.ReteooWorkingMemory.doInsert(ReteooWorkingMemory.java:71)
        at
org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:909)
        at

org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:881)
        at
org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:682)
       <removed>
Caused by: org.mvel.CompileException: cannot invoke getter: getBar
[declr.class: org.example.Foo; act.class: null]
        at
org.mvel.optimizers.impl.refl.GetterAccessor.getValue(GetterAccessor.java:52)

        at
org.mvel.optimizers.impl.refl.VariableAccessor.getValue(VariableAccessor.java:39)
        at
org.mvel.ast.VariableDeepPropertyNode.getReducedValueAccelerated(VariableDeepPropertyNode.java:22)
        at
org.mvel.ast.PropertyASTNode.getReducedValueAccelerated(PropertyASTNode.java:21)
        at
org.mvel.ast.BinaryOperation.getReducedValueAccelerated(BinaryOperation.java:21)
        at org.mvel.MVELRuntime.execute(MVELRuntime.java:88)
        at org.mvel.CompiledExpression.getValue(CompiledExpression.java:111)

        at org.mvel.MVEL.executeExpression(MVEL.java:235)

        at
org.drools.base.mvel.MVELPredicateExpression.evaluate(MVELPredicateExpression.java:36)
        at

org.drools.rule.PredicateConstraint.isAllowed(PredicateConstraint.java:210)
        ... 41 more

Caused by: java.lang.NullPointerException

        at sun.reflect.GeneratedMethodAccessor292.invoke(Unknown Source)
        at

sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

        at java.lang.reflect.Method.invoke(Method.java:585)

        at
org.mvel.optimizers.impl.refl.GetterAccessor.getValue(GetterAccessor.java:42)

        ... 50 more

- Only occurs on multi-cpu boxes (Linux, Sun JRE 1.5.0_06, 64 bit) under
heavy load with simultaneous sessions running against same rule base
with thousands of facts in each session.

- The rule where exception occurs traverses properties of inserted
object (foo.bar expression):

rule "XYZ"
    when
        foo : FooHolder(foo.bar == Bar.GREEN)
        ...
    then
        ...
end

The traversed objects are not shared between sessions, and properties
are never null.


Leon



Mark Proctor wrote:
> Leon S wrote:
>> We ran into this problem after upgrading from 3.0.* to 4.0.4.
>>
>> Is there a JIRA issue filed for this? I see a few MVEL-related issues scoped
>> for 4.0.5 and 5.0 releases, but  nothing that looks like specifically
>> covering this problem.
>>
>>
> The user who reported this has not provided more information on how
> this is happening, nor have they confirmed that is or is not fixed in
> 4.0.x. My advice is quickly test your code against 4.0.x and let us
> know if there is a problem. There is no way we can determine if there
> is or isn't a problem from the stack trace given at the start of this
> conversation thread.
> http://anonsvn.labs.jboss.com/labs/jbossrules/branches/4.0.x/
>> Thanks,
>>
>> Leon
>>
>>
>> Mark Proctor wrote:
>>
>>> This looks different to what was fixed in 4.0.4. I'm cc'ing brockm to
>>> get his feedback as it looks like an MVEL bug on accessors.
>>>
>>> Mark
>>> Fernando Meyer wrote:
>>>
>>>> Hi Ingomar,
>>>>
>>>> Which drools version are you using? We made improvements on 4.0.4,
>>>> that fixes concurrency issues on mvel core, so if you aren't using it
>>>> please do an update and try test against your environment.
>>>>
>>>> Please let me know if your problems go away when you upgrade.
>>>>
>>>> Thanks
>>>>
>>>> On Jan 22, 2008 11:13 AM, Ingomar Otter <ingomar.otter@valtech.de
>>>> <mailto:ingomar.otter@valtech.de>> wrote:
>>>>
>>>>     Folks,
>>>>     I am currently trying to scale our implementation by farming out
>>>>     request into mutliple threads. I am on a 4 CPU Mac.
>>>>     A few things I am wondering about:
>>>>     1. Although I see an increase in CPU load when going from single
>>>>     to multi-threaded processing the throughput increased marginally.
>>>>     I am pretty sure that my measurements are correct. I have checked
>>>>     the GC and this is not the source of congestion. My question here
>>>>     is whether Drools is using lot's of synchronization that may
>>>>     explain this.
>>>>     2. When I share the RuleBase accross threads (which I think is
>>>>     valid?) I get interesting errors during execution. eg:
>>>>
>>>>     org.drools.RuntimeDroolsException : Exception executing predicate
>>>>     org.drools.base.mvel.MVELPredicateExpression@bb981e
>>>>     atorg.drools.rule.PredicateConstraint.isAllowedCachedRight(
>>>>     PredicateConstraint.java:246)
>>>>     at
>>>>
>>>> org.drools.common.TripleBetaConstraints.isAllowedCachedRight(TripleBetaConstraints.java:200)
>>>>
>>>>     atorg.drools.reteoo.JoinNode.assertObject(JoinNode.java:150)
>>>>
>>>>
>>>> atorg.drools.reteoo.CompositeObjectSinkAdapter.propagateAssertObject(CompositeObjectSinkAdapter.java:318)
>>>>
>>>> atorg.drools.reteoo.ObjectTypeNode.assertObject(ObjectTypeNode.java:153)
>>>>     at org.drools.reteoo.Rete.assertObject(Rete.java:175)
>>>>     atorg.drools.reteoo.ReteooRuleBase.assertObject
>>>>     (ReteooRuleBase.java:192)
>>>>     at
>>>>
>>>> org.drools.reteoo.ReteooWorkingMemory.doInsert(ReteooWorkingMemory.java:71)
>>>>
>>>>     at
>>>>
>>>> org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:909)
>>>>
>>>>
>>>> atorg.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:881)
>>>>
>>>>
>>>> atorg.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:682)
>>>>
>>>>     atxxxx.DroolsPD.validate(DroolsPD.java:66)
>>>>     at xxxx.DroolsMTRunner.run(DroolsMTRunner.java:30)
>>>>     at java.lang.Thread.run(Thread.java:552)
>>>>     Caused by: org.mvel.CompileException: cannot invoke getter:
>>>>     getSAClass [declr.class: xxx.AbstractSA; act.class: null]
>>>>     atorg.mvel.optimizers.impl.refl.GetterAccessor.getValue(
>>>>     GetterAccessor.java:52)
>>>>     at
>>>>
>>>> org.mvel.optimizers.impl.refl.VariableAccessor.getValue(VariableAccessor.java:39)
>>>>
>>>>     at
>>>>
>>>> org.mvel.ast.VariableDeepPropertyNode.getReducedValueAccelerated(VariableDeepPropertyNode.java:22)
>>>>
>>>> atorg.mvel.ast.PropertyASTNode.getReducedValueAccelerated(PropertyASTNode.java:21)
>>>>     at
>>>>
>>>> org.mvel.ast.BinaryOperation.getReducedValueAccelerated(BinaryOperation.java:21)
>>>>
>>>>     at org.mvel.MVELRuntime.execute(MVELRuntime.java:88)
>>>>     at org.mvel.CompiledExpression.getValue(CompiledExpression.java:111)
>>>>
>>>>     atorg.mvel.MVEL.executeExpression(MVEL.java:235)
>>>>     at
>>>>
>>>> org.drools.base.mvel.MVELPredicateExpression.evaluate(MVELPredicateExpression.java:36)
>>>>
>>>>
>>>> atorg.drools.rule.PredicateConstraint.isAllowedCachedRight(PredicateConstraint.java:240)
>>>>     ... 13 more
>>>>     Caused by: java.lang.NullPointerException
>>>>     atsun.reflect.GeneratedMethodAccessor6.invoke (Unknown Source)
>>>>     atsun.reflect.DelegatingMethodAccessorImpl.invoke(
>>>>     DelegatingMethodAccessorImpl.java:25)
>>>>     atjava.lang.reflect.Method.invoke( Method.java:324)
>>>>     at
>>>>
>>>> org.mvel.optimizers.impl.refl.GetterAccessor.getValue(GetterAccessor.java:42)
>>>>
>>>>     ... 22 more
>>>>
>>>>     Details:
>>>>      * I use StatelessSessions which are private to the threads
>>>>      * No data is shared between threads (with the exception of the
>>>>     RuleBase, as outline above)
>>>>      * I am on JDK 1.5
>>>>
>>>>     I would be grateful for any pointers for 'correct' use of Drools
>>>>     in an MT environment.
>>>>     Cheers,
>>>>       Ingomar
>>>>
>>>>
>>>>     Ingomar Otter
>>>>     Chief Technology Officer
>>>>     ingomar.otter@valtech.de <mailto:ingomar.otter@valtech.de>
>>>>     Mobile: +49 172 2367867
>>>>
>>>>     Valtech GmbH
>>>>     Bahnstraße 16
>>>>     40212 Düsseldorf
>>>>     Germany
>>>>
>>>>     Phone: +49 (0)211 179237-0
>>>>     Fax: +49 211 179237-19
>>>>
>>>>     www.valtech.de <http://www.valtech.de/>
>>>>
>>>>     Geschäftsführer: Ingo Kriescher
>>>>     Amtsgericht Düsseldorf HRB48672
>>>>
>>>>
>>>>     _______________________________________________
>>>>     rules-users mailing list
>>>>     rules-users@lists.jboss.org <mailto:rules-users@lists.jboss.org>
>>>>     https://lists.jboss.org/mailman/listinfo/rules-users
>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> Fernando Meyer http://fmeyer.org
>>>> JBoss Rules Core Developer
>>>> fernando@fmeyer.org <mailto:fernando@fmeyer.org>
>>>> ------------------------------------------------------------------------
>>>>
>>>> _______________________________________________
>>>> rules-users mailing list
>>>> rules-users@lists.jboss.org
>>>> https://lists.jboss.org/mailman/listinfo/rules-users
>>>>
>>>>
>>> _______________________________________________
>>> rules-users mailing list
>>> rules-users@lists.jboss.org
>>> https://lists.jboss.org/mailman/listinfo/rules-users
>>>
>>>
>>>
>>
>>
>>
>>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> rules-users mailing list
> rules-users@lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>
_______________________________________________
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users



--
  Edson Tirelli
  JBoss Drools Core Development
  Office: +55 11 3529-6000
  Mobile: +55 11 9287-5646
  JBoss, a division of Red Hat @ www.jboss.com