Great! That was it. Changing the order from:
session.insert(fact1);
session.insert(new FactSource());
session.setGlobal("factSource", new FactSource());
to:
session.setGlobal("factSource", new FactSource());
session.insert(fact1);
session.insert(new FactSource());
helped!
Thank you very much for help. The conclusion is obvious then - to set
such a global before any insertion.
Best regards,
Przemek
Edson Tirelli pisze:
Remember that the engine evaluates all your LHS CEs when you ASSERT
the facts, not when you FIRE the rules. So, you obviously need to set
the global before asserting your facts or you will get the nasty NPE
that you saw.
Pre rule tells you exactly that, because eval(true) is evaluated at
ASSERT time and activates the rule, but your System.out is only execute
at FIRE time, after your application set the global.
[]s
Edson
2009/1/26 Przemysław Różycki <P.Rozycki(a)amg.net.pl
<mailto:P.Rozycki@amg.net.pl>>
Of course, you can get rid of 'pre rule'. I forgot to delete it.
Best regards,
Przemek
Przemysław Różycki pisze:
Hi,
I mean, I checked the global and it was set.
I'm attaching the code, that causes the problem (Java and DRL).
You need just to set a proper path to DRL file while setting
file property in Java file. I think, the global is set in proper
way.
In DRL, depending which rule is commented/uncommented, the code
works or not.
Best regards,
Przemek
Jaroslaw Kijanowski pisze:
And did the stack trace change? Can you post more details
(drl, java src)?
Przemysław Różycki wrote:
Yes, I did. This was the first thing I've checked.
Best regards,
Przemek
Jaroslaw Kijanowski pisze:
Did you set the global on your session?
http://downloads.jboss.com/drools/docs/4.0.7.19894.GA/html_single/index.h...
Cheers
Przemysław Różycki wrote:
Sorry for responsing myself, but I'm still
working on it and found that when factSource is
a fact, not global, the rule works very well. I
mean, this rule works fine:
rule "My Rule"
when
$factSrc : FactSource( )
$fact : Fact( ) from
$factSrc.getSomeFacts("a","b","c")
then
// do something
end
so what's the difference between invocation on
global object and invocation on fact object? Why
the first one doesn't work and the second one works?
Best regards,
Przemek
Przemysław Różycki pisze:
Hi,
could I ask for some advice, please, how to
use a parametrized method call to get some
data using 'from' element in LHS.
To be more precise, I would like to do
something like this:
rule "My Rule"
when
$fact : Fact( ) from
factSource.getSomeFacts("a","b","c")
then
// do something
end
where factSource is for example some global
and getSomeFacts(String,String,String) is a
parametrized method that returns some array
of Fact objects.
Unfortunately, when I try to launch the
following rule I have an error:
Exception in thread "main"
org.mvel.PropertyAccessException: unable to
resolve property:
factSource.getSomeFacts("a","b","c")
at
org.mvel.optimizers.impl.refl.ReflectiveAccessorOptimizer.compileGetChain(ReflectiveAccessorOptimizer.java:295)
at
org.mvel.optimizers.impl.refl.ReflectiveAccessorOptimizer.optimizeAccessor(ReflectiveAccessorOptimizer.java:110)
at
org.mvel.ast.VariableDeepPropertyNode.getReducedValueAccelerated(VariableDeepPropertyNode.java:26)
at
org.mvel.ast.PropertyASTNode.initializePropertyNode(PropertyASTNode.java:70)
at
org.mvel.ast.PropertyASTNode.getReducedValueAccelerated(PropertyASTNode.java:24)
at
org.mvel.MVELRuntime.execute(MVELRuntime.java:90)
at
org.mvel.CompiledExpression.getValue(CompiledExpression.java:111)
at
org.mvel.MVEL.executeExpression(MVEL.java:252)
at
org.drools.base.dataproviders.MVELDataProvider.getResults(MVELDataProvider.java:55)
at
org.drools.reteoo.FromNode.assertTuple(FromNode.java:68)
at
org.drools.reteoo.SingleTupleSinkAdapter.createAndPropagateAssertTuple(SingleTupleSinkAdapter.java:55)
at
org.drools.reteoo.LeftInputAdapterNode.assertObject(LeftInputAdapterNode.java:116)
at
org.drools.reteoo.SingleObjectSinkAdapter.propagateAssertObject(SingleObjectSinkAdapter.java:22)
at
org.drools.reteoo.ObjectTypeNode.assertObject(ObjectTypeNode.java:162)
at
org.drools.reteoo.Rete.assertObject(Rete.java:175)
at
org.drools.reteoo.ReteooRuleBase.assertObject(ReteooRuleBase.java:192)
at
org.drools.reteoo.ReteooWorkingMemory$WorkingMemoryReteAssertAction.execute(ReteooWorkingMemory.java:181)
at
org.drools.common.AbstractWorkingMemory.executeQueuedActions(AbstractWorkingMemory.java:1312)
at
org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:915)
at
org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:883)
at
org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:684)
at
com.sample.DroolsTest6.main(DroolsTest6.java:29)
Caused by: java.lang.NullPointerException
at
org.mvel.optimizers.impl.refl.ReflectiveAccessorOptimizer.getMethod(ReflectiveAccessorOptimizer.java:530)
at
org.mvel.optimizers.impl.refl.ReflectiveAccessorOptimizer.compileGetChain(ReflectiveAccessorOptimizer.java:261)
... 21 more
Documentation says:
"The from Conditional Element allows users
to specify a source for patterns to reason
over. This allows the engine to reason over
data not in the Working Memory. This could
be a sub-field on a bound variable or the
results of a method call."
so I assume that it is possible to do what I
want. If not, could I ask for an advice of
some workaround, please?
Best regards,
_______________________________________________
rules-users mailing list
rules-users(a)lists.jboss.org
<mailto:rules-users@lists.jboss.org>
https://lists.jboss.org/mailman/listinfo/rules-users
_______________________________________________
rules-users mailing list
rules-users(a)lists.jboss.org
<mailto:rules-users@lists.jboss.org>
https://lists.jboss.org/mailman/listinfo/rules-users
_______________________________________________
rules-users mailing list
rules-users(a)lists.jboss.org
<mailto:rules-users@lists.jboss.org>
https://lists.jboss.org/mailman/listinfo/rules-users
_______________________________________________
rules-users mailing list
rules-users(a)lists.jboss.org <mailto:rules-users@lists.jboss.org>
https://lists.jboss.org/mailman/listinfo/rules-users
_______________________________________________
rules-users mailing list
rules-users(a)lists.jboss.org <mailto:rules-users@lists.jboss.org>
https://lists.jboss.org/mailman/listinfo/rules-users
--
Edson Tirelli
JBoss Drools Core Development
JBoss, a division of Red Hat @
www.jboss.com <
http://www.jboss.com>
------------------------------------------------------------------------
_______________________________________________
rules-users mailing list
rules-users(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users