[jboss-user] [JBoss jBPM] - Re: Multiinstances of the same process
antitrust1982
do-not-reply at jboss.com
Wed Sep 20 04:47:32 EDT 2006
This is my file code:
public class CreateProcessInstanceAction extends ActionSupport{
|
|
| ////////////////////////////////
|
| private String nameProcess;
| private String currentNode;
| TaskInstance taskinstance=null;
|
| static JbpmConfiguration jbpmConfiguration = null;
| static ProcessDefinition processDefinition= null;
| ProcessInstance pi= null;
| JbpmContext jbpmContext = JbpmConfiguration.getInstance().createJbpmContext();
| Map session = (Map) ActionContext.getContext().get("session");
| SwimlaneInstance si =null;
| ExecutionContext ec=null;
|
| public void setNameProcess(String nameProcess) {
| System.out.println("set NameProcess");
| this.nameProcess = nameProcess;
| }
|
| public String getNameProcess() {
| System.out.println("get NameProcess");
| return nameProcess;
| }
|
| public void setCurrentNode(String currentNode) {
| System.out.println("set currentNode");
| this.currentNode = currentNode;
| }
|
| public String getCurrentNode() {
| System.out.println("get currentNode");
| return currentNode;
| }
|
| ////////////////////////////////
|
|
| public Long instantiate(ProcessDefinition pd, String userId) {
| Long instanceId = null;
|
| //initialisation du context
|
| GraphSession graphSession = jbpmContext.getGraphSession();
| TaskMgmtSession taskMgmtSession = jbpmContext.getTaskMgmtSession();
|
|
| // UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUu
| Collection processinstances= graphSession.findProcessInstances(pd.getId());
| System.out.println("porcess definition id:"+ pd.getId());
| System.out.println("empty:" +processinstances.isEmpty());
| Iterator itpro = processinstances.iterator();
| while(itpro.hasNext()){
| ProcessInstance processinstance =(ProcessInstance) itpro.next();
|
| System.out.println("les elements de la collection de process sont : "+processinstance.getId());
| }
|
| //uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
| System.out.println("creation d'une instance de process");
| pi = new ProcessInstance(pd);
| System.out.println("enregistrement du processinstance");
| jbpmContext.save(pi);
| System.out.println("PROCESS INSTANCE ID:"+ pi.getId());
| jbpmContext.loadProcessInstanceForUpdate(pi.getId());
| System.out.println("reload");
|
|
|
|
|
|
|
| System.out.println("creation des swimlanes");
| Map swimlanes = pd.getTaskMgmtDefinition().getSwimlanes();
| Iterator itr = swimlanes.keySet().iterator();
|
| while(itr.hasNext()) {
| Swimlane swimlane = (Swimlane)swimlanes.get(itr.next());
| System.out.println("SWIMLANE CREE:"+ swimlane.getName());
| swimlane.setPooledActorsExpression("ernie");
| ec= new ExecutionContext(pi.getRootToken());
|
| System.out.println("creation d'une nouvelle instance de swimlane");
| SwimlaneInstance swi = pi.getTaskMgmtInstance().getInitializedSwimlaneInstance(ec, swimlane);
|
| if(swi.getName().equals("Assurimo")){
| swi.setActorId("bert");
| }
|
| Set pooledActors = swi.getPooledActors();
| if(pooledActors != null) {
| Iterator paItr = pooledActors.iterator();
| while(paItr.hasNext()) {
| ((PooledActor)paItr.next() ).setSwimlaneInstance(swi);
| }
| }
| }
| if (pd.getTaskMgmtDefinition().getStartTask() != null) {
| org.jbpm.taskmgmt.def.Task task = pd.getTaskMgmtDefinition().getStartTask();
| String swimlaneName = task.getSwimlane().getName();
| SwimlaneInstance swi = pi.getTaskMgmtInstance().getSwimlaneInstance(swimlaneName);
| String originalActorId = swi.getActorId();
| Set originalPooledActors = swi.getPooledActors();
|
| TaskInstance startTask = pi.getTaskMgmtInstance().createStartTaskInstance();
| System.out.println("task instance name: "+startTask.getName()+" of swimlane "+swi.getName());
|
|
| startTask.setActorId(userId);
|
| if(startTask.getSwimlaneInstance() != null) {
|
| System.out.println("Actor assigné au swimlane: " + startTask.getSwimlaneInstance().getActorId());
| si = startTask.getSwimlaneInstance();
|
| if (startTask.getSwimlaneInstance().getPooledActors() != null) {
| System.out.println("startTask.getSwimlaneInstance().getPooledActors() != null");
| System.out.println("Swimlane assigned pooled actor: " + ( (PooledActor)(startTask.getSwimlaneInstance().getPooledActors().iterator().next()) ).getActorId() );
| }
| }
| }
|
| else {
| System.out.println("################################else#########################################");
| }
|
|
| instanceId = Long.valueOf(pi.getId());
|
| System.out.println("trouver les process definition id ");
|
|
|
| return instanceId;
| }
|
| @Override
| public String execute() throws Exception {
|
| processDefinition = ProcessDefinition.parseXmlString(
| "<process-definition name='DeclarationSinistre'>"+
| "<swimlane name='FONCIA' >"+
| "<assignment expression='user(bert)'/>"+
| "</swimlane>"+
|
| "<swimlane name='Assurimo' >"+
| "<assignment expression='user(ernie)'/>"+
| "</swimlane>"+
|
|
| "<start-state name='start' end-tasks = 'true' >"+
| "<task swimlane='FONCIA'>"+
| "</task>"+
| "<transition name='' to='DeclarationSinistre'>"+"</transition>"+
| "</start-state>"+
|
| "<end-state name='end'>"+"</end-state>"+
|
| "<task-node name='DeclarationSinistre' end-tasks = 'true' >"+
| "<task swimlane='FONCIA'>"+
| "</task>"+
| "<transition name='' to='EnregistrementSinistre'>"+"</transition>"+
| "</task-node>"+
|
| "<task-node name='EnregistrementSinistre' end-tasks = 'true' >"+
| "<task swimlane='Assurimo'>"+
| "</task>"+
| "<transition name='' to='ControlePrime'>"+"</transition>"+
| "</task-node>"+
|
| "<task-node name='ControlePrime' end-tasks = 'true' >"+
| "<task swimlane='Assurimo'>"+
| "</task>"+
| "<transition name='' to='end'>"+"</transition>"+
| "</task-node>"+
| "</process-definition>"
| );
|
|
| jbpmConfiguration = JbpmConfiguration.parseXmlString(
| "<jbpm-configuration>" +
|
| " <jbpm-context>" +
| " <service name='persistence' " +
| " factory='org.jbpm.persistence.db.DbPersistenceServiceFactory' />" +
| " </jbpm-context>" +
|
| " <string name='resource.hibernate.cfg.xml' " +
| " value='hibernate.cfg.xml' />" +
| " <string name='resource.business.calendar' " +
| " value='org/jbpm/calendar/jbpm.business.calendar.properties' />" +
| " <string name='resource.default.modules' " +
| " value='org/jbpm/graph/def/jbpm.default.modules.properties' />" +
| " <string name='resource.converter' " +
| " value='org/jbpm/db/hibernate/jbpm.converter.properties' />" +
| " <string name='resource.action.types' " +
| " value='org/jbpm/graph/action/action.types.xml' />" +
| " <string name='resource.node.types' " +
| " value='org/jbpm/graph/node/node.types.xml' />" +
| " <string name='resource.varmapping' " +
| " value='org/jbpm/context/exe/jbpm.varmapping.xml' />" +
| "</jbpm-configuration>"
| );
|
| jbpmContext.setActorId("ernie");
|
| Long longVariable = instantiate(processDefinition, "ernie");
| System.out.println("instance Id retournée : "+longVariable);
| try{
| Token token = pi.getRootToken();
|
| System.out.println("jbpmcontext actor : "+jbpmContext.getActorId());
|
| nameProcess=pi.getProcessDefinition().getName();
|
| System.out.println("les taches non finies sont:");
| Collection taskinstances = (Collection) pi.getTaskMgmtInstance().getUnfinishedTasks(token);
| Iterator itr1 = taskinstances.iterator();
| while(itr1.hasNext()) {
| taskinstance=(TaskInstance)itr1.next();
|
| if("ernie"==taskinstance.getActorId()){
| System.out.println("Pour ERNIE :................"+taskinstance.getName());
| System.out.println("ID de la taskinstance"+taskinstance.getId());
| taskinstance.end();
| System.out.println("tache finie:.........."+taskinstance.hasEnded());
| }
|
| else if("bert"==taskinstance.getActorId()){
| System.out.println("Pour BERT :...................."+taskinstance.getName());
| }
|
| else{
| System.out.println("Les autres taches sont :"+taskinstance.getName()+" et sont allouées à"+taskinstance.getActorId());
| taskinstance.getSwimlaneInstance().setActorId("bert");
| System.out.println("Changement effectué.. the task is :"+taskinstance.getName()+" to the user "+taskinstance.getActorId());
|
| }
| }
|
| token.signal();
| System.out.println("finie? : "+token.hasEnded());
| currentNode=token.getNode().getName();
| System.out.println("noeud courant:"+currentNode);
| this.setCurrentNode(currentNode);
|
| this.setNameProcess(nameProcess);
|
| jbpmContext.save(pi);
|
|
|
| Map session = (Map) ActionContext.getContext().get("session");
| session.put("process",pi);
| session.put("jbpmContext",jbpmContext);
| session.put("processName",nameProcess);
| session.put("processDefiniton",processDefinition);
| session.put("ec",ec);
| session.put("si",si);
| session.put("token",token);
| session.put("Idpi",pi.getId());
|
| }
|
| finally {
| }
| return SUCCESS;
| }
| }
this is my log console (i have execute two instances of portlets):
anonymous wrote :
| .
| porcess definition id:0
| empty:true
| creation d'une instance de process
| enregistrement du processinstance
| PROCESS INSTANCE ID:1577
| reload
| creation des swimlanes
| SWIMLANE CREE:FONCIA
| creation d'une nouvelle instance de swimlane
| SWIMLANE CREE:Assurimo
| creation d'une nouvelle instance de swimlane
| task instance name: start of swimlane FONCIA
| Actor assign?® au swimlane: ernie
| trouver les process definition id
| instance Id retourn?®e : 1577
| jbpmcontext actor : ernie
| les taches non finies sont:
| Pour ERNIE :................start
| ID de la taskinstance1522
| tache finie:..........true
| finie? : false
| noeud courant:EnregistrementSinistre
| set currentNode
| set NameProcess
| #### execute
| firstNAmle : null
| #### execute
| firstNAmle : null
| get currentNode
| porcess definition id:0
| empty:true
| creation d'une instance de process
| enregistrement du processinstance
| PROCESS INSTANCE ID:1578
| reload
| creation des swimlanes
| SWIMLANE CREE:FONCIA
| creation d'une nouvelle instance de swimlane
| SWIMLANE CREE:Assurimo
| creation d'une nouvelle instance de swimlane
| task instance name: start of swimlane FONCIA
| Actor assign?® au swimlane: ernie
| trouver les process definition id
| instance Id retourn?®e : 1578
| jbpmcontext actor : ernie
| les taches non finies sont:
| Pour ERNIE :................start
| ID de la taskinstance1525
| tache finie:..........true
| finie? : false
| noeud courant:EnregistrementSinistre
| set currentNode
| set NameProcess
| #### execute
| firstNAmle : null
| get currentNode
| get currentNode
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3972863#3972863
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3972863
More information about the jboss-user
mailing list