/* * Start-->EndmailSendService-->End * * @see org.fireflow.FireWorkflowJunitEnviroment#createWorkflowProcess() */ @Override public WorkflowProcess createWorkflowProcess() { WorkflowProcessImpl process = new WorkflowProcessImpl(processName, processDisplayName); process.setDescription(description); SubProcess mainflow = process.getMainSubProcess(); PropertyImpl property = new PropertyImpl(mainflow, "mailToList"); // 流程变量x property.setDataType(new QName(NameSpaces.JAVA.getUri(), "java.lang.String")); property.setInitialValueAsString("[email protected];[email protected]"); mainflow.getProperties().add(property); property = new PropertyImpl(mainflow, "ccToList"); // 流程变量x property.setDataType(new QName(NameSpaces.JAVA.getUri(), "java.lang.String")); property.setInitialValueAsString("*****@*****.**"); mainflow.getProperties().add(property); mainflow.setDuration(new Duration(5, Duration.MINUTE)); StartNodeImpl startNode = new StartNodeImpl(process.getMainSubProcess(), "Start"); ActivityImpl activity = new ActivityImpl(process.getMainSubProcess(), "Activity1"); activity.setDuration(new Duration(6, Duration.DAY)); EndNodeImpl endNode = new EndNodeImpl(process.getMainSubProcess(), "End"); mainflow.setEntry(startNode); mainflow.getStartNodes().add(startNode); mainflow.getActivities().add(activity); mainflow.getEndNodes().add(endNode); TransitionImpl transition1 = new TransitionImpl(process.getMainSubProcess(), "start2activity"); transition1.setFromNode(startNode); transition1.setToNode(activity); startNode.getLeavingTransitions().add(transition1); activity.getEnteringTransitions().add(transition1); TransitionImpl transition2 = new TransitionImpl(process.getMainSubProcess(), "activity2end"); transition2.setFromNode(activity); transition2.setToNode(endNode); activity.getLeavingTransitions().add(transition2); endNode.getEnteringTransitions().add(transition2); mainflow.getTransitions().add(transition1); mainflow.getTransitions().add(transition2); // 创建EmailSendService 并绑定到activity1 MailSendServiceDef emailSendService = this.buildService1(); ServiceBinding svcBinding = this.buildServiceBinding(emailSendService); // 设置到activity和workflowprocess process.addService(emailSendService); activity.setServiceBinding(svcBinding); return process; }
/** * Start-->Activity1(with catch compenstion)-->Activity2(with catch compensation)-->Activity3(with * catch compensation)-->End(throw compensation) |-->HandleCompensation1_1 * |-->HandlerCompensation2_1 |-->HandlerCompensation3_1-->HandlerCompensation3_2 */ public WorkflowProcess createWorkflowProcess() { WorkflowProcessImpl process = new WorkflowProcessImpl(processName, processDisplayName); SubProcess subflow = process.getMainSubProcess(); // *****************************************/ // *************** 开始节点 *************/ // ****************************************/ StartNodeImpl startNode = new StartNodeImpl(subflow, "Start"); // *****************************************/ // *********** Activity1及其异常分支 ********/ // ****************************************/ ActivityImpl activity1 = new ActivityImpl(subflow, "Activity1"); // 异常捕获节点1 StartNodeImpl catchCompensationNode1 = new StartNodeImpl(subflow, "CatchCompensation1"); CatchCompensationFeatureImpl catchCompensationDecorator = new CatchCompensationFeatureImpl(); catchCompensationDecorator.setAttachedToActivity(activity1); catchCompensationDecorator.setCompensationCode("ForActivity1"); catchCompensationNode1.setFeature(catchCompensationDecorator); activity1.getAttachedStartNodes().add(catchCompensationNode1); ActivityImpl handleCompensationNode1_1 = new ActivityImpl(subflow, "HandleCompensation1_1"); TransitionImpl transition1_1 = new TransitionImpl(subflow, "catchCompensation1_HandleCompensation1_1"); transition1_1.setFromNode(catchCompensationNode1); transition1_1.setToNode(handleCompensationNode1_1); catchCompensationNode1.getLeavingTransitions().add(transition1_1); handleCompensationNode1_1.getEnteringTransitions().add(transition1_1); // *****************************************/ // *********** Activity2及其异常分支 ********/ // ****************************************/ ActivityImpl activity2 = new ActivityImpl(subflow, "Activity2"); // 异常捕获节点1 StartNodeImpl catchCompensationNode2 = new StartNodeImpl(subflow, "CatchCompensation2"); catchCompensationDecorator = new CatchCompensationFeatureImpl(); catchCompensationDecorator.setAttachedToActivity(activity2); catchCompensationDecorator.setCompensationCode("ForActivity2AndActivity3"); catchCompensationNode2.setFeature(catchCompensationDecorator); activity2.getAttachedStartNodes().add(catchCompensationNode2); ActivityImpl handleCompensationNode2_1 = new ActivityImpl(subflow, "HandleCompensation2_1"); TransitionImpl transition2_1 = new TransitionImpl(subflow, "catchCompensation2_HandleCompensation2_1"); transition2_1.setFromNode(catchCompensationNode2); transition2_1.setToNode(handleCompensationNode2_1); catchCompensationNode2.getLeavingTransitions().add(transition2_1); handleCompensationNode2_1.getEnteringTransitions().add(transition2_1); // *****************************************/ // *********** Activity3及其异常分支 ********/ // ****************************************/ ActivityImpl activity3 = new ActivityImpl(subflow, "Activity3"); // 异常捕获节点1 StartNodeImpl catchCompensationNode3 = new StartNodeImpl(subflow, "CatchCompensation3"); catchCompensationDecorator = new CatchCompensationFeatureImpl(); catchCompensationDecorator.setAttachedToActivity(activity3); catchCompensationDecorator.setCompensationCode("ForActivity2AndActivity3"); catchCompensationNode3.setFeature(catchCompensationDecorator); activity3.getAttachedStartNodes().add(catchCompensationNode3); ActivityImpl handleCompensationNode3_1 = new ActivityImpl(subflow, "HandleCompensation3_1"); TransitionImpl transition3_1 = new TransitionImpl(subflow, "catchCompensation3_HandleCompensation3_1"); transition3_1.setFromNode(catchCompensationNode3); transition3_1.setToNode(handleCompensationNode3_1); catchCompensationNode3.getLeavingTransitions().add(transition3_1); handleCompensationNode3_1.getEnteringTransitions().add(transition3_1); ActivityImpl handleCompensationNode3_2 = new ActivityImpl(subflow, "HandleCompensation3_2"); TransitionImpl transition3_2 = new TransitionImpl(subflow, "catchCompensation3_1_HandleCompensation3_2"); transition3_2.setFromNode(handleCompensationNode3_1); transition3_2.setToNode(handleCompensationNode3_2); handleCompensationNode3_1.getLeavingTransitions().add(transition3_2); handleCompensationNode3_2.getEnteringTransitions().add(transition3_2); // *******************************************/ // *********** 带有异常装饰器的结束节点 ********/ // *******************************************/ EndNodeImpl endNode = new EndNodeImpl(subflow, "End"); ThrowCompensationFeatureImpl compensationDecorator = new ThrowCompensationFeatureImpl(); compensationDecorator.addCompensationCode( "ForActivity2AndActivity3"); // 只有CompensationCode=‘TheCompensationActivity’的catch // compensation decorator才会被激发。 endNode.setFeature(compensationDecorator); // ****************************************************/ // ****链接 activity1,activity2,activity3 **************/ // ****************************************************/ TransitionImpl transition_start_activity1 = new TransitionImpl(subflow, "start_activity1"); transition_start_activity1.setFromNode(startNode); transition_start_activity1.setToNode(activity1); startNode.getLeavingTransitions().add(transition_start_activity1); activity1.getEnteringTransitions().add(transition_start_activity1); TransitionImpl transition_activity1_activity2 = new TransitionImpl(subflow, "activity1_activity2"); transition_activity1_activity2.setFromNode(activity1); transition_activity1_activity2.setToNode(activity2); activity1.getLeavingTransitions().add(transition_activity1_activity2); activity2.getEnteringTransitions().add(transition_activity1_activity2); TransitionImpl transition_activity2_activity3 = new TransitionImpl(subflow, "activity2_activity3"); transition_activity2_activity3.setFromNode(activity2); transition_activity2_activity3.setToNode(activity3); activity2.getLeavingTransitions().add(transition_activity2_activity3); activity3.getEnteringTransitions().add(transition_activity2_activity3); TransitionImpl transition_activiyt3_end = new TransitionImpl(subflow, "activity3_end"); transition_activiyt3_end.setFromNode(activity3); transition_activiyt3_end.setToNode(endNode); activity3.getLeavingTransitions().add(transition_activiyt3_end); endNode.getEnteringTransitions().add(transition_activiyt3_end); // 组装到process中 subflow.setEntry(startNode); subflow.getStartNodes().add(startNode); subflow.getStartNodes().add(catchCompensationNode1); subflow.getStartNodes().add(catchCompensationNode2); subflow.getStartNodes().add(catchCompensationNode3); subflow.getActivities().add(activity1); subflow.getActivities().add(activity2); subflow.getActivities().add(activity3); subflow.getActivities().add(handleCompensationNode1_1); subflow.getActivities().add(handleCompensationNode2_1); subflow.getActivities().add(handleCompensationNode3_1); subflow.getActivities().add(handleCompensationNode3_2); subflow.getEndNodes().add(endNode); subflow.getTransitions().add(transition1_1); subflow.getTransitions().add(transition2_1); subflow.getTransitions().add(transition3_1); subflow.getTransitions().add(transition3_2); subflow.getTransitions().add(transition_start_activity1); subflow.getTransitions().add(transition_activity1_activity2); subflow.getTransitions().add(transition_activity2_activity3); subflow.getTransitions().add(transition_activiyt3_end); return process; }