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@lntinfotech.com [mailto:Pardeep.Ruhil@lntinfotech.com]
Sent: Wednesday, November 18, 2009
12:38 AM
To: rules-users@lists.jboss.org
Cc: kris.verlaenen@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@cs.kuleuven.be>
11/17/2009 04:17 PM |
|
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@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@lists.jboss.org
> [mailto:rules-users-bounces@lists.jboss.org]
On Behalf Of Kris
> Verlaenen
> Sent: Monday, November 16, 2009 5:12 PM
> To: Rules Users List;
Pardeep.Ruhil@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@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@lists.jboss.org
>
https://lists.jboss.org/mailman/listinfo/rules-users
> _______________________________________________
> rules-users mailing list
> rules-users@lists.jboss.org
>
https://lists.jboss.org/mailman/listinfo/rules-users
>
Disclaimer:
http://www.kuleuven.be/cwis/email_disclaimer.htm
______________________________________________________________________
______________________________________________________________________