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