業務流程管理(Business Process Management,BPM)和業務規則管理系統(Business Rules Management System,BRMS)是當今企業中間件產品中的兩個熱門領域。隨着客戶需求的增長,BPM 和 BRMS 的集成愈來愈常見,這爲客戶提供業務流程敏捷性和可擴展性更高的解決方案。WebSphere Process Server V7.0 和 ILOG JRules V7.0.2 分別是 BPM 和 BRMS 的核心產品。本文首先簡要介紹 Process Server 和 JRules,而後詳細討論如何經過集成 ILOG JRules 和 Process Server 實現敏捷的業務流程,包括安裝和配置、不一樣的集成方法(好比 POJO、EJB、Web 服務和 JMS/MQ)以及在 Process Server 中使用 Common Event Infrastructure (CEI) 監視 JRules 服務。html
本文概述 ILOG JRules 和 WebSphere Process Server 的集成。若是須要關於本文提到的集成點的詳細指南,請參見 Integrate WebSphere ILOG JRules with WebSphere Process Server 白皮書。java
回頁首web
做爲企業 IT 基礎設施的關鍵部分,業務流程管理愈來愈重要了。在 BPM 產品套件平臺上,能夠建模、部署、執行和監視企業的業務流程,業務流程能夠包含業務規則。例如,在銀行的賬戶驗證過程當中,評估客戶資格或肯定價格的業務策略很複雜,並且在快速發展的市場中經常會變更。把這些策略硬編碼在過程當中是不合適的,由於很難在運行時管理和維護業務規則。經過把業務規則和業務流程分隔開,單獨地執行和管理它們,能夠提升整個業務流程的敏捷性和可擴展性。圖 1 說明了這種思想。數據庫
在 IBM 的 BPM 產品組合中,WebSphere Process Server 是業務流程執行平臺,它爲企業提供強大、可擴展且符合行業標準的業務流程基礎設施。Process Server 基於 WebSphere Application Server 平臺,提供 Enterprise Service Bus (ESB) 功能,能夠支持企業的面向服務架構 (SOA)。WebSphere Integration Developer(後面簡稱爲 Integration Developer)是業務流程開發和組裝工具。在 Integration Developer 中開發的項目能夠部署在 Process Server 中,而後直接執行。瀏覽器
儘管 Integration Developer 和 Process Server 已經嵌入了業務規則編輯器和業務規則引擎,可是隻能使用它實現簡單的規則或決策表,只能包含有限的業務用戶交互。對於大多數用例,嵌入的規則引擎沒法知足複雜的業務需求。所以,須要專用的強大的業務規則管理系統,它應該支持業務規則建模、執行和管理的整個生命週期,能夠方便地與 BPM 產品集成。安全
ILOG JRules 是先進的業務規則管理系統,提供編寫、部署和管理業務規則等業務功能。它支持高效地修改策略和快速部署策略,這正是敏捷的全面集成的企業所須要的。服務器
ILOG JRules 提供一種建模、實現和部署業務規則的系統化方法。它支持以有秩序的高效的方式進行協做。它包含的工具針對不一樣用戶的技能和知識優化過,所以策略經理、業務分析師和開發人員均可以得到所需的支持,能夠儘量發揮 BRMS 的價值。session
圖 2 說明 ILOG JRules 的架構。架構
下面簡要介紹 ILOG JRules 架構的每一個部分。app
ILOG Rule Studio:用於開發規則應用程序的基於 Eclipse 的開發環境。它容許合做編輯和調試 Java™ 代碼和規則。特性包括:
ILOG Rule Team Server:這是一個 Web 環境,分佈式業務團隊能夠經過它協做、建立、管理、驗證和部署業務規則。
本文主要討論 ILOG JRules 和 Process Server 的集成,包括安裝和配置、不一樣的集成方法(好比使用 POJO、EJB、Web 服務和 JMS/MQ)以及在 Process Server 中使用 CEI 監視 JRules 服務。
由於 Process Server 基於 WebSphere Application Server 平臺,而 ILOG JRules 與 J2EE 兼容,因此 ILOG JRules 運行時組件和 Process Server 的集成是標準的 J2EE 應用程序集成過程。圖 4 顯示部署到 J2EE 環境中以後 JRules Execution Server 的核心組件。
JRules 使用一個數據庫存儲和管理規則集和規則應用程序。數據源和持久化提供一個訪問 JRules 使用的數據庫的 JDBC 解決方案。
Execution Unit (XU) 是針對 Java EE Connector Architecture (JCA 1.5) 的資源適配器。XU 處理規則集執行的低層細節,提供對資源的訪問。XU 能夠獨立於管理模型運行。XU 讓管理模型能夠訪問配置和運行時數據,在應用服務器和規則引擎之間實現 JCA 契約。應用服務器或應用程序客戶機使用 XU 鏈接規則引擎。
執行組件受權 XU 執行規則集。Rule Execution Server 執行組件讓咱們可以經過編寫代碼與 Rule Execution Server 模型交互,而不須要依賴於內部實現。
客戶機模塊須要嵌入 Rule Execution Server 執行組件(jrules-res-session-<appserver>.jar
),使用它引用 XU。
圖 5 顯示 JRules 與 Process Server 集成的架構。
在 Process Server 中集成 JRules 運行時須要完成如下步驟:
jdbc/resdatasource
,見圖 6。不然,JRules 沒法正確地鏈接它的數據庫。 JRulesInstallDir\executionserver\applicationservers\WebSphere7\jrules-res-xu-WAS7.rar
找到它。XU J2C 鏈接工廠的 JNDI 名稱必須是 eis/XUConnectionFactory
。其餘 JRules 組件可能經過引用這個默認的 JNDI 名稱訪問 XU(圖 7)。 JRulesInstallDir\executionserver\applicationservers\WebSphere7\ jrules-res-management-WAS7.ear
找到執行管理 EAR。 resAdministrators
resDeployers
resMonitors
resAdmin
resDeployer
resMonitor
如今,JRules 運行時的基本組件已經集成在 Process Server 中了。可使用它們開發規則應用程序並部署到 Process Server 上運行的 JRules 中。業務流程能夠經過多種綁定做爲決策服務節點調用規則集。
圖 13 給出 JRules 定義的調用模型。
根據 XOM(在規則應用程序中定義的執行對象模型),客戶機能夠經過多種方法調用 Rule Execution Server 中部署的規則集,好比 POJO、EJB(遠程或本地)、JMS 等等。同時,JRules 還提供一個透明的決策服務,讓客戶機可使用 SOAP/HTTP 經過 Web 服務訪問規則集。在本文中,JRules 的客戶機是 Process Server 中部署的業務流程。所以,不一樣的調用方法與 Process Server 中不一樣的 SCA 組件對應。表 1 總結不一樣的 JRules 調用方法。
調用方法 | SCA 組件 | 本地仍是遠程 |
---|---|---|
POJO | SCA POJO | 只能是本地的 |
EJB | SCA POJO | 本地和遠程 |
JMS | MQ JMS 綁定導入 | 本地和遠程 |
Web 服務 | Web 服務綁定導入 | 本地和遠程 |
下面幾節詳細討論每種調用方法。
SCA POJO 調用的效率很高,由於它不須要對輸入和響應參數進行序列化和解序列化。可是,它的限制是只支持本地調用。這意味着 JRules Execution Server 必須在與 Process Server 相同的 JVM(發出調用的業務流程所在的 JVM)中運行。圖 14 顯示使用 SCA POJO 組件調用規則集的模型。
在這個模型中,SCA POJO 組件調用 jrules-bres-session-WAS7.jar
提供的 API,這會調用 XU 以訪問規則集並把結果返回給 SCA POJO 組件。清單 1 顯示的 Java 片斷使用 POJO 會話調用 JRules。
Map inputParameters = new HashMap(); String strAMERICASPricing = serialize(AMERICASPricingSdo, "http://AMERICAS_Pricing", "AMERICAS_Pricing"); inputParameters.put("AMERICASPricing", strAMERICASPricing); //Get the session factory for a Java rulesession invocation IlrSessionFactory sessionFactory = new IlrPOJOSessionFactory(); IlrSessionRequest request = sessionFactory.createRequest(); request.setRulesetPath(IlrPath.parsePath(rulesetPath)); request.getInputParameters().putAll(inputParameters); //create a stateless rule session IlrStatelessSession ruleSession = sessionFactory.createStatelessSession(); IlrSessionResponse result = ruleSession.execute(request); Map outputParameters = result.getOutputParameters(); String strOutAMERICASPricing = (String) outputParameters.get ("AMERICASPricing"); DataObject response = createResponse("http://com", "AMERICAS_Pricing_RuleProjectExecutionResult"); response.set("AMERICASPricing", deserialize (strOutAMERICASPricing,"AMERICAS_Pricing"));
JRules 在 Integration Developer 中提供一個 Decision Service Wizard,能夠用它自動地生成 SCA POJO 組件(圖 15)。
能夠經過 EJB 調用本地或遠程地訪問 ILOG JRules 中部署的規則服務。圖 16 顯示使用 EJB 綁定調用規則集的模型。
圖 16 顯示客戶機應用程序使用規則會話(IlrStatelessRuleSession 或 IlrStatefulRuleSession)調用規則集。在規則會話中,將調用 IlrStatelessRuleSessionEJB 或 IlrStatefulRuleSessionEJB。IlrStatelessRuleSessionEJB 和 IlrStatefulRuleSessionEJB 能夠駐留在與客戶機不一樣的 JVM 中。IlrStatelessRuleSessionEJB 或 IlrStatefulRuleSessionEJB 進而本地地調用在 XU 上運行的規則集。在 ILOG JRules 中,IlrStatelessRuleSession、IlrStatefulRuleSession、IlrStatelessRuleSessionEJB 和 IlrStatefulRuleSessionEJB 都打包在 jrules-res-session-WAS7.jar
中。客戶機是 Process Server 中調用規則服務的場景。服務器是 ILOG JRules Execution Server 所在的應用服務器。
清單 2 所示的 Java 代碼使用 EJB 會話調用規則服務。
//Sets IN and INOUT parameters. Map inputParameters = new HashMap(); String strCreditpricing = serialize(creditpricingSdo,"http://creditpricing", "CreditPricing"); inputParameters.put("creditpricing", strCreditpricing); Properties properties = new Properties(); properties.put(JAVA_NAMING_FACTORY_INITIAL, INITIAL_CONTEXT_FACTORY); properties.put(JAVA_NAMING_PROVIDER_URL, ENGINE_URL); IlrSessionRequest request = new IlrSessionRequest(rulesetPath); request.getExecutionSettings().getInputParameters().setParameters (inputParameters); //Get the provider for a Remote EJB IlrRuleSessionProvider rsProvider = new IlrRuleSessionProviderFactory.Builder( properties).setJNDINameOfRuleSessionStateless(JNDI_NAME).build(); //create a stateless rule session IlrStatelessRuleSession ruleSession = rsProvider.createStatelessRuleSession(); IlrSessionResponse result = ruleSession.executeRules(request); ilog.rules.bres.session.IlrSessionParameters outputParameters = result .getExecutionResult().getOutputParameters(); String strOutCreditpricing = (String) outputParameters.getObjectValue ("creditpricing"); DataObject response = createResponse("http://com", "PricingrulesExecutionResult"); response.set("creditpricing", deserialize(strOutCreditpricing,"CreditPricing"));
JRules 在 Integration Developer 中提供一個 Decision Service Wizard,能夠用它自動地生成調用此代碼的 SCA POJO 組件和 EJB(圖 17)。
在 Process Server 中,能夠經過 Web 服務訪問規則服務。ILOG JRules 使用透明決策服務爲規則集提供 Web 服務訪問。JRules 提供兩種透明決策服務:
對於監視的透明決策服務,支持的應用服務器只有 JBoss 和 Tomcat。所以,在與 Process Server 集成時,只能使用駐留的透明決策服務。圖 18 說明如何使用駐留的透明決策服務訪問 JRules 服務。
要想使用 Web 服務訪問規則集,應該把駐留的透明決策服務 (jrules-res-htds-WAS7.ear) 部署到 Rule Execution Server 所在的 Process Server。這能夠是與進行調用的業務流程相同的主機,也能夠是不一樣的主機。
要想使用 Web 服務調用規則集,首先須要從 Rule Execution Server 控制檯導出目標規則應用程序的 WSDL(圖 20)。
而後,在 Integration Developer 中,把這個 WSDL 文件導入要調用規則服務的 SCA 模塊,指定 WSDL 文件中定義的用於 Web 服務綁定導入的接口。
業務流程可使用 Java Message Service (JMS) 消息標準異步地調用在 JRules 上運行的規則集。圖 21 顯示使用 JMS 調用規則集的模型。
圖 21 顯示客戶機應用程序使用 JMS 消息標準調用 JRules 服務。它把 JMS 消息發送到一個消息目的地,在那裏由消息驅動的規則 bean (MDB) 監聽到達的消息。這個 MDB(即 JRules MDB)是一個做爲消息監聽器的企業 bean。在這個 bean 中,IlrRuleExecutionBean
是隊列 MDB,IlrRuleExecutionTopicEJB
是主題 MDB(清單 3)。可使用應用服務器資源分配由消息驅動的規則 bean 的目的地。
<message-driven> <ejb-name>IlrRuleExecutionEJB</ejb-name> <ejb-class>ILOG.rules.bres.mdb.ejb.IlrRuleExecutionBean</ejb-class> ... </message-driven> <message-driven> <ejb-name>IlrRuleExecutionTopicEJB</ejb-name> <ejb-class>ILOG.rules.bres.mdb.ejb.IlrRuleExecutionBean</ejb-class> ... </message-driven>
當 JMS 消息到達時,EJB 容器調用 MDB IlrRuleExecutionBean 或 IlrRuleExecutionTopicEJB 的 onMessage 方法。IlrRuleExecutionBean 或 IlrRuleExecutionTopicEJB 能夠駐留在客戶機應用程序本地,也能夠駐留在遠程。MDB 進而調用 XU 中運行的規則集。對規則引擎的實際調用委託給一個簡單的規則會話。
在規則引擎處理完成以後,MDB 負責發送響應消息(若是有的話)。它把結果發送到由 JMSReplyTo 消息頭指定的 JMS 響應目的地。
在 JRules 中,用於 WebSphere Application Server 的 MDB IlrRuleExecutionBean 和 IlrRuleExecutionTopicEJB 實現類打包在 jrules-res-mdb-WAS7.jar 中。
在使用 JMS 調用規則集時,須要把 jrules-res-mdb-WAS7.jar 打包在一個假的 EAR 文件中,把它部署到 XU 所在的 Process Server。在 JRules MDB 端,須要定義如下資源:
jms/BRESQueueConnectionFactory
的隊列鏈接工廠。jms/BRESTopicConnectionFactory
的主題鏈接工廠。jms/BRESQueueIn
。jms/BRESQueueOut
。jms/BRESQueueIn
隊列中有消息時激活 JRules MDB。在客戶端,可使用導入和 JMS 綁定把 JMS 消息發送到 JRules MDB,或從 JRules MDB 接收 JMS 消息。JRules MDB 指望 JMS 對象消息的有效載荷是一個 java.util.Map
,而 Process Server 中的客戶機 SCA 應用程序須要一個業務對象。須要建立一個定製的 JMS 數據綁定,它把 java.util.Map 映射到 Process Server 中的業務對象表示。清單 4 說明如何使用定製的數據綁定在業務對象和 java.util.HashMap 之間創建映射。
public class CustomerApplicationDataBinding implements JMSDataBinding { public int getMessageType() { return JMSDataBinding.OBJECT_MESSAGE; } public void write(Message message) throws JMSException { try { ObjectMessage requestMessage = (ObjectMessage) message; //Get the data object DataObject customerApplicationSdo = getDataObject(); // Create the java.util.HashMap HashMap inputParameters = new HashMap(); // CustApplicationObj is the custom object defined in the parameters of rule application // convertSDOToCustApplicationObj converts the incoming SDO to CustApplicationObj CustApplicationObj customerApplicationObj =convertSDOToCustApplicationObj(customerApplicationSdo); inputParameters.put("CustomerApplicationObj", customerApplicationObj); // Set the payload of the JMS Object Message requestMessage.setObject(inputParameters); String rulesetPath = "/" + RULEAPP_NAME + "/" + RULESET_NAME_EMEARULE; //Set the JMS message header properties. requestMessage.setStringProperty("ILOG_rules_bres_mdb_rulesetPath", rulesetPath); requestMessage.setStringProperty("ILOG_rules_bres_mdb_status", "request"); } catch (DataBindingException e) { throw new JMSException(e.getLocalizedMessage()); } } public void read(Message message) throws JMSException { //Get the payload of the JMS Object message ObjectMessage responseMessage = (ObjectMessage) message; HashMap parameters = (HashMap) responseMessage.getObject(); CustApplicationObj outCustomerApplicationObj = (CustApplicationObj) parameters.get("CustomerApplicationObj")); // convertCustApplicationObjToSDO converts the rule application parameter to SDO DataObject dobject = convertCustApplicationObjToSDO(outCustomerApplicationObj); try { // Set the data object setDataObject(dobject); } catch (DataBindingException e) { throw new JMSException(e.getLocalizedMessage()); } } }
在 Process Server 中,能夠監視基於 CEI 的業務流程。全部啓用的 Common Base Event (CBE) 事件都發送到 CEI 服務器並存儲以供監視使用。可使用 Process Server 附帶的 CBE 瀏覽器檢查在業務流程運行時生成的事件。還可使用 WebSphere Business Monitor 監視指定的度量數據,好比業務流程的指標和 KPI。
ILOG JRules 中的規則服務也能夠把 CBE 事件發送給 CEI 框架,這提供與 Process Server 一致的監視機制。這些 CBE 事件能夠提供詳細、綜合的 JRules 服務審計跟蹤。
JRules 提供發送 CEI 事件的 API。爲了簡化,JRules 提供用於與 Process Server 集成的 ILOG JRules CEI Event Source 組件。它包含的 CEIEventBOM 模塊定義 CEI 事件 BOM 並封裝發送 CEI 事件的 API。規則項目能夠引用 CEIEventBOM 模塊並定義一個 ilog.connector.ibm.runtime.EventContainer 類型的變量,從而把 CEI 事件發送給 Process Server。示例見圖 22 和圖 23。
而後,能夠在須要發送 CEI 事件的地方添加代碼,見圖 24。
調用規則集以後,可使用 CBE 瀏覽器檢查事件(圖 25)。在這裏能夠看到規則調用的審計跟蹤,這提供觸發的規則和執行的規則流等有用的信息。
本文概述瞭如何集成 ILOG JRules 和 WebSphere Process Server。討論瞭如何使用不一樣的方法從業務流程調用規則服務,包括 POJO、EJB、Web 服務和 JMS/MQ。最後,討論了在 WebSphere Process Server 中如何經過 CEI 監視 JRules 服務。