osworkflow源代码学习笔记_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > osworkflow源代码学习笔记

osworkflow源代码学习笔记

 2011/11/8 7:52:46  yhb3420  http://yhb3420.iteye.com  我要评论(0)
  • 摘要:initializelongcom.opensymphony.workflow.AbstractWorkflow.initialize(StringworkflowName,intinitialAction,Mapinputs)throwsInvalidRoleException,InvalidInputException,WorkflowException初始化步骤:1.获取存储配置(jdbc)WorkflowDescriptorwf=getConfiguration()
  • 标签:笔记 学习 代码 学习笔记
initialize

long com.opensymphony.workflow.AbstractWorkflow.initialize(String workflowName, int initialAction, Map inputs) throws InvalidRoleException, InvalidInputException, WorkflowException
初始化步骤:
1.获取存储配置(jdbc)
WorkflowDescriptor wf = getConfiguration().getWorkflow(workflowName);
WorkflowStore store = getPersistence();

2.创建条目(insert into OS_WFENTRY)
WorkflowEntry entry = store.createEntry(workflowName);

3.初始化PropertySet
key=osff_+entryId、参数=propertyset.xml配置
PropertySet ps = store.getPropertySet(entry.getId());

4.填充transientVars
populateTransientMap(entry, transientVars, wf.getRegisters(), new Integer(initialAction), Collections.EMPTY_LIST, ps);

5.检查是否满足初始化条件
if (!canInitialize(workflowName, initialAction, transientVars, ps)) {
	context.setRollbackOnly();
	throw new InvalidRoleException("You are restricted from initializing this workflow");
}

6.获取初始化action
ActionDescriptor action = wf.getInitialAction(initialAction);

7.流转工作流
transitionWorkflow(entry, Collections.EMPTY_LIST, store, wf, action, transientVars, inputs, ps);

8.返回ID
long entryId = entry.getId();




doAction

void com.opensymphony.workflow.AbstractWorkflow.doAction(long id, int actionId, Map inputs) throws WorkflowException
执行动作:

1.在全局action中找到指定action。
2.在全局action中找不到就到当前步骤中找指定action。
3.流转工作流。




transitionWorkflow

boolean com.opensymphony.workflow.AbstractWorkflow.transitionWorkflow(WorkflowEntry entry, List currentSteps, WorkflowStore store, WorkflowDescriptor wf, ActionDescriptor action, Map transientVars, Map inputs, PropertySet ps) throws WorkflowException
1.清空ThreadLocal中的状态缓存;
2.通过传入参数Action取得当前Step;
3.检查输入验证;
4.获取当前Step的PostFunction,并执行;
5.执行当前Action的preFunction,并执行;
6.获取满足条件的Result;
7.执行当前Result的preFunction,并执行;
8.如果Result的Split不为空,执行Splist的Result;
9.如果Result的Join不为空,执行(结束当前步骤,移动到历史步骤,找到所有join步骤放入“jn”,执行条件,执行Result。);
10.执行未执行的PostFunction;
11.执行自动action。


发表评论
用户名: 匿名