Rafael Soledade
2013-01-02 12:20:57 UTC
Rafael Soledade [https://community.jboss.org/people/rafaelsoledadem] created the discussion
"No process or session info in database table"
To view the discussion, visit: https://community.jboss.org/message/787027#787027
--------------------------------------------------------------
Hi,
I'm developing a business process flow using jBPM, and so far I've created the BPMN and configured the persistence to work with my database. I've noticed a class mapping in the persistence.xml file for the tables SessionInfo, WorkItemInfo and ProcessInstanceInfo, and they are indeed successfully created in my MySQL schema. The problem is, once I start a new knowledge session and run my process instance, nothing is written in those tables, so I can't really restore sessions (not having persistence, then). What am I doing wrong here? Any help would be appreciated!
Here's my code so far:
.java main
// Load up the events knowledge base
                   KnowledgeBase eventKbase = readEventKnowledgeBase();
                   StatefulKnowledgeSession eventKsession = eventKbase
                                       .newStatefulKnowledgeSession();
                   // Load up the knowledge base
                   KnowledgeBase kbase = readKnowledgeBase();
                   StatefulKnowledgeSession ksession = null;
                   // Settings up JPA persistence
                   EntityManagerFactory emf = Persistence
                                       .createEntityManagerFactory("test");
                   Environment env = KnowledgeBaseFactory.newEnvironment();
                   env.set(EnvironmentName.ENTITY_MANAGER_FACTORY, emf);
                   env.set(EnvironmentName.TRANSACTION_MANAGER,
                                       TransactionManagerServices.getTransactionManager());
                   // create a new knowledge session that uses JPA to store the runtime
                   // state
                   ksession = JPAKnowledgeService.newStatefulKnowledgeSession(kbase, null,
                                       env);
                   // this session id - will have to be stored for recovery of session
                   int sessionId = ksession.getId();
                   System.out.printf("\n-----> Session ID: %d\n", sessionId);
                   // loads up the session with sessionId - not sure how to use this yet
                   // ksession =
                   // JPAKnowledgeService.loadStatefulKnowledgeSession(sessionId, kbase,
                   // null, env);
                   // uses custom process event listener
                   ksession.addEventListener(new CustomProcessEventListener(eventKsession));
                   // register work items
                   ksession.getWorkItemManager().registerWorkItemHandler("Notification",
                                       new MyWorkItemHandler(ksession));
                   // start transaction
                   UserTransaction transaction = (UserTransaction) new InitialContext()
                                       .lookup("java:comp/UserTransaction");
                   transaction.begin();
                   // Create the process instance
                   ProcessInstance processInstance = ksession.createProcessInstance(
                                       "com.sample.bpmn.hello", null);
                   System.out.println("\n-----> Starting new Business process "
                                       + processInstance.getProcessId() + " <ID:" + sessionId + ">\n");
                   // Start the BPM process
                   ksession.startProcessInstance(processInstance.getId());
                   transaction.commit();
                   // Did the process instance complete successfully ?
                   if (processInstance.getState() == ProcessInstance.STATE_COMPLETED) {
                             System.out.printf("\n-----> Business process "
                                                 + processInstance.getProcessId() + " <ID:" + sessionId
                                                 + "> successfully completed\n");
                   }
                   // free resources and end session
                   emf.close();
                   ksession.dispose();
Custom Work Item Handler:
public class MyWorkItemHandler implements WorkItemHandler {
         private KnowledgeRuntime session;
         public MyWorkItemHandler() {
         }
         public MyWorkItemHandler(KnowledgeRuntime session) {
                   this();
                   this.session = session;
         }
         public void executeWorkItem(WorkItem workItem, WorkItemManager manager) {
/**
                   // extract parameters
                   String from = (String) workItem.getParameter("From");
                   String to = (String) workItem.getParameter("To");
                   String message = (String) workItem.getParameter("Message");
                   String priority = (String) workItem.getParameter("Priority");
       // Artificial wait
       try {
           Thread.sleep(5000);
       }
       catch (Exception ex) {
       }
                   System.out.println("###work item handler operations###");
                   session.getWorkItemManager().completeWorkItem(workItem.getId(), null);
                   //manager.completeWorkItem(workItem.getId(), null);
         }
persistence.xml:
<persistence-unit name="test" transaction-type="JTA">
                   <provider>org.hibernate.ejb.HibernatePersistence</provider>
                   <class>org.jbpm.persistence.processinstance.ProcessInstanceInfo</class>
                   <class>org.drools.persistence.info.SessionInfo</class>
                   <class>org.drools.persistence.info.WorkItemInfo</class>
                   <properties>
                             <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
                             <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" />
                             <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/test" />
                             <property name="hibernate.connection.username" value="root" />
                             <property name="hibernate.connection.password" value="12345" />
                             <property name="hibernate.connection.autocommit" value="false" />
                             <property name="hibernate.max_fetch_depth" value="3" />
                             <property name="hibernate.hbm2ddl.auto" value="create" />
                             <property name="hibernate.show_sql" value="false" />
                             <property name="hibernate.transaction.manager_lookup_class"
                                       value="org.hibernate.transaction.BTMTransactionManagerLookup" />
                   </properties>
         </persistence-unit>
</persistence>
--------------------------------------------------------------
Reply to this message by going to Community
[https://community.jboss.org/message/787027#787027]
Start a new discussion in jBPM at Community
[https://community.jboss.org/choose-container!input.jspa?contentType=1&containerType=14&container=2034]
"No process or session info in database table"
To view the discussion, visit: https://community.jboss.org/message/787027#787027
--------------------------------------------------------------
Hi,
I'm developing a business process flow using jBPM, and so far I've created the BPMN and configured the persistence to work with my database. I've noticed a class mapping in the persistence.xml file for the tables SessionInfo, WorkItemInfo and ProcessInstanceInfo, and they are indeed successfully created in my MySQL schema. The problem is, once I start a new knowledge session and run my process instance, nothing is written in those tables, so I can't really restore sessions (not having persistence, then). What am I doing wrong here? Any help would be appreciated!
Here's my code so far:
.java main
// Load up the events knowledge base
                   KnowledgeBase eventKbase = readEventKnowledgeBase();
                   StatefulKnowledgeSession eventKsession = eventKbase
                                       .newStatefulKnowledgeSession();
                   // Load up the knowledge base
                   KnowledgeBase kbase = readKnowledgeBase();
                   StatefulKnowledgeSession ksession = null;
                   // Settings up JPA persistence
                   EntityManagerFactory emf = Persistence
                                       .createEntityManagerFactory("test");
                   Environment env = KnowledgeBaseFactory.newEnvironment();
                   env.set(EnvironmentName.ENTITY_MANAGER_FACTORY, emf);
                   env.set(EnvironmentName.TRANSACTION_MANAGER,
                                       TransactionManagerServices.getTransactionManager());
                   // create a new knowledge session that uses JPA to store the runtime
                   // state
                   ksession = JPAKnowledgeService.newStatefulKnowledgeSession(kbase, null,
                                       env);
                   // this session id - will have to be stored for recovery of session
                   int sessionId = ksession.getId();
                   System.out.printf("\n-----> Session ID: %d\n", sessionId);
                   // loads up the session with sessionId - not sure how to use this yet
                   // ksession =
                   // JPAKnowledgeService.loadStatefulKnowledgeSession(sessionId, kbase,
                   // null, env);
                   // uses custom process event listener
                   ksession.addEventListener(new CustomProcessEventListener(eventKsession));
                   // register work items
                   ksession.getWorkItemManager().registerWorkItemHandler("Notification",
                                       new MyWorkItemHandler(ksession));
                   // start transaction
                   UserTransaction transaction = (UserTransaction) new InitialContext()
                                       .lookup("java:comp/UserTransaction");
                   transaction.begin();
                   // Create the process instance
                   ProcessInstance processInstance = ksession.createProcessInstance(
                                       "com.sample.bpmn.hello", null);
                   System.out.println("\n-----> Starting new Business process "
                                       + processInstance.getProcessId() + " <ID:" + sessionId + ">\n");
                   // Start the BPM process
                   ksession.startProcessInstance(processInstance.getId());
                   transaction.commit();
                   // Did the process instance complete successfully ?
                   if (processInstance.getState() == ProcessInstance.STATE_COMPLETED) {
                             System.out.printf("\n-----> Business process "
                                                 + processInstance.getProcessId() + " <ID:" + sessionId
                                                 + "> successfully completed\n");
                   }
                   // free resources and end session
                   emf.close();
                   ksession.dispose();
Custom Work Item Handler:
public class MyWorkItemHandler implements WorkItemHandler {
         private KnowledgeRuntime session;
         public MyWorkItemHandler() {
         }
         public MyWorkItemHandler(KnowledgeRuntime session) {
                   this();
                   this.session = session;
         }
         public void executeWorkItem(WorkItem workItem, WorkItemManager manager) {
/**
                   // extract parameters
                   String from = (String) workItem.getParameter("From");
                   String to = (String) workItem.getParameter("To");
                   String message = (String) workItem.getParameter("Message");
                   String priority = (String) workItem.getParameter("Priority");
       // Artificial wait
       try {
           Thread.sleep(5000);
       }
       catch (Exception ex) {
       }
                   System.out.println("###work item handler operations###");
                   session.getWorkItemManager().completeWorkItem(workItem.getId(), null);
                   //manager.completeWorkItem(workItem.getId(), null);
         }
persistence.xml:
<persistence-unit name="test" transaction-type="JTA">
                   <provider>org.hibernate.ejb.HibernatePersistence</provider>
                   <class>org.jbpm.persistence.processinstance.ProcessInstanceInfo</class>
                   <class>org.drools.persistence.info.SessionInfo</class>
                   <class>org.drools.persistence.info.WorkItemInfo</class>
                   <properties>
                             <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
                             <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" />
                             <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/test" />
                             <property name="hibernate.connection.username" value="root" />
                             <property name="hibernate.connection.password" value="12345" />
                             <property name="hibernate.connection.autocommit" value="false" />
                             <property name="hibernate.max_fetch_depth" value="3" />
                             <property name="hibernate.hbm2ddl.auto" value="create" />
                             <property name="hibernate.show_sql" value="false" />
                             <property name="hibernate.transaction.manager_lookup_class"
                                       value="org.hibernate.transaction.BTMTransactionManagerLookup" />
                   </properties>
         </persistence-unit>
</persistence>
--------------------------------------------------------------
Reply to this message by going to Community
[https://community.jboss.org/message/787027#787027]
Start a new discussion in jBPM at Community
[https://community.jboss.org/choose-container!input.jspa?contentType=1&containerType=14&container=2034]