2.安(ān)裝(zhuāng)與配置
概述
前面我們提到,URule Pro可(kě)采用(yòng)的四種運行模式,其中(zhōng)一就是嵌入式模式。
嵌入式模式是指規則的設計、定義、編譯以及實際規則包的運行都發生在當前運行環境中(zhōng),所以嵌入式應用(yòng)必須是一個标準的Java Web應用(yòng)。嵌入式模式使用(yòng)起來相對簡單,這裏我們以嵌入式模式來介紹如何安(ān)裝(zhuāng)配置URule Pro。
我們安(ān)裝(zhuāng)分(fēn)兩部分(fēn):一部分(fēn)是介紹如何在本地快速安(ān)裝(zhuāng)一個URule Pro示例項目,以幫助我們了解URule Pro的功能(néng)點;另一部分(fēn)是介紹如何将URule Pro添加到項目中(zhōng),以及如何對項目中(zhōng)URule Pro進行相關配置。
安(ān)裝(zhuāng)一個URule Pro示例項目
在這一部分(fēn)當中(zhōng),我們将介紹如何在本地安(ān)裝(zhuāng)一個可(kě)以演示URule Pro功能(néng)點的示例項目,安(ān)裝(zhuāng)這個示例項目,要先保證操作(zuò)系統中(zhōng)已安(ān)裝(zhuāng)好1.8或以上版本JDK,同時安(ān)裝(zhuāng)好Tomcat8或以上版本。
首先需要我們下載示例項目安(ān)裝(zhuāng)包,點擊此處下載。 解壓示例項目安(ān)裝(zhuāng)包,将解壓後其中(zhōng)名(míng)為(wèi)“urule-demo”目錄複制到Tomcat的webapps目錄下;如果當前操作(zuò)系統為(wèi)windows,那麽請在D盤根目錄下創建一個名(míng)為(wèi)“repo”的目錄; 如果當前系統為(wèi)非windows,那麽則需要用(yòng)文(wén)本編輯器打開webapps目錄下的urule-demo下WEB-INF目錄中(zhōng)的config.properties文(wén)件,修改其中(zhōng)名(míng)為(wèi)“urule.repository.dir”的屬性值。 可(kě)以看到urule.repository.dir屬性默認值為(wèi)“D:/repo”,所以我們隻需要将其改成一個當前系統中(zhōng)存在的可(kě)訪問的空目錄即可(kě)。
上述這些工(gōng)作(zuò)完成後,就可(kě)以運行Tomcat,然後打開浏覽器(除IE以外的浏覽器,不支持IE),訪問URL:http://localhost:8080/urule-demo,即可(kě)進入URule Pro示例項目操作(zuò)主界面(這裏的8080為(wèi)Tomcat默認端口,如果你修改了這個端口,那麽請采用(yòng)你修改的端口)。
到這一步,我們可(kě)以創建自己的項目,體(tǐ)驗URule Pro中(zhōng)提供的各種規則設計器的使用(yòng)方式。 如果您不想自己在本地配置項目,那麽也可(kě)以在http://urule.bstek.com中(zhōng)在線(xiàn)體(tǐ)驗URule Pro的操作(zuò)風格(需要注意的是,在線(xiàn)DEMO僅供體(tǐ)驗,如需配置自己的業務(wù)規則請在本地搭建環境)。
如果想在項目中(zhōng)使用(yòng)URule Pro,那麽就需要将URule Pro安(ān)裝(zhuāng)到項目當中(zhōng),在下面的内容當中(zhōng)我們将介紹如何把URule Pro安(ān)裝(zhuāng)到項目中(zhōng),這裏提供了安(ān)裝(zhuāng)到基于Maven的項目以及安(ān)裝(zhuāng)到标準Web項目兩種方式。
基于Maven的Web項目安(ān)裝(zhuāng)
首先我們需要創建了個标準的基于Maven的Java Web項目,然後打開項目的pom.xml文(wén)件,在其中(zhōng)添加URule Pro相關Jar包的依賴信息。
<dependency>
<groupId>com.bstek.urule</groupId>
<artifactId>urule-console-pro</artifactId>
<version>3.0.3</version>
</dependency>
URule Pro自己的Jar有(yǒu)兩個:一個是urule-console-pro;另一個是urule-core-pro。urule-console-pro這個Jar包中(zhōng)包含了URule Pro的各種規則設計器、打包編譯工(gōng)具(jù)、仿真測試環境等;urule-core-pro這個Jar中(zhōng)則包含了URule 規則包的核心執行引擎。所以urule-console-pro依賴于urule-core-pro,對于Maven環境來說,隻需要依賴urule-console-pro包即可(kě)。
上面的Maven配置中(zhōng),依賴的版本為(wèi)3.0.3,實際使用(yòng)時可(kě)以到https://search.maven.org上查詢關鍵字“urule-console-pro”找到當前最新(xīn)的發行版本,這裏的pom.xml依賴信息改成對應的最新(xīn)的版本号即可(kě)。
在實際的使用(yòng)過程當中(zhōng),如果需要用(yòng)到某個版本的SNAPSHOT,那麽就需要在pom.xml當中(zhōng)添加一個repository信息,告訴Maven該到這裏去下載SNAPSHOT版本的包,配置如下:
<repository>
<id>sonatype</id>
<url>https://oss.sonatype.org/content/groups/public/</url>
</repository>
具(jù)體(tǐ)的SNAPSHOT的版本信息,我們可(kě)以到https://oss.sonatype.org上查詢。
到這裏,在基于Maven的标準Web項目中(zhōng)加載URule Pro的配置就完成了,我們再來看看一個标準的非Maven的Web項目如何将URule Pro添加進去。
安(ān)裝(zhuāng)到标準Web項目
Maven項目可(kě)以通過配置依賴來加載Jar包,非Maven項目則需要直接将Jar包複制到/WEB-INF/lib目錄下。據此,我們可(kě)以首先點擊此處下載urule-console-pro模塊與urule-core-pro模塊所需要的第三方Jar包,将它們放到我們項目中(zhōng)的/WEB-INF/lib目錄下,然後再到https://search.maven.org/上查詢最新(xīn)的urule-core-pro與urule-console-pro版本,下載下來放到/WEB-INF/lib目錄中(zhōng)即可(kě)。這樣,一個傳統的的Web項目中(zhōng)添加URule Pro相關Jar包的工(gōng)作(zuò)也就完成了。
如果是将URule Pro添加到一個已存在的标準Web項目,那麽在添加第三方Jar包時要注意這些Jar包在當前項目中(zhōng)是否已存在,如果已經存在,這時通常的做法是保留高版本,切不可(kě)放多(duō)個版本不同的相同Jar包,否則運行可(kě)能(néng)會出現錯誤。
接下來我們開始進行web應用(yòng)層面配置,對于Web層面的配置,無論是Maven項目還是标準項目都是一樣的。
項目配置
因為(wèi)urule-console-pro模塊架構在Spring之上的,所以需要加載urule-console-pro模塊中(zhōng)提供的Spring配置文(wén)件,這個配置文(wén)件位于urule-console-pro對應的jar的classpath根下,名(míng)為(wèi)urule-console-context.xml,所以如果我們的項目也是基于Spring的,那麽可(kě)以打開一個項目中(zhōng)的Spring配置文(wén)件,在其中(zhōng)通過下面的代碼導入urule-console-context.xml文(wén)件:
<import resource="classpath:urule-console-context.xml"/>
如果你的項目不是基于spring,那麽就不能(néng)采用(yòng)上面的import方式加載urule-console-pro中(zhōng)所需要的spring配置文(wén)件,這時我們需要打開web.xml,在其中(zhōng)添加下面的代碼以加載urule-console-pro的spring配置文(wén)件:
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:urule-console-context.xml</param-value>
</context-param>
前面說過,因為(wèi)urule-console-pro模塊依賴于urule-core-pro模塊,所以也需要加載urule-core-pro模塊中(zhōng)的spring配置文(wén)件,這個文(wén)件也位于urule-core-pro對應jar包的classpath根下,名(míng)為(wèi)urule-core-context.xml,但我們這裏在配置時卻不需加載它,原因是這個名(míng)為(wèi)urule-core-context.xml的spring配置文(wén)件在urule-console-context.xml中(zhōng)已經導入了,所以在有(yǒu)urule-console-pro的項目當中(zhōng),就不需要再加載urule-core-context.xml,隻需要加載urule-console-pro中(zhōng)的urule-console-context.xml文(wén)件即可(kě)。
通常情況下,我們建議在/WEB-INF目錄下創建一個名(míng)為(wèi)context.xml的标準的spring配置文(wén)件,在這個context.xml中(zhōng)導入urule-console-pro模塊中(zhōng)的spring配置文(wén)件,這個context.xml的内容如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
">
<import resource="classpath:urule-console-context.xml"/>
</beans>
這樣就需要将上面在web.xml中(zhōng)添加到listener做些修改,contextConfigLocation的值改成/WEB-INF/context.xml,如下面代碼所示:
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/context.xml</param-value>
</context-param>
在URule Pro中(zhōng)有(yǒu)一些默認的允許外部覆蓋的屬性,比如用(yòng)于指定當前知識庫存放目錄的urule.repository.dir屬性等,對于這些屬性我們可(kě)以在項目的WEB-INF目錄下新(xīn)建一個名(míng)為(wèi)configure的properties文(wén)件,在添加設置這些屬性值,然後在我們的context.xml文(wén)件中(zhōng)通過如下方法加載即可(kě):
<context:property-placeholder location="/WEB-INF/configure.properties" ignore-unresolvable="true" order="1"/>
如果你的項目中(zhōng)已有(yǒu)Properties文(wén)件,那麽直接在這個Properties文(wén)件裏配置這些屬性即可(kě)。
如果你是将URule Pro配置到一個已存在的Spring項目中(zhōng),同時項目也要加載自己的Spring Properties文(wén)件,比如通過下面的方式加載自己的Properties文(wén)件
<context:property-placeholder location="/WEB-INF/app.properties"/>
這時啓動應用(yòng),我們會發現啓動過程中(zhōng)系統會報各種屬性找不到的異常,解決辦(bàn)法就是在上面配置中(zhōng)加上 ignore-unresolvable="true" 以及 order="1"兩個屬性即可(kě),其中(zhōng)ignore-unresolvable屬性表達忽略當前配置的Properties文(wén)件中(zhōng)沒有(yǒu)配置的屬性,order屬性值表示加載優先級,值越小(xiǎo),優先級越高。
當然如果你的項目中(zhōng)Properties文(wén)件的加載是通過配置PropertyPlaceholderConfigurer為(wèi)bean的方式加載,那麽同樣需要為(wèi)這個bean添加如下兩個屬性,作(zuò)用(yòng)也是一樣。
最後我們還需要在項目的web.xml當中(zhōng)添加URule Pro中(zhōng)的一個Servlet,這個Servlet負責控制台中(zhōng)所有(yǒu)頁(yè)面與服務(wù)端的交互,配置信息如下:
<servlet>
<servlet-name>uruleServlet</servlet-name>
<servlet-class>com.bstek.urule.console.servlet.URuleServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>uruleServlet</servlet-name>
<url-pattern>/urule/*</url-pattern>
</servlet-mapping>
在上面的servlet配置當中(zhōng),需要注意的是servlet-mapping中(zhōng)的url-pattern的值必須是/urule/*。
到這裏,在項目中(zhōng)添加URule Pro的操作(zuò)就完成了,接下來,需要打開我們放在/WEB-INF目錄下的configure.properties文(wén)件,在其中(zhōng)添加一個名(míng)為(wèi)urule.repository.dir屬性,用(yòng)于指定URule的資源庫存放的目錄,比如設置urule.repository.dir=D:/repo,表示采用(yòng)D盤repo目錄來作(zuò)為(wèi)URule的資源庫目錄,這時我們需要在D盤中(zhōng)創建一個名(míng)為(wèi)repo的空目錄,否則啓動時會産(chǎn)生找不到目錄的錯誤。
配置完成後,運行項目,浏覽地址:http://localhost:[port]/[contextPath]/urule/frame,就可(kě)以看到URule Pro的操作(zuò)控制台頁(yè)面。
項目啓動過程當中(zhōng),會看到在控制台有(yǒu)個關于日志(zhì)信息的警告,這是因為(wèi)項目中(zhōng)采用(yòng)了sl4j-log4j的日志(zhì)框架,但項目的classpath中(zhōng)卻沒有(yǒu)定義log4j.properties文(wén)件,所以我們還需要在項目的classpath目錄下添加一個名(míng)為(wèi)log4j.properties文(wén)件,在其中(zhōng)定義好日志(zhì)輸出方式。 一個定義好的向控制台輸出日志(zhì)的log4j.properties文(wén)件内容如下:
log4j.rootLogger=INFO,stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[URULE] %p [%t] %C.%M(%L) | %m%n
我們可(kě)以直接采用(yòng)上面的内容作(zuò)為(wèi)log4j.properties文(wén)件内容,當然也可(kě)以根據需要自己定義。
參數
在前面我們添加的configure.properties中(zhōng),已經添加了一個名(míng)為(wèi)urule.repository.dir參數,用(yòng)于指定URule Pro資源庫存儲的目錄,除此之外,URule Pro還提供了下面這些常用(yòng)參數可(kě)供配置:
參數名(míng) | 描述 |
---|---|
urule.repository.dir | 配置當前知識庫存放目錄,該參數值與下面的urule.repository.xml參數值至少要有(yǒu)一個不為(wèi)空,否則系統啓動會報錯。在URule Pro當中(zhōng),引擎支持兩種存儲知識庫方式:一種就是在這裏通過配置urule.repository.dir參數指定目錄,将資源存儲到具(jù)體(tǐ)的目錄當中(zhōng);另一種通過配置urule.repository.xml參數來指定一個可(kě)存儲到數據庫的配置文(wén)件,這樣知識庫就可(kě)以存儲到數據庫當中(zhōng)。默認urule.repository.dir參數為(wèi)空,所以如果我們不想用(yòng)數據庫來存儲規則相關的知識庫,那麽我們就需要配置好該參數。在配置這個目錄時,我們可(kě)以給出一個絕對路徑作(zuò)為(wèi)其資源庫存儲目錄,也可(kě)以是一個相對于當前WEB目錄的相對路徑;如“D:/repo”就表示将采用(yòng)D盤下repo目錄為(wèi)資源庫目錄,需要注意的是,這裏repo目錄必須要存在,如果不存在那麽将會産(chǎn)生錯誤。如果要采用(yòng)相對于當前WEB應用(yòng)的相對路徑,那麽可(kě)以設置成“/repo”,那就表示在當前WEB應用(yòng)根下使用(yòng)repo目錄為(wèi)資源庫存儲目錄,如果repo目錄不存在,系統将會自動創建。 |
urule.repository.xml | 通過該參數在外部指定一個将資源庫存儲到數據庫的配置文(wén)件,這樣系統啓動時就會按照這個文(wén)件中(zhōng)定義的數據庫信息自動創建存儲庫所需要的各種表,從而實現将URule Pro知識庫存儲到數據庫的目的,後面章節中(zhōng)會有(yǒu)專門的内容介紹如何将知識存儲到數據庫。如果在配置了urule.repository.xml參數後,又(yòu)配置了urule.repository.dir參數指定了目錄,那麽這個目錄就用(yòng)于存儲與數據庫相關的緩存信息。如果沒有(yǒu)配置urule.repository.dir參數,那麽緩存信息默認将在Jvm的臨時目錄中(zhōng)存儲(通過System.getProperty("java.io.tmpdir")獲取到的目錄) |
urule.resporityServerUrl | 客戶端上配置的服務(wù)器地址,用(yòng)于獲取在服務(wù)器上的知識包信息,詳細描述見“客戶端服務(wù)器配置”章節。 |
urule.knowledgeUpdateCycle | 值為(wèi)一個數字,用(yòng)來指定客戶端多(duō)久到服務(wù)端檢查當前知識包有(yǒu)沒有(yǒu)更新(xīn)。如果為(wèi)0則每次都檢查,為(wèi)1則永不檢查,為(wèi)1以上的值,則表示每隔多(duō)少毫秒(miǎo)檢查一次,比如10000,就表示每隔10000毫秒(miǎo)檢查一次。默認值是0,表示每次都檢查,詳細描述見“客戶端服務(wù)器配置”章節。 |
urule.welcomePage | 一個URL,用(yòng)于替換URule Pro主界面第一次看到的工(gōng)作(zuò)區(qū)内容,我們可(kě)以配置個URL,這樣默認就會顯示這個URL對應的内容。 |
urule.console.title | 一個字符串,用(yòng)來替代URule控制台頁(yè)面的title,默認值是“URule Pro Console”。 |
urule.authority.type | 用(yòng)于定義權限配置裏權限配置主體(tǐ)的類型,默認為(wèi)“用(yòng)戶”,如果我們需要修改這個屬性,那麽需要将中(zhōng)文(wén)先轉換為(wèi)uniocde。 |
urule.debug | 調試信息是否輸出,默認為(wèi)true,設置成false的時候,規則運行時所有(yǒu)的調試信息都不會輸出。 |