通過異步消息整合 ILOG JRules 和 WebSphere Process Server1

簡介

決策服務現在正成為當前現實生活業務處理方案的重要需求。雖然 WebSphere Integration Developer (WID) 和 WebSphere Process Server (WPS) 已經嵌入了一個業務規則引擎,但用戶只能用其來實現簡單的規則或者有限的業務用戶交互決策表。在大多數使用案例中,嵌入的規則引擎不能滿足複雜的業務需求。因此,一個更專業、更強大的業務規則管理系統是必需的,這個管理系統需要能支持生活全領域的業務規則編寫、測試、部署、執行和管理,並且能很容易地和 IBM WebSphere Business Process Management (BPM) 產品整合。ILOG JRules,作為一個市場領先的 Business Rule Management System (BRMS),是件完美的產品,能夠為您提供編寫、部署和管理業務規則的能力,並有效支持策略改變和快速策略部署 —— 一個敏捷的、全球整合的企業所需的屬性。

本文提供了通過異步消息實現 ILOG JRules 和 WPS 整合的解決方案。從用戶的角度來看這是非常重要的,因為它是當前業務系統的流行模式,還可能是整合遺留的 EIS 系統和 BRMS 系統的唯一方法。ILOG JRules 的異步消息架構,所需消息資源、服務器端配置和客戶端開發實現將會在本文詳細描述,向您顯示如何通過異步消息來整合 ILOG JRules 和 WPS。所述的所有步驟都能在 ILOG JRules v6.7.3、WebSphere Process Server v6.2 和 WebSphere MQ v6.0 上進行驗證。

異步消息

異步消息不同於同步通信方式,並不是進行即時通信。從請求者的角度來看,異步消息就意味着一個進程或者線程將一個信息發送到目的地,並不期待收到響應。從用戶角度來看,異步消息就意味着接收一個消息,並不立刻響應消息的發送者。發送者可以根據特性,比如保證發送,來確保消息到達。

圖 1 顯示了如何使用 JMS 隊列或者主題來設置輸入消息。為了異步地收到消息,會使用消息監聽器,消息驅動 bean。它對消息將會到達的 JMS 請求目的地進行監聽,然後將它們傳送到目標應用中。

圖 1. 使用 JMS 隊列或者主題設置輸入消息

圖 2 顯示了如何使用 JMS 隊列或者主題獲取輸出消息。在目標應用處理後,如果有響應消息,消息驅動 bean 負責發送響應消息。它會將結果發佈到 JMS 響應目的地。

圖 2. 使用 JMS 隊列或者主題獲取輸出參數

JMS API 給消息系統實現選擇。因為 API 提供一個 Publish-Subscribe 模型和一個點對點模型,ILOG JRules 實現這兩個標準。能使用這兩種模型將會幫助您找到問題的正確解決方案。

重要的是,如果異步消息是您的案例的正確解決方案 —— 什麼是真正的同步或者異步並不是很明顯的。

ILOG JRules 的異步消息架構

消息驅動規則 beans 是由 ILOG JRules 提供的、用於異步處理消息的企業 beans。圖 3 顯示了 ILOG JRules 的異步消息架構。

圖 3. ILOG JRules 異步消息架構

客戶應用程序使用 JMS (Java Message Service) 的消息標準來調用 JRules 服務。它把 JMS 消息發送到一個消息目的地,這個目的地的消息驅動規則 bean 正在監聽已到達的消息。消息驅動 bean,或者 JRules MDB 是一個像消息監聽器一樣運作的企業 bean。在 bean 中,IlrRuleExecutionBean 是隊列 MDB ,而 IlrRuleExecutionTopicEJB 是主題 MDB。您可以使用應用程序服務器資源來分配消息驅動規則 bean 的目的地。

清單 1. ILOG JRules 中的隊列和主題 MDBs

 

<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 容器調用消息驅動規則 bean IlrRuleExecutionBean 或者 IlrRuleExecutionTopicEJBonMessage 方法。IlrRuleExecutionBean 或者 IlrRuleExecutionTopicEJB 可以從客戶應用程序駐留在本地或者遠程。反過來,消息驅動規則 bean 調用運行在 Execution Unit (XU) 的規則集。規則引擎的真正調用會被分配到一個簡單的規則會話中。

規則引擎處理後,如果有響應消息,消息驅動規則 bean 就負責發送響應消息。它會將結果發佈到 JMSReplyTo 頭文件指定的 JMS 響應目的地。

在 ILOG JRules 中,用於 WebSphere Application Server (WAS) v6.0 的消息驅動規則 bean IlrRuleExecutionBeanIlrRuleExecutionTopicEJB 的實現類被打包在 <JRules_Installation_Directory>/executionserver/applicationservers/websphere6/jrules-bres-mdb-WAS6.jar。

整合 ILOG JRules 和 WPS 時,客戶應用程序是運行在調用規則服務的 WPS 上的方案,服務器是 ILOG JRules execution server (RES) 所在的應用程序服務器。我們假設,RES 安裝在 WAS 或者以 WAS 為基礎的服務器上,例如,WPS、WESB (WebSphere Enterprise Service Bus)、WDPE (WebSphere Dynamic Process Edition),等等。

消息格式

接收到的 JMS 消息必須符合 ILOG JRules 要求的格式,這樣才能被 JRules MDB 適當地使用。客戶端應用程序應該相應地將 JMS 請求信息的格式轉換。應該遵守以下格式:

1. 為了對調用參數化,消息頭文件必須包括 ILOG_rules_bres_mdb_rulesetPathILOG_rules_bres_mdb_status JMS 屬性。

表 1. 正在接收中消息的 JMS 屬性

JMS 屬性名稱

類型

描述

強制性

ilog_rules_bres_mdb_rulesetPath

String

包含要執行的規則集路徑

強制

ilog_rules_bres_mdb_status

String

必須設置為 “request”

強制

ilog_rules_bres_mdb_enableInterceptor

Boolean

設置為 true 將啟用一個規則集執行攔截器。如果這個屬性留空,它的值認為是 false

可選

ilog_rules_bres_mdb_userData

String

包含將傳遞到這個簡單規則會話的 userData

可選

ilog_rules_bres_mdb_mainTask

String

包含將被執行的主任務的名稱

可選

ilog_rules_bres_mdb_bom_access

Boolean

設置為 true 將啟用 BOM 類型上的輸入參數的表達式

可選

2. 已發送的消息體是在一個在 javax.jms.ObjectMessage 中的 java.util.Map

表 2. java.jms.ObjectMessage 中的消息體

Message Body (java.util.Map)

參數名稱(String)

參數值(Serializable)

ilog_rules_bres_mdb_filters

關聯到一個 java.util.Properties 對象並包含確定執行跟蹤水平的過濾器

ILOG JRules 實現異步消息的兩個標準:Publish-Subscribe 模型和點對點模型。本文說明如何使用點對點消息模型來整合 ILOG JRules 和 WPS。

點對點消息的資源需求

本小節介紹定義消息資源的過程,這個消息資源可以用於客戶應用程序和 JRules MDB 中。WAS 和 IBM WebSphere MQ 中兩者的默認消息提供者可以用作 JMS 消息提供者。這裡提供的資源名只是例子,您可以按需要進行修改。

默認消息提供者的資源

WAS 的默認消息提供者被用作 JMS 消息提供者時,您需要在 WAS 管理控制台創建 WebSphere JMS 資源。您必須在節點範圍內,默認消息提供者下創建這些資源。

1. 在服務集成總線上,分別創建請求隊列目的地和響應消息:REQUESTQRESPONSEQ

圖 4. 創建隊列目的地

2. 在 JRules MDB 創建接收請求消息的 WebSphere JMS 隊列:有 JNDI jms/BRESQueueInBRESQueueIn,JNDI jms/BRESQueueIn 使用 REQUESTQ 目的地。

圖 5. 創建一個 JMS 隊列

3. 創建一個發送響應消息的 WebSphere JMS 隊列:有 JNDI jms/BRESQueueOutBRESQueueOut,JNDI jms/BRESQueueOut 使用 RESPONSEQ 目的地。

4. 創建一個用於連接 WPS 和默認消息提供者的 WebSphere JMS 隊列連接工廠:有 JNDI jms/BRESQueueConnectionFactoryBRESQueueConnectionFactory,JNDI jms/BRESQueueConnectionFactory 連接隊列目的地所在的服務集成總線。

圖 6. 創建一個 JMS 隊列連接工廠

以下文章點擊率最高

Loading…

     

如果這文章對你有幫助,請掃左上角微信支付-支付寶,給於打賞,以助博客運營

發表評論

您的電子郵箱地址不會被公開。 必填項已用*標註