规则引擎drools学习笔记

前言

最近在琢磨着怎么重新定义系统中的异常规则。这部分内容就是根据不同的参数、配置以及场景情况生成不同的异常。其特征是,数量很多,结果在详细信息上可能有些细小差异,但总体上来说,重复性很大,而且相对来说,不稳定性不小。之前是想着自己定义一下这里的概念,然后做配置和脚本管理,最后很朋友聊天的时候聊到了,这东西就是规则引擎干的事。查了查,也就是人家的正途,由此可见如果自研,需要的工作量和时间成本都是不晓的。之前听说过drools,这次就先学习一下吧。

是什么

其实,规则引擎对于我来说还是比较陌生的。虽然很早就听说过,但是没有系统性得了解过,也不清楚所谓的规则引擎到底是如何定义规则,以及实用形式上来说是什么样子的。所以,这次这趟认知的成本其实是比较高的。在我的设想里,规则引擎应该可以独立得管理自己的规则,然后再独立的运行。这样规则引擎的解耦才是比较彻底的。也正是因为这样的设想,在我刚开始读文档和介绍的时候才存在比较大的障碍。实际上,这个引擎就是引入了一个规则匹配的核心,而使用的形态上是非常灵活的。
所以,在官网及各路帖子中,介绍的都是成本最低的使用方式——在项目中引入jar包,编写规则文件在项目中调用使用。这种使用方式就有点像是只是把我写规则的代码统一成了另一种形式。当然,规则文件的存储及读写,数据的传递等还是有很多文章可以做的,但是不是我预想的形式。我希望规则这件事可以是一个独立的系统和我的现有系统并行合作,而不是需要在我的系统中深度耦合规则这个概念。基于此,我找到了kie-server和它的WorkBench。需要注意的是,这不是一个新项目,它还是drools,只不过是另一种形态的使用。另外项目中还有jBPM 相关的东西,那就是后话了。买了本书,到时候再系统性得了解,这次的目的是kie-server用起来。

系统准备

  • centos7:目前一直用的这个版本。系统安装后的配置参见另一篇帖子:https://www.jianshu.com/p/507f96985cfc
  • jdk8:公司产线用的这个版本。安装参见另一篇帖子:https://www.jianshu.com/p/36a86a9b1159
  • tomcat:运行war包要用的容器。这个的安装就不说了,真没啥说头。
  • supervisor:进程守护管理。使用参见另一篇帖子:https://www.jianshu.com/p/e30050718642

容器部署

前置内容

经过了数天的尝试,原生安装以放弃告终。其实,drools7是有docker镜像可以直接用来部署的。而且,网上也有不少人说原生安装最后也没折腾出来,但是docker镜像折腾起来就很简单。处于摸索细节考虑,以及本人对docker的使用经验非常少,所以开始没有选择docker这条路。现在看来,是不得不走了。
我的环境是centos7,安装的docker-ce19.03。docker的安装过程其实官方文档说的已经很详细了,不过我也整理了一篇文章,可以参考:https://www.jianshu.com/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,而且有个与其对应的远程服务器。为了添加成功这个远程服务器,我曾经折腾了几天。

后续配置

其实,到了上面这步就真的把容器部署起来了,但是在我新建rule的时候,发现是无法打开的。查了些帖子,也在官网上找到了原因。先看下docker镜像的官方链接吧:https://registry.hub.docker.com/r/jboss/business-central-workbench-showcase

配置git

在后面的部分,我们可以看到一些关于git的配置。因为drools里的规则是放在git上管理的,而我没有配置git,所以出现了上述的现象。解决方法就是在/opt/jboss/wildfly/standalone/configuration/standalone-full.xml中加入如下的配置:

    
      
      
      
      
    

路径可以自己改哈,然后重启docker镜像,就万事大吉了。这两个配置的意思就是指明了一个git的目录,另外让远程可以访问git了。关于如何远程访问,及其它的配置,官网的帖子上也说到了。
对了,怎么改这个呀。这需要进入docker镜像里面:

docker exec -it drools-workbench /bin/bash

进去以后就是linux操作了。

修改时区

修改时区其实也很简单,就是一行命令的事:

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

但是吧,这个需要root权限才能执行。默认进去的用户时jboss,sudo命令不能用。root用户密码也不知道。怎么办呢?进入docker容器的时候指定用户就好了:

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

kie-server的maven

这个问题是部署完kie-server进行容器运行的时候发现的,会出现下面这样的错误:


容器报错界面

我的具体报错信息如下:

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='[email protected]: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

这是我手动格式化过的,要不全是一行,太长了。这个错误引发的原因是kie-server里调用maven仓库的地址不正确,找不到需要运行的规则的jar包。那么,这东西怎么配置呢?思路是这样的,虽然,在drools里是通过kie.maven.settings.custom的参数指定maven仓库的位置,再在仓库根目录下配置settings.xml,通过指定repository来指定。但是,我们用的是docker,制作镜像的人已经给我们配过一遍了,只不过似乎在我们运行的环境中不对,所以得先搞清楚他是怎么配的。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" "[email protected]"

####### 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/../.m2/settings.xml。仓库的位置不用变,我们打开setting.xml文件就好了。然后可以找到如下的代码:

……
       
          kie-workbench
          JBoss BRMS Guvnor M2 Repository
          ${env.KIE_MAVEN_REPO}
          default
          
……

可以看到,其指定的仓库是通过一个叫做KIE_MAVEN_REPO的环境变量里获取的,dockerfile里可以找到这个环境变量,值是http://localhost:8080/kie-wb/maven2,这个值显然是不对滴。首先,它不是localhost,其次我们上面直到workbench的context是business-central而不是kie-wb。有兴趣也可以使用docker exec {containerID} env 查看容器的环境变量的值。先要改变这个环境变量的值,可以新写一个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运行的容器。后来我发现ping kie_wb的时候连到外网了,然后发现它找的域名是kie_wb.drools。真的有这个域名,就算了,我们还是用drools-workbench。所以,最后我配置的仓库地址是:

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

然后重启容器,就好了。这个时候,如果你部署的话,可能还是看不到容器运行信息。不要着急,这似乎是异步的,等一会儿就好了。另外就是,有的时候运行会报错,也会导致这个问题。这可能是规则本身导致的。

关于docker的一些操作

停止

docker的容器,就不要通过kill来杀了,要通过docker stop来进行停止

sudo docker stop 容器ID

查询容器

查询容器可以通过docker ps指令来进行

sudo docker ps  # 这个只能查到正在运行的容器
sudo docker ps -a  # 这里可以查到已经停止的容器

再启动

刚才我们通过docker run命令启动了相应的容器。但是,你如果停止了之后再执行他们,会告诉你,我们刚才命名的那个容器已经存在了。这时,就要用docker start命令来运行容器了。

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

删除容器

如果你容器搞错了,但是名字却用掉了,可以删除容器

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

开机自动运行

在安装的时候,我已经将docker服务设置成了开机启动,但是服务启动了,不运行镜像还是白搭。怎么让镜像开机启动呢?

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

这样就可以了。上面两个指令分别是在已经创建和未创建的时候设置自动启动,基本来说,就是加上参数--restart=always

使用

其实吧,这使用规则还是有些复杂的,我是啃书来的,这里最多也就是以HelloWorld级别的例子简单拉通,然后补充以若干的注意事项,想要详细了解的话,还是啃文档或者啃书。我啃的是《Drools规则引擎技术指南》,书里面是以6.4版本Workbench讲的,和我现在用的还是有不少不同的。首先是功能:


主界面

这里似乎就已经和书上的内容不同了。书里面似乎只有设计相关的内容,而现在这里似乎多了很多。不管这里,我们先进入设计。

HelloWorld

print

drools里面可以输出命令行,这点还是很不错的。所以,我们先写一个经过一个永真规则,打印一句话,代码如下:

package com.droolsone.testdroolsone;

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

。。。上来就说代码,似乎不太好,还是介绍下项目的管理。进入设计界面后面对的第一个概念就是spaces,我的理解就是工作空间,我测试的工作空间叫做droolsOne。进入工作空间后,面临的概念是project,也就是项目,我建立了一个testdroolsone的项目。这两层概念其实对比eclipse的话就很好理解。在project里面建立的内容被叫做asset,就叫做资产吧。这里建立的,你可以理解为java项目里面的文件。而添加asset时也提供了各种不同的选项,以及你想要创建到哪里的目标目录,俨然就是个java项目。上面的代码是添加在一个叫做drl文件的asset。之后我们还可以创建测试,注意书里面说的是中文,而我这里没有中文,预期对应的测试场景asset叫做Test Scenario(Legacy),好像是要抛弃的意思。不管了,先创建吧,然后运行场景,就可以看到运行成功了。在wildfly的standalone/log/server.log中可以看到打印出来的HelloWorld

数据对象

创建数据对象

上一个例子里面什么动态的数据都没有,其实是个很不实用的规则。这个例子里,我们就创建一个数据对象(Data Object)这次创建的叫Person,添加了两个Field

  • name,Label为名字,类型为String
  • age,Label为年龄,类型为Integer
    创建了这个数据对象后,我们再打开之前的规则文件就能看到如下的现象:
    创建数据对象后drl文件的变化

    可以看到左边多了Fact Types的选项。
    需要注意的是,创建数据对象后似乎需要点击validate才会被生效,亦或者是系统需要等一段时间才会把它生效到各处去。

创建规则文件

然后创建一个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

创建测试场景

还是新建一个Test Scenario(Legacy)文件,只不过这次要设置一些东西了。这个测试设置起来就相对复杂一些了,我们一条一条来说:

  1. 先点击GIVEN蓝色按钮,这是向测试中添加Fact对象,所以需要选择类型,并输入变量名。选择类型Person,我输入的变量名是p。
  2. 在刚才的fact对象下面点击添加field,添加选择name,然后点击后面的铅笔图标,那是编辑按钮,然后点击Literal value按钮,编辑文本对象,输入“张三”。
  3. 这个时候你会发现没有添加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)按钮,你会发现之前的规则运行了,新的规则也打印出了50。这是因为之前的规则是永真的,而现在的规则在name为“张三”的时候也是真的。

最后强调一件事,软件包要和目录保持一致,这样测试场景默认得到的数据对象就是该路径下的 所有数据对象。但如果找不到,可以从数据对象那个标签页中找一找。

失败的部署经历

安装部署workbench

我下载的版本是7.38.0.Final的。官网的下载地址是:https://www.drools.org/download/download.html
这里面需要注意的是,它有好多个东西可以下,那我要下载的东西到底是什么呢?首先要梳理清楚思路,我要干什么?我希望能够在Workbench中对规则进行编辑、发布和运行,而不是在java代码中去编写这些事情,以及为了变更调试规则而编译部署我的项目。所以,我需要的是Workbench项目。然后,我发现,没有这东西,可选项如下图:

下载界面截图

  • Drools Engine:这个名字一看就是引擎的核心代码,不需要下载,即使在java项目中引入,我们也是通过maven引入的。
  • Drools and jBPM integration:这个应该是在drools中使用BPM工作流的包,暂时我们还用不到,规则引擎还没整明白,暂时不去研究工作流了。
  • Business Central Workbench:这个应该是我们想要的包,正好,它也是war包,对了。
  • Drools and jBPM tools:这是eclipse中支持Drools相关功能的插件,我用的ideal,暂时不用管这个。
  • KIE Execution Server:这个是执行KIE的服务器,我们编辑好规则后,执行可能会用到它。
  • KIE Server WARS:说实话,不是很确定这是什么东西,后来我下下来了,发现就是各个容器版本的KIE server用的包,暂时用不到。

这里我们下载Business Central Workbench的包。要注意的是,它只提供了WildFly的war包,版本是18。我以前没用过所以专门研究了一下,可以去这里看下,本帖就不细说了:https://www.jianshu.com/p/b527fbe535dc 其实,在这个帖子里我已经把怎么部署Workbench说完了。具体说来也是很简单,就是把wildfly跑起来,然后把war包丢进去。就是注意给应用添加用户要添加到admin分组下就好了。

wildfly部署 KIE Server

kieserver的发布其实是很简单的,直接把war包丢到wildfly里面就好了。但是,这件事情却坑了我一天。为什么呢?因为网上大部分的教程都是说怎么用tomcat的。而官网的教程,虽然说的是最新版本,但是其内容中的版本却是落后的。后来,偶然间,我在一个帖子中看到了我的问题,加上在别的帖子里获得了一些信息,连起来,终于让我解决了。先说问题吧。

安装

KIE Server的包和workbench相同,是分容器发的。只不过现在7.38这个版本只发了wildfly的workbench,于是我的kie server就也想用wildfly发,这样网上说tomcat的帖子参考性就很差了。或者说没有,因为对于wildfly的发版问题主要是 由于对wildfly不熟悉造成的。

kie-server压缩包内容

上图是官网下载kie excecution 包的下载。可以看到里面有很多包。另外还有个是分开下载的,里面还多一个ee8的war包。总体上来说,关注webc、ee7、ee8这几个包,其中webc的包,是用来发在tomcat上的,ee7和ee8是用来发布在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,否则无法远程访问。网上说是缺消息传递子系统的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节点,所以三个功能就都勾选了。然后点击next,入下图:
DeploymentUnit界面

这个时候我们可以在下面的列表中看到刚才任务的包,点击选择,上面的必填项就都被填好了。然后,点击Finish,完成。然后servers界面就变成了如下图所示的样子:
有服务的servers界面

失败的结束语

之所以这么详细的记录这次失败有这样几点原因:

  1. 这些内容其实是边折腾边写的,所以,写出来了再删掉还是有些可惜的。
  2. 其实,这个过程也不是完全的失败,它让我对wildfly和drools的这些应用的功能和结构树立了非常立体的认知,我现在对使用这个服务很有信心。
  3. 我还是想找到最终失败的原因。

所说最后的状态吧。上面的内容少了对于服务器的配置,现在的配置状态我写在下面了:


属性配置

但是,这样的时候,我依然找不到可运行的远程服务器。而且,运行的时候日志上总会报两个错误。分别如下:

�[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,而且控制台功能使用一切正常。
以上问题记录在此,有时间和心情的时候再回来解惑吧。万能的网友,有知道原因的也请留言告知,不胜感激。

你可能感兴趣的:(规则引擎drools学习笔记)