Environment
- Wildfly 10.1.0.Final
- jBPM 7.3.0.Final
Process OrderProcess
1. Diagram
2. Process Variables
3. Setup Process Script Task
4. Order Task I/O Parameters
5. Check Quantity Script Task
1 2 3 4 5 6 7 |
int qnt = java.lang.Integer.parseInt(quantity); if ( qnt > 1000) isAvailable = false; else isAvailable = true; kcontext.setVariable("isAvailable", isAvailable); System.out.println(">>>>>> Check Quantity: quantity = " +qnt +" isAvailable = " +isAvailable); |
6. Modify Order Script Task
1 2 3 4 5 6 |
System.out.println(">>>>>> Modify Order"); map = new java.util.HashMap(); map.put("modelNumber",modelNumber); map.put("priority",priority); map.put("quantity",quantity); kcontext.setVariable("map", map); |
7. Approve Task Script Task
1 2 3 4 5 6 |
System.out.println(">>>>>> Approving the order. "); System.out.println(">>>>>> quantity = " +quantity); map = new java.util.HashMap(); map.put("modelNumber",modelNumber); map.put("priority",priority); map.put("quantity",quantity); |
Page Flow
Home
Administrator
Generate new process
User Task
Work on Task
(Martin)
Work on Task
(John – approve)
Project Structure
Util.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
public class Util { private static RuntimeManager runtimeManager; private static RuntimeEngine runtime; private static KieSession ksession; public static RuntimeManager SingletonRuntimeManager(String process) { UserGroupCallback userGroupCallback = new JBossUserGroupCallbackImpl("classpath:/usergroup.properties"); RuntimeEnvironment environment = RuntimeEnvironmentBuilder.getDefault() .entityManagerFactory(Persistence.createEntityManagerFactory("org.jbpm.domain")) .userGroupCallback(userGroupCallback) .addAsset(ResourceFactory.newClassPathResource(process), ResourceType.BPMN2) .get(); runtimeManager = RuntimeManagerFactory.Factory.get().newSingletonRuntimeManager(environment); return runtimeManager; } public static KieSession getSingletonSession( ){ runtime = runtimeManager.getRuntimeEngine(EmptyContext.get()); ksession = runtime.getKieSession(); return ksession; } public static TaskService getTaskService(){ return runtime.getTaskService(); } } |
TaskProcessServlet.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 |
public class TaskProcessServlet extends HttpServlet { private static final long serialVersionUID = 1L; static Logger log = Logger.getLogger("TaskProcessServlet.class"); public void init() throws ServletException { super.init(); log.info(">>>>>> TaskProcessServlet init()..."); try { Util.SingletonRuntimeManager("process/OrderProcess.bpmn"); } catch (Throwable t) { log.error("Error: ", t); throw new RuntimeException("error while creating session", t); } } protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); try { String action = request.getParameter("action"); if (action.equals("newProcess")) { KieSession ksession = Util.getSingletonSession(); Map<String, Object> params = new HashMap<String, Object>(); params.put("priority", "High"); params.put("modelNumber", "AA-01"); params.put("quantity", "500"); ProcessInstance processInstance = ksession.startProcess("blog.zciok.bpm.orderProcess", params); long processInstanceId = processInstance.getId(); request.getSession().setAttribute("processInstanceId", processInstanceId); RequestDispatcher requestDispatcher = request.getRequestDispatcher("administrator.jsp"); requestDispatcher.forward(request, response); } else if (action.equals("taskList")) { String user = request.getParameter("user"); TaskService taskService = Util.getTaskService(); java.util.List<TaskSummary> tasks = taskService.getTasksAssignedAsPotentialOwner(user, "en-UK"); log.info(">>>>>> Task size = " + tasks.size()); for (TaskSummary taskSummary : tasks) { log.info(">>>>>> Task Summary Id = " + taskSummary.getId() + "; Task Summary Owner = " + taskSummary.getActualOwner()); } request.setAttribute("tasks", tasks); request.setAttribute("user", user); RequestDispatcher requestDispatcher = request.getRequestDispatcher("userTask.jsp"); requestDispatcher.forward(request, response); } else if (action.equals("startWorkOnTask")) { request.setAttribute("taskId", request.getParameter("taskId")); request.setAttribute("taskStatus", request.getParameter("taskStatus")); request.setAttribute("user", request.getParameter("user")); request.setAttribute("processId", request.getParameter("processId")); RequestDispatcher requestDispatcher = request.getRequestDispatcher("workOnTask.jsp"); requestDispatcher.forward(request, response); } else if (action.equals("submitWorkOnTask")) { String user = request.getParameter("user"); long taskId = new Long(request.getParameter("taskId")).longValue(); String taskStatus = request.getParameter("taskStatus"); if (!taskStatus.equals("Completed")) { TaskService taskService = Util.getTaskService(); taskService.start(taskId, user); Map<String, Object> data = new HashMap<String, Object>(); data.put("priority", request.getParameter("priority")); data.put("modelNumber", request.getParameter("modelNumber")); data.put("quantity", request.getParameter("quantity")); taskService.complete(taskId, user, data); } RequestDispatcher requestDispatcher = request.getRequestDispatcher("index.jsp"); requestDispatcher.forward(request, response); } } catch (Exception e) { log.error("Error: ", e); } finally { out.close(); } } public void destroy() { super.destroy(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } } |
Launch
standalone.bat -c standalone-full.xml
http://localhost:8080/orderProcess-web-wildfly/
Download