[rules-users] Drools Flow :Persistence Problem : Restore StatefulKnowledgeSession from database
Kris Verlaenen
Kris.Verlaenen at cs.kuleuven.be
Sun Nov 22 21:12:58 EST 2009
To me it seems you either need to make your request object smarter, so
it can look up the reference to the transient variables after a restore
in case the reference is null, or not insert the HttpServlerRequest
itself but a domain object that contains it state.
Kris
Quoting Pardeep.Ruhil at lntinfotech.com:
> Hi, Vijay,
>
> I am not doing this to store request object.
> loadSession.insert(request);
>
> What I am doing is I created a pojo class having setter and getter
> method
> of HttpServletRequest and some other class objects and declare
> this(request) as transient.
> So because of that this will not get store into the database and rest
> of
> the variables of pojo class gets way into the database.
> What you are telling to take the request map and insert that , I have
> done
> that part.
> But I have a service written in my project which takes request object
> as a
> parameter , which I have called in the ActionWorkItemHandler (custom
> Action Work Item made to execute my service).
>
> Now inside the exceute(WorkITem workItem, WorkItemManager manager)
> method
> of ActionWorkItemHandler when I am trying to
> retrieve the request object after loading session from the database.
> I am getting it as null, which is obvious as it was not stored in the
>
> database.
>
> So I just want to know if I have a non serilizable object , how can I
> pass
> that into the process and use this in a custom ActionWorkItemHandler.
> Please let me know if you understand what I am saying.
>
> Thanks & Regards
>
> Pardeep Ruhil
> L&T Infotech Ltd
> Mumbai
> Ph: +919820283884
>
> Larsen & Toubro Infotech Ltd.
> www.Lntinfotech.com
>
> This Document is classified as:
>
> L&T Infotech Proprietary L&T Infotech Confidential L&T Infotech
> Internal Use Only L&T Infotech General Business
>
> This Email may contain confidential or privileged information for the
>
> intended recipient (s) If you are not the intended recipient, please
> do
> not use or disseminate the information, notify the sender and delete
> it
> from your system.
>
>
>
> Vijay K Pandey <VPandey at mdes.ms.gov>
> 11/19/2009 10:44 AM
>
> To
> "Pardeep.Ruhil at lntinfotech.com" <Pardeep.Ruhil at lntinfotech.com>,
> "rules-users at lists.jboss.org" <rules-users at lists.jboss.org>
> cc
> "kris.verlaenen at cs.kuleuven.be" <kris.verlaenen at cs.kuleuven.be>
> Subject
> RE: [rules-users] Drools Flow :Persistence Problem : Restore
> StatefulKnowledgeSession from database
>
>
>
>
>
>
> I donât understand what you meant by storing the HttpServletRequest
>
> object? With the default marshalling strategy for JPA in place I
> donât
> think you can insert a non serializable object? How come this piece
> of
> code is working fine at your end?
> loadSession.insert(request);
>
> Which set of objects are you looking from the request? May be you
> want to
> get hold of the request parameter map -- or create a list of
> attribute
> map and insert those instead of HttpServletRequest object
>
> Am I missing something of what you meant in your email?
>
> From: Pardeep.Ruhil at lntinfotech.com
> [mailto:Pardeep.Ruhil at lntinfotech.com]
>
> Sent: Wednesday, November 18, 2009 10:15 PM
> To: Vijay K Pandey; rules-users at lists.jboss.org
> Cc: kris.verlaenen at cs.kuleuven.be
> Subject: RE: [rules-users] Drools Flow :Persistence Problem : Restore
>
> StatefulKnowledgeSession from database
>
>
> Hi Vijay,
> Thanks for your reply.
> The problem is that object that I am inserting it into the session
> object
> is NOT serializable, as you know HttpServletRequest object is not
> serializable.
> So because of this I am not able to store this object into the
> database.
> So that's why I am asking how can i do this if my object is not
> serilizable.
>
>
> Thanks & Regards
>
> Pardeep Ruhil
> nt (s) If you are not the intended recipient, please do not use or
> disseminate the information, notify the sender and delete it from
> your
> system.
>
>
> Vijay K Pandey <VPandey at mdes.ms.gov>
> 11/18/2009 10:56 PM
>
>
> To
> "Pardeep.Ruhil at lntinfotech.com" <Pardeep.Ruhil at lntinfotech.com>,
> "rules-users at lists.jboss.org" <rules-users at lists.jboss.org>
> cc
> "kris.verlaenen at cs.kuleuven.be" <kris.verlaenen at cs.kuleuven.be>
> Subject
> RE: [rules-users] Drools Flow :Persistence Problem : Restore
> StatefulKnowledgeSession from database
>
>
>
>
>
>
>
>
>
> You have to load the same âStatefulKnowledgeSessionâ in which you
> have
> inserted your objects. The inserted objects are serialized and stored
> in
> the column ârules_byte_arrayâ of the session_info table.
>
> So you have to load the same session â to get to your inserted
> objects.
>
> There is a difference the way process map objects are handled â
> such as
>
> Map<String, Object> parameters = new HashMap<String,
> Object>();
> parameters.put("x", "hello");
> parameters.put("y", "hey I am y");
> ksession.startProcess( "myprocess", parameters );
>
> In the above case the parameters are not stored as part of the
> âsession
> infoâ table. These are stored separately like in âprocess
> instance infoâ
> table + (some/other tables if you use variable persistence
> strategy)â so
> if you donât have the rules which are based on the objects you are
> inserting â you can get the same done through process parameters in
> which
> case you can get hold of the process instance through any new
> session or
> the same session and then its parameters.
>
> Vijay
>
>
>
> From: Pardeep.Ruhil at lntinfotech.com
> [mailto:Pardeep.Ruhil at lntinfotech.com]
>
> Sent: Wednesday, November 18, 2009 12:38 AM
> To: rules-users at lists.jboss.org
> Cc: kris.verlaenen at cs.kuleuven.be; Vijay K Pandey
> Subject: Re: [rules-users] Drools Flow :Persistence Problem : Restore
>
> StatefulKnowledgeSession from database
>
>
> Hi Kris,
> Thanks for you valuable input and Vijay of course clearing some of my
>
> doubts by asking question on this.
>
> Much of my doubt are clear except one.
> When we are reloading the StatefulKnowledgeSession from the database
> using
> the below line
>
> StatefulKnowledgeSession loadSession= JPAKnowledgeService.
> loadStatefulKnowledgeSession(id, kbase, null, env);
>
> This session object is different from the one that is created when we
>
> first created
> StatefulknowledgeSession object using
>
> StatefulKnowledgeSession initialSession= JPAKnowledgeService.
> newStatefulKnowledgeSession(kbase, null, env);
>
> Am I right ?
>
> Now In my case I have a HumanWorkItemHandler class for handling the
> humantask and there is ActionWorkITemHandler for my customAction
> workItem,
> which both are initailsed with the initialSession object.
> Now when I load the session from the database to complete the
> HumanWorkItemHandler task I got a different session object i.e.
> loadSession.
> Now when I insert something in the loadsession using
> loadSession.insert(request); So that I can use the same in
> ActionWorkItemHandler to exceute the action for the request.
> I am not able to retrieve the same request object i.e.
> (HttpServletRequest) from the session in ActionWorkItemHandler
> as when i do
> Collection obj = loadSession.getObject();
> I get request as null. Because this loadSession is different from
> the
> one I have inserted.
>
> Kindly help in this, or I have misunderstood the concept.
>
> Thanks & Regards
>
> Pardeep Ruhil
>
> Kris Verlaenen <kris.verlaenen at cs.kuleuven.be>
> 11/17/2009 04:17 PM
>
>
>
> To
> Rules Users List <rules-users at lists.jboss.org>, Vijay K Pandey
> <VPandey at mdes.ms.gov>
> cc
> "Pardeep.Ruhil at lntinfotech.com" <Pardeep.Ruhil at lntinfotech.com>
> Subject
> Re: [rules-users] Drools Flow :Persistence Problem : Restore
> StatefulKnowledgeSession from database
>
>
>
>
>
>
>
>
>
>
>
>
> Preferably you should cache the session itself as well (so you don't
> have to recreate it all the time) and reuse that across you
> application.
> Or you could have multiple independent sessions as well. If you
> store
> the key of the session somewhere, you can easily restore this session
> (or sessions) after failure.
>
> Kris
>
> Quoting Vijay K Pandey <VPandey at mdes.ms.gov>:
>
> > Let's say where we don't need timers - in those cases one can
> create
> > (create only if its not there) a global session (create the
> > sessioninfo at the drools startup - store the session primary key
> > somewhere) - reuse this session across everywhere?
> >
> > Vijay
> > -----Original Message-----
> > From: rules-users-bounces at lists.jboss.org
> > [mailto:rules-users-bounces at lists.jboss.org] On Behalf Of Kris
> > Verlaenen
> > Sent: Monday, November 16, 2009 5:12 PM
> > To: Rules Users List; Pardeep.Ruhil at lntinfotech.com
> > Subject: Re: [rules-users] Drools Flow :Persistence Problem :
> Restore
> > StatefulKnowledgeSession from database
> >
> > Pardeep,
> >
> > The behavior you are describing is indeed correct. The session in
> > this
> > case is a global session, meaning that it will be used for all
> > process
> > instances. Note however that, unless you are using timers, all
> > other
> > state (process instance state, work items, etc.) is persisted
> > separately
> > and the session state will basically be empty.
> >
> > It is also possible to have one session per process instance (or
> > whatever partitioning you like). A session has a unique id (which
> > you
> > can specify when reloading the session). You'll then have to load
> > the
> > right session before continuing the execution of your process
> > instance.
> >
> > Kris
> >
> > Quoting Pardeep.Ruhil at lntinfotech.com:
> >
> > > Hi Salaboy,
> > > Thanks for you replying.
> > > Yes, of course it is storing multiple process instance Id in the
> > > database.
> > > But, what I feel is that it will fail when I am trying to run two
> > > workflow
> > > at the same time simultaneously, using the same code by
> > dynamically
> > > providing the workflow name and the parameters for each of them.
> > > Ideally there should be two entries for the
> > StatfulKnowledgeSession
> > > object
> > > because when I try to load the StatefulKnowledgeSession object
> > from
> > > the
> > > database it will give me the session object of the workflow which
> > is
> > > last
> > > executed.
> > >
> > > For example lets suppose I have two workflow 1 and 2 having two
> > > humantask
> > > in each of them . So when I finish the first Human Task of both
> > > workflow
> > > one by one. SessionInfo present in the database is of workflow
> 2
> > > (if 2
> > > is executed last). Because there is no field in the sessioninfo
> > > entity of
> > > the database regarding to which workflow it belongs to. Am I
> right
> > ?
> > > So when I try to finish the 1st workflow by executing the 2nd
> > > humantask
> > > left in it , I need to reload the StatfulKnowledgeSession object
> > from
> > > the
> > > database. As there is no way of distinguishing that the session
> > > object
> > > store in the database is of which workflow , there might be a
> > problem
> > > as I
> > > may get the ksession object of 2nd workflow.
> > >
> > > In case of Process Instance it is fine , because there is a field
> > > 'processId' which will distinguish which processInstanceId
> belongs
> > to
> > >
> > > which worklowId or processId.
> > > But in case of Session , there is noting as such.
> > > I don't what I am saying is handled in drools persistence. Please
> > let
> > > me
> > > know if it there or not.
> > >
> > > Thanks & Regards
> > >
> > > Pardeep Ruhil
> > >
> > >
> > >
> >
> ______________________________________________________________________
> >
> >
> >
> >
> > Disclaimer: http://www.kuleuven.be/cwis/email_disclaimer.htm
> > _______________________________________________
> > rules-users mailing list
> > rules-users at lists.jboss.org
> > https://lists.jboss.org/mailman/listinfo/rules-users
> > _______________________________________________
> > rules-users mailing list
> > rules-users at lists.jboss.org
> > https://lists.jboss.org/mailman/listinfo/rules-users
> >
>
>
>
>
> Disclaimer: http://www.kuleuven.be/cwis/email_disclaimer.htm
>
> ______________________________________________________________________
>
>
> ______________________________________________________________________
>
>
> ______________________________________________________________________
>
>
> ______________________________________________________________________
>
> ______________________________________________________________________
>
>
> ______________________________________________________________________
>
Disclaimer: http://www.kuleuven.be/cwis/email_disclaimer.htm
More information about the rules-users
mailing list