Miljenko Norsic [http://community.jboss.org/people/mnorsic] created the 
discussion

"jPBM 5.1, persistent processes get finished without regard to session"

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

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

I've made a small sample app that stores knowledge session into a H2 database, 
based on jBPM user guide.

{code}
PoolingDataSource ds = new PoolingDataSource();
 ds.setUniqueName("jdbc/BitronixJTADataSource");
 ds.setClassName("org.h2.jdbcx.JdbcDataSource");
 ds.setMaxPoolSize(3);
 ds.setAllowLocalTransactions(true);
 ds.getDriverProperties().put("user", "sa");
 ds.getDriverProperties().put("password", "");
 ds.getDriverProperties().put("URL", "jdbc:h2:tcp://localhost/~/test");
 ds.init();

 EntityManagerFactory emf = 
Persistence.createEntityManagerFactory("org.jbpm.persistence.jpa");

 // load up the knowledge base
 KnowledgeBase kbase = readKnowledgeBase();
 Environment env = KnowledgeBaseFactory.newEnvironment();
 env.set(EnvironmentName.ENTITY_MANAGER_FACTORY, emf);
 env.set(EnvironmentName.TRANSACTION_MANAGER, 
TransactionManagerServices.getTransactionManager());

 Integer sessionId = null;
 if (args != null && args.length == 1) {
 sessionId = Integer.valueOf(args[0]);
 }
 StatefulKnowledgeSession ksession = null;
 if (sessionId == null) {
 // new session
 ksession = JPAKnowledgeService.newStatefulKnowledgeSession(kbase, null, env);
 } else {
 // load existing session from database
 ksession = JPAKnowledgeService.loadStatefulKnowledgeSession(sessionId, kbase, 
null, env);
 }
  // start the transaction
 UserTransaction ut = (UserTransaction) new 
InitialContext().lookup("java:comp/UserTransaction");
 ut.begin();

  // start 5 new process instances
ksession.startProcess("com.sample.bpmn.hello");
ksession.startProcess("com.sample.bpmn.hello");
ksession.startProcess("com.sample.bpmn.hello");
ksession.startProcess("com.sample.bpmn.hello");
ksession.startProcess("com.sample.bpmn.hello");
 ksession.dispose();
 ut.commit();
{code}

For each knowledge session, 5 processes are created, and that process waits for 
a signal (it is not completed).

I have another application that loads knowledge session from database (by using 
ID that was provided upon knowledge session generation), and that spawns a 
signal:
{code}
ksession.signalEvent("Signal", null);
{code}

When signal is sent, it effectively runs all process instances into completion, 
and that is OK.

But when I have for example more stateful sessions persisted, and each has its 
own set of processes, calling {code}ksession.signalEvent("Signal", null);{code} 
runs processes from all sessions into completion, not only the processes that 
belong to that particular session.

Another thing I've spotted: when I load knowledge session from database, method 
{code}ksession.getProcessInstances(){code} returns empty list.
That is weird because at the same time method 
{code}ksession.getProcessInstance(1){code} correctly loads process instance 
from database.

Thanks,
Miljenko
--------------------------------------------------------------

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

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