Kris,
Did the updated test case help ? Were you able to reproduce the issue?
Thanks
Sanjay
SBalakrishnan wrote:
Kris,
Thanks again. Sorry my earlier test case was missing some items.
Updated test case provided below.
Thanks
Sanjay
/*----------Start Test Case ------------*/
Updated Test Case:-
a) Run org.drools.examples.process.order.OrderExample.java
b) Click on the create button (with default options).
Note :- Look up the the session id from the database
c) From the eclipse plugin complete one human task (Verify Order).
d) Stop the Order example .
e) Update the method createWorkingMemory() in
org.drools.examples.process.order.OrderExample.java,
to load the last session id in the invocation of
JPAKnowledgeService.loadStatefulKnowledgeSession.
f) Run order Order example .
Note:-Should see exception from loadStatefulKnowledgeSession.
Was getting this error in H2 and Oracle.
/*----------End Test Case ------------*/
SBalakrishnan wrote:
>
> Thanks for the quick response Kris and appreciate your help.
>
> It would be great if we can get more information on the activity by the
> community member for the fail safe approach for the handlers.
>
>
> Yes, I am using a modified
> org.drools.examples.process.order.OrderExample.java class.
> Using a modified drl file RuleSetExample.rf (Only two human tasks).
> I am attaching the sample project.
>
> Thanks
> Sanjay
>
>
>
> Test Case:-
>
> a) Run org.drools.examples.process.order.OrderExample.java
> b) Click on the create button (with default options).
>
>
> The main methods being called are:-
> a) private void createWorkingMemory()
>
> intial setup and load of session happens here.
>
> b)createOrder()
>
> ksession.insert(),ksession.startProcess
>
>
>
> Kris Verlaenen wrote:
>>
>> That NPE seems to be an error in the marshaling of the session. Do you
>> have a simple test case that you can send me so we can use that to
>> reproduce this issue (I noticed you are extending the order example, but
>> you seem to have introduced a few new classes and probably some rules as
>> well)?
>>
>> Regarding the session marshaling, it persists its entire internal state.
>> So that includes all running process instances, all data in the working
>> memory (although that is configurable through a strategy) and the
>> internal state (agenda etc.). This does not include the knowledge base
>> or external components, like for example work item handlers.
>>
>> The current human task handler implementation does indeed not support
>> restoring after failure, as the event listeners are not re-registered.
>> A more fail-safe implementation, for example registering the necessary
>> listeners upon initialization or using a fail-safe protocol like JMS
>> should be used for that. If I remember correctly, a community member is
>> already looking into that.
>>
>> Kris
>>
>> Quoting SBalakrishnan <Sanjay.Balakrishnan(a)fnis.com>:
>>
>>>
>>> Hi,
>>>
>>>
>>> Looks like this issue and related problems
>>> have become a show stopper for us.
>>>
>>>
>>>
>>> The UseCase we are trying to address is recreating inflight Human
>>> Tasks
>>> after the engine has been stopped (could be a shutdown or server
>>> error scenario).
>>>
>>> It was noticed that if we do not insert any global variables in the
>>> session
>>> ,then we do not see the earlier reported Null pointer exception and
>>> the
>>> session load from
>>> the previous session id goes through.
>>> (Code snippet below)
>>>
>>>
>>> But then I come to the next question, what type of information does
>>> the
>>> session
>>> carry over (could not find information on it) . Is it only global
>>> variables
>>> ?
>>>
>>>
>>> Also what happens to the informaton tied to the registered handlers.
>>> In this case all the task event registrations in the human task
>>> handler(CommandBasedWSHumanTaskHandler)
>>> are lost.As a result it is noticed that it leads to tasks getting
>>> completed
>>> on the
>>> MinaTaskServer, but the Process Flow not knowing about it and leading
>>> to
>>> workItems
>>> remaining open (orphan items).
>>>
>>> Please do let us know if you have run into this issue or if you have
>>> other inputs.
>>>
>>>
>>> Thanks in advance
>>> Sanjay
>>>
>>> /*Commented code to bypass first issue:-*/
>>>
>>> Order order = new Order();
>>> order.setOrderId("Order-" + ++orderCounter);
>>> order.setCustomerId(customerIdTextField.getText());
>>> ItemInfo itemInfo = (ItemInfo) itemComboBox.getSelectedItem();
>>> order.addOrderItem(itemInfo.getItemId(), new
>>> Integer(amountTextField.getText()), itemInfo.getPrice());
>>>
>>> AppData testAppData = new AppData();
>>> testAppData.setRelationShipPricing("Pricing");
>>>
>>> //Commented global variable insert
>>> //Commented ksession.insert(testAppData);
>>>
>>> Map<String, Object> parameters = new HashMap<String, Object>();
>>> parameters.put("order", order);
>>> parameters.put("email", emailTextField.getText());
>>> WorkflowProcessInstance testProcess = (WorkflowProcessInstance)
>>> ksession.startProcess("RuleSetExample", parameters);
>>> ksession.fireAllRules();
>>> this._processId= testProcess.getId();
>>>
>>> /*Commented code to bypass first issue:-*/
>>>
>>>
>>> SBalakrishnan wrote:
>>> >
>>> > Kris,
>>> >
>>> > Did download the artifacts (drools-5.1.0.SNAPSHOT-bin.zip)
>>> > from the above location but ran into the same issue reported
>>> earlier.
>>> >
>>> >
>>> /*------------------------------------------------------------------*/
>>> >
>>> > java.lang.RuntimeException: Unable to load session snapshot
>>> > at
>>> >
>>>
>>
org.drools.persistence.session.JPASessionMarshallingHelper.loadSnapshot(JPASessionMarshallingHelper.java:112)
>>> > at
>>> >
>>>
>>
org.drools.persistence.session.JPASessionMarshallingHelper.<init>(JPASessionMarshallingHelper.java:46)
>>> > at
>>> >
>>>
>>
org.drools.persistence.session.SingleSessionCommandService.<init>(SingleSessionCommandService.java:194)
>>> > at
>>> >
>>>
>>
org.drools.persistence.jpa.impl.JPAKnowledgeServiceProviderImpl.loadStatefulKnowledgeSession(JPAKnowledgeServiceProviderImpl.java:75)
>>> > at
>>> >
>>>
>>
org.drools.persistence.jpa.JPAKnowledgeService.loadStatefulKnowledgeSession(JPAKnowledgeService.java:102)
>>> > at
>>> >
>>>
>>
org.drools.examples.process.order.OrderExample.createWorkingMemory(OrderExample.java:279)
>>> > at
>>> >
>>>
>>
org.drools.examples.process.order.OrderExample.<init>(OrderExample.java:107)
>>> > at
>>> >
>>> org.drools.examples.process.order.OrderExample.main(OrderExample.java:88)
>>> > Caused by: java.lang.NullPointerException
>>> > at
>>> >
>>>
>>
org.drools.marshalling.impl.InputMarshaller.readLeftTuple(InputMarshaller.java:496)
>>> > at
>>> >
>>>
>>
org.drools.marshalling.impl.InputMarshaller.readLeftTuples(InputMarshaller.java:426)
>>> > at
>>> >
>>>
>>
org.drools.marshalling.impl.InputMarshaller.readFactHandles(InputMarshaller.java:349)
>>> > at
>>> >
>>>
>>
org.drools.marshalling.impl.InputMarshaller.readSession(InputMarshaller.java:207)
>>> > at
>>> >
>>>
>>
org.drools.marshalling.impl.DefaultMarshaller.unmarshall(DefaultMarshaller.java:75)
>>> > at
>>> >
>>>
>>
org.drools.persistence.session.JPASessionMarshallingHelper.loadSnapshot(JPASessionMarshallingHelper.java:104)
>>> >
>>> >
>>> /*------------------------------------------------------------------*/
>>> >
>>> >
>>> > I am creating a JPA session and starting a process
>>> > with a human task and then stopping the engine without completing
>>> > the human task .Then trying to load from the earlier session.
>>> >
>>> > Am I missing any calls before exit.
>>> >
>>> > Appreciate your help,thanks in advance
>>> >
>>> > Sanjay
>>> >
>>> >
>>> > Kris Verlaenen wrote:
>>> >>
>>> >> We're planning to do a M1 near the end of the month, and a final
a
>>> few
>>> >> weeks later.
>>> >>
>>> >> Kris
>>> >>
>>> >> Quoting SBalakrishnan <Sanjay.Balakrishnan(a)fnis.com>:
>>> >>
>>> >>>
>>> >>> Thanks Kris
>>> >>>
>>> >>> Will download from the below link and check.
>>> >>>
>>> >>> Quick question, do you know when the official 5.1 release will
>>> be
>>> >>> available
>>> >>> ?
>>> >>>
>>> >>>
>>> >>>
>>> >>>
>>> >>>
>>> >>>
>>> >>> Kris Verlaenen wrote:
>>> >>> >
>>> >>> > The fix for this issue has been added to trunk about a
month
>>> ago
>>> >>> already
>>> >>> > I think, have you already tried with the 5.1.0 SNAPSHOT
>>> release?
>>> >>> Does
>>> >>> > this solve your issue?
>>> >>> >
>>> >>> > You can get the snapshot at
>>> >>> >
>>> >>>
>>>
https://hudson.jboss.org/hudson/job/drools/lastSuccessfulBuild/artifact/
>>> >>> >
>>> >>> > Kris
>>> >>> >
>>> >>> > Quoting SBalakrishnan
<Sanjay.Balakrishnan(a)fnis.com>:
>>> >>> >
>>> >>> >>
>>> >>> >> Looks like I am running into the same/similar issue
while
>>> >>> recreating
>>> >>> >> from a
>>> >>> >> session_id.
>>> >>> >> Exception pasted below.
>>> >>> >>
>>> >>> >> Any idea whether it will be addressed in the coming
release ?
>>> >>> >>
>>> >>> >>
>>> >>> >> Thanks in advance..
>>> >>> >>
>>> >>> >>
>>> >>> >> /*--------------------------------------------*/
>>> >>> >>
>>> >>> >> Hibernate: select sessioninf0_.id as id0_0_,
>>> sessioninf0_.dirty
>>> >>> as
>>> >>> >> dirty0_0_, sessioninf0_.lastModificationDate as
>>> lastModi3_0_0_,
>>> >>> >> sessioninf0_.rulesByteArray as rulesByt4_0_0_,
>>> >>> sessioninf0_.startDate
>>> >>> >> as
>>> >>> >> startDate0_0_ from SessionInfo sessioninf0_ where
>>> >>> sessioninf0_.id=?
>>> >>> >> java.lang.RuntimeException: Unable to load session
snapshot
>>> >>> >> at
>>> >>> >>
>>> >>> >
>>> >>>
>>> >>
>>>
>>
org.drools.persistence.session.JPASessionMarshallingHelper.loadSnapshot(JPASessionMarshallingHelper.java:112)
>>> >>> >> at
>>> >>> >>
>>> >>> >
>>> >>>
>>> >>
>>>
>>
org.drools.persistence.session.JPASessionMarshallingHelper.<init>(JPASessionMarshallingHelper.java:46)
>>> >>> >> at
>>> >>> >>
>>> >>> >
>>> >>>
>>> >>
>>>
>>
org.drools.persistence.session.SingleSessionCommandService.<init>(SingleSessionCommandService.java:171)
>>> >>> >> at
>>> >>> >>
>>> >>> >
>>> >>>
>>> >>
>>>
>>
org.drools.persistence.jpa.impl.JPAKnowledgeServiceProviderImpl.loadStatefulKnowledgeSession(JPAKnowledgeServiceProviderImpl.java:75)
>>> >>> >> at
>>> >>> >>
>>> >>> >
>>> >>>
>>> >>
>>>
>>
org.drools.persistence.jpa.JPAKnowledgeService.loadStatefulKnowledgeSession(JPAKnowledgeService.java:102)
>>> >>> >> at
>>> >>> >>
>>> >>> >
>>> >>>
>>> >>
>>>
>>
org.drools.examples.process.order.OrderExample.createWorkingMemory(OrderExample.java:257)
>>> >>> >> at
>>> >>> >>
>>> >>> >
>>> >>>
>>> >>
>>>
>>
org.drools.examples.process.order.OrderExample.<init>(OrderExample.java:99)
>>> >>> >> at
>>> >>> >>
>>> >>>
>>> org.drools.examples.process.order.OrderExample.main(OrderExample.java:80)
>>> >>> >> Caused by: java.lang.NullPointerException
>>> >>> >> at
>>> >>> >>
>>> >>> >
>>> >>>
>>> >>
>>>
>>
org.drools.marshalling.impl.InputMarshaller.readLeftTuple(InputMarshaller.java:496)
>>> >>> >> at
>>> >>> >>
>>> >>> >
>>> >>>
>>> >>
>>>
>>
org.drools.marshalling.impl.InputMarshaller.readLeftTuples(InputMarshaller.java:426)
>>> >>> >> at
>>> >>> >>
>>> >>> >
>>> >>>
>>> >>
>>>
>>
org.drools.marshalling.impl.InputMarshaller.readFactHandles(InputMarshaller.java:349)
>>> >>> >> at
>>> >>> >>
>>> >>> >
>>> >>>
>>> >>
>>>
>>
org.drools.marshalling.impl.InputMarshaller.readSession(InputMarshaller.java:207)
>>> >>> >> at
>>> >>> >>
>>> >>> >
>>> >>>
>>> >>
>>>
>>
org.drools.marshalling.impl.DefaultMarshaller.unmarshall(DefaultMarshaller.java:75)
>>> >>> >> at
>>> >>> >>
>>> >>> >
>>> >>>
>>> >>
>>>
>>
org.drools.persistence.session.JPASessionMarshallingHelper.loadSnapshot(JPASessionMarshallingHelper.java:104)
>>> >>> >> /*--------------------------------------------*/
>>> >>> >>
>>> >>> >>
>>> >>> >> Mauricio Salatino wrote:
>>> >>> >> >
>>> >>> >> > Ok, I will try to take a look at it.. this week..
>>> >>> >> > I will let you know if I can fix it
>>> >>> >> >
>>> >>> >> > 2009/7/28 DroolsUser
<rafiuddin.mk(a)gmail.com>:
>>> >>> >> >> Mark / salaboy, I am also facing same problem
while
>>> recreate
>>> >>> the
>>> >>> >> session
>>> >>> >> >> from database. Can you advice any alternative,
so that I
>>> can
>>> >>> go
>>> >>> >> forward
>>> >>> >> >> till
>>> >>> >> >> the next release. Moreover when is the new
release is
>>> .......
>>> >>> Do
>>> >>> >> new
>>> >>> >> >> release
>>> >>> >> >> will targeting this kind problem? Please
suggest any
>>> >>> alternative
>>> >>> >> to
>>> >>> >> >> recreate
>>> >>> >> >> the session from db. Thanks in advance......
>>> >>> >> >>
>>> >>> >> >> gairey wrote:
>>> >>> >> >> Mark, Done:
https://jira.jboss.org/jira/browse/JBRULES-2199
>>> -
>>> >>> >> thanks for
>>> >>> >> >> the
>>> >>> >> >> quick response. Regards, Alan Mark Proctor
Sent by:
>>> >>> >> >> rules-users-bounces(a)lists.jboss.org 08/07/2009
13:49
>>> Please
>>> >>> >> respond to
>>> >>> >> >> Rules
>>> >>> >> >> Users List To Rules Users List cc Subject Re:
>>> [rules-users]
>>> >>> >> Problem with
>>> >>> >> >> JPA
>>> >>> >> >> session persistence in Drools Flow (5.0.1) Can
you open a
>>> JIRA
>>> >>> for
>>> >>> >> this,
>>> >>> >> >> and
>>> >>> >> >> we'll make sure it's done in the next
few weeks:
>>> >>> >> >>
https://jira.jboss.org/jira/browse/JBRULES
thanks Mark
>>> >>> >> >> Alan.Gairey(a)tessella.com wrote: I'm
currently using Drools
>>> >>> Flow
>>> >>> >> with JPA
>>> >>> >> >> session persistence enabled as described in
section 5.1 of
>>> the
>>> >>> >> User
>>> >>> >> >> Guide.
>>> >>> >> >> As a process executes, session information is
saved to the
>>> H2
>>> >>> >> database
>>> >>> >> >> correctly. The problem comes if a process only
executes
>>> part
>>> >>> way
>>> >>> >> through,
>>> >>> >> >> and I then try to finish the process by
recreating a
>>> session
>>> >>> using
>>> >>> >> the
>>> >>> >> >> code:
>>> >>> >> >> // recreate the session from database using
the sessionId
>>> >>> ksession
>>> >>> >> =
>>> >>> >> >>
JPAKnowledgeService.loadStatefulKnowledgeSession(
>>> sessionId,
>>> >>> >> kbase, null,
>>> >>> >> >> env ); This gives me a NullPointerException.
Having looked
>>> >>> into
>>> >>> >> the
>>> >>> >> >> Drools
>>> >>> >> >> Flow source code, I think the problem is in
the class
>>> >>> >> >>
>>> >>> >>
>>> >>> >
>>> >>>
>>> >>
>>>
>>
drools-persistence-jpa\src\main\java\org\drools\persistence\session\SingleSessionCommandService.java.
>>> >>> >> >> The 4th constructor of this class is called as
part of the
>>> >>> loading
>>> >>> >> of a
>>> >>> >> >> knowledge session from the H2 database; this
in turn leads
>>> to
>>> >>> the
>>> >>> >> >> afterCompletion method of the inner class
>>> SynchronizationImpl
>>> >>> >> being
>>> >>> >> >> called.
>>> >>> >> >> The final two lines of this method are:
>>> >>> >> ((JPAProcessInstanceManager)
>>> >>> >> >> ((ReteooWorkingMemory)
>>> >>> >> >>
>>> session).getProcessInstanceManager()).clearProcessInstances();
>>> >>> >> >> ((JPAWorkItemManager) ((ReteooWorkingMemory)
>>> >>> >> >>
session).getWorkItemManager()).clearWorkItems(); However,
>>> when
>>> >>> >> called via
>>> >>> >> >> the route described above, the session member
variable of
>>> >>> >> >> SingleSessionCommandService has not been set,
thus causing
>>> the
>>> >>> >> >> NullPointerException. (Interestingly, running
the unit
>>> tests
>>> >>> for
>>> >>> >> >> drools-persistence-jpa does result in the
>>> NullPointerException
>>> >>> >> being
>>> >>> >> >> thrown
>>> >>> >> >> multiple times, although the tests are still
listed as
>>> having
>>> >>> >> passed.) I
>>> >>> >> >> believe enclosing the above two lines as
follows will fix
>>> the
>>> >>> >> problem: if
>>> >>> >> >> (session != null) {
((JPAProcessInstanceManager)
>>> >>> >> ((ReteooWorkingMemory)
>>> >>> >> >>
>>> session).getProcessInstanceManager()).clearProcessInstances();
>>> >>> >> >> ((JPAWorkItemManager) ((ReteooWorkingMemory)
>>> >>> >> >>
session).getWorkItemManager()).clearWorkItems(); } Also,
>>> in
>>> >>> the
>>> >>> >> 4th
>>> >>> >> >> constructor of SingleSessionCommandService,
after the
>>> session
>>> >>> has
>>> >>> >> been
>>> >>> >> >> set,
>>> >>> >> >> the following line needs to be added to ensure
the session
>>> id
>>> >>> is
>>> >>> >> the same
>>> >>> >> >> as
>>> >>> >> >> the session info id: ((ReteooStatefulSession)
>>> >>> >> this.session).setId(
>>> >>> >> >> this.sessionInfo.getId() ); (This line is
present at the
>>> end
>>> >>> of
>>> >>> >> the 3rd
>>> >>> >> >> constructor.) It would be great if this fix
could make it
>>> into
>>> >>> the
>>> >>> >> Drools
>>> >>> >> >> 5.1 release. Thanks.
>>> >>> >> _______________________________________________
>>> >>> >> >> rules-users mailing list
rules-users(a)lists.jboss.org
>>> >>> >> >>
https://lists.jboss.org/mailman/listinfo/rules-users
>>> >>> >> >>
_______________________________________________
>>> rules-users
>>> >>> >> mailing list
>>> >>> >> >> rules-users(a)lists.jboss.org
>>> >>> >> >>
https://lists.jboss.org/mailman/listinfo/rules-users
>>> >>> >> >>
_______________________________________________
>>> rules-users
>>> >>> >> mailing list
>>> >>> >> >> rules-users(a)lists.jboss.org
>>> >>> >> >>
https://lists.jboss.org/mailman/listinfo/rules-users
>>> >>> >> >>
>>> >>> >> >> ________________________________
>>> >>> >> >> View this message in context: Re: Problem with
JPA session
>>> >>> >> persistence in
>>> >>> >> >> Drools Flow (5.0.1)
>>> >>> >> >> Sent from the drools - user mailing list
archive at
>>> >>>
Nabble.com.
>>> >>> >> >>
>>> >>> >> >>
_______________________________________________
>>> >>> >> >> rules-users mailing list
>>> >>> >> >> rules-users(a)lists.jboss.org
>>> >>> >> >>
https://lists.jboss.org/mailman/listinfo/rules-users
>>> >>> >> >>
>>> >>> >> >>
>>> >>> >> >
>>> >>> >> >
>>> >>> >> >
>>> >>> >> > --
>>> >>> >> > -
http://salaboy.wordpress.com
>>> >>> >> > -
http://www.jbug.com.ar
>>> >>> >> > - Salatino "Salaboy" Mauricio -
>>> >>> >> > _______________________________________________
>>> >>> >> > rules-users mailing list
>>> >>> >> > rules-users(a)lists.jboss.org
>>> >>> >> >
https://lists.jboss.org/mailman/listinfo/rules-users
>>> >>> >> >
>>> >>> >> >
>>> >>> >>
>>> >>> >> --
>>> >>> >> View this message in context:
>>> >>> >>
>>> >>> >
>>> >>>
>>> >>
>>>
>>
http://www.nabble.com/Problem-with-JPA-session-persistence-in-Drools-Flow...
>>> >>> >> Sent from the drools - user mailing list archive at
>>>
Nabble.com.
>>> >>> >>
>>> >>> >> _______________________________________________
>>> >>> >> rules-users mailing list
>>> >>> >> rules-users(a)lists.jboss.org
>>> >>> >>
https://lists.jboss.org/mailman/listinfo/rules-users
>>> >>> >>
>>> >>> >
>>> >>> >
>>> >>> >
>>> >>> >
>>> >>> > Disclaimer:
http://www.kuleuven.be/cwis/email_disclaimer.htm
>>> >>> > _______________________________________________
>>> >>> > rules-users mailing list
>>> >>> > rules-users(a)lists.jboss.org
>>> >>> >
https://lists.jboss.org/mailman/listinfo/rules-users
>>> >>> >
>>> >>> >
>>> >>>
>>> >>> --
>>> >>> View this message in context:
>>> >>>
>>> >>
>>>
>>
http://www.nabble.com/Problem-with-JPA-session-persistence-in-Drools-Flow...
>>> >>> Sent from the drools - user mailing list archive at
Nabble.com.
>>> >>>
>>> >>> _______________________________________________
>>> >>> rules-users mailing list
>>> >>> rules-users(a)lists.jboss.org
>>> >>>
https://lists.jboss.org/mailman/listinfo/rules-users
>>> >>>
>>> >>
>>> >>
>>> >>
>>> >>
>>> >> Disclaimer:
http://www.kuleuven.be/cwis/email_disclaimer.htm
>>> >> _______________________________________________
>>> >> rules-users mailing list
>>> >> rules-users(a)lists.jboss.org
>>> >>
https://lists.jboss.org/mailman/listinfo/rules-users
>>> >>
>>> >>
>>> >
>>> >
>>>
>>> --
>>> View this message in context:
>>>
>>
http://www.nabble.com/Problem-with-JPA-session-persistence-in-Drools-Flow...
>>> Sent from the drools - user mailing list archive at
Nabble.com.
>>>
>>> _______________________________________________
>>> rules-users mailing list
>>> rules-users(a)lists.jboss.org
>>>
https://lists.jboss.org/mailman/listinfo/rules-users
>>>
>>
>>
>>
>>
>> Disclaimer:
http://www.kuleuven.be/cwis/email_disclaimer.htm
>> _______________________________________________
>> rules-users mailing list
>> rules-users(a)lists.jboss.org
>>
https://lists.jboss.org/mailman/listinfo/rules-users
>>
>>
>
http://www.nabble.com/file/p25296442/SnapShotDroolsExample.zip
> SnapShotDroolsExample.zip
>