drools-agent

加载

 public static KnowledgeBase getAgentBase(){
    	// 资源管理配置,静态工厂方式进行获取
    	ResourceChangeScannerConfiguration resourceConfig = ResourceFactory.getResourceChangeScannerService().newResourceChangeScannerConfiguration();
    	// 获取对象手动设置
    	// 这个时间单位是秒,需要注意
    	resourceConfig.setProperty("drools.resource.scanner.interval", "10");
    	
//    	try{
//    		Properties properties = new Properties();
//        	properties.load(new FileInputStream("file"));
//        	// 也可以通过properties直接进行配置设置,自动识别
//        	resourceConfig = ResourceFactory.getResourceChangeScannerService().newResourceChangeScannerConfiguration(properties);
//    	}catch(Exception e){
//    		
//    	}
    	
    	// 资源服务外部进行管理,通过配置服务底层会自动进行资源管理
    	ResourceFactory.getResourceChangeScannerService().configure(resourceConfig);
    
    	// 也可以外部变量接收,这样或许比较容易明白
    	// 不过这个服务只能说会自动管理,我们能做到的是开启和配置,运行时机底层自动管理
   
//    	ResourceChangeScanner resourceChangeScannerService = ResourceFactory.getResourceChangeScannerService();
//    	ResourceChangeScannerConfiguration resourceChangeScannerConfig = resourceChangeScannerService.newResourceChangeScannerConfiguration();
//    	resourceChangeScannerService.configure(resourceChangeScannerConfig);
    	// 这种也不是不可以,看个人习惯
//    	ResourceFactory.getResourceChangeScannerService().configure(ResourceFactory.getResourceChangeScannerService().newResourceChangeScannerConfiguration(new Properties()));
    	
    	// 开启资源管理服务
    	ResourceFactory.getResourceChangeScannerService().start();
    	// 外部服务通知功能,如果不开启不会传递给外部
    	ResourceFactory.getResourceChangeNotifierService().start();
    	
    	
    	
    	// 这次是agent配置
    	KnowledgeAgentConfiguration agentConfig = KnowledgeAgentFactory.newKnowledgeAgentConfiguration();
    	// 也可以通过properties进行配置,一样的套路
//    	agentConfig = KnowledgeAgentFactory.newKnowledgeAgentConfiguration(new Properties());
    	agentConfig.setProperty("drools.agent.scanDirectories", "true");
    	agentConfig.setProperty("drools.agent.newInstance", "true");
    	
    	// 可以直接生成
    	KnowledgeAgent agent = KnowledgeAgentFactory.newKnowledgeAgent("agent");
    	// 也可以通过传入配置实例化
    	// 这个就比上面的亲民了,不是一个见机行事的,完全的是掌控在我们手中
    	agent = KnowledgeAgentFactory.newKnowledgeAgent("agent", agentConfig);
    	
    	// 也可以添加监听器,不过有点多啊,先点一下就行了
//    	agent.addEventListener(new KnowledgeAgentEventListener() );

    	// 这个需要注意,agent只支持changeset方式的资源,否则真心不好管理啊
    	agent.applyChangeSet(ResourceFactory.newClassPathResource("rule.xml", DroolsTest.class));
    	
    	// 直接get就出来KnowledgeBase了
    	return agent.getKnowledgeBase();
    	
    }

意义

1. 资源汇总

    之前的change-set好像只是资源的汇总管理,或许有人觉得还不如直接手动管理方便。

    但是程序打包以后,外部配置就显得十分方便了

2. 资源变化

    而且,有了change-set的统一管理,有统一入口,实现资源的刷新成为可能。

    由于入口是固定的,对于内容的重加载,就能够对规则的修改实现"热"加载。

配置

1. 资源设置

    资源管理服务,需要开启管理服务和通知服务。

    通过和代理交互,达成"热"加载。

2. 代理设置

    和资源服务对接,也要对应设置。

3. 设置方式

  •    都是静态方式获取
  •    都可以properties设置
  •    资源注入,自动管理。代理创建,自己使用。

 

注意

     注意啥呢,注意这个"热"加载的"热"。

1. 一般的热加载都是监听修改,然后通知修改相关服务缓存。

2. 然后就是比较low的就是定期刷新,加载肯定是有延时的

PS: drools的是定期刷新,这个是第一个需要注意的点。

在knowledgeBase使用过程当中,和agent是弱关联的。

当agent监听到变化时,任然是在内部,只有再次getKnowledgeBase重新生成Base才会把感知到的修改传达到只是库中。

那么接下来的session也必然是要重新获取的。

PS:这个是第二个需要注意的点。

所以:PS:定期重新获取知识库和session,否则变化能够监听,却不能够反馈到逻辑中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值