使用WID開發BPEL業務流程模版后,通常部署到WPS上面以后我們需要能夠trgger流程啟動和流程運轉。否則流程就沒有意義了。
請參考:http://www.ibm.com/developerworks/cn/websphere/library/techarticles/0512_fanggw/#N100F6
這里介紹客戶端調用流程的幾種方式。通常有三種方式:
1、基于服務組件架構(SCA)的調用方式
2、基于Web服務的調用方式 (WebService調用)
3、通過BPC的應用程序接口
用到最多的還是第三種通過BPC應用程序接口調用的方式。下面介紹一下通過BPC應用程序調用BPEL的方式:
當我們設計好業務流程。并且部署到WPS下后:
我們首先要通過JNDI找到LocalBusinessFlowManagerHome,然后生成相應的LocalBusinessFlowManager。這部分的代碼片斷如下:
InitialContext ctx = new InitialContext();
LocalBusinessFlowManagerHome mgrHome =
(LocalBusinessFlowManagerHome)ctx.lookup("java:comp/env/ejb/LocalBusinessFlowManagerHome");
LocalBusinessFlowManager mgr = mgrHome.create();
調用流程的代碼是通過LocalBusinessFlowManager的call方法。方法的簡單說明如下:
public ClientObjectWrapper call(java.lang.String processTemplateName,
ClientObjectWrapper inputMessage);
因此,我們需要構建一個代表輸入參數的ClientOjbectWrapper。生成一個代表輸入參數的ClientObjectWrapper有多種方式,這里采用先構建一個DataObject,然后調用ClientObjectWrapper構造方法的方式。具體代碼實現如下:
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根據流程的WSDL接口生成一個代表參數的一個DataObject。在生成代表輸入的ClientObjectWrapper之后,調用流程就變得相對比較簡單,具體代碼片斷如下:
ClientObjectWrapper outputWrapper = mgr.call("HelloWorldProcess", inputWrapper);
DataObject output = (DataObject) outputWrapper.getObject();
resp = output.getString("helloOutput");
|
posted on 2007-06-25 16:12
安文豪 閱讀(1404)
評論(1) 編輯 收藏