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

--------------------------------------------------------------
Hi,

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:

 start>>
        StatefulKnowledgeSession ksession = newSession();      
 
        // start a new process instance
        ProcessInstance instance = ksession.startProcess(id, params);      
        
        ProcessIntanceInfo(instance.getId(), ksession.getId());
        
        ksession.dispose();
 
        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);
attachListeners(s);
 
TaskClient t = ....;
 
t.complete( taskId, serId, outputData, responseHandler );
 
responseHandler.waitTillDone(5000);
 
s.dispose();
 


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,
Juan
--------------------------------------------------------------

Reply to this message by going to Community
[http://community.jboss.org/message/643768#643768]

Start a new discussion in jBPM at Community
[http://community.jboss.org/choose-container!input.jspa?contentType=1&containerType=14&container=2034]

_______________________________________________
jboss-user mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/jboss-user

Reply via email to