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
