[jboss-user] [jBPM] - Session Management - only one inside application or one by processs

gardellajp do-not-reply at jboss.com
Thu Dec 29 07:12:15 EST 2011

gardellajp [http://community.jboss.org/people/gardellajp] created the discussion

"Session Management - only one inside application or one by processs"

To view the discussion, visit: http://community.jboss.org/message/643768#643768


I have some questions about how manage sessions. I read official doc and says:

*+Chapter 4. Core Engine: API+*

+Sessions can be created based on a knowledge base and are used to execute processes and interact with the engine.  You can create as many independent session as you need and creating a session is considered relatively lightweight.  How many sessions you create is up to you.  In general, most simple cases start out with creating one session that is then called from various places in your application.  You could decide to create multiple sessions if for example you want to have multiple independent processing units (for example, if you want all processes from one customer to be completely independent from processes for another customer, you could create an independent session for each customer) or if you need multiple sessions for scalability reasons.  If you don't know what to do, simply start by having *one knowledge base that contains all your process definitions* and *one create session* that you then use to execute all your processes.+

After read it, I want decide how manage session, so.

1) Create one session inside application and never dispose it.
2) Create a session per process. So when I start a process, I save somewhere the information about which sessionId must use for a processId.

I like option two, with persistent sessions. So when I start a process, I do:

        StatefulKnowledgeSession ksession = newSession();      
        // start a new process instance
        ProcessInstance instance = ksession.startProcess(id, params);      
        ProcessIntanceInfo(instance.getId(), ksession.getId());
        return p;

So in my application I save +p.+ When I must interact with p, I load the session associate with +p.getProcessId()+. Cool, I have a session persistent per process.

But when I go deep in implementation, I found some problems, for example related events. I want listen when a task is complete so I attach some listener to the session when I load/start it. *But* after work with the session I dispose it, so the listener don't work. I think the solution is this:

long processId = p.getProcessId();
int sessionId =  p.getSessionId();
StatefulKnowledgeSession s = loadSession(sessionId);
TaskClient t = ....;
t.complete( taskId, serId, outputData, responseHandler );

Now, the questions:

1) With this code, is safe except that the listener will listen the event of complete task?
2) Is this a good way to manage sessions? I don't find a good tutorial or document of differents strategies for handle sessions.

Thanks for your time,

Reply to this message by going to Community

Start a new discussion in jBPM at Community

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/jboss-user/attachments/20111229/7f431dfc/attachment-0001.html 

More information about the jboss-user mailing list