使用WID開發(fā)BPEL業(yè)務(wù)流程模版后,通常部署到WPS上面以后我們需要能夠trgger流程啟動(dòng)和流程運(yùn)轉(zhuǎn)。否則流程就沒有意義了。
請(qǐng)參考:http://www.ibm.com/developerworks/cn/websphere/library/techarticles/0512_fanggw/#N100F6
這里介紹客戶端調(diào)用流程的幾種方式。通常有三種方式:
1、基于服務(wù)組件架構(gòu)(SCA)的調(diào)用方式
3、通過BPC的應(yīng)用程序接口
用到最多的還是第三種通過BPC應(yīng)用程序接口調(diào)用的方式。下面介紹一下通過BPC應(yīng)用程序調(diào)用BPEL的方式:
當(dāng)我們?cè)O(shè)計(jì)好業(yè)務(wù)流程。并且部署到WPS下后:
我們首先要通過JNDI找到LocalBusinessFlowManagerHome,然后生成相應(yīng)的LocalBusinessFlowManager。這部分的代碼片斷如下:
InitialContext ctx = new InitialContext();
LocalBusinessFlowManagerHome mgrHome =
(LocalBusinessFlowManagerHome)ctx.lookup("java:comp/env/ejb/LocalBusinessFlowManagerHome");
LocalBusinessFlowManager mgr = mgrHome.create();
調(diào)用流程的代碼是通過LocalBusinessFlowManager的call方法。方法的簡單說明如下:
public ClientObjectWrapper call(java.lang.String processTemplateName, ClientObjectWrapper inputMessage);
因此,我們需要構(gòu)建一個(gè)代表輸入?yún)?shù)的ClientOjbectWrapper。生成一個(gè)代表輸入?yún)?shù)的ClientObjectWrapper有多種方式,這里采用先構(gòu)建一個(gè)DataObject,然后調(diào)用ClientObjectWrapper構(gòu)造方法的方式。具體代碼實(shí)現(xiàn)如下:
ServiceManager serviceMgr = new ServiceManager(); BOFactory bofactory = (BOFactory)serviceMgr.locateService("com/ibm/websphere/bo/BOFactory"); DataObject input = bofactory.createByElement("http://HelloWorld/HelloWorldInterface", "hello"); input.setString("helloInput", msg); ClientObjectWrapper inputWrapper = new ClientObjectWrapper(input); |
BOFactory的createByElement根據(jù)流程的WSDL接口生成一個(gè)代表參數(shù)的一個(gè)DataObject。在生成代表輸入的ClientObjectWrapper之后,調(diào)用流程就變得相對(duì)比較簡單,具體代碼片斷如下:
ClientObjectWrapper outputWrapper = mgr.call("HelloWorldProcess", inputWrapper); DataObject output = (DataObject) outputWrapper.getObject(); resp = output.getString("helloOutput"); |