2011年4月13日 星期三

[Oracle BPM/SOA 實務] 使用API查詢Composite instance

很多專案進行的過程中會有需要客制化一些前端應用,提供使用者查詢SOA/BPM平台中,特定的composite執行的狀態,來了解流程執行是否已經完成,或是執行內容是不是錯誤... 等。這篇文章我們就簡單介紹怎麼使用API來應用客制化:

首先,你需要引用下列JAR Library:
  • <mw_home>/wlserver_10.3/server/lib/weblogic.jar
  • <mw_home>/oracle_common/webservices/wsclient_extended.jar
  • <mw_home>/oracle_common/soa/modules/oracle.soa.mgmt_11.1.1/soa-infra-mgmt.jar
  • <mw_home>/Oracle_SOA/soa/modules/oracle.soa.fabric_11.1.1/oracle-soa-client-api.jar
  • <mw_home>/oracle_common/modules/oracle.fabriccommon_11.1.1/fabric-common.jar

我們程式的第一步需要透過Locator物件去執行Composite資料的查詢,Locator物件可以透過下列函式取得:

// 塞入WebLogic連接方式
Hashtable jndiProps = new Hashtable();
jndiProps.put(Context.PROVIDER_URL, 
              "t3://<host>:<port>/soa-infra");
jndiProps.put(Context.INITIAL_CONTEXT_FACTORY,
              "weblogic.jndi.WLInitialContextFactory");
jndiProps.put(Context.SECURITY_PRINCIPAL, "weblogic");
jndiProps.put(Context.SECURITY_CREDENTIALS, "<password>");
jndiProps.put("dedicated.connection", "true");
Locator locator = LocatorFactory.createLocator(jndiProps);




接下來,Locator需要透過一個"DN",識別你的Composite,舉例來說DN的格式如下:
blogdemo/CompositeDemo!1.0
其中blogdemo代表Composite被部署所在的partition名稱,"/"之後就是Composite的名稱 - CompositeDemo,最後在"!"之後則是此Composite的版本 - 1.0




查詢方式:


Composite composite = locator.lookupComposite("<dn>");




最終使用者需要查詢的是某個Composite instance狀態,這裡我們可以使用對應的CompositeInstance與CompositeIntanceFilter類別來做處理,下面是一個簡單的範例,我們需要找出所有正在執行中的Composite instance


// 產生CompositeIntance
CompositeInstanceFilter instanceFilter = new CompositeInstanceFilter();


// 指定查詢條件為正在執行的Composite intance
instanceFilter.setState(CompositeInstance.STATE_RUNNING);
List<CompositeInstance> instances = composite.getInstances(instanceFilter);
      
for (CompositeInstance ins : instances) {
  // 做你想做的吧!
}

Enjoy!!!