[rules-users] Order of object creation in stateful session

Wolfgang Laun wolfgang.laun at gmail.com
Thu Jan 16 13:27:25 EST 2014


Look into the WorkingMemoryEvent and ~Listener classes.
This will tell you when what is inserted; keeping track of
inserts should be simple. To learn which rule is responsible,
listen to Before- and AfterMatchFired events: if they straddle
inserts, you know which rule.

Or run a RuntimeLogger and mine the log data (but I think
the listeners provide more flexibility and better access to
the data).

-W

On 16/01/2014, Dean Whisnant <dean at basys.com> wrote:
> Hi,
>
>
>
> This may be a very basic question, but I'm using drools 5.1.1 and when I
> invoke a stateful session and that session ends I receive back all of the
> facts that were created during that session and I translate those into an
> EDI transaction.  As an example I might have a few objects of types
> "2700*LX,2750* N1,2750* REF, and 2750*DTP".  I know my rules fired create
> objects like:
>
>
>
> LX*1
>
> N1*75*CMSEC
>
> REF*17*A
>
> DTP*007*D8*20140114
>
> LX*2
>
> N1*75*STATUS
>
> REF*17*AFTNM
>
> DTP*007*D8*20140114
>
>
>
> Each of these lines is an object of the type I mentioned above.
>
>
>
> My task is to make sure that the different object types "stick" together
> when I put them in the .x12 file so that they are formatted above.
>
>
>
> What I do internally is I keep track that I have two of each of these
> objects, but I don't know if there is some type of timestamp that is on them
> that I could keep the first LX, N1, REF, DTP together or not.
>
>
>
> In one example I have a rule that inserts them in the order you see, yes, it
> literally inserts 8 objects/facts into memory. And I need to know the order
> they were inserted so that I can properly form a file out of them on the
> backend.
>
>
>
> Here's how I grab the objects and factHandle list.  Is there a method that
> might help me know what object was created by what rule and how I might keep
> facts created in a rule together?
>
>
>
>                                 // Get handle to all objects coming from
> drools
>
>                                 Collection<FactHandle> handleList = null;
>
>                                 try
>
>                                 {
>
>                                                 handleList =
> ksession.getFactHandles();
>
>                                 }
>
>                                 catch (Exception e)
>
>                                 {
>
>                                                 _log.error("kSession get
> Fact Handles. Error=" + e.getMessage());
>
>                                 }
>
> // Build the List with the results from drools - objectOutList
>
>                                 Object anObject;
>
>                                 TranslatedObjectImpl aTranslatedObject;
>
>                                 FactHandle fH;
>
>
>
>                                 for (Iterator<FactHandle> it =
> handleList.iterator(); it.hasNext();)
>
>                                 {
>
>                                                 fH = (FactHandle)
> it.next();
>
>                                                 anObject = (Object)
> ksession.getObject(fH);
>
>                                                 if (anObject instanceof
> String)
>
>                                                 {
>
>                                                                 //
> prt("Ignoring back from drool the String object " +
> anObject.getClass().getCustomerLogName());
>
>                                                 }
>
>                                                 else if (anObject instanceof
> TranslatedObjectImpl)
>
>                                                 {
>
>
> aTranslatedObject = (TranslatedObjectImpl) ksession.getObject(fH);
>
>
> objectOutList.add(aTranslatedObject);
>
>                                                                 if
> (_log.isTraceEnabled()) _log.trace("Back from drools, translated object " +
> anObject.getClass().getSimpleName());
>
>                                                 }
>
>                                                 else
>
>                                                 {
>
>
> objectOutList.add(ksession.getObject(fH));
>
>                                                                 if
> (_log.isTraceEnabled()) _log.trace("Back from drools, found      object " +
> anObject.getClass().getSimpleName());
>
>                                                 }
>
>                                 }
>
>                                 if (_log.isDebugEnabled()) _log.debug("Done
> with Transformer. Total number of Drools object = " +
> objectOutList.size());
>
>                                 ksession.dispose();
>
>
>
> Any thoughts?
>
>
>
> Thanks,
>
>
>
> Dean
>
>


More information about the rules-users mailing list