22、关于Drools Web版本与java实现自动扫描功能

如何安装workbench 请参考  点击打开链接
通过Drools的 workbeanch 实现与java 的自动扫描功能。具体方式有两种,第一种是ci-api的形式,第二种是Spring整合。
因为workbeanch 与maven 相似,这里的组ID 构建ID 版本号就相当重要了,之前讲说通过直接引用jar的方式去实现web端的一些规则。现在是可以通过ci-api和spring的方式进去访问。
首先我们新建一个项目  这里先用 SNAPSHOT  快照的方式,后面还会再讲到。

编写一个drl文件:

第二步:保存并构建项目

然后我们要进mavne进行配置,这里需要修改settings.xml文件,我这里写到了

配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<servers>
    <server>
      <id>guvnor-m2-repo</id>
      <username>drools</username>  <!-- 这里是登录的时的帐号密码,如果不设置将没有权限会报错 -->
      <password>admin</password>
      <configuration>
        <wagonProvider>httpclient</wagonProvider>
        <httpConfiguration>
          <all>
            <usePreemptive>true</usePreemptive>
          </all>
        </httpConfiguration>
      </configuration>
    </server>
</servers>

<profiles>
    <profile>
      <id>guvnor-m2-repo</id>
      <repositories>
        <repository>
                <id>guvnor-m2-repo</id>
              <name>Guvnor M2 Repo</name>
              <url>http://10.0.5.141:8080/kie-drools-wb/maven2/</url>
          <layout>default</layout>
          <releases>
            <enabled>true</enabled>
            <updatePolicy>always</updatePolicy>
          </releases>
          <snapshots>
            <enabled>true</enabled>
            <updatePolicy>always</updatePolicy>  <!--更新策略,常常 -->
          </snapshots>
        </repository>
      </repositories>
    <activation>
      <activeByDefault>true</activeByDefault>    <!--这里要设置成true -->
    </activation>
    </profile>
  </profiles>
  <activeProfiles>
    <activeProfile>guvnor-m2-repo</activeProfile>   <!--  这个设置也是必须要有的 -->
  </activeProfiles>

</settings>

分析一下 repository 值是从哪里来的:



将配置好的settings.xml 放一份到liunx上的 ~/.m2/下
workbench 所在的linux主机不需要安装maven,也不需要设置maven环境变量,但需要有~/.m2及下面的settings.xml

配置完之后 开始写java代码: 首先第一种方式,通过ci的api直接访问:
import org.kie.api.KieServices;
import org.kie.api.builder.KieScanner;
import org.kie.api.builder.ReleaseId;
@Test
public void runRules2() {

KieServices kieServices = KieServices.Factory.get();
ReleaseId releaseId = kieServices.newReleaseId("com.dools.web.test", "droos_web_class", "1.6.8-SNAPSHOT");
KieContainer kContainer = kieServices.newKieContainer(releaseId);
KieScanner kScanner = kieServices.newKieScanner(kContainer);
// Start the KieScanner polling the Maven repository every 10 seconds
kScanner.start(10000L);
    while (true) {
try {
KieSession kSession = kContainer.newKieSession();
Person p = new Person();
p.setAge(30);
p.setName("张三");
kSession.insert(p);
kSession.fireAllRules();
System.out.println(p.getName());
Thread.sleep(1000L);
} catch (InterruptedException e) {
e.printStackTrace();

}
    }
}

 
  
</pre>
分析以上代码:
KieServices kieServices = KieServices.Factory.get(); 获取服务不多说了
ReleaseId releaseId = kieServices.newReleaseId("com.dools.web.test", "droos_web_class", "1.6.8-SNAPSHOT");  后面的参数是不是很眼熟,这里就是在页面中设置的三个参数。  这里通过ReleaseId将这个jar获取到
KieScanner kScanner = kieServices.newKieScanner(kContainer);用于配置扫描间隔
kScanner.start(10000L); 单位是毫秒


那我们怎么知道是实现了自动扫描功能呢,很简单,不需要关闭程序,在workbeanch中修改规则文件,并保存重启构建。.
看输出的结果是否有变化,如果没有变化,证明配置失败,如果有变化证明配置成功
上面代码是通过ci-api的方式实现的。下面我们再说明一下通能srping 方式实现:
要通过spring方式 就要先建立一个xml文件。

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:kie="http://drools.org/schema/kie-spring"
xsi:schemaLocation="
       http://drools.org/schema/kie-spring
       http://drools.org/schema/kie-spring.xsd
       http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd">

    <kie:kmodule id="kmodule" >  <!-- 起名规范就可以 -->
    	<kie:kbase name="kbase" packages="rules.testdrl"><!-- 起名规范就可以    packages=/指到最后一层文件夹/  -->
    	  <kie:ksession name="ksession"  type="stateful"/> <!-- 起名规则就可以,这个的name 是要在下面的测试类中用到的 -->
    	</kie:kbase>
    </kie:kmodule>
    <kie:import releaseId-ref="sptringweb"  enableScanner="true" scannerInterval="12000"/>
    <kie:releaseId id="sptringweb" groupId="com.dools.web.test" artifactId="droos_web_class" version="1.6.8-SNAPSHOT"/>
    <bean id="kiePostProcessor" class="org.kie.spring.annotations.KModuleAnnotationPostProcessor"/>
</beans>
<kie:import releaseId-ref="sptringweb"  enableScanner="true" scannerInterval="12000"/>
enableScanner表示是否扫描   scannerInterval表示扫描间隔
<kie:releaseId id="sptringweb" groupId="com.dools.web.test" artifactId="droos_web_class" version="1.6.8-SNAPSHOT"/>  这里的配置就多了一个id  这个id 是为了配置kie:import 引用的。


配置完之后写java代码:具体代码如下
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration( { "classpath:spring.xml" })
public class PersonDrools {

@KSession("defaultKieSession")
@KReleaseId(groupId = "com.dools.web.test", artifactId = "droos_web_class", version = "1.6.8-SNAPSHOT")
private KieSession kSession;

@Test
public void  runRules() {
while (true) {
try {
	Person p = new Person();
	p.setAge(30);
	p.setName("张三");
	kSession.insert(p);
        int i = kSession.fireAllRules();
	System.out.println(p.getName() + i);
	Thread.sleep(10000);
	} catch (InterruptedException e) {
		e.printStackTrace();
	}
        }
    }
}


因为我这里是通过注解的方式引用的。
@KSession("defaultKieSession") //这个我们没有设置kiesession时默认的名字,以后我会讲到如如设置这个属性的
private KieSession kSession;   这里必须要这样写 引用的是private KieSession xxx;  否则不会直接扫描。
@KReleaseId(groupId = "com.dools.web.test", artifactId = "droos_web_class", version = "1.6.8-SNAPSHOT")             这行代码可写可不写,如果不写 就会引用Spring中配置好的,如果要加此行,最好与配置文件中的引用的要完全一样。否则就会替换掉配置文件中的引用,并且不会进行自动扫描。  如果在配置文件未配置kie:improt和 kie:kreleaseId 的话 通过注解也是可以引用到workbeanch的jar包的,但是是不会进行自动扫描的。 
从这段话的解释来说。我们可以这样理解
1、在不进行自动扫描 我们可以通过三种方式进行操作,第一种在配置文件中 kie:import 参数只写releaseId-ref第二种不配置xml通过注解的方式引用规则 第三种:通过原生api,不设置扫描kScanner.start(10000L);
2、设置自动扫描的方式,我们有两种方式,上述已经说过,这里不在说明。


下面我们说一下有关版本的问题
关于版本的问题,其实写法和mavne是大同小异的,这里我推荐用两种方式 第一可通过 LATEST 第二可通过SNAPSHOT
这第一种写法是这样的:将设置的 version="" 写成LATEST 及可,简单的说就是将设置版本号的地方写成LATEST
例如 < kie :releaseId  id ="sptringweb"  groupId ="com.dools.web.test"  artifactId ="droos_web_class"  version ="LATEST" />

这样写的话 在workbeanch中设置版本号是就必须写成 x.y.z  例如:1.6.3 但如果是用这个属性的话,下一次升级时,就要将版本号进行一个累加,举例说明,当前版本号是1.6.8 下一次升级时的值是必须大于1.6.8的


这样才是生效的。
第二种写法就是这样的:将设置的version="" 写成1.6.8-SNAPSHOT及可,这样的写法有一个好处就是可以将当前版本进行覆盖。但有一点的是,必须在设置版本号后面写成如下图这种形式:

以上两种方式已说明了自动扫描和全新的写法。

下面是小编的微信转帐二维码,小编再次谢谢读者的支持,小编会更努力的

----请看下方↓↓↓↓↓↓↓

百度搜索 Drools从入门到精通:可下载开源全套Drools教程

深度Drools教程不段更新中:


更多Drools实战陆续发布中………

扫描下方二维码关注公众号 ↓↓↓↓↓↓↓↓↓↓



  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值