前面我們提到,URule Pro可采用的兩種運(yùn)行模式:一種是客戶端服務(wù)器模式;另一種是嵌入式模式??蛻舳朔?wù)器模式是指規(guī)則的設(shè)計(jì)、定義以及編譯都在服務(wù)器上,而客戶端只是負(fù)責(zé)從服務(wù)器上獲取編譯好的規(guī)則包運(yùn)行,所以對(duì)于客戶端來(lái)說(shuō)即可以是標(biāo)準(zhǔn)的Java Web應(yīng)用,也可以是非Web的Java應(yīng)用,但對(duì)于服務(wù)器來(lái)說(shuō)則必須是一個(gè)標(biāo)準(zhǔn)的Java Web應(yīng)用。
嵌入式模式是指規(guī)則的設(shè)計(jì)、定義、編譯以及實(shí)際規(guī)則包的運(yùn)行都發(fā)生在當(dāng)前運(yùn)行環(huán)境中,所以嵌入式應(yīng)用必須是一個(gè)標(biāo)準(zhǔn)的Java Web應(yīng)用。嵌入式模式使用起來(lái)相對(duì)簡(jiǎn)單,這里我們以嵌入式模式來(lái)介紹如何安裝配置URule Pro。
我們安裝分兩部分:一部分是介紹如何在本地快速安裝一個(gè)URule Pro示例項(xiàng)目,以幫助我們了解URule Pro的功能點(diǎn);另一部分是介紹如何將URule Pro添加到項(xiàng)目中,以及如何對(duì)項(xiàng)目中URule Pro進(jìn)行相關(guān)配置。
在這一部分當(dāng)中,我們將介紹如何在本地安裝一個(gè)可以演示URule Pro功能點(diǎn)的示例項(xiàng)目,安裝這個(gè)示例項(xiàng)目,要先保證操作系統(tǒng)中已安裝好1.7或以上版本JDK,同時(shí)安裝好Tomcat7或以上版本。
首先需要我們下載示例項(xiàng)目安裝包,點(diǎn)擊此處下載。 解壓示例項(xiàng)目安裝包,將解壓后其中名為“urule-demo”目錄復(fù)制到Tomcat的webapps目錄下;如果當(dāng)前操作系統(tǒng)為windows,那么請(qǐng)?jiān)贒盤根目錄下創(chuàng)建一個(gè)名為“repo”的目錄;如果當(dāng)前系統(tǒng)為非windows,那么則需要用文本編輯器打開webapps目錄下的urule-demo下WEB-INF目錄中的config.properties文件,修改其中名為“urule.repository.dir”的屬性值。 可以看到urule.repository.dir屬性默認(rèn)值為“D:/repo”,所以我們只需要將其改成一個(gè)當(dāng)前系統(tǒng)中存在的可訪問(wèn)的空目錄即可。
上述這些工作完成后,就可以運(yùn)行Tomcat,然后打開瀏覽器(除IE以外的瀏覽器,不支持IE),訪問(wèn)URL:http://localhost:8080/urule-demo,即可進(jìn)入U(xiǎn)Rule Pro示例項(xiàng)目操作主界面(這里的8080為Tomcat默認(rèn)端口,如果你修改了這個(gè)端口,那么請(qǐng)采用你修改的端口);在操作主界面右側(cè)“項(xiàng)目列表”節(jié)點(diǎn)上點(diǎn)擊右鍵,在彈出的菜單中選擇“導(dǎo)入項(xiàng)目”,在彈出的窗口中選擇第2步解壓下來(lái)的兩個(gè)示例項(xiàng)目(以.bak結(jié)尾的兩個(gè)文件)中的某一個(gè),依次導(dǎo)入即可查看示例項(xiàng)目。
到這一步,我們的示例項(xiàng)目安裝就完成了,通過(guò)這個(gè)示例項(xiàng)目,我們可以感受URule Pro的操作風(fēng)格以及功能特點(diǎn),實(shí)際上,這個(gè)示例項(xiàng)目在http://112.124.15.63:8084中可以直接瀏覽。
如果想在項(xiàng)目中使用URule Pro,那么就需要將URule Pro安裝到項(xiàng)目當(dāng)中,在下面的內(nèi)容當(dāng)中我們將介紹如何把URule Pro安裝到項(xiàng)目中,這里提供了安裝到基于Maven的項(xiàng)目以及安裝到標(biāo)準(zhǔn)Web項(xiàng)目?jī)煞N方式。
首先我們需要?jiǎng)?chuàng)建了個(gè)標(biāo)準(zhǔn)的基于Maven的Java Web項(xiàng)目,然后打開項(xiàng)目的pom.xml文件,在其中添加URule Pro相關(guān)Jar包的依賴信息。
<dependency>
<groupId>com.bstek.urule</groupId>
<artifactId>urule-console-pro</artifactId>
<version>2.2.3</version>
</dependency>
URule Pro自己的Jar有兩個(gè):一個(gè)是urule-console-pro;另一個(gè)是urule-core-pro。urule-console-pro這個(gè)Jar包中包含了URule Pro的各種規(guī)則設(shè)計(jì)器、打包編譯工具、仿真測(cè)試環(huán)境等;urule-core-pro這個(gè)Jar中則包含了URule 規(guī)則包的核心執(zhí)行引擎。所以u(píng)rule-console-pro依賴于urule-core-pro,對(duì)于Maven環(huán)境來(lái)說(shuō),只需要依賴urule-console-pro包即可。
上面的Maven配置中,依賴的版本為2.2.3,實(shí)際使用時(shí)可以到https://search.maven.org上查詢關(guān)鍵字“urule-console-pro”找到當(dāng)前最新的發(fā)行版本,這里的pom.xml依賴信息改成對(duì)應(yīng)的最新的版本號(hào)即可。
在實(shí)際的使用過(guò)程當(dāng)中,如果需要用到某個(gè)版本的SNAPSHOT,那么就需要在pom.xml當(dāng)中添加一個(gè)repository信息,告訴Maven該到這里去下載SNAPSHOT版本的包,配置如下:
<repository>
<id>sonatype</id>
<url>https://oss.sonatype.org/content/groups/public/</url>
</repository>
具體的SNAPSHOT的版本信息,我們可以到https://oss.sonatype.org上查詢。
到這里,在基于Maven的標(biāo)準(zhǔn)Web項(xiàng)目中加載URule Pro的配置就完成了,我們?cè)賮?lái)看看一個(gè)標(biāo)準(zhǔn)的非Maven的Web項(xiàng)目如何將URule Pro添加進(jìn)去。
Maven項(xiàng)目可以通過(guò)配置依賴來(lái)加載Jar包,非Maven項(xiàng)目則需要直接將Jar包復(fù)制到/WEB-INF/lib目錄下。據(jù)此,我們可以首先點(diǎn)擊此處下載urule-console-pro模塊與urule-core-pro模塊所需要的第三方Jar包,將它們放到我們項(xiàng)目中的/WEB-INF/lib目錄下,然后再到https://search.maven.org/上查詢最新的urule-core-pro與urule-console-pro版本,下載下來(lái)放到/WEB-INF/lib目錄中即可。這樣,一個(gè)傳統(tǒng)的的Web項(xiàng)目中添加URule Pro相關(guān)Jar包的工作也就完成了。
如果是將URule Pro添加到一個(gè)已存在的標(biāo)準(zhǔn)Web項(xiàng)目,那么在添加第三方Jar包時(shí)要注意這些Jar包在當(dāng)前項(xiàng)目中是否已存在,如果已經(jīng)存在,這時(shí)通常的做法是保留高版本,切不可放多個(gè)版本不同的相同Jar包,否則運(yùn)行可能會(huì)出現(xiàn)錯(cuò)誤。
接下來(lái)我們開始進(jìn)行web應(yīng)用層面配置,對(duì)于Web層面的配置,無(wú)論是Maven項(xiàng)目還是標(biāo)準(zhǔn)項(xiàng)目都是一樣的。
因?yàn)閡rule-console-pro模塊架構(gòu)在Spring之上的,所以需要加載urule-console-pro模塊中提供的Spring配置文件,這個(gè)配置文件位于urule-console-pro對(duì)應(yīng)的jar的classpath根下,名為urule-console-context.xml,所以如果我們的項(xiàng)目也是基于Spring的,那么可以打開一個(gè)項(xiàng)目中的Spring配置文件,在其中通過(guò)下面的代碼導(dǎo)入urule-console-context.xml文件:
<import resource="classpath:urule-console-context.xml"/>
如果你的項(xiàng)目不是基于spring,那么就不能采用上面的import方式加載urule-console-pro中所需要的spring配置文件,這時(shí)我們需要打開web.xml,在其中添加下面的代碼以加載urule-console-pro的spring配置文件:
<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>
前面說(shuō)過(guò),因?yàn)閡rule-console-pro模塊依賴于urule-core-pro模塊,所以也需要加載urule-core-pro模塊中的spring配置文件,這個(gè)文件也位于urule-core-pro對(duì)應(yīng)jar包的classpath根下,名為urule-core-context.xml,但我們這里在配置時(shí)卻不需加載它,原因是這個(gè)名為urule-core-context.xml的spring配置文件在urule-console-context.xml中已經(jīng)導(dǎo)入了,所以在有urule-console-pro的項(xiàng)目當(dāng)中,就不需要再加載urule-core-context.xml,只需要加載urule-console-pro中的urule-console-context.xml文件即可。
通常情況下,我們建議在/WEB-INF目錄下創(chuàng)建一個(gè)名為context.xml的標(biāo)準(zhǔn)的spring配置文件,在這個(gè)context.xml中導(dǎo)入urule-console-pro模塊中的spring配置文件,這個(gè)context.xml的內(nèi)容如下所示:
<?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中添加到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中有一些默認(rèn)的允許外部覆蓋的屬性,比如用于指定當(dāng)前知識(shí)庫(kù)存放目錄的urule.repository.dir屬性等,對(duì)于這些屬性我們可以在項(xiàng)目的WEB-INF目錄下新建一個(gè)名為configure的properties文件,在添加設(shè)置這些屬性值,然后在我們的context.xml文件中通過(guò)如下方法加載即可:
<context:property-placeholder location="/WEB-INF/configure.properties" ignore-unresolvable="true" order="1"/>
如果你的項(xiàng)目中已有Properties文件,那么直接在這個(gè)Properties文件里配置這些屬性即可。
如果你是將URule Pro配置到一個(gè)已存在的Spring項(xiàng)目中,同時(shí)項(xiàng)目也要加載自己的Spring Properties文件,比如通過(guò)下面的方式加載自己的Properties文件
<context:property-placeholder location="/WEB-INF/app.properties"/&
這時(shí)啟動(dòng)應(yīng)用,我們會(huì)發(fā)現(xiàn)啟動(dòng)過(guò)程中系統(tǒng)會(huì)報(bào)各種屬性找不到的異常,解決辦法就是在上面配置中加上 ignore-unresolvable="true" 以及 order="1"兩個(gè)屬性即可,其中ignore-unresolvable屬性表達(dá)忽略當(dāng)前配置的Properties文件中沒(méi)有配置的屬性,order屬性值表示加載優(yōu)先級(jí),值越小,優(yōu)先級(jí)越高。
當(dāng)然如果你的項(xiàng)目中Properties文件的加載是通過(guò)配置PropertyPlaceholderConfigurer為bean的方式加載,那么同樣需要為這個(gè)bean添加如下兩個(gè)屬性,作用也是一樣。
最后我們還需要在項(xiàng)目的web.xml當(dāng)中添加URule Pro中的一個(gè)Servlet,這個(gè)Servlet負(fù)責(zé)控制臺(tái)中所有頁(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配置當(dāng)中,需要注意的是servlet-mapping中的url-pattern的值必須是/urule/*。
到這里,在項(xiàng)目中添加URule Pro的操作就完成了,接下來(lái),需要打開我們放在/WEB-INF目錄下的configure.properties文件,在其中添加一個(gè)名為urule.repository.dir屬性,用于指定URule的資源庫(kù)存放的目錄,比如設(shè)置urule.repository.dir=D:/repo,表示采用D盤repo目錄來(lái)作為URule的資源庫(kù)目錄,這時(shí)我們需要在D盤中創(chuàng)建一個(gè)名為repo的空目錄,否則啟動(dòng)時(shí)會(huì)產(chǎn)生找不到目錄的錯(cuò)誤。
配置完成后,運(yùn)行項(xiàng)目,瀏覽地址:http://localhost:\[port\]/\[contextPath\]/urule/frame,就可以看到URule Pro的操作控制臺(tái)頁(yè)面。
項(xiàng)目啟動(dòng)過(guò)程當(dāng)中,會(huì)看到在控制臺(tái)有個(gè)關(guān)于日志信息的警告,這是因?yàn)轫?xiàng)目中采用了sl4j-log4j的日志框架,但項(xiàng)目的classpath中卻沒(méi)有定義log4j.properties文件,所以我們還需要在項(xiàng)目的classpath目錄下添加一個(gè)名為log4j.properties文件,在其中定義好日志輸出方式。
一個(gè)定義好的向控制臺(tái)輸出日志的log4j.properties文件內(nèi)容如下:
```
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
> 我們可以直接采用上面的內(nèi)容作為log4j.properties文件內(nèi)容,當(dāng)然也可以根據(jù)需要自己定義。
## 參數(shù)
在前面我們添加的configure.properties中,已經(jīng)添加了一個(gè)名為urule.repository.dir參數(shù),用于指定URule Pro資源庫(kù)存儲(chǔ)的目錄,除此之外,URule Pro還提供了下面這些常用參數(shù)可供配置:
| 參數(shù)名 | 描述 |
| :--- | :--- |
| urule.repository.dir | 配置當(dāng)前知識(shí)庫(kù)存放目錄,該參數(shù)值與下面的urule.repository.xml參數(shù)值至少要有一個(gè)不為空,否則系統(tǒng)啟動(dòng)會(huì)報(bào)錯(cuò)。在URule Pro當(dāng)中,引擎支持兩種存儲(chǔ)知識(shí)庫(kù)方式:一種就是在這里通過(guò)配置urule.repository.dir參數(shù)指定目錄,將資源存儲(chǔ)到具體的目錄當(dāng)中;另一種通過(guò)配置urule.repository.xml參數(shù)來(lái)指定一個(gè)可存儲(chǔ)到數(shù)據(jù)庫(kù)的配置文件,這樣知識(shí)庫(kù)就可以存儲(chǔ)到數(shù)據(jù)庫(kù)當(dāng)中。默認(rèn)urule.repository.dir參數(shù)為空,所以如果我們不想用數(shù)據(jù)庫(kù)來(lái)存儲(chǔ)規(guī)則相關(guān)的知識(shí)庫(kù),那么我們就需要配置好該參數(shù)。在配置這個(gè)目錄時(shí),我們可以給出一個(gè)絕對(duì)路徑作為其資源庫(kù)存儲(chǔ)目錄,也可以是一個(gè)相對(duì)于當(dāng)前WEB目錄的相對(duì)路徑;如“D:/repo”就表示將采用D盤下repo目錄為資源庫(kù)目錄,需要注意的是,這里repo目錄必須要存在,如果不存在那么將會(huì)產(chǎn)生錯(cuò)誤。如果要采用相對(duì)于當(dāng)前WEB應(yīng)用的相對(duì)路徑,那么可以設(shè)置成“/repo”,那就表示在當(dāng)前WEB應(yīng)用根下使用repo目錄為資源庫(kù)存儲(chǔ)目錄,如果repo目錄不存在,系統(tǒng)將會(huì)自動(dòng)創(chuàng)建。 |
| urule.repository.xml | 通過(guò)該參數(shù)在外部指定一個(gè)將資源庫(kù)存儲(chǔ)到數(shù)據(jù)庫(kù)的配置文件,這樣系統(tǒng)啟動(dòng)時(shí)就會(huì)按照這個(gè)文件中定義的數(shù)據(jù)庫(kù)信息自動(dòng)創(chuàng)建存儲(chǔ)庫(kù)所需要的各種表,從而實(shí)現(xiàn)將URule Pro知識(shí)庫(kù)存儲(chǔ)到數(shù)據(jù)庫(kù)的目的,后面章節(jié)中會(huì)有專門的內(nèi)容介紹如何將知識(shí)存儲(chǔ)到數(shù)據(jù)庫(kù)。如果在配置了urule.repository.xml參數(shù)后,又配置了urule.repository.dir參數(shù)指定了目錄,那么這個(gè)目錄就用于存儲(chǔ)與數(shù)據(jù)庫(kù)相關(guān)的緩存信息。如果沒(méi)有配置urule.repository.dir參數(shù),那么緩存信息默認(rèn)將在Jvm的臨時(shí)目錄中存儲(chǔ)(通過(guò)System.getProperty\("java.io.tmpdir"\)獲取到的目錄) |
| urule.resporityServerUrl | 客戶端上配置的服務(wù)器地址,用于獲取在服務(wù)器上的知識(shí)包信息,詳細(xì)描述見“客戶端服務(wù)器配置”章節(jié)。 |
| urule.knowledgeUpdateCycle | 值為一個(gè)數(shù)字,用來(lái)指定客戶端多久到服務(wù)端檢查當(dāng)前知識(shí)包有沒(méi)有更新。如果為0則每次都檢查,為1則永不檢查,為1以上的值,則表示每隔多少毫秒檢查一次,比如10000,就表示每隔10000毫秒檢查一次。默認(rèn)值是0,表示每次都檢查,詳細(xì)描述見“客戶端服務(wù)器配置”章節(jié)。 |
| urule.welcomePage | 一個(gè)URL,用于替換URule Pro主界面第一次看到的工作區(qū)內(nèi)容,我們可以配置個(gè)URL,這樣默認(rèn)就會(huì)顯示這個(gè)URL對(duì)應(yīng)的內(nèi)容。 |
| urule.console.title | 一個(gè)字符串,用來(lái)替代URule控制臺(tái)頁(yè)面的title,默認(rèn)值是“URule Pro Console”。 |
| urule.authority.type | 用于定義權(quán)限配置里權(quán)限配置主體的類型,默認(rèn)為“用戶”,如果我們需要修改這個(gè)屬性,那么需要將中文先轉(zhuǎn)換為uniocde。 |
| urule.debug | 調(diào)試信息是否輸出,默認(rèn)為true,設(shè)置成false的時(shí)候,規(guī)則運(yùn)行時(shí)所有的調(diào)試信息都不會(huì)輸出。 |
更多建議: