[rules-users] Drools Flow :Persistence Problem : Restore StatefulKnowledgeSession from database

Pardeep.Ruhil at lntinfotech.com Pardeep.Ruhil at lntinfotech.com
Wed Nov 18 23:15:02 EST 2009


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

______________________________________________________________________


______________________________________________________________________

______________________________________________________________________


______________________________________________________________________
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20091119/dffae18c/attachment.html 


More information about the rules-users mailing list