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