規(guī)則引擎drools學習筆記

前言

最近在琢磨著怎么重新定義系統(tǒng)中的異常規(guī)則。這部分內容就是根據不同的參數、配置以及場景情況生成不同的異常。其特征是,數量很多,結果在詳細信息上可能有些細小差異,但總體上來說,重復性很大,而且相對來說,不穩(wěn)定性不小。之前是想著自己定義一下這里的概念,然后做配置和腳本管理,最后很朋友聊天的時候聊到了,這東西就是規(guī)則引擎干的事。查了查,也就是人家的正途,由此可見如果自研,需要的工作量和時間成本都是不曉的。之前聽說過drools,這次就先學習一下吧。

是什么

其實,規(guī)則引擎對于我來說還是比較陌生的。雖然很早就聽說過,但是沒有系統(tǒng)性得了解過,也不清楚所謂的規(guī)則引擎到底是如何定義規(guī)則,以及實用形式上來說是什么樣子的。所以,這次這趟認知的成本其實是比較高的。在我的設想里,規(guī)則引擎應該可以獨立得管理自己的規(guī)則,然后再獨立的運行。這樣規(guī)則引擎的解耦才是比較徹底的。也正是因為這樣的設想,在我剛開始讀文檔和介紹的時候才存在比較大的障礙。實際上,這個引擎就是引入了一個規(guī)則匹配的核心,而使用的形態(tài)上是非常靈活的。
所以,在官網及各路帖子中,介紹的都是成本最低的使用方式——在項目中引入jar包,編寫規(guī)則文件在項目中調用使用。這種使用方式就有點像是只是把我寫規(guī)則的代碼統(tǒng)一成了另一種形式。當然,規(guī)則文件的存儲及讀寫,數據的傳遞等還是有很多文章可以做的,但是不是我預想的形式。我希望規(guī)則這件事可以是一個獨立的系統(tǒng)和我的現有系統(tǒng)并行合作,而不是需要在我的系統(tǒng)中深度耦合規(guī)則這個概念?;诖耍艺业搅薻ie-server和它的WorkBench。需要注意的是,這不是一個新項目,它還是drools,只不過是另一種形態(tài)的使用。另外項目中還有jBPM 相關的東西,那就是后話了。買了本書,到時候再系統(tǒng)性得了解,這次的目的是kie-server用起來。

系統(tǒng)準備

容器部署

前置內容

經過了數天的嘗試,原生安裝以放棄告終。其實,drools7是有docker鏡像可以直接用來部署的。而且,網上也有不少人說原生安裝最后也沒折騰出來,但是docker鏡像折騰起來就很簡單。處于摸索細節(jié)考慮,以及本人對docker的使用經驗非常少,所以開始沒有選擇docker這條路?,F在看來,是不得不走了。
我的環(huán)境是centos7,安裝的docker-ce19.03。docker的安裝過程其實官方文檔說的已經很詳細了,不過我也整理了一篇文章,可以參考:http://www.itdecent.cn/p/b0d6f55a9d44

容器部署workbench

運行起docker之后,就可以拉去workbench的docker鏡像了:

sudo docker pull jboss/business-central-workbench-showcase:7.38.0.Final
sudo docker pull jboss/kie-server-showcase:7.38.0.Final

鏡像有些大,拉去非常慢,要有耐心,不過最終總會成功的。接下來是運行:

sudo docker run  -p 8080:8080 -p 8001:8001 -d --name drools-workbench jboss/business-central-workbench-showcase:7.38.0.Final

這里做了兩個端口映射,并取了一個名字。然后就可以訪問了。這個時候訪問http://ip:8080/business-central ,就可以進去了,默認用戶名密碼都是admin。

容器部署kie-server

sudo docker run -p 8180:8080 -d --name kie-server --link drools-workbench:kie_wb jboss/kie-server-showcase:7.38.0.Final

在workbench中進入servers,可以看到下圖:
遠程服務器配置成功

可以在圖中看到,有個kie-server,而且有個與其對應的遠程服務器。為了添加成功這個遠程服務器,我曾經折騰了幾天。

后續(xù)配置

其實,到了上面這步就真的把容器部署起來了,但是在我新建rule的時候,發(fā)現是無法打開的。查了些帖子,也在官網上找到了原因。先看下docker鏡像的官方鏈接吧:https://registry.hub.docker.com/r/jboss/business-central-workbench-showcase

配置git

在后面的部分,我們可以看到一些關于git的配置。因為drools里的規(guī)則是放在git上管理的,而我沒有配置git,所以出現了上述的現象。解決方法就是在/opt/jboss/wildfly/standalone/configuration/standalone-full.xml中加入如下的配置:

    <system-properties>
      <!-- Custom repository location. -->
      <property name="org.uberfire.nio.git.dir" value="/opt/jboss/wildfly/mygit"/>
      <!-- Make GIT repositories available from outside localhost. -->
      <property name="org.uberfire.nio.git.ssh.host" value="0.0.0.0"/>
    </system-properties>

路徑可以自己改哈,然后重啟docker鏡像,就萬事大吉了。這兩個配置的意思就是指明了一個git的目錄,另外讓遠程可以訪問git了。關于如何遠程訪問,及其它的配置,官網的帖子上也說到了。
對了,怎么改這個呀。這需要進入docker鏡像里面:

docker exec -it drools-workbench /bin/bash

進去以后就是linux操作了。

修改時區(qū)

修改時區(qū)其實也很簡單,就是一行命令的事:

ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' > /etc/timezone

但是吧,這個需要root權限才能執(zhí)行。默認進去的用戶時jboss,sudo命令不能用。root用戶密碼也不知道。怎么辦呢?進入docker容器的時候指定用戶就好了:

sudo docker exec -it --user root drools-workbench /bin/bash

kie-server的maven

這個問題是部署完kie-server進行容器運行的時候發(fā)現的,會出現下面這樣的錯誤:


容器報錯界面

我的具體報錯信息如下:

Uncaught exception: CDI Event exception: 
CommandType=CDIEvent, 
BeanType=org.kie.workbench.common.screens.server.management.model.ContainerSpecData, 
ToSubject=cdi.event:org.kie.workbench.common.screens.server.management.model.ContainerSpecData, 
BeanReference=ContainerSpecData
{
    containerSpec=ContainerSpec
    {
        releasedId=com.droolsone:testDroolsOne:1.0.0-SNAPSHOT, 
        configs={
            RULE=org.kie.server.controller.api.model.spec.RuleConfig@39f9, 
            PROCESS=org.kie.server.controller.api.model.spec.ProcessConfig@bd2a4c03
            }, 
        status=STARTED
    } 
    ContainerSpecKey{
        id='testDroolsOne_1.0.0-SNAPSHOT', 
        containerName='testDroolsOne', 
        serverTemplateKey=ServerTemplateKey{
            id='kie-server-8429ea368752', 
            name='kie-server-8429ea368752'
        }
    }, 
    containers=[
        Container{
            serverInstanceId='kie-server-8429ea368752@172.17.0.3:8080', 
            resolvedReleasedId=undefined, 
            messages=[], 
            status=STARTED
        } 
        ContainerKey{
            serverTemplateId='kie-server-8429ea368752', 
            containerSpecId='testDroolsOne_1.0.0-SNAPSHOT', 
            containerName='undefined', 
            url='http://172.17.0.3:8080/kie-server/services/rest/server/containers/testDroolsOne_1.0.0-SNAPSHOT'
        }
    ]
} 
sent to [unavailable] Caused by: (TypeError) : Cannot read property 'e' of undefined

這是我手動格式化過的,要不全是一行,太長了。這個錯誤引發(fā)的原因是kie-server里調用maven倉庫的地址不正確,找不到需要運行的規(guī)則的jar包。那么,這東西怎么配置呢?思路是這樣的,雖然,在drools里是通過kie.maven.settings.custom的參數指定maven倉庫的位置,再在倉庫根目錄下配置settings.xml,通過指定repository來指定。但是,我們用的是docker,制作鏡像的人已經給我們配過一遍了,只不過似乎在我們運行的環(huán)境中不對,所以得先搞清楚他是怎么配的。kie-server-shoucase的dockerfile如下:

#########################################################
# Dockerfile that provides the image for JBoss KIE Server
#########################################################

####### BASE ############
FROM jboss/kie-server:7.38.0.Final

####### MAINTAINER ############
MAINTAINER "Michael Biarnes Kiefer" "mbiarnes@redhat.com"

####### ENVIRONMENT ############
# ENV KIE_SERVER_ID kie-server
ENV KIE_SERVER_LOCATION http://localhost:8080/kie-server/services/rest/server
ENV KIE_SERVER_USER kieserver
ENV KIE_SERVER_PWD kieserver1!
# When using this image against jboss/jbpm-workbench-showcase use /jbpm-console/rest/controller
# ENV KIE_SERVER_CONTROLLER http://localhost:8080/kie-wb/rest/controller
ENV KIE_SERVER_CONTROLLER_USER admin
ENV KIE_SERVER_CONTROLLER_PWD admin
ENV KIE_MAVEN_REPO http://localhost:8080/kie-wb/maven2
ENV KIE_MAVEN_REPO_USER admin
ENV KIE_MAVEN_REPO_PASSWORD admin
ENV JAVA_OPTS -Xms256m -Xmx1024m -Djava.net.preferIPv4Stack=true -Dfile.encoding=UTF-8

####### Drools KIE Server CUSTOM CONFIGURATION ############
RUN mkdir -p $HOME/.m2
ADD etc/standalone-full-kie-server.xml $JBOSS_HOME/standalone/configuration/standalone-full-kie-server.xml
ADD etc/kie-server-users.properties $JBOSS_HOME/standalone/configuration/kie-server-users.properties
ADD etc/kie-server-roles.properties $JBOSS_HOME/standalone/configuration/kie-server-roles.properties
ADD etc/start_kie-server.sh $JBOSS_HOME/bin/start_kie-server.sh
ADD etc/settings.xml $JBOSS_HOME/../.m2/settings.xml

# Added files are chowned to root user, change it to the jboss one.
USER root
RUN chown jboss:jboss $JBOSS_HOME/standalone/configuration/standalone-full-kie-server.xml && \
chown jboss:jboss $JBOSS_HOME/standalone/configuration/kie-server-users.properties && \
chown jboss:jboss $JBOSS_HOME/standalone/configuration/kie-server-roles.properties && \
chown jboss:jboss $JBOSS_HOME/bin/start_kie-server.sh && \
chown jboss:jboss $JBOSS_HOME/../.m2/settings.xml

####### JBOSS USER ############
# Switchback to jboss user
USER jboss

####### RUNNING KIE-SERVER ############
WORKDIR $JBOSS_HOME/bin/
CMD ["./start_kie-server.sh"]

我們可以看到,指定的文件在JBOSS_HOME/standalone/configuration/standalone-full-kie-server.xml這個位置。這里的JBOSS_HOME是鏡像里的wildfly根目錄。settings.xml在JBOSS_HOME/../.m2/settings.xml。倉庫的位置不用變,我們打開setting.xml文件就好了。然后可以找到如下的代碼:

……
       <repository>
          <id>kie-workbench</id>
          <name>JBoss BRMS Guvnor M2 Repository</name>
          <url>${env.KIE_MAVEN_REPO}</url>
          <layout>default</layout>
          <releases>
……

可以看到,其指定的倉庫是通過一個叫做KIE_MAVEN_REPO的環(huán)境變量里獲取的,dockerfile里可以找到這個環(huán)境變量,值是http://localhost:8080/kie-wb/maven2,這個值顯然是不對滴。首先,它不是localhost,其次我們上面直到workbench的context是business-central而不是kie-wb。有興趣也可以使用docker exec {containerID} env 查看容器的環(huán)境變量的值。先要改變這個環(huán)境變量的值,可以新寫一個dockerfile把它改過來(這個我現在還沒折騰過,不會)。也可以在docker run的之后進行指定來進行覆蓋。這個,我不想重新折騰這個容器。所以,我選擇直接修改settings.xml文件。
現在問題來了,改成什么值呢?最簡單的,你可以改成http://局域網IP::8080/business-central/maven2。但是吧,這樣容器就和特定的ip產生了耦合,很不美觀。docker在這里有一個比較好的解決方案。不知道上面我們啟動kie-server的時候有沒有注意到一個link參數:

 --link drools-workbench:kie_wb

這個我抄的時候也不知道具體什么含義,只知道是連接了兩個容器。其實,它的具體含義就是,指定link后,在啟動的這個容器里,就可以通過drools-workbench,或者kie_wb來訪問連接的容器了。drools-workbench是前一個容器的別名,kie_wb則是這個link的別名,都可以連通,都指向workbench運行的容器。后來我發(fā)現ping kie_wb的時候連到外網了,然后發(fā)現它找的域名是kie_wb.drools。真的有這個域名,就算了,我們還是用drools-workbench。所以,最后我配置的倉庫地址是:

http://drools-workbench:8080/business-central/maven2

然后重啟容器,就好了。這個時候,如果你部署的話,可能還是看不到容器運行信息。不要著急,這似乎是異步的,等一會兒就好了。另外就是,有的時候運行會報錯,也會導致這個問題。這可能是規(guī)則本身導致的。

關于docker的一些操作

停止

docker的容器,就不要通過kill來殺了,要通過docker stop來進行停止

sudo docker stop 容器ID

查詢容器

查詢容器可以通過docker ps指令來進行

sudo docker ps  # 這個只能查到正在運行的容器
sudo docker ps -a  # 這里可以查到已經停止的容器

再啟動

剛才我們通過docker run命令啟動了相應的容器。但是,你如果停止了之后再執(zhí)行他們,會告訴你,我們剛才命名的那個容器已經存在了。這時,就要用docker start命令來運行容器了。

sudo docker start 容器ID或者容器名稱

刪除容器

如果你容器搞錯了,但是名字卻用掉了,可以刪除容器

sudo docker rm 容器ID或者容器名稱

開機自動運行

在安裝的時候,我已經將docker服務設置成了開機啟動,但是服務啟動了,不運行鏡像還是白搭。怎么讓鏡像開機啟動呢?

sudo docker update --restart=always 容器ID
sudo docker run --restart=always ……

這樣就可以了。上面兩個指令分別是在已經創(chuàng)建和未創(chuàng)建的時候設置自動啟動,基本來說,就是加上參數--restart=always

使用

其實吧,這使用規(guī)則還是有些復雜的,我是啃書來的,這里最多也就是以HelloWorld級別的例子簡單拉通,然后補充以若干的注意事項,想要詳細了解的話,還是啃文檔或者啃書。我啃的是《Drools規(guī)則引擎技術指南》,書里面是以6.4版本Workbench講的,和我現在用的還是有不少不同的。首先是功能:


主界面

這里似乎就已經和書上的內容不同了。書里面似乎只有設計相關的內容,而現在這里似乎多了很多。不管這里,我們先進入設計。

HelloWorld

print

drools里面可以輸出命令行,這點還是很不錯的。所以,我們先寫一個經過一個永真規(guī)則,打印一句話,代碼如下:

package com.droolsone.testdroolsone;

rule "test001"
    when
    then
        System.out.println('hello world');
end

。。。上來就說代碼,似乎不太好,還是介紹下項目的管理。進入設計界面后面對的第一個概念就是spaces,我的理解就是工作空間,我測試的工作空間叫做droolsOne。進入工作空間后,面臨的概念是project,也就是項目,我建立了一個testdroolsone的項目。這兩層概念其實對比eclipse的話就很好理解。在project里面建立的內容被叫做asset,就叫做資產吧。這里建立的,你可以理解為java項目里面的文件。而添加asset時也提供了各種不同的選項,以及你想要創(chuàng)建到哪里的目標目錄,儼然就是個java項目。上面的代碼是添加在一個叫做drl文件的asset。之后我們還可以創(chuàng)建測試,注意書里面說的是中文,而我這里沒有中文,預期對應的測試場景asset叫做Test Scenario(Legacy),好像是要拋棄的意思。不管了,先創(chuàng)建吧,然后運行場景,就可以看到運行成功了。在wildfly的standalone/log/server.log中可以看到打印出來的HelloWorld

數據對象

創(chuàng)建數據對象

上一個例子里面什么動態(tài)的數據都沒有,其實是個很不實用的規(guī)則。這個例子里,我們就創(chuàng)建一個數據對象(Data Object)這次創(chuàng)建的叫Person,添加了兩個Field

  • name,Label為名字,類型為String
  • age,Label為年齡,類型為Integer
    創(chuàng)建了這個數據對象后,我們再打開之前的規(guī)則文件就能看到如下的現象:
    創(chuàng)建數據對象后drl文件的變化

    可以看到左邊多了Fact Types的選項。
    需要注意的是,創(chuàng)建數據對象后似乎需要點擊validate才會被生效,亦或者是系統(tǒng)需要等一段時間才會把它生效到各處去。

創(chuàng)建規(guī)則文件

然后創(chuàng)建一個drl文件ruleTestTwo.drl,內容如下:

package com.droolsone.testdroolsone;
import com.droolsone.testdroolsone.Person;

rule "test002"
    when
        $p:Person(name=="張三");
    then
        System.out.println($p.getAge());
end

創(chuàng)建測試場景

還是新建一個Test Scenario(Legacy)文件,只不過這次要設置一些東西了。這個測試設置起來就相對復雜一些了,我們一條一條來說:

  1. 先點擊GIVEN藍色按鈕,這是向測試中添加Fact對象,所以需要選擇類型,并輸入變量名。選擇類型Person,我輸入的變量名是p。
  2. 在剛才的fact對象下面點擊添加field,添加選擇name,然后點擊后面的鉛筆圖標,那是編輯按鈕,然后點擊Literal value按鈕,編輯文本對象,輸入“張三”。
  3. 這個時候你會發(fā)現沒有添加field按鈕了,這個時候點擊p前面的Insert ‘Person',就是添加field了,選擇age。
  4. 設置age為50,一樣是Literal value,它所有的都是按照文本來的。
  5. 點擊EXPECT藍色按鈕,Rule選擇“test002",點擊ok,Fact value默認就是我們剛才輸入的p。
  6. 在test002后面可以看到Expect rules,默認是fired at least once(至少激活一次),這個就可以了。
  7. 點擊運行場景(Run scenario)按鈕,你會發(fā)現之前的規(guī)則運行了,新的規(guī)則也打印出了50。這是因為之前的規(guī)則是永真的,而現在的規(guī)則在name為“張三”的時候也是真的。

最后強調一件事,軟件包要和目錄保持一致,這樣測試場景默認得到的數據對象就是該路徑下的 所有數據對象。但如果找不到,可以從數據對象那個標簽頁中找一找。

失敗的部署經歷

安裝部署workbench

我下載的版本是7.38.0.Final的。官網的下載地址是:https://www.drools.org/download/download.html
這里面需要注意的是,它有好多個東西可以下,那我要下載的東西到底是什么呢?首先要梳理清楚思路,我要干什么?我希望能夠在Workbench中對規(guī)則進行編輯、發(fā)布和運行,而不是在java代碼中去編寫這些事情,以及為了變更調試規(guī)則而編譯部署我的項目。所以,我需要的是Workbench項目。然后,我發(fā)現,沒有這東西,可選項如下圖:

下載界面截圖

  • Drools Engine:這個名字一看就是引擎的核心代碼,不需要下載,即使在java項目中引入,我們也是通過maven引入的。
  • Drools and jBPM integration:這個應該是在drools中使用BPM工作流的包,暫時我們還用不到,規(guī)則引擎還沒整明白,暫時不去研究工作流了。
  • Business Central Workbench:這個應該是我們想要的包,正好,它也是war包,對了。
  • Drools and jBPM tools:這是eclipse中支持Drools相關功能的插件,我用的ideal,暫時不用管這個。
  • KIE Execution Server:這個是執(zhí)行KIE的服務器,我們編輯好規(guī)則后,執(zhí)行可能會用到它。
  • KIE Server WARS:說實話,不是很確定這是什么東西,后來我下下來了,發(fā)現就是各個容器版本的KIE server用的包,暫時用不到。

這里我們下載Business Central Workbench的包。要注意的是,它只提供了WildFly的war包,版本是18。我以前沒用過所以專門研究了一下,可以去這里看下,本帖就不細說了:http://www.itdecent.cn/p/b527fbe535dc 其實,在這個帖子里我已經把怎么部署Workbench說完了。具體說來也是很簡單,就是把wildfly跑起來,然后把war包丟進去。就是注意給應用添加用戶要添加到admin分組下就好了。

wildfly部署 KIE Server

kieserver的發(fā)布其實是很簡單的,直接把war包丟到wildfly里面就好了。但是,這件事情卻坑了我一天。為什么呢?因為網上大部分的教程都是說怎么用tomcat的。而官網的教程,雖然說的是最新版本,但是其內容中的版本卻是落后的。后來,偶然間,我在一個帖子中看到了我的問題,加上在別的帖子里獲得了一些信息,連起來,終于讓我解決了。先說問題吧。

安裝

KIE Server的包和workbench相同,是分容器發(fā)的。只不過現在7.38這個版本只發(fā)了wildfly的workbench,于是我的kie server就也想用wildfly發(fā),這樣網上說tomcat的帖子參考性就很差了?;蛘哒f沒有,因為對于wildfly的發(fā)版問題主要是 由于對wildfly不熟悉造成的。

kie-server壓縮包內容

上圖是官網下載kie excecution 包的下載??梢钥吹嚼锩嬗泻芏喟?。另外還有個是分開下載的,里面還多一個ee8的war包??傮w上來說,關注webc、ee7、ee8這幾個包,其中webc的包,是用來發(fā)在tomcat上的,ee7和ee8是用來發(fā)布在wildfly上的,我猜應該是javaee容器上的。無論我把ee7還是ee8丟到我的wildfly上都會報錯,錯誤信息如下:

ERROR [org.jboss.msc.service.fail] (MSC service thread 1-5) MSC000001: Failed to start service jboss.deployment.unit."kieserve.war".PARSE: org.jboss.msc.service.StartException in service jboss.deployment.unit."kieserve.war".PARSE: WFLYSRV0153: Failed to process phase PARSE of deployment "kieserve.war"
    at org.jboss.as.server//org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:172)
    at org.jboss.msc//org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:2032)
    at org.jboss.msc//org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1955)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1135)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
    at java.base/java.lang.Thread.run(Thread.java:844)
Caused by: org.jboss.msc.service.ServiceNotFoundException: Service service jboss.ejb.default-resource-adapter-name-service not found
    at org.jboss.msc//org.jboss.msc.service.ServiceContainerImpl.getRequiredService(ServiceContainerImpl.java:669)
    at org.jboss.as.ejb3//org.jboss.as.ejb3.deployment.processors.MessageDrivenComponentDescriptionFactory.getDefaultResourceAdapterName(MessageDrivenComponentDescriptionFactory.java:274)
    at org.jboss.as.ejb3//org.jboss.as.ejb3.deployment.processors.MessageDrivenComponentDescriptionFactory.processMessageBeans(MessageDrivenComponentDescriptionFactory.java:154)
    at org.jboss.as.ejb3//org.jboss.as.ejb3.deployment.processors.MessageDrivenComponentDescriptionFactory.processAnnotations(MessageDrivenComponentDescriptionFactory.java:81)
    at org.jboss.as.ejb3//org.jboss.as.ejb3.deployment.processors.AnnotatedEJBComponentDescriptionDeploymentUnitProcessor.processAnnotations(AnnotatedEJBComponentDescriptionDeploymentUnitProcessor.java:57)
    at org.jboss.as.ejb3//org.jboss.as.ejb3.deployment.processors.AbstractDeploymentUnitProcessor.deploy(AbstractDeploymentUnitProcessor.java:76)
    at org.jboss.as.server//org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:165)
    ... 5 more

后來人家指出要指定參數 -c standalone-full.xml,啟動wildfly的指令如下:

./bin/standalone.sh -c standalone-full.xml

值得注意的是-c后面的參數會默認直到沒配置目錄下面的文件,也就是這里如果你指定全局的絕對或者相對目錄反而會報錯。它默認就是指到standalone/configuration下面的。
這個我去configuration目錄看了下。standalone*.xml的配置文件很多,像是按照部署方式分的。默認的可能是缺失什么功能導致無法運行,所以指定這個版本的就可以了。注意把里面的127.0.0.1改成局域網ip,否則無法遠程訪問。網上說是缺消息傳遞子系統(tǒng)的JMS接口,具體我是沒看出來。不管怎么說,war包可以跑起來了。

配置

上面只是把war包運行起來了,還需要給它添加用戶,這次需要用戶需要添加的group是kie-server。然后訪問:http://SERVER:PORT/CONTEXT/services/rest/server/ 就可以看到如下的內容:

kie-server信息

有這么幾點需要說明:

  • 首先,把上面的server、port、context換成你自己對應的內容才能訪問
  • 其次,訪問它是需要登錄的,用戶名密碼就是你剛配的kie-server組的用戶的用戶名密碼。

使用

這個時候,首先按照之間的步驟進入之前配置的rule的界面,入下圖:
任務界面

然后,我們在workbench的首頁點擊部署,再點擊New Server Configuration,入下圖:
添加server配置界面

由于我就打算弄這么一個kie-server節(jié)點,所以三個功能就都勾選了。然后點擊next,入下圖:
DeploymentUnit界面

這個時候我們可以在下面的列表中看到剛才任務的包,點擊選擇,上面的必填項就都被填好了。然后,點擊Finish,完成。然后servers界面就變成了如下圖所示的樣子:
有服務的servers界面

失敗的結束語

之所以這么詳細的記錄這次失敗有這樣幾點原因:

  1. 這些內容其實是邊折騰邊寫的,所以,寫出來了再刪掉還是有些可惜的。
  2. 其實,這個過程也不是完全的失敗,它讓我對wildfly和drools的這些應用的功能和結構樹立了非常立體的認知,我現在對使用這個服務很有信心。
  3. 我還是想找到最終失敗的原因。

所說最后的狀態(tài)吧。上面的內容少了對于服務器的配置,現在的配置狀態(tài)我寫在下面了:


屬性配置

但是,這樣的時候,我依然找不到可運行的遠程服務器。而且,運行的時候日志上總會報兩個錯誤。分別如下:

?[0m?[33m14:07:25,369 WARN  [org.kie.server.services.impl.controller.DefaultRestControllerImpl] (KieServer-ControllerConnect) Exception encountered while syncing with controller at http://192.168.1.28:8080/workbench/rest/controller/server/kieserver error Error while sending PUT request to http://192.168.1.28:8080/workbench/rest/controller/server/kieserver response code 405
?[0m?[0m14:07:35,370 INFO  [org.kie.server.controller.websocket.client.WebSocketKieServerControllerImpl] (KieServer-ControllerConnect) Kie Server points to non Web Socket controller 'http://192.168.1.28:8080/workbench/rest/controller', using default REST mechanism

另外一個沒找到了,是說訪問不到127.0.0.1:9990。這個地址是wildfly控制臺的訪問地址,已經被我在所有的配置文件里從127改成了局域網的ip,而且控制臺功能使用一切正常。
以上問題記錄在此,有時間和心情的時候再回來解惑吧。萬能的網友,有知道原因的也請留言告知,不勝感激。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容