規則引擎技術簡單理解

需求變化是信息化項目的最大挑戰

隨着企業中信息化程度的不斷深刻,愈來愈多企業中的部門開始使用信息化管理系統來知足其平常的工做,同時企業的各項業務開展也愈來愈依賴其使用的信息化管理系統。在此背景下,信息化管理系統除了須要可以知足企業當前的業務需求以外,如何適應企業的發展以及業務擴展的須要,不斷的調整信息化管理系統,以適應新形勢下的企業競爭須要,是目前信息化項目所面臨的最大挑戰。 html

因爲傳統技術的限制,目前咱們常常能夠看到如下的現象: java

一、企業在應用一個信息的管理系統時,並不十分清楚到底須要哪些功能和需求。隨着項目實施的深刻,需求會不斷的加以修正和完善。最終使得項目實施的進度失控,甚至最終實施失敗。 web

二、信息化系統成功實施後,隨着企業對信息化認識的不斷加深,用戶但願增長更多的功能以及和其餘新增的系統作對接,這就須要對現有的系統進行改動。可是因爲傳統技術的限制,通常都不會對現有的系統進行,而是直接作一個全新的版本升級,這就使得原先的技術投入徹底的廢棄了。 數據庫

三、隨着企業信息化項目的增多,各個系統相互獨立,所用技術五花八門。除了造成一個個信息孤島以外,還很難加以維護。各個系統資源也不能很好的加以共享。企業對信息系統維護成本也是愈來愈高。 tomcat

這些現象的出現,都是因爲企業需求發生了變化,而傳統的軟件開發模式,當需求發生變化時,必須修改程序,所以使得軟件很難適應新的需求變化。 服務器

基於平臺全配置開發

爲了信息化項目可以適應新的軟件需求,須要儘量分離業務需求以及技術實現。所以採用配置方式進行實現,而不採用程序編碼方式來實現,是有效解決業務邏輯變動的實現方式。 網絡

在通常的信息化項目中,每一個軟件功能的實現都分爲操做界面、業務邏輯和數據庫層代碼。當需求變化時,主要就是這些方面的代碼變化,所以咱們須要採用配置方式來自動生成操做界面的代碼、業務邏輯的代碼以及數據庫層的代碼。 數據結構

在自動生成代碼的基礎上,咱們又將代碼自動進行編譯,而且實現動態的加載,所生成的代碼無需在進行修改,直接應用到系統中。這樣就完全的實現了全配置、無編碼的實現。 架構

什麼是規則引擎

規則引擎是一個業務邏輯的解析器。規則引擎須要結合規則編輯器、規則包來完成業務邏輯的解析。一個基於數據庫的信息系統從根本上來講是對數據的處理,所以業務邏輯層的操做實際上是對界面傳入的數據進行運算以及存儲等操做。規則引擎系統經過對象庫來定義傳給規則須要處理的數據,經過規則標記語言來定義處理這些數據的邏輯並將其存儲在規則包中。外部程序則須要經過規則引擎來解析執行規則包中的業務邏輯。 jsp

規則包執行原理

外部程序經過規則引擎調用規則包,每一個規則包都包括接口、規則邏輯和數據對象。

基於XML的規則

規則庫實際上是一個規則包的文件存儲系統,通常採用xml形式的規則標記語言定義了規則包中的對象以及相應的操做邏輯。規則庫中的規則包文件經過規則編輯器進行編輯,編譯成可執行文件後經過規則引擎進行調用。

規則引擎結構

      Visual Rules規則引擎是用於外部程序來調用規則包的一批java類庫,將一個規則引擎嵌入到應用程序中的方法與添加任何其餘Java類的方法同樣。在java的項目中,須要調用規則引擎來執行規則包,只需實現一個類(RuleEngine)就能夠了。經過RuleEngine類就能夠實現調用某個規則包,以及傳遞須要處理的業務數據。

每一個規則包配置完成後,會生成一個繼承RuleContext的類,而且將這個類自動編譯發佈到javaclass path的路徑中。外部程序經過RuleEngine接口,根據須要調用規則包的名稱,加載對應的RuleContext類而且執行其excuteRule()方法。

數據庫對象

規則支持對數據庫對象的動態調用,這些數據庫對象包括:數據庫表、查詢、視圖、存儲過程。所以在具體的實現中,當規則包讀取數據庫的表結構信息時,系統會動態生成實現Table接口的類,其中表結構信息、結構集都採用List來進行存儲。所以表結構是能夠在規則包中進行調整,對應的實現也會動態的更新List結構。

Web方式調用規則包原理

在規則配置器中,能夠添加一個web方式調用規則包的測試頁面,這個測試頁面採用jsp程序,其中根據規則包的接口數據結構,自動生成文本輸入框。同時根據數據結構的類型,自動生成解析request中提交的數據,而且傳遞到規則引擎中,而且執行對應規則包,最後取出返回結果,在顯示到頁面中。以上過程完整的再現了java程序如何經過規則引擎調用規則包的實現方式。用戶能夠經過自動生成的jsp代碼查看具體的實現。原理以下:

Jsp+規則引擎+規則包是一種MVC的架構模式,其中jsp中體現了View,規則引擎體現了Control,規則包體現了Model的結構。

Jsp層包括html部分和頁面邏輯部分。爲了保證系統的徹底runtime,頁面邏輯集成到jsp的頭部,用於jsp字段和規則引擎的交互。Html部分採用jsp標籤來處理jsp字段顯示到html

規則引擎只處理jsp字段和規則包的交互,規則引擎將jsp中字段傳遞給規則包,等規則包執行處理完數據後,再將處理後的規則包傳遞給jsp層。

規則包中設置了數據庫對象、數據對象和業務邏輯,業務邏輯實現對數據對象和數據對象的處理。

規則配置器

規則配置器是提供給開發人員和業務人員新建和修改規則包的工具,所以規則配置器能夠打開規則庫中的規則包,而且能夠設置規則包能夠調用的商業數據對象(BOM)以及處理邏輯(規則或決策表),同時能夠在配置器中測試規則包的執行,查看規則包的執行軌跡等。

規則配置器的主要功能特色以下:

多種方式存取規則包

經過規則配置器能夠新建規則包,新建的規則包能夠存儲在本地硬盤或者經過網絡存儲到數據庫中。存儲到數據庫中時,只須要經過採用HTTP協議開放的規則服務,存儲到服務器的數據庫中,並不須要服務器開發數據庫端口。

同時當規則包存儲在數據庫中,能夠設置規則包的權限。用戶能夠經過規則配置器直接登陸,而且只能操做本身具備權限的規則包。

規則包版本控制

  規則修改須要進行版本控制,新建的規則包的版本缺省狀況下是1.00,其中整數部分的版本爲規則的大版本,小數部分爲規則小版本。每次修改並保存新版本時,都會自動添加0.01,依次遞增。

當規則包每審覈一次,都會進行規則包大版本的遞增,用於區分規則的審覈狀況。規則的小版本,在具體的規則編輯過程當中,能夠選擇遞增,用於區分對規則包的修改狀況。

當規則包開發完成以後,上傳到數據庫服務器中,分爲兩種類型,一種是開發類規則包,另一種是管理類規則包。管理類規則包才能進行規則的審覈等操做,以及進行大版本的遞增。開發類規則包只能進行小版本的變更。

規則權限控制

目前C/S結構的規則編輯工具,有兩個版本,一個是開發版,一個是編輯版。

開發版能夠對開發類規則包和管理類規則進行操做。對於開發類規則包,只有開發人員才能打開,開發人員打開後,會記錄該版本的打開人以及打開時間。開發人員打開後,能夠對規則包進行任何操做,包括設置規則、對象庫、jsp頁面等。對於管理類規則包,當開發人員打開時,能夠進行任何操做,當編輯人員打開時,只能對規則包中的規則和決策表進行操做。

編輯版只能對管理類規則包進行操做。打開編輯類的規則包時,用戶必須輸入用戶名和密碼,當用戶名和密碼不經過時,不能進行登錄。用戶打開管理類的規則包時,只能修改規則和決策表,不能對對象庫和jsp頁面等進行操做。

規則修訂痕跡跟蹤

規則修改時,須要跟蹤規則包的修改狀況,目前只記錄規則和決策表的修改狀況。

當用戶在開發過程當中,能夠對規則包設置修訂點。當設置了修訂點以後,規則包會記錄一個當前全部規則的編輯狀態。之後進行規則的修改時,能夠查看到規則的變化狀況,而且能夠同時看到當前規則和修訂點規則的對比狀況。

用戶還能夠選擇某個版本的規則進行比較,比較時能夠看到每一個規則的修改狀況。

規則執行軌跡記錄

規則執行完畢以後,須要記錄規則的執行軌跡。當前記錄全部知足條件的規則的執行狀況,而且記錄規則進入時的數據值以及執行完以後的數據值。

目前在C/S結構的規則編輯器中,當使用了規則包的測試功能以後,會記錄當前規則包執行的執行規則,用戶能夠打開進行查看。

規則執行時,首先會對整個規則包記錄一個執行軌跡根。而後執行規則集時,會在此根下面新建一個執行軌跡。當執行規則時,會在父的執行軌跡下面再新建一個執行規則。新建時,記錄了規則的名稱,以及進行相關的變量,以及執行前值和執行後值的狀況。

B/S結構的規則包進行執行時,會將執行完畢以後的軌跡對象存儲到數據庫中。在進行查看時,就能夠看到規則包的執行執行樹狀結構。

規則本地測試

規則包編輯時,能夠進行本地的測試。本地測試分爲兩種方式,一種是直接使用規則包的測試功能,執行是系統會將規則包先進行編譯,而後再調用此規則包進行執行。

另一種作法是經過jsp頁面進行測試。每一個規則包能夠新建多個jsp頁面,每一個jsp頁面能夠導出到本地的tomcat服務器中,進行調用執行。

規則執行日誌

規則包中能夠設置日誌輸出,日誌分爲錯誤、警告、提示、調試等多種信息。能夠經過註冊日誌記錄服務,來實現日誌的多種方式導出。

日誌輸出時能夠包括如下信息:規則包名、執行時間、日誌類型、日誌信息、輸入參數、輸出參數等。

經過對日誌的輸出,能夠有效的瞭解和記錄全部規則包的執行狀況。

業務規則管理系統

業務規則管理系統用於管理規則配置器存儲在數據庫中的規則包,對規則包進行權限控制、在線查看、審覈發佈、在線執行等操做。

規則庫數據結構

規則庫主要有如下幾個表組成:

實體名

實體描述

表名

表描述

r_editstate

規則編輯狀態

r_editstate

規則編輯狀態

r_rule

規則

r_rule

規則

r_ruledefault

規則參數缺省值

r_ruledefault

規則參數缺省值

r_rulelog

規則執行日誌

r_rulelog

規則執行日誌

r_ruletype

規則類別

r_ruletype

規則類別

r_ruleuser

規則用戶權限

r_ruleuser

規則用戶權限

r_ruleversion

規則版本

r_ruleversion

規則版本

r_state

規則版本編輯狀態

r_state

規則版本編輯狀態

r_table

規則相關基礎表

r_table

規則相關基礎表

r_tablefield

規則相關基礎表字段

r_tablefield

規則相關基礎表字段

r_tablewhere

規則相關基礎表條件

r_tablewhere

規則相關基礎表條件

r_where

規則執行條件

r_where

規則執行條件

sys_depart

機構表

sys_depart

機構表

sys_lanmu

菜單欄目

sys_lanmu

菜單欄目

sys_log

系統日誌

sys_log

系統日誌

sys_page

菜單

sys_page

菜單

sys_resource

組件資源

sys_resource

組件資源

sys_restype

資源類別

sys_restype

資源類別

sys_role

角色

sys_role

角色

sys_roleresource

資源角色分配

sys_roleresource

資源角色分配

sys_roletype

角色類別

sys_roletype

角色類別

sys_roleuser

角色用戶

sys_roleuser

角色用戶

sys_user

用戶

sys_user

用戶

業務規則管理系統功能

規則管理系統用於管理上傳到數據庫中的規則包。能夠對存在於數據庫中的規則包進行查詢,以及對其中的各個版本進行在線的查看和修改。能夠爲規則包分配用戶權限,設置哪些人能夠有查看、修改、開發、審批、執行、發佈權限。能夠對規則包的某個版本進行申請審覈、審覈、測試、執行和發佈利益等操做。在具體的規則執行中,能夠執行規則的源數據結構以及結果數據結構,能夠查看規則的原始數據和最終結果數據。

對於規則的權限控制,分爲對規則的開發、修改、執行、審覈、發佈、管理等權限。

規則的開發權限,能夠用C/S結構的規則編輯工具進行規則包的新建以及修改。能夠對規則包中的對象庫、數據庫對象以及規則等進行設置,能夠新建jsp測試頁面來利用本地的web服務器進行規則包的測試工做。能夠將創建好的規則包,上傳到數據庫中。

規則的修改權限,能夠用C/S結構的規則編輯工具對規則包進行打開修改。只能修改規則包中的規則等,不能修改對象庫、數據庫對象以及jsp測試頁面。修改完以後,能夠將修改以後的規則包,上傳到數據庫中。也能夠用B/S結構的規則編輯功能對規則包進行修改,修改後直接保存。

規則的執行權限,能夠在B/S結構的規則管理中,執行某個規則包的版本。執行完以後,能夠看到執行的結果。

規則的審覈權限,能夠在B/S結構的規則管理中,對申請審覈的規則進行審覈操做。規則包申請審覈後,會鎖定規則包。

規則的發佈權限,能夠在B/S結構的規則管理中,執行以及審覈經過的規則包而且發佈。

規則的管理權限,能夠在B/S結構的規則管理中,分配規則的權限。設置規則的各類屬性。

若是外部系統要直接調用規則庫,能夠採用統一認證的方式。外部系統有本身的用戶管理系統,C/S結構的規則編輯工具運行時,經過獨立的用戶系統進行用戶和密碼的認證。B/S結構的規則管理系統運行時,經過.NET系統的用戶統一認證,經過傳遞加密的url自動進行用戶登錄過程。

相關文章
相關標籤/搜索