-
1. Re: How to Generate ad-hoc Task, activities & process ??
kukeltje Aug 12, 2009 4:59 AM (in response to faisalgeek)what is 'ad-hoc' for you? Generating a process 'runtime' is possible like is done in many unit tests ins the source.
Adding tasks runtime to the process instance I'm not sure about. In 3 this is possible, 4 I have no clue. -
2. Re: How to Generate ad-hoc Task, activities & process ??
rogerofyan Aug 12, 2009 9:34 AM (in response to faisalgeek)Sure, this is definitely ok for jBPM4.
faisalgeek, I suppose you means generating task, activities & process at run time, not only at the process definition(jpdl), don't u?
I use to have similar requirement, and I found few documents about the internal jBPM api. So I had to read the source code of jBPM4.
I can share my code of generating task & activity at runtime.import java.util.List; import org.jbpm.api.Execution; import org.jbpm.api.ExecutionService; import org.jbpm.api.TaskService; import org.jbpm.api.listener.EventListener; import org.jbpm.api.listener.EventListenerExecution; import org.jbpm.jpdl.internal.activity.TaskActivity; import org.jbpm.pvm.internal.env.Environment; import org.jbpm.pvm.internal.env.SpringContext; import org.jbpm.pvm.internal.history.HistoryEvent; import org.jbpm.pvm.internal.history.events.TaskActivityStart; import org.jbpm.pvm.internal.model.Activity; import org.jbpm.pvm.internal.model.ActivityImpl; import org.jbpm.pvm.internal.model.ExecutionImpl; import org.jbpm.pvm.internal.model.Transition; import org.jbpm.pvm.internal.model.TransitionImpl; import org.jbpm.pvm.internal.model.ExecutionImpl.Propagation; import org.jbpm.pvm.internal.session.DbSession; import org.jbpm.pvm.internal.task.TaskImpl; import org.jbpm.pvm.internal.util.Clock; /** * 自动为åÂ�„办å¦å¦院创建一个任务,为å¦习ä¸Â心创建两个任务。 * * @author <a href="mailto:rogerofyan@gmail.com">Roger Yan</a> * */ public class ApplicationListener implements EventListener { // private GroupManager groupManager; @Override public void notify(EventListenerExecution execution) throws Exception { ExecutionImpl exe = (ExecutionImpl) execution; ActivityImpl fork = exe.getActivity(); //creating two tasks and associated activities placeViceMentorTask(exe, "center1"); placeViceMentorTask(exe, "center2"); } private void placeViceMentorTask(ExecutionImpl execution, String assignee) { Environment env = Environment.getCurrent(); TaskService taskService = env.get(TaskService.class); DbSession dbSession = env.get(DbSession.class); // 获åÂ�–当å‰Â�执行的结点相关信æÂ�¯ ActivityImpl fork = execution.getActivity(); List<Transition> trans = fork.getOutgoingTransitions(); TransitionImpl transition = (TransitionImpl) trans.get(0); ActivityImpl join = (ActivityImpl) transition.getDestination().getOutgoingTransitions().get(0) .getDestination(); // 1. creating an activity ActivityImpl newActivity = fork.getProcessDefinition().createActivity("æÂ�Â�交副导师信æÂ�¯1"); TaskActivity ta = new TaskActivity(); newActivity.setBehaviour(ta); // 2.creating an outgoing transition TransitionImpl outgoing = newActivity.createOutgoingTransition(); // outgoing.setDestination((ActivityImpl) join); outgoing.setName("至教妿œÂ�务ä¸Â心审核"); join.addIncomingTransition(outgoing); // 3.creating an execution ExecutionImpl newExec = execution.createExecution(); newExec.setActivity(newActivity); newExec.setState(Execution.STATE_ACTIVE_CONCURRENT); newExec.setName("viceMentorExecution"); newExec.setTransition(outgoing); newExec.setPropagation(Propagation.UNSPECIFIED); newExec.setHistoryActivityStart(Clock.getCurrentTime()); dbSession.save(newExec); TaskImpl task = (TaskImpl) taskService.newTask(); task.setAssignee(assignee); task.setName("æÂ�Â�交副导师资料1"); task.setExecution(newExec); task.setSignalling(true); taskService.saveTask(task); HistoryEvent.fire(new TaskActivityStart(task), newExec); newExec.waitForSignal(); } }
The code looks ugly, but it just works for me.
Take it as a reference. -
3. Re: How to Generate ad-hoc Task, activities & process ??
kukeltje Aug 12, 2009 11:59 AM (in response to faisalgeek)good to know it kind works the same in 4. thanks
-
4. Re: How to Generate ad-hoc Task, activities & process ??
faisalgeek Aug 13, 2009 4:08 AM (in response to faisalgeek)Thanks very much rogerofyan, interesting to see the detailed code about to programaticaly creating task & activities.
But this is placed in jBPM docs, ProcessFactory or ProcessBuilder what are they and how we can achieve this to simply 2 activities and 1 transition from A to B.
ClientProcessDefinition processDefinition = ProcessFactory.build()
.activity("a").initial().behaviour(new WaitState())
.transition().to("b")
.activity("b").behaviour(new WaitState())
.done();
Actually, your code is bit complex, if you can tell the process diagram, will be very thankful to you. -
5. Re: How to Generate ad-hoc Task, activities & process ??
tcr Aug 13, 2009 11:51 AM (in response to faisalgeek)Hi,
as far as I understand there is a difference in the two code examples.
Rogerofyan is changing a running execution by adding additional steps. The process definition currently used is still in place, right? Is there no impact of the mismatch between process definition and running execution?
faisalgeek, your code creates a new completely new definition and thus need to instanciate a new execution first. I think this is a different scenario because there is no active process instance changed. Anyways, is there a way to persist a definition created like this into the DB?I think JPDL is persisted as XML LOB not as objects...
Thanks!
Regards
tcr -
6. Re: How to Generate ad-hoc Task, activities & process ??
kukeltje Aug 13, 2009 1:35 PM (in response to faisalgeek)Yes, two different scenarios, but he both requested them.
In 4 the jpdl is not only persisted as lob, al implementing classes are instantiated and that (java) object graph is persisted and executed once a process instance is started.
If you take a look at the internals of the PVM, you can see this happening. So in the end, jpdl is parsed into objects and persisted, just like directly persisting objects. -
7. Re: How to Generate ad-hoc Task, activities & process ??
faisalgeek Aug 13, 2009 2:16 PM (in response to faisalgeek)But, i am not getting "ProcessFactory" class in jbpm4 lib, but its mentioned in jbpm4 docs ?
any clue ?
and yes, if any one can help creating new process + task by code, I will be thankful to you. -
8. Re: How to Generate ad-hoc Task, activities & process ??
kukeltje Aug 13, 2009 3:17 PM (in response to faisalgeek)Look in the sourcecode of the pvm and jpdl. Lots of examples on how to create processes from code.