[rules-users] NPE in Drools JPA Persistence with rules that use Flow

Mauricio Salatino salaboy at gmail.com
Thu May 26 11:46:36 EDT 2011


What about the env?
can you show how you set up the environment?
Cheers.

2011/5/26 Shannon Hastings <shannon.hastings at inventrio.com>

> Ya,
>
> session = JPAKnowledgeService.loadStatefulKnowledgeSession(
> map.getSessionId(), getKnowledgeBase(), null, env);
>
> On May 26, 2011, at 11:40 AM, Mauricio Salatino wrote:
>
> Are you using the JPAKnowledgeService?
>
> 2011/5/26 Shannon Hastings <shannon.hastings at inventrio.com>
>
>> It is actually null.  I dont pass any config in when constructing the
>> session.
>>
>>
>> On May 26, 2011, at 11:13 AM, Mauricio Salatino wrote:
>>
>> Can you share the ksession configuration?
>>
>>
>> 2011/5/26 Shannon Hastings <shannon.hastings at inventrio.com>
>>
>>> My session is persistent, i can query the sessioninfo in the DB and see
>>> the data.  My beans are searializable and I can see that the fact has been
>>> deserialized.
>>>
>>>
>>> On May 26, 2011, at 11:05 AM, Mauricio Salatino wrote:
>>>
>>> Ok, assuming that your session is persistent, are your POJOs
>>> serializables?
>>> Cheers
>>>
>>> 2011/5/26 Shannon Hastings <shannon.hastings at inventrio.com>
>>>
>>>> Nope, no change, i am pulling the same drl from guvnor every time.  It
>>>> only has three rules as show below in the thread. I can restore the session
>>>> without error so long as the session does not have any facts in it.  Once I
>>>> drop a fact in and store, then i cannot restore.
>>>>
>>>>
>>>> On May 26, 2011, at 10:55 AM, Mauricio Salatino wrote:
>>>>
>>>> Ok, so did you check that you didn't change anything from the moment you
>>>> store the ksession and the moment when you restore it?
>>>> I usually find this problem when you change a rule and try to restore
>>>> the session using the new version of the rule or when you change a business
>>>> process definition or the session state from different threads. Can you
>>>> check that please?
>>>> You will find this unmarshalling problems and it will be very difficult
>>>> to debug at that level, when the problem is being caused by some
>>>> modification on your code. Greetings
>>>>
>>>> 2011/5/26 Shannon Hastings <shannon.hastings at inventrio.com>
>>>>
>>>>> I have debugged into this and found this issue.  The NPE comes when the
>>>>> session unmarsheller runs into a node that does not have a sink or the sink
>>>>> is null. In the debugger i can see the fact and the fact looks right, has
>>>>> all the data from the pojo i sent in. However, it does not have a sink, but
>>>>> it does have a node id.  This looks like a bug that was reportedly fixed
>>>>> before in 5.1.  I dont know enough about the storing of the facts in the
>>>>> working memory or the model that is being used under the hood, however, all
>>>>> i have to do to create the problem is create a session, send an object to
>>>>> it, and then try to restore it.  And the objects i am sending to it are
>>>>> simple pojo's and in the debugger I can see that it was able to read them
>>>>> back out just fine.  Below is an exerpt from the "InputMarshaller" class.
>>>>>  In the debugger The readlefttuples operation shows the nodeId = 12 and the
>>>>> sink  = null and the facthandleId = 1.  he it calls readLeftTuple() and the
>>>>> obvious NPE will be thrown because the ParentLeftTuple has a null sink and
>>>>> when you call "sink.getType()" you get the NPE.  Is this a known bug.
>>>>>
>>>>>   public static void readLeftTuples(MarshallerReaderContext context)
>>>>> throws IOException,
>>>>>
>>>>> ClassNotFoundException {
>>>>>         ObjectInputStream stream = context.stream;
>>>>>
>>>>>         while ( stream.readShort() == PersisterEnums.LEFT_TUPLE ) {
>>>>>             int nodeId = stream.readInt();
>>>>>             LeftTupleSink sink = (LeftTupleSink) context.sinks.get(
>>>>> nodeId );
>>>>>             int factHandleId = stream.readInt();
>>>>>             LeftTuple leftTuple = new LeftTuple( context.handles.get(
>>>>> factHandleId ),
>>>>>                                                  sink,
>>>>>                                                  true );
>>>>>             readLeftTuple( leftTuple,
>>>>>                            context );
>>>>>         }
>>>>>     }
>>>>>
>>>>>     public static void readLeftTuple(LeftTuple parentLeftTuple,
>>>>>                                      MarshallerReaderContext context)
>>>>> throws IOException,
>>>>>
>>>>> ClassNotFoundException {
>>>>>         ObjectInputStream stream = context.stream;
>>>>>         Map<Integer, BaseNode> sinks = context.sinks;
>>>>>
>>>>>         LeftTupleSink sink = parentLeftTuple.getLeftTupleSink();
>>>>>
>>>>>         switch ( sink.getType() ) {
>>>>>
>>>>>
>>>>> On May 24, 2011, at 9:06 AM, Edson Tirelli wrote:
>>>>>
>>>>>
>>>>>     Shannon,
>>>>>
>>>>>     What is the following method doing?
>>>>>
>>>>> engine.process(reading);
>>>>>
>>>>>     Can you please open a JIRA and attach your test case or point me to
>>>>> the jira reporting this problem if it exists already?
>>>>>
>>>>>     Thanks,
>>>>>         Edson
>>>>>
>>>>>
>>>>> 2011/5/23 Shannon Hastings <shannon.hastings at inventrio.com>
>>>>>
>>>>>> I am using drools 5.2.0.M2 and I still get this error:
>>>>>>
>>>>>> Caused by: java.lang.NullPointerException
>>>>>> at
>>>>>> org.drools.marshalling.impl.InputMarshaller.readLeftTuple(InputMarshaller.java:469)
>>>>>>
>>>>>> Which was reported on drools 5.1.0 JIRA and claimed to be fixed.  I
>>>>>> see the error when trying to load a session that was persisted that had
>>>>>> objects inserted that  are time depended and cause rules to fire that use
>>>>>> terms from flow such as "after".  I only see this error if create a new
>>>>>> session, submit some facts to it, close it, and then try to reload.  If i do
>>>>>> not submit any facts to it I do not get the error.  I.E.  If all i do is
>>>>>> create the KB with my rules I can reload a session from the DB no problem,
>>>>>> but if i submit some facts and persist the session, then i cannot reload it.
>>>>>>  This seems to be an issue with the JPA loading of the session that has
>>>>>> facts in it that use Flow (JBPM).  Any help would be greatly appreciated.
>>>>>>  Below are my simple rules followed by the test code used to submit the
>>>>>> facts:
>>>>>>
>>>>>> package com.inventrio.rules.readings
>>>>>>
>>>>>> import com.inventrio.healthmonitoring.model.*;
>>>>>>
>>>>>> declare Reading
>>>>>>     @role(event)
>>>>>>     @timestamp(readingTime)
>>>>>> end
>>>>>>
>>>>>> rule "High Blood Pressure"
>>>>>>  when
>>>>>>  $eventA :  Reading(readingType.name == "BPMETER")
>>>>>>  $systolic : Value( this.valueType.name == "SYSTOLIC"  ) from$eventA.values
>>>>>>  $diastolic : Value( this.valueType.name == "DIASTOLIC"  ) from$eventA.values
>>>>>>  eval( $systolic.getLongValue() > 180 && $diastolic.getLongValue() >
>>>>>> 120 )
>>>>>>  then
>>>>>>  System.out.println("HIGH BLOOD PRESSURE" );
>>>>>> end
>>>>>>
>>>>>> rule "Weight Trending Up"
>>>>>>  when
>>>>>>  $eventC :  Reading(readingType.name == "WEIGHT" )
>>>>>>  $eventB  : Reading( readingType.name == "WEIGHT" , this after[5s,
>>>>>> 1m] $eventC )
>>>>>>  $eventA  : Reading( readingType.name == "WEIGHT" , this after[5s,
>>>>>> 1m] $eventB )
>>>>>>  $weight3 : Value( this.valueType.name == "WEIGHT"  ) from$eventC.values
>>>>>>  $weight2 : Value( this.valueType.name == "WEIGHT"  ) from$eventB.values
>>>>>>  $weight1 : Value( this.valueType.name == "WEIGHT"  ) from$eventA.values
>>>>>>  eval(  $weight3.getDoubleValue().doubleValue() <
>>>>>> $weight2.getDoubleValue().doubleValue() + 1.0  &&
>>>>>> $weight2.getDoubleValue().doubleValue() <
>>>>>> $weight1.getDoubleValue().doubleValue() + 1.0 )
>>>>>>  then
>>>>>>  System.out.println("WEIGHT IS GOING UP" );
>>>>>> end
>>>>>>
>>>>>> rule "Weight Trending Down"
>>>>>>  when
>>>>>>  $eventC :  Reading(readingType.name == "WEIGHT" )
>>>>>>  $eventB  : Reading( readingType.name == "WEIGHT" , this after[5s,
>>>>>> 1m] $eventC )
>>>>>>  $eventA  : Reading( readingType.name == "WEIGHT" , this after[5s,
>>>>>> 1m] $eventB )
>>>>>>  $weight3 : Value( this.valueType.name == "WEIGHT"  ) from$eventC.values
>>>>>>  $weight2 : Value( this.valueType.name == "WEIGHT"  ) from$eventB.values
>>>>>>  $weight1 : Value( this.valueType.name == "WEIGHT"  ) from$eventA.values
>>>>>>  eval(  $weight3.getDoubleValue().doubleValue() >
>>>>>> $weight2.getDoubleValue().doubleValue() + 1.0  &&
>>>>>> $weight2.getDoubleValue().doubleValue() >
>>>>>> $weight1.getDoubleValue().doubleValue() + 1.0 )
>>>>>>  then
>>>>>>  System.out.println("WEIGHT IS GOING DOWN" );
>>>>>> end
>>>>>>
>>>>>>
>>>>>>
>>>>>> And next is my object i insert before closeing and then trying to
>>>>>> reload the session.
>>>>>>
>>>>>>  public void testWeightRules() {
>>>>>>  try {
>>>>>>
>>>>>>  Reading reading = new Reading();
>>>>>> reading.setReadingTime(new Date(System.currentTimeMillis()));
>>>>>>  ReadingType type = new ReadingType();
>>>>>>  type.setName("WEIGHT");
>>>>>> type.setDescription("");
>>>>>>  reading.setReadingType(type);
>>>>>>  Value value = new Value();
>>>>>> value.setDoubleValue(140.0);
>>>>>>  ValueType valueType = new ValueType();
>>>>>>  valueType.setName("WEIGHT");
>>>>>> valueType.setDataType(ValueDataType.DOUBLE);
>>>>>>  value.setValueType(valueType);
>>>>>>  reading.getValues().add(value);
>>>>>> reading.setReadingType(type);
>>>>>>  engine.process(reading);
>>>>>>
>>>>>> Thread.sleep(7000);
>>>>>>
>>>>>> reading = new Reading();
>>>>>>  reading.setReadingTime(new Date(System.currentTimeMillis()));
>>>>>>  type = new ReadingType();
>>>>>> type.setName("WEIGHT");
>>>>>>  type.setDescription("");
>>>>>>  reading.setReadingType(type);
>>>>>> value = new Value();
>>>>>>  value.setDoubleValue(142.0);
>>>>>>  valueType = new ValueType();
>>>>>> valueType.setName("WEIGHT");
>>>>>>  valueType.setDataType(ValueDataType.DOUBLE);
>>>>>>  value.setValueType(valueType);
>>>>>> reading.getValues().add(value);
>>>>>>  reading.setReadingType(type);
>>>>>>  engine.process(reading);
>>>>>>
>>>>>>  Thread.sleep(7000);
>>>>>>
>>>>>>  reading = new Reading();
>>>>>> reading.setReadingTime(new Date(System.currentTimeMillis()));
>>>>>>  type = new ReadingType();
>>>>>>  type.setName("WEIGHT");
>>>>>> type.setDescription("");
>>>>>>  reading.setReadingType(type);
>>>>>>  value = new Value();
>>>>>> value.setDoubleValue(144.0);
>>>>>>  valueType = new ValueType();
>>>>>>  valueType.setName("WEIGHT");
>>>>>> valueType.setDataType(ValueDataType.DOUBLE);
>>>>>>  value.setValueType(valueType);
>>>>>>  reading.getValues().add(value);
>>>>>> reading.setReadingType(type);
>>>>>>  engine.process(reading);
>>>>>>
>>>>>> } catch (Throwable t) {
>>>>>>  t.printStackTrace();
>>>>>> }
>>>>>>  }
>>>>>>
>>>>>> Shannon Hastings
>>>>>>
>>>>>> Inventrio
>>>>>> 545 Metro Place South, Suite 475
>>>>>> Dublin, OH 43017
>>>>>> *Phone*: (614) 389-2795 x101
>>>>>> *Fax:* (614) 522-6249
>>>>>> *Email:* shannon.hastings at inventrio.com
>>>>>> http://www.inventrio.com
>>>>>>
>>>>>>
>>>>>> _______________________________________________
>>>>>> rules-users mailing list
>>>>>> rules-users at lists.jboss.org
>>>>>> https://lists.jboss.org/mailman/listinfo/rules-users
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>> --
>>>>>   Edson Tirelli
>>>>>   JBoss Drools Core Development
>>>>>   JBoss by Red Hat @ www.jboss.com
>>>>>  _______________________________________________
>>>>> rules-users mailing list
>>>>> rules-users at lists.jboss.org
>>>>> https://lists.jboss.org/mailman/listinfo/rules-users
>>>>>
>>>>>
>>>>> Shannon Hastings
>>>>>
>>>>> Inventrio
>>>>> 545 Metro Place South, Suite 475
>>>>> Dublin, OH 43017
>>>>> *Phone*: (614) 389-2795 x101
>>>>> *Fax:* (614) 522-6249
>>>>> *Email:* shannon.hastings at inventrio.com
>>>>> http://www.inventrio.com
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> rules-users mailing list
>>>>> rules-users at lists.jboss.org
>>>>> https://lists.jboss.org/mailman/listinfo/rules-users
>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>>  - CTO @ http://www.plugtree.com
>>>>  - MyJourney @ http://salaboy.wordpress.com
>>>>  - Co-Founder @ http://www.jbug.com.ar
>>>>
>>>>  - Salatino "Salaboy" Mauricio -
>>>> _______________________________________________
>>>> rules-users mailing list
>>>> rules-users at lists.jboss.org
>>>> https://lists.jboss.org/mailman/listinfo/rules-users
>>>>
>>>>
>>>>  Shannon Hastings
>>>>
>>>> Inventrio
>>>> 545 Metro Place South, Suite 475
>>>> Dublin, OH 43017
>>>> *Phone*: (614) 389-2795 x101
>>>> *Fax:* (614) 522-6249
>>>> *Email:* shannon.hastings at inventrio.com
>>>> http://www.inventrio.com
>>>>
>>>>
>>>> _______________________________________________
>>>> rules-users mailing list
>>>> rules-users at lists.jboss.org
>>>> https://lists.jboss.org/mailman/listinfo/rules-users
>>>>
>>>>
>>>
>>>
>>> --
>>>  - CTO @ http://www.plugtree.com
>>>  - MyJourney @ http://salaboy.wordpress.com
>>>  - Co-Founder @ http://www.jbug.com.ar
>>>
>>>  - Salatino "Salaboy" Mauricio -
>>> _______________________________________________
>>> rules-users mailing list
>>> rules-users at lists.jboss.org
>>> https://lists.jboss.org/mailman/listinfo/rules-users
>>>
>>>
>>>  Shannon Hastings
>>>
>>> Inventrio
>>> 545 Metro Place South, Suite 475
>>> Dublin, OH 43017
>>> *Phone*: (614) 389-2795 x101
>>> *Fax:* (614) 522-6249
>>> *Email:* shannon.hastings at inventrio.com
>>> http://www.inventrio.com
>>>
>>>
>>> _______________________________________________
>>> rules-users mailing list
>>> rules-users at lists.jboss.org
>>> https://lists.jboss.org/mailman/listinfo/rules-users
>>>
>>>
>>
>>
>> --
>>  - CTO @ http://www.plugtree.com
>>  - MyJourney @ http://salaboy.wordpress.com
>>  - Co-Founder @ http://www.jbug.com.ar
>>
>>  - Salatino "Salaboy" Mauricio -
>> _______________________________________________
>> rules-users mailing list
>> rules-users at lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/rules-users
>>
>>
>>  Shannon Hastings
>>
>> Inventrio
>> 545 Metro Place South, Suite 475
>> Dublin, OH 43017
>> *Phone*: (614) 389-2795 x101
>> *Fax:* (614) 522-6249
>> *Email:* shannon.hastings at inventrio.com
>> http://www.inventrio.com
>>
>>
>> _______________________________________________
>> rules-users mailing list
>> rules-users at lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/rules-users
>>
>>
>
>
> --
>  - CTO @ http://www.plugtree.com
>  - MyJourney @ http://salaboy.wordpress.com
>  - Co-Founder @ http://www.jbug.com.ar
>
>  - Salatino "Salaboy" Mauricio -
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>
>
> Shannon Hastings
>
> Inventrio
> 545 Metro Place South, Suite 475
> Dublin, OH 43017
> *Phone*: (614) 389-2795 x101
> *Fax:* (614) 522-6249
> *Email:* shannon.hastings at inventrio.com
> http://www.inventrio.com
>
>
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>
>


-- 
 - CTO @ http://www.plugtree.com
 - MyJourney @ http://salaboy.wordpress.com
 - Co-Founder @ http://www.jbug.com.ar

 - Salatino "Salaboy" Mauricio -
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20110526/2c0abf08/attachment.html 


More information about the rules-users mailing list