[jboss-user] [jBPM] - Programmatic interaction with Human Task

Swaminathan Bhaskar do-not-reply at jboss.com
Thu Jun 14 17:09:08 EDT 2012


Swaminathan Bhaskar [https://community.jboss.org/people/swaminathan.bhaskar] created the discussion

"Programmatic interaction with Human Task"

To view the discussion, visit: https://community.jboss.org/message/741849#741849

--------------------------------------------------------------
I am using JBPM 5.2 and am trying to programmatically intyeract with Human task. I just have one user task in my process.

Here is my code:
                      
public class sample06 {
     public static final String BPMN_RESOURCE = "sample06.bpmn";
     public static final String BPM_PROCESS   = "sample06";
     public static final String BPM_USER      = "joe";
     
     private static TaskServer taskServer = null;
     
     public static final void main(String[] args) {
          try {
               setupDS();
               setupTS();
               
               TaskClient taskClient = new TaskClient(new MinaTaskClientConnector("sample06", new MinaTaskClientHandler(SystemEventListenerFactory.getSystemEventListener())));
               taskClient.connect("127.0.0.1", 9123);
               
               // Setup JPA persistence
               EntityManagerFactory emfJBPM = Persistence.createEntityManagerFactory("org.jbpm.persistence.jpa");
               
               Environment env = KnowledgeBaseFactory.newEnvironment();
               env.set(EnvironmentName.ENTITY_MANAGER_FACTORY, emfJBPM);
               env.set(EnvironmentName.TRANSACTION_MANAGER, TransactionManagerServices.getTransactionManager());
               
               // Load and setup the BPM process
               KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
               kbuilder.add(ResourceFactory.newClassPathResource(BPMN_RESOURCE), ResourceType.BPMN2);
               
               // Do we have any errors ?
             if (kbuilder.hasErrors()) {
                 if (kbuilder.getErrors().size() > 0) {
                     for (KnowledgeBuilderError error : kbuilder.getErrors()) {
                         System.out.printf("Error building KnowledgeBase: %s\n", error.getMessage());
                     }
                 }
                 throw new RuntimeException("Error building KnowledgeBase");
             }
               
               KnowledgeBase kbase = kbuilder.newKnowledgeBase();
               
               StatefulKnowledgeSession ksession = JPAKnowledgeService.newStatefulKnowledgeSession(kbase, null, env);
               
               ksession.getWorkItemManager().registerWorkItemHandler("Human Task", new WSHumanTaskHandler());
               // ksession.getWorkItemManager().registerWorkItemHandler("Human Task", new CommandBasedWSHumanTaskHandler(ksession));
                    
               System.out.printf("\n-----> Session ID: %d\n", ksession.getId());
                    
               // Create the process instance
               ProcessInstance processInstance = ksession.createProcessInstance(BPM_PROCESS, null);
                    
               System.out.printf("\n-----> Starting new Business process %s \n", processInstance.getProcessId(), processInstance.getId());
                    
               // Start the BPM process
               ksession.startProcessInstance(processInstance.getId());
               
               List tasks = null;
               
               // Use task client to fetch tasks for the owner
               {
                    BlockingTaskSummaryResponseHandler summaryHandler = new BlockingTaskSummaryResponseHandler();
                    taskClient.getTasksAssignedAsPotentialOwner(BPM_USER, null, summaryHandler);
                    summaryHandler.waitTillDone(1000);
                    tasks = summaryHandler.getResults();
               }
               
               for (TaskSummary task : tasks) {
                    long taskId = task.getId();
                    
                    String taskName = task.getName();
                    
                    // Claim the task
                    {
                         BlockingTaskOperationResponseHandler claimHandler = new BlockingTaskOperationResponseHandler();
                         taskClient.claim(taskId, BPM_USER, claimHandler);
                         claimHandler.waitTillDone(1000);
                         
                         System.out.printf("\n-----> Task %s <%d> claimed\n", taskName, taskId);
                    }
                    
                    // Start the task
                    {
                         BlockingTaskOperationResponseHandler startHandler = new BlockingTaskOperationResponseHandler();
                         taskClient.start(taskId, BPM_USER, startHandler);
                         startHandler.waitTillDone(1000);
                         
                         System.out.printf("\n-----> Task %s <%d> started\n", taskName, taskId);
                    }
                    
                    // Complete the task
                    {
                         BlockingTaskOperationResponseHandler completeHandler = new BlockingTaskOperationResponseHandler();
                         taskClient.complete(taskId, BPM_USER, null, completeHandler);
                         completeHandler.waitTillDone(1000);
                         
                         System.out.printf("\n-----> Task %s <%d> completed\n", taskName, taskId);
                    }
               }
                    
               // Did the process instance complete successfully ?
               if (processInstance.getState() == ProcessInstance.STATE_COMPLETED) {
                    System.out.printf("\n-----> Business process %s  successfully completed\n", processInstance.getProcessId(), processInstance.getId());
               }
               
               taskClient.disconnect();
               
               taskServer.stop();
          }
          catch (Exception ex) {
               ex.printStackTrace(System.err);
               System.exit(1);
          }
          
          System.exit(0);
     }
     
     public static void setupDS() throws Exception {
          // Setup Datasource
          PoolingDataSource mysqlDS = new PoolingDataSource();
          mysqlDS.setUniqueName("jdbc/MySQL-DS");
          mysqlDS.setClassName("com.mysql.jdbc.jdbc2.optional.MysqlXADataSource");
          mysqlDS.setMaxPoolSize(3);
          mysqlDS.setAllowLocalTransactions(true);
          mysqlDS.getDriverProperties().put("user", "*****");
          mysqlDS.getDriverProperties().put("password", "*****");
          mysqlDS.getDriverProperties().put("URL", "jdbc:mysql://localhost:3306/mytestdb");
          mysqlDS.init();
     }
     
     public static void setupTS() throws Exception {
          // Setup Task persistence
          EntityManagerFactory emfTASK = Persistence.createEntityManagerFactory("org.jbpm.task");
          
          // Setup Human Task Service
          
          System.out.printf("\n-----> Ready to start Mina Task service .....\n");
          
          TaskService taskService = new TaskService(emfTASK, SystemEventListenerFactory.getSystemEventListener());
          TaskServiceSession taskSession = taskService.createSession();
          taskSession.addUser(new User(BPM_USER));
          taskServer = new MinaTaskServer(taskService);
          Thread thread = new Thread(taskServer);
          thread.start();
          while (!taskServer.isRunning()) {
               System.out.print(".");
               Thread.sleep(50);
          }
          System.out.print("Mina Task service started successfully !!!!!\n");
     }
}


When I run the code, encounter the following exception:
14/06 16:49:24,245[NioProcessor-4] ERROR hibernate.util.JDBCExceptionReporter.logExceptions  - Cannot add or update a child row: a foreign key constraint fails (`mytestdb`.`peopleassignments_bas`, CONSTRAINT `FK9D8CF4EC2C122ED2` FOREIGN KEY (`entity_id`) REFERENCES `organizationalentity` (`id`))
14/06 16:49:24,245[NioProcessor-4] ERROR event.def.AbstractFlushingEventListener.performExecutions  - Could not synchronize database state with session
org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
        at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:94)
        at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
        at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:275)
        at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:114)
        at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:109)
        at org.hibernate.jdbc.AbstractBatcher.prepareBatchStatement(AbstractBatcher.java:244)
        at org.hibernate.persister.collection.AbstractCollectionPersister.recreate(AbstractCollectionPersister.java:1141)
        at org.hibernate.action.CollectionRecreateAction.execute(CollectionRecreateAction.java:58)
        at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279)
        at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:263)
        at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:171)
        at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
        at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:50)
        at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1028)
        at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:366)
        at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:137)
        at org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:54)
        at org.jbpm.task.service.TaskServiceSession.doOperationInTransaction(TaskServiceSession.java:971)
        at org.jbpm.task.service.TaskServiceSession.addTask(TaskServiceSession.java:171)
        at org.jbpm.task.service.TaskServerHandler.messageReceived(TaskServerHandler.java:109)
        at org.jbpm.task.service.mina.MinaTaskServerHandler.messageReceived(MinaTaskServerHandler.java:41)
        at org.apache.mina.core.filterchain.DefaultIoFilterChain$TailFilter.messageReceived(DefaultIoFilterChain.java:716)
        at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:434)
        at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1200(DefaultIoFilterChain.java:46)
        at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:796)
        at org.apache.mina.filter.codec.ProtocolCodecFilter$ProtocolDecoderOutputImpl.flush(ProtocolCodecFilter.java:427)
        at org.apache.mina.filter.codec.ProtocolCodecFilter.messageReceived(ProtocolCodecFilter.java:245)
        at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:434)
        at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1200(DefaultIoFilterChain.java:46)
        at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:796)
        at org.apache.mina.filter.logging.LoggingFilter.messageReceived(LoggingFilter.java:177)
        at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:434)
        at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1200(DefaultIoFilterChain.java:46)
        at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:796)
        at org.apache.mina.core.filterchain.IoFilterAdapter.messageReceived(IoFilterAdapter.java:119)
        at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:434)
        at org.apache.mina.core.filterchain.DefaultIoFilterChain.fireMessageReceived(DefaultIoFilterChain.java:426)
        at org.apache.mina.core.polling.AbstractPollingIoProcessor.read(AbstractPollingIoProcessor.java:692)
        at org.apache.mina.core.polling.AbstractPollingIoProcessor.process(AbstractPollingIoProcessor.java:645)
        at org.apache.mina.core.polling.AbstractPollingIoProcessor.process(AbstractPollingIoProcessor.java:634)
        at org.apache.mina.core.polling.AbstractPollingIoProcessor.access$400(AbstractPollingIoProcessor.java:66)
        at org.apache.mina.core.polling.AbstractPollingIoProcessor$Processor.run(AbstractPollingIoProcessor.java:1078)
        at org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:64)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)


Any ideas ? Any help appreciated.
--------------------------------------------------------------

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

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

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/jboss-user/attachments/20120614/9d39133d/attachment-0001.html 


More information about the jboss-user mailing list