[rules-users] Object referencing error

Fnu Mahalakshmi FMahalakshmi at nyx.com
Fri Jun 4 09:29:38 EDT 2010


Thank you guys so much for all the help!!! I am trying out what you suggested. :)


-----Original Message-----
From: rules-users-bounces at lists.jboss.org [mailto:rules-users-bounces at lists.jboss.org] On Behalf Of rules-users-request at lists.jboss.org
Sent: Friday, June 04, 2010 7:48 AM
To: rules-users at lists.jboss.org
Subject: rules-users Digest, Vol 43, Issue 18

Send rules-users mailing list submissions to
        rules-users at lists.jboss.org

To subscribe or unsubscribe via the World Wide Web, visit
        https://lists.jboss.org/mailman/listinfo/rules-users
or, via email, send a message with subject or body 'help' to
        rules-users-request at lists.jboss.org

You can reach the person managing the list at
        rules-users-owner at lists.jboss.org

When replying, please edit your Subject line so it is more specific
than "Re: Contents of rules-users digest..."


Today's Topics:

   1. Using the ForEach component in RuleFlow (Darshan)
   2. Re: forEach node Clarification (Darshan)
   3. Re: Object Referencing Error (Esteban Aliverti)


----------------------------------------------------------------------

Message: 1
Date: Fri, 4 Jun 2010 03:30:46 -0700 (PDT)
From: Darshan <darshan.vartak at polaris.co.in>
Subject: [rules-users] Using the ForEach component in RuleFlow
To: rules-users at lists.jboss.org
Message-ID: <1275647446097-870012.post at n3.nabble.com>
Content-Type: text/plain; charset=us-ascii



I am trying to use ForEach component in the process flow. I need to call a
set of rules in loop. I have this subFlow created inside ForEach component.
The collection set in the working memory becomes available to the ForEach
component and infact even in subFlow the OnEntryAction and OnExitAction can
access the integerObject from the collection. But when it comes to executing
the rules, looks like the integerObject is not available to the rule and
none of the rules are executed. If I add a dummy rule without any condition
it does get executed but only once. Have anybody tried similar kind of
scenario. If yes please send me some example, as I am really stuch out here
trying to call rules in a loop.

I am attaching the souce code along with this post. Please have a look.

Here is how the ForEach flow looks like
http://drools-java-rules-engine.46999.n3.nabble.com/file/n870012/ForEachFlow.jpg

Here is my SubFlow layout
http://drools-java-rules-engine.46999.n3.nabble.com/file/n870012/subProcessFlow.jpg


Here is the output of Java Program

Setting numberList
Entry 1
Entry 2
Exit 1
Entry 3
Exit 2
Entry 4
Exit 3
Entry 5
Exit 4
Entry 6
Exit 5
Entry 7
Exit 6
Entry 8
Exit 7
Entry 9
Exit 8
Entry 10
Exit 9
Entry 11
Exit 10
Entry 12
Exit 11
Entry 13
Exit 12
Entry 14
Exit 13
Entry 15
Exit 14
Entry 16
Exit 15
Entry 17
Exit 16
Entry 18
Exit 17
Entry 19
Exit 18
Exit 19
Rules executed



testSubFlowForEach.rf looks like this

<?xml version="1.0" encoding="UTF-8"?>
<process xmlns="http://drools.org/drools-5.0/process"
         xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
         xs:schemaLocation="http://drools.org/drools-5.0/process
drools-processes-5.0.xsd"
         type="RuleFlow" name="testForEach" id="processForEach"
package-name="com.sample" >

  <header>
    <imports>
      <import name="java.util.ArrayList" />
      <import name="com.sample.IntegerObject" />
    </imports>
    <variables>
      <variable name="numberList" >
        <type
name="org.drools.process.core.datatype.impl.type.ObjectDataType"
className="java.util.ArrayList" />
      </variable>
      <variable name="integerObject" >
        <type
name="org.drools.process.core.datatype.impl.type.ObjectDataType"
className="com.sample.IntegerObject" />
      </variable>
    </variables>
  </header>

  <nodes>
    <start id="1" name="Start" x="224" y="15" width="80" height="40" />
    <forEach id="2" name="processForEach" x="163" y="111" width="203"
height="268" variableName="integerObject" collectionExpression="numberList"
>
      <nodes>
    <subProcess id="13" name="SubProcess" x="55" y="110" width="80"
height="40" processId="testSubFlow" independent="false" >
      <mapping type="in" from="integerObject" to="integerObject" />
      <onEntry>
        <action type="expression" dialect="java" >System.out.println("Entry
" + ((IntegerObject) integerObject).getIntVal());</action>
      </onEntry>
      <onExit>
        <action type="expression" dialect="java" >System.out.println("Exit "
+ ((IntegerObject) integerObject).getIntVal());</action>
      </onExit>
    </subProcess>
      </nodes>
      <connections>
      </connections>
      <in-ports>
        <in-port type="DROOLS_DEFAULT" nodeId="13"
nodeInType="DROOLS_DEFAULT" />
      </in-ports>
      <out-ports>
        <out-port type="DROOLS_DEFAULT" nodeId="13"
nodeOutType="DROOLS_DEFAULT" />
      </out-ports>
    </forEach>
    <end id="5" name="End" x="230" y="456" width="80" height="40" />
  </nodes>

  <connections>
    <connection from="1" to="2" />
    <connection from="2" to="5" />
  </connections>

</process>


http://drools-java-rules-engine.46999.n3.nabble.com/file/n870012/testForEach.zip
testForEach.zip
--
View this message in context: http://drools-java-rules-engine.46999.n3.nabble.com/Using-the-ForEach-component-in-RuleFlow-tp870012p870012.html
Sent from the Drools - User mailing list archive at Nabble.com.


------------------------------

Message: 2
Date: Fri, 4 Jun 2010 04:21:50 -0700 (PDT)
From: Darshan <darshan.vartak at polaris.co.in>
Subject: Re: [rules-users] forEach node Clarification
To: rules-users at lists.jboss.org
Message-ID: <1275650510581-870109.post at n3.nabble.com>
Content-Type: text/plain; charset=us-ascii




Hi Rajakanthan,

I am trying similar kind of thing and need help. I need to call a set of
rules in loop by passing a object fro0 a collection to the rules. Here are
more details about What I am trying to do. Please help.

http://drools-java-rules-engine.46999.n3.nabble.com/Using-the-ForEach-component-in-RuleFlow-td870012.html#a870012

Here is the code
http://drools-java-rules-engine.46999.n3.nabble.com/file/n870109/testForEach.zip
testForEach.zip
--
View this message in context: http://drools-java-rules-engine.46999.n3.nabble.com/forEach-node-Clarification-tp60090p870109.html
Sent from the Drools - User mailing list archive at Nabble.com.


------------------------------

Message: 3
Date: Fri, 4 Jun 2010 08:47:29 -0300
From: Esteban Aliverti <esteban.aliverti at gmail.com>
Subject: Re: [rules-users] Object Referencing Error
To: Rules Users List <rules-users at lists.jboss.org>
Message-ID:
        <AANLkTimIW7JDDsJauQJk6KraHSUKsiAbhfjrlq0zyUZu at mail.gmail.com>
Content-Type: text/plain; charset="windows-1252"

True, I forgot about the objectB field restriction.

2010/6/4 Swindells, Thomas <TSwindells at nds.com>

>  In fact in your case you when condition doesn?t make any sense ? B will
> never equal the empty string as B isn?t a string.
>
> You probable want the following:
>
> rule ?foo?
>
> when
>    $a :A(Type == "Prod" , objectB == null)
>
> then
>    B bobject = new B();
>
>    bobject.setType(?Prod?);
>
>    bobject.setId($a.getNumber().getId());
>
>    modify($a) {
>
>       setObjectB(bobject);
>
>     };
>
> end
>
>
>
> This rule only executes when objectB  is null, this means you won?t get
> into the loop as once you have created objectB  the rule won?t evaluate to
> true again.
>
>
>
> Thomas
>
>
>
>   *From:* rules-users-bounces at lists.jboss.org [mailto:
> rules-users-bounces at lists.jboss.org] *On Behalf Of *Esteban Aliverti
> *Sent:* 03 June 2010 23:43
> *To:* Rules Users List
> *Subject:* Re: [rules-users] Object Referencing Error
>
>
>
> Yes, your rule entered in an infinite loop because when every time you
> insert/modify/retract a Fact, rules are reevaluated to check if the
> insertion/modification/retraction generates activations or not. In your
> case, your rule is being reevaluated every time you update your $a object,
> the evaluation ends firing the rule, and this starts an endless loop.
>
> If you only have this behavior with this rule, you can consider using the
> "no-loop" attribute. If your problem is multiple rules being re executed
> (and you don't wont that) you can use "lock-on-active" attribute. Try to
> read the documentation about these attributes for further information.
>
> It is very important for the people new in drools to understand the life
> cycle of a rule.
>
>
>
> Best,
>
> On Thu, Jun 3, 2010 at 7:33 PM, Fnu Mahalakshmi <FMahalakshmi at nyx.com>
> wrote:
>
> Hi,
>
> I tried what you said but program goes into an infinite loop.
> It does not break out of the when loop only.
> I did exactly as you mentioned.
> In the test information I put in a.type = "Prod"
> And a.bObject(new B());
> Any idea whats wrong??
>
> Thanks,
> M
>
> -----Original Message-----
> From: rules-users-bounces at lists.jboss.org [mailto:
> rules-users-bounces at lists.jboss.org] On Behalf Of
> rules-users-request at lists.jboss.org
> Sent: Thursday, June 03, 2010 4:52 PM
> To: rules-users at lists.jboss.org
> Subject: rules-users Digest, Vol 43, Issue 15
>
> Send rules-users mailing list submissions to
>        rules-users at lists.jboss.org
>
> To subscribe or unsubscribe via the World Wide Web, visit
>        https://lists.jboss.org/mailman/listinfo/rules-users
> or, via email, send a message with subject or body 'help' to
>        rules-users-request at lists.jboss.org
>
> You can reach the person managing the list at
>        rules-users-owner at lists.jboss.org
>
> When replying, please edit your Subject line so it is more specific
> than "Re: Contents of rules-users digest..."
>
>
> Today's Topics:
>
>   1. Re: Object Referencing error: (Esteban Aliverti)
>
>
> ----------------------------------------------------------------------
>
> Message: 1
> Date: Thu, 3 Jun 2010 17:51:10 -0300
> From: Esteban Aliverti <esteban.aliverti at gmail.com>
> Subject: Re: [rules-users] Object Referencing error:
> To: Rules Users List <rules-users at lists.jboss.org>
> Message-ID:
>        <AANLkTimeZIJ5VfMTBESLFJIWoc_4MEZSXbKMIXAvJRiC at mail.gmail.com>
> Content-Type: text/plain; charset="iso-8859-1"
>
> You can't modify bobject, becuase it doesn't exist inside the session. You
> just created it a few lines above. Maybe you need an insert() or maybe you
> need the bobject reference from the LHS. Something like this:
>
> *rule* "prod"
>
>
>
>      *when*
>
>         $a :A(Type == "Prod" , objectB != "")
>
>      *then*
>
>   B bobject = *new* B();
>
>         $a.getObjectB().setType( "Prod" );
>
>         $a.getObjectB().setId($a.getNumber().getId());
>
>         *update*($a);
>
> *      end*
>
> Note that you need to update $a and not B, because A is the inserted Fact
> in
> your session.
>
> Best,
>
>
> 2010/6/3 Fnu Mahalakshmi <FMahalakshmi at nyx.com>
>
> >  Hi,
> >
> >
> >
> > I am getting the following error when I try to do complex object
> > referencing in drools:
> >
> > My class:
> >
> > A{
> >
> > String Type;
> >
> > B objectb;
> >
> > //getters and setters for above
> >
> > }
> >
> >
> >
> > My rules:
> >
> >
> >
> > *rule* "prod"
> >
> >
> >
> >       *when*
> >
> >      $a :A(Type == "Prod" , objectB != "")
> >
> >       *then*
> >
> > B bobject = *new* B();
> >
> >      bobject.setType( "Prod" );
> >
> >      bobject.setId($a.getNumber().getId());
> >
> >      *update*(bobject);
> >
> >
> >
> > *end*
> >
> > * *
> >
> > *I want to basically output a file which has updated values of B (type,
> > Id)
> >
> > *
> >
> > * *
> >
> > *Error:*
> >
> > *org.drools.spi.ConsequenceException*: *org.drools.FactException*: Update
> > error: handle not found for object: com.org.Ip at f42ad0. Is it in the
> > working memory?
> >
> >       at
> > org.drools.base.DefaultConsequenceExceptionHandler.handleException(*
> > DefaultConsequenceExceptionHandler.java:13*)
> >
> >       at org.drools.common.DefaultAgenda.fireActivation(*
> > DefaultAgenda.java:558*)
> >
> >       at org.drools.common.DefaultAgenda.fireNextItem(*
> > DefaultAgenda.java:518*)
> >
> >       at org.drools.common.AbstractWorkingMemory.fireAllRules(*
> > AbstractWorkingMemory.java:475*)
> >
> >       at org.drools.common.AbstractWorkingMemory.fireAllRules(*
> > AbstractWorkingMemory.java:439*)
> >
> >       at com.org.DroolsTest.main(*DroolsTest.java:30*)
> >
> > Caused by: *org.drools.FactException*: Update error: handle not found for
> > object: com.org.Ip at f42ad0. Is it in the working memory?
> >
> >       at org.drools.base.DefaultKnowledgeHelper.update(*
> > DefaultKnowledgeHelper.java:100*)
> >
> >       at com.org.Rule_Prod_Ip_0.consequence(*Rule_Prod_Ip_0.java:10*)
> >
> >       at com.org.Rule_Prod_Ip_0ConsequenceInvoker.evaluate(*
> > Rule_Prod_Ip_0ConsequenceInvoker.java:22*)
> >
> >       at org.drools.common.DefaultAgenda.fireActivation(*
> > DefaultAgenda.java:554*)
> >
> >       ... 4 more
> >
> >
> >
> > Please help! I am very new to drools! Not able to figure out why this
> > error:
> >
> >
> >
> > I am using eclipse and working on Windows machine. Error above was
> > generated on eclipse console.
> >
> >
> >
> > Thank you.
> >
> >
> >
> > M
> >
> > ------------------------------
> >
> > *Please consider the environment before printing this email.*
> >
> > *Visit our website at http://www.nyse.com
> >
> *****************************************************************************
> >
> > Note: The information contained in this message and any attachment to it
> is
> > privileged, confidential and protected from disclosure. If the reader of
> > this message is not the intended recipient, or an employee or agent
> > responsible for delivering this message to the intended recipient, you
> are
> > hereby notified that any dissemination, distribution or copying of this
> > communication is strictly prohibited. If you have received this
> > communication in error, please notify the sender immediately by replying
> to
> > the message, and please delete it from your system. Thank you. NYSE
> > Euronext. *
> >
> >
> > _______________________________________________
> > rules-users mailing list
> > rules-users at lists.jboss.org
> > https://lists.jboss.org/mailman/listinfo/rules-users
> >
> >
>
>
> --
> XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
>
> Esteban Aliverti
> -------------- next part --------------
> An HTML attachment was scrubbed...
> URL:
> http://lists.jboss.org/pipermail/rules-users/attachments/20100603/f0f29ddf/attachment.html
>
> ------------------------------
>
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>
>
> End of rules-users Digest, Vol 43, Issue 15
> *******************************************
> Please consider the environment before printing this email.
>
> Visit our website at http://www.nyse.com
>
> ****************************************************
>
> Note:  The information contained in this message and any attachment to it
> is privileged, confidential and protected from disclosure.  If the reader of
> this message is not the intended recipient, or an employee or agent
> responsible for delivering this message to the intended recipient, you are
> hereby notified that any dissemination, distribution or copying of this
> communication is strictly prohibited.  If you have received this
> communication in error, please notify the sender immediately by replying to
> the message, and please delete it from your system.  Thank you.  NYSE
> Euronext.
>
>
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>
>
>
>
> --
> XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
>
> Esteban Aliverti
>
> ------------------------------
>
>
> **************************************************************************************
> This message is confidential and intended only for the addressee. If you
> have received this message in error, please immediately notify the
> postmaster at nds.com and delete it from your system as well as any copies.
> The content of e-mails as well as traffic data may be monitored by NDS for
> employment and security purposes. To protect the environment please do not
> print this e-mail unless necessary.
>
> NDS Limited. Registered Office: One London Road, Staines, Middlesex, TW18
> 4EX, United Kingdom. A company registered in England and Wales. Registered
> no. 3080780. VAT no. GB 603 8808 40-00
>
> **************************************************************************************
>
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>
>


--
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Esteban Aliverti
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20100604/6df32121/attachment.html

------------------------------

_______________________________________________
rules-users mailing list
rules-users at lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users


End of rules-users Digest, Vol 43, Issue 18
*******************************************
Please consider the environment before printing this email.

Visit our website at http://www.nyse.com

****************************************************

Note:  The information contained in this message and any attachment to it is privileged, confidential and protected from disclosure.  If the reader of this message is not the intended recipient, or an employee or agent responsible for delivering this message to the intended recipient, you are hereby notified that any dissemination, distribution or copying of this communication is strictly prohibited.  If you have received this communication in error, please notify the sender immediately by replying to the message, and please delete it from your system.  Thank you.  NYSE Euronext.





More information about the rules-users mailing list