Tech&WK_SRDC_Ultra_platform_brms_essay 随笔

2020-07-21

记录下 srdc ultra platform , brms 项目中的随想



1. (BRMS) drools 在 MAVEN 普通项目中的配置无疑,但在 Spring boot 中应是需要额外配置

 

 找不到 session / KieServices , 所以找了下网上的 code config 。未通过。

 1 package com.srdc.ultrakiecore.demo;
 2 
 3 import org.kie.api.KieBase;
 4 import org.kie.api.KieServices;
 5 import org.kie.api.builder.*;
 6 
 7 import org.kie.api.runtime.KieContainer;
 8 import org.kie.api.runtime.KieSession;
 9 import org.kie.internal.io.ResourceFactory;
10 import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
11 import org.springframework.context.annotation.Bean;
12 import org.springframework.context.annotation.Configuration;
13 import org.springframework.core.io.Resource;
14 import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
15 import org.springframework.core.io.support.ResourcePatternResolver;
16 
17 import java.io.IOException;
18 
19 @Configuration
20 public class DroolsConfiguration {
21     private static final String RULE_PATH = "drools/legacy/sapvalidation/default";
22 
23     @Bean
24     @ConditionalOnMissingBean(KieFileSystem.class)
25     public KieFileSystem kieFileSystem() throws IOException {
26         KieFileSystem kieFileSystem = getKieServices().newKieFileSystem();
27         for(Resource file : getRuleFiles()){
28             kieFileSystem.write(ResourceFactory.newClassPathResource(RULE_PATH + file.getFilename(),"UTF-8"));
29         }
30         return kieFileSystem;
31     }
32 
33     private Resource[] getRuleFiles() throws  IOException{
34         ResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver();
35         final Resource[] resources = resourcePatternResolver.getResources("classpath*:" + RULE_PATH + "**/*.*");
36         return resources;
37     }
38 
39     @Bean
40     @ConditionalOnMissingBean(KieContainer.class)
41     public KieContainer kieContainer() throws IOException{
42         final KieRepository kieRepository = getKieServices().getRepository();
43         kieRepository.addKieModule(new KieModule(){
44 
45             @Override
46             public ReleaseId getReleaseId() {
47                 return kieRepository.getDefaultReleaseId();
48             }
49         });
50 
51         KieBuilder kieBuilder = getKieServices().newKieBuilder(kieFileSystem());
52         kieBuilder.buildAll();
53         return getKieServices().newKieContainer(kieRepository.getDefaultReleaseId());
54     }
55 
56     private KieServices getKieServices(){
57         return KieServices.Factory.get();
58     }
59 
60     @Bean
61     @ConditionalOnMissingBean(KieBase.class)
62     public KieBase kieBase() throws IOException{
63         return kieContainer().getKieBase();
64     }
65 
66     @Bean
67     @ConditionalOnMissingBean(KieSession.class)
68     public KieSession kieSession() throws IOException
69     {
70         return kieContainer().newKieSession();
71     }
72 
73 }
View Code

鉴于rules engine 为 platform 子系统, 且若要构建独立system, 则也应是内部组件,而非直接构建于 Spring boot.

暂将此中实现搁置。先构建模块化的rules engine.

 2. class static 的 顺序

 

posted @ 2020-07-21 11:31  君子之行  阅读(7)  评论(0)    收藏  举报