接口選擇:
osworkflow提供幾種實(shí)現(xiàn)com.opensymphony.workflow.Workflow。
BasicWorkflow:
不提供事務(wù)支持,你可以通過持久層來實(shí)現(xiàn)事務(wù)處理。
Workflow wf = new BasicWorkflow(username)
這里的username是用來關(guān)聯(lián)當(dāng)前請(qǐng)求的用戶。
EJBWorkflow:
用ejb容器來治理事務(wù)。在ejb-jar.xml中進(jìn)行配置。
Workflow wf = new EJBWorkflow()
這里沒有必要想basicworkflow和ofbizworkflow那樣給出username。因?yàn)閑jb容器已經(jīng)校驗(yàn)過的。
Ofbizworkflow:
與basicworkflow比較相似,不同只在于需要事務(wù)支持的方法由ofbiz TransactionUtil calls來包裝。
創(chuàng)建新的工作流實(shí)例:
這里是以basicworkflow為例子
Workflow wf = new BasicWorkflow(username);
HashMap inputs = new HashMap();
inputs.put("docTitle", request.getParameter("title"));wf.initialize("workflowName", 1, inputs);
執(zhí)行action:
Workflow wf = new BasicWorkflow(username);
HashMap inputs = new HashMap();
inputs.put("docTitle", request.getParameter("title"));long id = Long.parseLong(request.getParameter("workflowId"));wf.doAction(id, 1, inputs);
查詢:
值得注重的是:并不是所有的 workflow stores支持查詢。當(dāng)前的hibernate,jdbc和內(nèi)存工作流存儲(chǔ)支持查詢。Hibernate存儲(chǔ)不支持mixed-type查詢(如,一個(gè)查詢使用到了歷史和當(dāng)前step contexts)。為了執(zhí)行一個(gè)查詢,需要構(gòu)造出一個(gè)WorkflowEXPRessionQuery對(duì)象。查詢方法是在這個(gè)對(duì)象上被調(diào)用的。
簡單查詢、嵌套查詢、mixed-context查詢(不支持hibernate工作流存儲(chǔ))在docs文檔的5.4部分都有。
2.7版的osworkflow提供一種配置接口。默認(rèn)實(shí)現(xiàn)是DefaultConfiguration,通過AbstractWorkflow的setconfiguration方法來更改歷史遺留的singleton靜態(tài)模型使其不會(huì)被使用。應(yīng)該避免每次都創(chuàng)建新的工作流實(shí)例。
Workflow workflow = new BasicWorkflow("blah");long workflowId = workflow.initialize("someflow", 1, new HashMap());workflow.doAction(workflowId, 2, new HashMap());
...
//in some other class, called later on
Workflow workflow = new BasicWorkflow("blah");workflow.doAction(workflowId, 3, new HashMap());
Workflow workflow = new BasicWorkflow("blah");Configuration config = new DefaultConfiguration();
workflow.setConfiguration(config);
long workflowId = workflow.initialize("someflow", 1, new HashMap());workflow.doAction(workflowId, 2, new HashMap());
//keep track of Workflow object somewhere!
...
//in some other class, called later on
//look up Workflow instance that was held onto earlier
Workflow workflow = ...; //note, do NOT create a new one!
workflow.doAction(workflowId, 3, new HashMap());
實(shí)際當(dāng)中還是需要到javadoc中不斷去查。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注