ILOG JRules 規則集應用與客戶端的集成2

public class ComputeIncomeBean {

public Agent computeAgentIncome(Agent agent){

String executionError = null;

String rulesetVersion = Messages.getString(“latest”);

IlrSessionFactory sessionFactory = null;

try {

// get a rulesession

if (sessionFactory == null) {

sessionFactory = new IlrJ2SESessionFactory();

}

// Create a session request object

IlrSessionRequest sessionRequest = sessionFactory.createRequest();

// rulesetPath=”/ComputeSalaryApp/2.0/ComputeSalary”

String rulesetPath = Messages.getString(“rulesetPath”);

if (!rulesetVersion.equalsIgnoreCase(Messages.getString(“latest”))) {

rulesetPath = rulesetPath + “/” + rulesetVersion;

}

sessionRequest.setRulesetPath(IlrPath.parsePath(rulesetPath));

// Enable trace to retrieve info on executed rules

sessionRequest.setTraceEnabled(true);

sessionRequest.getTraceFilter().setInfoAllFilters(true);

// Set the input parameters for the execution of the rules

Map<String,Object> inputParameters = sessionRequest.getInputParameters();

inputParameters.put(“agent”, agent);

IlrStatelessSession session = sessionFactory.createStatelessSession();

// execute and get the response for this request

IlrSessionResponse response = session.execute(sessionRequest);

IlrExecutionTrace sessionTrace = response.getRulesetExecutionTrace();

agent = (Agent) response.getOutputParameters().get(“agent”);

}

return agent;

}

}

使用 context.xml 配置數據源

在 META-INF 的目錄下,創建一個 context.xml 文件,在該文件中添加配置數據源信息。Reloadable 屬性如果為 true,則 tomcat 會自動檢測應用程序的 /WEB-INF/lib 和 /WEB-INF/classes 目錄的變化,自動裝載新的應用程序,可以在不重起 tomcat 的情況下改變應用程序。name 表示指定的 JNDI 名稱,必須為 jdbc/resdatasource,type 表示數據源類型,使用標準的 javax.sql.DataSource。

清單 3. context.xml 文件源代碼

<?xml version=’1.0′ encoding=’utf-8′?>

<Context reloadable=”true” crossContext=”true”>

<Logger className=”org.apache.catalina.logger.FileLogger”

prefix=”IncomeService_log”

suffix=”.txt”

timestamp=”true”/>

<ResourceLink name=”jdbc/resdatasource”

global=”jdbc/resdatasource”

type=”javax.sql.DataSource”/>

</Context>

將調用規則集的核心類發佈成 Web 服務

利用工具將類 ComputeIncomeBean.java 發佈成 Web Services,並自動生成 Web 服務描述文件 ComputeIncomeBean.wsdl 和 Web 服務部署描述文件 deploy.wsdd。發佈 Web 服務操作如圖 3 所示:

圖 3. 利用工具創建 Web 服務

創建或修改服務器端配置文件 server-config.wsdd

該文件記錄了 axis 已發佈的 Web 服務的描述信息。每當部署一個新的 Web 服務時,新服務的描述信息要加入到 server-config.wsdd 中。將 deploy.wsdd 文件中 <service> 標籤中的內容(即發佈的服務描述信息)拷貝添加到 erver-config.wsdd 文件中。清單 4 展示了拷貝部分的重要代碼。

清單 4. server-config.wsdd 文件新增服務描述信息部分源代碼示例

<service name=”ComputeIncomeBean” provider=”java:RPC” style=”wrapped” use=”literal”>

<parameter name=”wsdlTargetNamespace” value=”http://services”/>

<parameter name=”wsdlServiceElement” value=”ComputeIncomeBeanService”/>

<parameter name=”schemaQualified” value=”http://services,http://agentbom”/>

<parameter name=”wsdlServicePort” value=”ComputeIncomeBean”/>

<parameter name=”className” value=”services.ComputeIncomeBean”/>

<parameter name=”wsdlPortType” value=”ComputeIncomeBean”/>

<parameter name=”typeMappingVersion” value=”1.2″/>

<operation xmlns:operNS=”http://services”

xmlns:retNS=http://services xmlns:rtns=”http://agentbom” name=”computeAgentIncome”

qname=”operNS:computeAgentIncome” returnQName=”retNS:computeAgentIncomeReturn”

returnType=”rtns:Agent” soapAction=””>

<parameter xmlns:pns=”http://services” xmlns:tns=”http://agentbom”

qname=”pns:agent” type=”tns:Agent”/>

</operation>

<parameter name=”allowedMethods” value=”computeAgentIncome”/>

… …

<typeMapping xmlns:ns=”http://agentbom” qname=”ns:ExtensionProperty”

type=”java:agentbom.ExtensionProperty”

serializer=”org.apache.axis.encoding.ser.BeanSerializerFactory”

deserializer=”org.apache.axis.encoding.ser.BeanDeserializerFactory”

encodingStyle=””/>

… …

</service>

導入 Web 服務工程庫要用到的重要 JAR 包

同時,要將 XOM 的 Java 類導出,agentbom.jar 文件包放到項目的 lib 庫文件中,調用規則引擎的核心代碼中要用到此類,並將其作為 Web 服務的參數。同時還要把調用規則引擎時主要用到的 jrules-res-execution.jar 包也放入庫中。如圖 4 所示

圖 4. Web 服務工程庫文件中要加入的重要 JAR 包

對本地調用規則集的 Web 服務進行部署

注意,由於服務中對規則集是採用本地調用的方式,因此 Web 服務要與規則應用即 (ComputeSalaryApp) 的運行環境部署在相同的 Web 服務器上。本例中的 Web 服務器採用的是 Tomcat。對 Web 服務工程項目進行導出 WAR 包文件部署在該服務器上如圖 5 所示:

圖 5. 導出 Web 服務工程 WAR 包到服務器上

部署成功後,可以看到 Web 服務器上部署的應用目錄結構如下,如圖 6 所示:

圖 6. Web 服務成功部署後,服務器上文件結構視圖

之後,點擊 Start Sample Server 啟動 Web 服務器,可以看到在此服務器上成功部署二項內容:

    包含部署了業務規則應用 ComputeSalaryApp 的運行環境 (res.war)。

    本地調用業務規則的 Web 服務 IncomeService。

創建調用 Web 服務的客戶端代碼

要想在應用程序客戶端能夠成功地去調用 Web 服務,還需要在客戶端創建調用服務的代碼。由於在服務成功發佈後,我們已經獲得了 Web 服務描述文件 ComputeIncomeBean.wsdl,因此,就可以利用工具通過服務描述文件自動生成調用代碼。操作如圖 7 和圖 8 所示:

圖 7. 用工具自動生成調用服務代碼步驟一

圖 8. 用工具自動生成調用服務代碼步驟二

在客戶端工程項目中,自動生成的調用服務的代碼文件如圖 9 所示:

圖 9. 調用服務客戶端代碼文件

需要說明的是,工具根據 Web 服務描述文件自動生成的序列化對象 Agent.java 文件,它就代表着員工的信息,可直接作為我們調用服務的輸入和返回參數進行使用,實際情況需對該類進行適當的屬性設定和方法的修改,從而使它能更加符合作用為參數的要求。因此,可把上述這段調用業務規則服務的代碼嵌入到任何客戶端應用程序中。

對業務規則應用進行調用執行測試

最後,編寫測試數據對其進行測試,結果如圖 10 所示,結預期結果完全一致。

結束語

本文結合員工薪水計算業務規則應用場景實例,介紹了業務規則開發,部署和集成的主要實現過程。重點討論 XOM 的設計和給出一種 Web 服務方式調用規則集的集成方案。通過本方案中測試後正確性結果,說明成功的實現了應用 ILOG Jrules 對業務規則地行獨立地開發,調試、部署、管理和集成,以及滿足 SOA 架構的松耦合的要求。

以下文章點擊率最高

Loading…

     

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