顯示具有 SOA 標籤的文章。 顯示所有文章
顯示具有 SOA 標籤的文章。 顯示所有文章

2011年9月21日 星期三

11gR1PS4 BPM FP 正式發表

等待許久的11gR1PS4 BPM FP (Features Pack)終於發表了,雖然這個版本從名字看來不是那麼重要 -- 只是PS4 (11gR1的第四個Patch Set)中的BPM功能包,但從功能面來看,這個版本補足了許多之前版本所欠缺的重要功能,個人覺得重要的幾個新功能包括:
  • 新版本的BPM Composer:提供更完整的Web介面給Business User或Enterprise Architect設計流程專案,提供多版本管理與多人合作的功能,在我看來,新版本的BPM Composer可以讓未來流程設計可以真正由Business User透過網頁工具起頭,IT開發人員接手使用JDeveloper進行細項設計。
  • 流程實例的更動與移轉:可以讓有權限的人員更動正在執行的流程內容,這點可以滿足國內許多客戶希望管理人員可以隨時更動流程執行狀態的需求。另外,這版本也支援了流程實例的移轉,簡單來說,假設伺服器上已經有某流程被部署,我們再重新部署新版本流程之時,可以選擇保留舊版本流程實例繼續執行,接下來該流程的owner則可以在workspace之中找出需要進行移轉的實例進行直接移轉,也可以針對特定的流程實例更動流程實例資料內容,以確保移轉正確。
  • Correlations:基本上Correlation算是多流程實例交互引用時非常重要的功能,簡單來說,一個非同步的外部系統呼叫,在外部系統執行完成之後需要callback流程實例,這個時候就有個基本的問題,系統中可能有好多個流程實例都在等待callback,到底此時該找到那個流程實例呢? Correlation就是此問題的解決方案,之前版本的BPM不是不能解決這問題,只是要解決需透過BPEL的功能來做,拐了個彎相當不方便。最新版本此功能被新增至BPMN流程設計之中了。
  • 預先定義的流程變數:以往在流程之中要取得一些流程資訊如:instanceId、compositeDN、title、creationDate...等資料是有點麻煩的,通常需要透過XPATH呼叫Oracle的一些函式才能夠拿到,在開發上面比較繁瑣,這版本把這些資料放入了一些預設變數之中方便開發人員取用。
  • 新的Data Association Editor:簡單來說,有個新開發介面方便資料的對應的設計,看圖感受一下吧:

  • 規則引擎強化:新的規則引擎增加了測試功能與audit trail的紀錄,以後再BPM Console中查詢流程實例的執行歷程紀錄時,我們可以看到規則引擎的實行歷程,也算是方便未來的debug與trace。
  • Draft Mode and Log Messages:同樣是為了開發與測試的便利性,現在開發人員可以將流程中尚未開發完成的activity指定為draft狀態,指定為draft狀態的activity可以不需要指定詳細的實作方式,一樣可以被部署並進行測試,這和以前我們需要完成全部的流程開發之後才能進行部署測試是更佳的彈性了。另外,這版本也可以很簡單得在每一個activity之中加上你想要紀錄的訊息,當然,這就像是你用Log4J來記錄Java程式的執行狀態一樣,方便未來的除錯過程。
其餘還有一些功能如:Parametric role、Sticky user、Oracle UCM整合、Activity Guide、Notification Activity、Round-trip simulation與流程文件的產生...等,基本上算是很多新功能的版本了!

PS4FP是透過Patch的方式散佈,所以有興趣的朋友,你必須先有個安裝完成一個現有PS4環境,接下來透過Oracle Support找到Patch 12413651才能下載安裝檔。

後續有時間的時候,我會陸續做幾個簡單範例介紹這些新功能。So.... Stay tuned!



2011年7月5日 星期二

[Oracle BPM/SOA 實務] 應用外部LDAP Server做為使用者資料來源

BPM的應用往往會應用企業內部現有使用者資訊,最通常會遇到的就是和企業內部的MS Active Directory、Sun iPlanet Directory、OpenLDAP、Oracle Internet Directory或Novell Directory Server...等LDAP Server整合。在單機測試環境中,你可以應用WebLogic Server本身內建的LDAP Server進行開發,但是當部署到線上系統的時候,架構規劃人員就需要思考如何介接上述的LDAP Server了。在之前的文章中,我已經有介紹過如何建構開發環境,並使用WebLogic內建LDAP Server,本文我們就來看看怎麼和外部的LDAP Server整合。

為了測試方便起見,我們使用OpenLDAP做為範例,關於OpenLDAP的簡單使用方式,你可以參考此連結,若你使用Windows作業系統進行開發測試,請到此處下載Windows版本。另外,你會需要一個LDAP Client方便產生並修改使用者資料,我們這裡使用的是JXplorer,你可以使用任何熟悉的工具。

這裡我所使用的範例的base DN是dc=oracle,dc=com,如果你是重新建立一個新的OpenLDAP環境,可以修改slapd.conf檔案來去指定相關的suffixrootdnrootpw參數。如果你是使用現存環境的話,記得在接下來的範例之中,依據你環境中的base DN與密碼進行修正。


新建使用者與群組

下面我提供了一個簡單的LDIF檔案,你可以做些簡單的修改,並透過JXplorer將他餵入OpenLDAP之中:


dn: ou=people,dc=oracle,dc=com
ou: people
objectClass: top
objectClass: organizationalUnit


dn:cn=user1,ou=people,dc=oracle,dc=com
objectClass:inetOrgPerson
cn:user1
sn:user1
uid:user1
userPassword:welcome1



dn:cn=user2,ou=people,dc=oracle,dc=com
objectClass:inetOrgPerson
cn:user2
sn:user2
uid:user2
userPassword:welcome1


dn: ou=groups,dc=oracle,dc=com
ou: groups
objectClass: top
objectClass: organizationalUnit


dn: cn=testGroup,ou=groups,dc=oracle,dc=com
objectClass: top
objectClass: groupOfNames
cn: testGroup
member: cn=user2,ou=people,dc=oracle,dc=com



請注意,我在這裡面建立了兩個OU,一個DN是ou=people,dc=oracle,dc=com,代表了使用者,另一個是代表使用者群組的ou=groups,dc=oracle,dc=com。同時,我順便建立了user1user2兩個使用者以及一個testGroup使用者群組。

從JXplorer你將看到這樣的畫面資訊:














特別注意,在BPM應用之中,你會用到很多額外的資訊,像是使用者的姓名、顯示名稱、職稱、Email、電話以及主管是誰...等等。因此,這些使用者所設定的objectClass最好是指定為inetOrgPerson。在簡單的建立了使用者之後,建議你可以透過LDAP Client連進去修改使用者完整的資訊。

這樣你的LDAP Server環境已經準備完成了,準備設定BPM Server的連接了!


設定BPM Server

首先,請登入WebLogic Console,並選擇【安全範圍】-->【myrealm】-->【提供者】。首先,你會看到兩個預設的認證提供者【DefaultAuthenticator】與【DefaultIdentityAsserter】,此時請按下新增按鍵,如下圖所示,新建一個OpenLDAP的認證提供者。

















按下確定鍵之後,你會看到新的認證提供者已經產生了,請點選這個新的提供者,並選擇【提供者特有】進行設定:


















在連線部分,請指定你OpenLDAP Server的主機hostname與port,並且指定所使用的密碼。
接下來是一堆我有修改的設定,請也依據修改:


使用者
使用者基本 DN: ou=people, dc=oracle, dc=com
名稱篩選中的使用者: (&(cn=%u)(objectclass=inetOrgPerson))
使用者物件類別: inetOrgPerson


群組
群組基本 DN: ou=groups, dc=oracle, dc=com
名稱篩選中的群組: (&(cn=%g)(objectclass=groupOfNames))


靜態群組
靜態群組物件類別: groupOfNames
成員 DN 篩選中的靜態群組 DN:(&(member=%M)(objectclass=groupOfNames))

完成之後,記得將你新建認證提供者的【控制旗標】設定為【SUFFICIENT】,如下圖所示:



















同時,請將DefaultAuthenticator的控制旗標設定為【OPTIONAL】,並且重新排序各個提供者,將你所新建的認證提供者放到最上端。


















重新啟動Server,這次你在myrealm之中,可以看到來自不同認證提供者的使用者:



恭喜你! 所以設定已經完成,你可以試試看用user1登入BPM Composer了! 你可以試試看在新的使用者上面測試之前我們介紹過的Multi-Tier審核流程囉!

2011年5月17日 星期二

[Oracle BPM/SOA 基礎] BPM/SOA Suite 11gR1PS4 使用 JRockit VM

最近Oracle悄悄的出了新版的Fusion Middleware,這次的版本是11gR1PS4,手癢的我趕緊抓了下來安裝,基本上想要嘗鮮新功能的開發人員可能要失望了,這個版本算是的bug-fix release,也因此在BPM/SOA部分沒有添加啥特別的新功能,到是修正了一些PS3所出現的bug,同時也做了一些效能的調教,有興趣的人可以去MetaLink看看Doc ID:1316076.1和1316062.1。


到是我在測試使用JRockit做為JVM的時候遇到了一些問題:

  • 安裝最新JRockit:R28.1.3
  • 修改setDomainEnv.cmd,改使用JRockit:
    • set BEA_JAVA_HOME=D:\jrockit\jrockit-jdk1.6.0_24-R28.1.3-4.0.1
    • set JAVA_VENDOR=Oracle

接著再啟動的時候會在console一直跑出下列資訊 (但是伺服器是正常作業的喔):

[WARN ][osal   ] Could not enumerate processes (1) error=-1073738819
[WARN ][osal   ] Could not add counter (null)\ for query
[WARN ][osal   ] Failed to init virtual size counter.



JRockit R28 Known Issues的文件中有明白指出,這樣的問題有可能是Windows PerfOS counter沒有被enable (抱歉,我不知道這是啥意思),按照文件指示到Microsoft網站上下載了工具後發現,我的設定一切正常,但是問題卻一再發生。


網路上爬了一下文發現,這樣的問題有可能是我的performance counter已經毀損,並且可以透過下列指令重建:


C:\Windows\system32>lodctr /r


執行過後就解掉我的問題了,提供給遇到相同問題的同好參考!





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!!!

2011年3月1日 星期二

[Oracle SOA 應用] 使用Mediator與Event處理content-based routing

這幾天剛好有個朋友問到一種在SOA設計上面常遇到的情境,使用SOA (ESB)架構做request 的content-based routing設計,常常設計出下列的composite:


這樣的設計是由SOA平台對外提供單一介面,然後根據傳入訊息內容決定要呼叫哪一個End-Point Web Service。

在SOA 11g的SCA架構中,通常是把相對應的end-point,中間的mediator與對外的web service打包成一個composite,然後一次部署上server。這樣的設計在一般情境下都非常適用,開發人員只要拖拉點選就可以快速完成。只不過,要是需求的end-point有可能有上百個的話,這張圖可能就太大了,而每一次的重新部署都會影響到所有的服務,相對應的在維護上反而造成了小小的不便。

要怎麼樣解決這樣的問題哩? 我建議可以從幾種方式下手:

2011年2月7日 星期一

[Oracle SOA 應用] 呼叫外部Java類別

開春第一砲,來看看我們在流程中怎麼呼叫一個已經寫好的Java Class。

我就不step-by-step的描述每一個步驟,請你自己新增一個新的SOA專案,並且產生一個Empty Composite。

由於呼叫Java元件屬於系統流程整合的部分,因此,我們使用BPEL流程做為整合的範例。請在Component Palette中托放一個BPEL Process進入Composite中央。再彈出的對話視窗中指定此流程的採用BPEL 1.1或2.0、名稱、同步與非同步、Service名以及是否對外提供SOAP服務:


當回到你的composite editor,你可以看到現在你有個BPEL的Process,並且有個對外的service介面:


2011年1月27日 星期四

[Oracle BPM/SOA 基礎] 如何增加使用者至BPM Server中

在Oracle BPM中,參與流程的使用者需先被定義於BPM Server之中,而BPM的使用者資料來源為何哩? 來自於底層的WebLogic Server的security realm!!

WebLogic security realm中使用者資料可以來自很多地方,預設是使用WebLogic本身所embbed的一個LDAP server,當然你也可以config WebLogic讓他連到外面的LDAP Server或是特定Schema的database之中,但這不在我們的討論範圍之中,此文章我要介紹你如何在自己的開發環境之中,使用WebLogic embbed LDAP server,並新增測試所需要的使用者在此server之中。

首先,先把使用者給產生出來。連入WebLogic console,新增你所需要的使用者。(不知道怎麼做嗎? 提示一下:"安全範圍" --> "myrealm" --> 使用者與群組 --> "使用者" --> "新建")

接下來,這個使用者有些BPM所需要的資訊是存放在LDAP tree之中的(如:工作通知時的使用者email帳號、使用者顯示的名稱、使用者的直屬上司是誰...等),既然他是LDAP Server,我們就應該可以透過標準的LDAP連進去修改他囉? 沒錯! 這是可以的,只是要解除預設的封印!

首先你需要連接到WebLogic Console,在網域結構中按下你的bpm_domain,在右方的頁簽中選擇 "安全性" --> "嵌入式LDAP"。


將你喜歡的密碼打入【證明資料】與【確認證明資料】,儲存之後重新開啟server。

接下來,你需要一個LDAP browser讓你連接進WebLogic embbed LDAP server,我個人是使用JXplorer,你可以從這裡下載免費的版本。

WebLogic embbed LDAP server連接的方式是走標準的WebLogic Server的IP與port,預設7001(請根據你的環境修改),連接的DN為cn=Admin,密碼是你剛才所設定在【證明資料】的值。


接下來,你就可以針對你剛才所新增的使用者,另外增加其他的必要資訊了!



2011年1月26日 星期三

[Oracle BPM/SOA 基礎] BPM/SOA Server JVM參數設定

由於Oracle BPM/SOA對於記憶體的需求若渴,因此JVM參數的設定會相當程度影響server執行的效能。

對於64-bit JVM, 我會建議如果可以的話,將Heap size設定至少大於2048m,PerGen Space設定為512m~768m。

要更動SOA啟動的JVM參數,你可以修改<Domain>\bin\setSOADomainEnv.cmd檔案。

64-bit JVM需找出PORT_MEM_ARGS,32-bit則修改DEFAULT_MEM_ARGS參數,下面是我的8G RAM Windows 7的BPM環境設定,提供給各位參考:


set JAVA_OPTIONS=%JAVA_OPTIONS%
set DEFAULT_MEM_ARGS=-Xms512m -Xmx1024m
set PORT_MEM_ARGS=-Xms3200m -Xmx3200m


if "%JAVA_VENDOR%" == "Oracle" goto OracleJVM
set DEFAULT_MEM_ARGS=%DEFAULT_MEM_ARGS% -XX:PermSize=128m -XX:MaxPermSize=512m
set PORT_MEM_ARGS=%PORT_MEM_ARGS% -XX:PermSize=512m -XX:MaxPermSize=768m

另外,如果你開發的過程中遇到JDeveloper太慢或complain記憶體問題,你也可以透過修改編輯<Middleware_Home>\jdeveloper\ide\bin\ide.conf檔案,以變更JDeveloper所使用的JVM參數:

AddVMOption  -Xmx1280M
AddVMOption  -Xms512M

[Oracle BPM/SOA 基礎] 安裝BPM/SOA Suite 11gR1PS3

這是小弟一系列Oracle Fusion Middleware教學文件的第一站,有鑑於網路上面鮮有繁體中文版本的Fusion Middleware技術資料,本系列文章將會針對整個Fusion Middleware各種不同產品提供說明。

本文先針對Business Process Management (BPM) 與Service-Oriented Architecture (SOA)這部分產品安裝進行說明。在安裝之前,各位請先花一點時間看一下簡單的產品架構說明,這會幫助各位了解產品安裝過程的各個步驟。

架構說明

首先,Oracle Fusion Middleware產品線的主要使用Java做為核心語言,也因此,幾乎所有的產品底層都會需要一個application server(OSGi或非集中化架構的除外),Oracle採用的是WebLogic Server做為此底層JEE Container,這也是待會在執行安裝步驟之時,你會需要先進行WebLogic Server安裝的主要原因。

而針對【整合】這個主題,Oracle的核心產品就是SOA Suite,如下圖所示,簡單來說他是一個套餐產品,內容包含了企業內部在整合多個現存系統所需要的元件:BPEL、Mediator、Service Bus、Rule Engine、人工流程、B2B與BAM... 等等。這些元件在跨系統整合過程中各自扮演了不同的角色,我也將在這一系列的之後技術文章簡單介紹各主要元件的使用。


那SOA又怎麼會和BPM扯在一起呢?