10. CDI
更多相关网页:
http://www.jdon.com/38322
http://www.jdon.com/37976
http://www.cdi-spec.org/
10.1.介绍
CDI,全称Contexts and Dependency Injection(上下文和依赖注入),是向应用程序提供声明控制和结构的Java规范。KIE可以用它来实现自动实例化和绑定,而不需要使用编程的API。
10.2.注解
@KContainer, @KBase, @KSession都支持可选的'name'属性。CDI在它注入的时候一般不会"getOrCreate",同一组注解下,所有注入都会得到相同的实例。'name'标签会强制给每个名称一个唯一实例,尽管这个名称的所有的实例会在使用equals方法得到的结果是true。
10.2.1. @KReleaseId
绑定一个实例指向一个特定版本的KieModule。如果kie-ci在classpath中,依赖关系会被自动解决,并从远程仓库中下载。
10.2.2. @KContainer
@KContainer是可选的,因为在使用@Inject和变量类型推断时会被检测到,并添加进来。
图10.1.注入KieContainer
@Inject
private KieContainer kContainer;
图10.2.为动态的KieModule注入KieContainer
@Inject
@KReleaseId(groupId = "jar1", artifactId = "art1", version = "1.1")
private KieContainer kContainer;
图10.3.为动态的KieModule注入带名称的KieContainer
@Inject
@KContainer(name = "kc1")
@KReleaseId(groupId = "jar1", artifactId = "art1", version = "1.1")
private KieContainer kContainer;
10.2.3. @KBase
@KBase是可选的,因为在使用@Inject和变量类型推断时会被检测到,并添加进来。
如果给的话,默认参数是在kmodule.xml中定义的KieBase的值属性和名称。
图10.4. 注入默认的KieBase,从Classpath KieContainer获得
@Inject
private KieBase kbase;
图10.5. 注入默认的KieBase,从动态KieModule获得
@Inject
@KReleaseId( groupId = "jar1", artifactId = "art1", version = "1.0")
private KieBase kbase;
图10.6. 'jar1.KBase1' KieBase版本加载时一起处理(不懂)
@Inject
@KBase("kbase1")
@KReleaseId( groupId = "jar1", artifactId = "art1", version = "1.0")
private KieBase kbase1v10;
@Inject
@KBase("kbase1")
@KReleaseId( groupId = "jar1", artifactId = "art1", version = "1.1")
private KieBase kbase1v10;
图10.7. 使用'name'属性强制为'jar1.KBase1' KieBase创建新实例
@Inject
@KSession(value="kbase1", name="kb1")
@KReleaseId( groupId = "jar1", artifactId = "art1", version = "1.0")
private KieBase kbase1kb1;
@Inject
@KSession(value="kbase1", name="kb2")
@KReleaseId( groupId = "jar1", artifactId = "art1", version = "1.0")
private KieBase kbase1kb2;
10.2.4. @KSession for KieSession
@KSession是可选的,因为在使用@Inject和变量类型推断时会被检测到,并添加进来。
如果指定的话,默认参数是在kmodule.xml中定义的KieSession的值属性和名称。
Figure 10.8. 注入默认的KieSession,从Classpath KieContainer获得
@Inject
private KieSession ksession;
图10.9. 注入默认的KieSession,从动态KieModule获得
@Inject
@KReleaseId( groupId = "jar1", artifactId = "art1", version = "1.0")
private KieSession ksession;
图10.10. 'jar1.KBase1' KieBase版本加载时一起处理(同样不懂)
@Inject
@KSession("ksession1")
@KReleaseId( groupId = "jar1", artifactId = "art1", version = "1.0")
private KieSession ksessionv10;
@Inject
@KSession("ksession1")
@KReleaseId( groupId = "jar1", artifactId = "art1", version = "1.1")
private KieSession ksessionv11;
图10.11. 使用'name'标签强制为'jar1.KBase1' KieSession创建新实例
@Inject
@KSession(value="ksession1", name="ks1")
@KReleaseId( groupId = "jar1", artifactId = "art1", version = "1.0")
private KieSession ksession1ks1
@Inject
@KSession(value="ksession1", name="ks2")
@KReleaseId( groupId = "jar1", artifactId = "art1", version = "1.0")
private KieSession ksession1ks2
10.2.5. @KSession for StatelessKieSession
@KSession是可选的,因为在使用@Inject和变量类型推断时会被检测到,并添加进来。
如果指定的话,默认参数是在kmodule.xml中定义的KieSession的值属性和名称。
图10.12. 注入默认的StatelessKieSession,从Classpath KieContainer获得
@Inject
private StatelessKieSession ksession;
图10.13. 注入默认的StatelessKieSession,从动态KieModule获得
@Inject
@KReleaseId( groupId = "jar1", artifactId = "art1", version = "1.0")
private StatelessKieSession ksession;
图10.14. 'jar1.KBase1' KieBase版本加载时一起处理(同样不懂)
@Inject
@KSession("ksession1")
@KReleaseId( groupId = "jar1", rtifactId = "art1", version = "1.0")
private StatelessKieSession ksessionv10;
@Inject
@KSession("ksession1")
@KReleaseId( groupId = "jar1", rtifactId = "art1", version = "1.1")
private StatelessKieSession ksessionv11;
图10.15.使用'name'标签强制为'jar1.KBase1' StatelessKieSession创建新实例
@Inject
@KSession(value="ksession1", name="ks1")
@KReleaseId( groupId = "jar1", artifactId = "art1", version = "1.0")
private StatelessKieSession ksession1ks1
@Inject
@KSession(value="ksession1", name="ks2")
@KReleaseId( groupId = "jar1", artifactId = "art1", version = "1.0")
private StatelessKieSession ksession1ks2
10.3. API示例对比
CDI可以注入实例到字段,甚至以参数形式传递它们。下面是使用字段注入的例子。
图10.16. CDI示例,命名的KieSession
@Inject
@KSession("ksession1")
KieSession kSession;
public void go(PrintStream out) {
kSession.setGlobal("out", out);
kSession.insert(new Message("Dave", "Hello, HAL. Do you read me, HAL?"));
kSession.fireAllRules();
}
这种方式下代码更少,且比API方法更具声明性。
图10.17. 使用API实现相同功能的代码
public void go(PrintStream out) {
KieServices ks = KieServices.Factory.get();
KieContainer kContainer = ks.getKieClasspathContainer();
KieSession kSession = kContainer.newKieSession("ksession1");
kSession.setGlobal("out", out);
kSession.insert(new Message("Dave", "Hello, HAL. Do you read me, HAL?"));
kSession.fireAllRules();
}
分享到:
相关推荐
10. **drools-jsr94-5.0.1.jar**: 实现了JSR 94标准,使得Drools能够作为Java标准的规则引擎与其他遵循该标准的框架和应用兼容。 Drools 5.0的这些组件共同构成了一个强大的规则管理和执行环境,它可以帮助企业快速...
drools-templates-5.4.0.Final.jar
drools-core-5.2.0.Final-sources.jar
drools-core-5.4.0.Final.jar
drools-apollo-master.zip drools-apollo-master.zipdrools-apollo-master.zip drools-apollo-master.zipdrools-apollo-master.zip drools-apollo-master.zipdrools-apollo-master.zip drools-apollo-master....
drools-persistence-jpa-5.2.0.Final.jar drools
drools的workbench平台与kie-server的整个打包,通过tomcat8运行,搞了两天终于搞好了,drools-7.7.0目前界面显示还有问题,因此通过drools-7.5.0版本来运行,服务启动后可以通过代码的方式发送命令来执行规则引擎
drools-decisiontables-5.4.0.Final.jar
源码:\drools-distribution-7.7.0.Final\sources\drools-core-7.7.0.Final-sources.jar、 jar包:\drools-distribution-7.7.0.Final\binaries\drools-core-7.7.0.Final.jar、 API:\drools-distribution-7.7.0....
drools-distribution-7.48.0.Final.zip drools-distribution-7.48.0.Final.zip drools-distribution-7.48.0.Final.zip
【标题】"drools-jsr94-6.1.0.CR1.zip" 提供的是 Drools 的一个版本,这是一个著名的规则引擎,它基于 Java Specification Request (JSR) 94 标准。Drools 实现了业务规则管理系统 (BRMS),允许开发者将复杂的业务...
jboss 规则引擎 drools库。 api,core,compiler,jsr94 drools-compiler-5.1.1.jar
标题 "drools-jsr94-6.0.0.Alpha4.zip" 提供的信息表明,这是一个与 Drools 相关的软件包,它遵循 JSR 94 规范。Drools 是一个流行的规则引擎,它允许开发人员在 Java 应用程序中嵌入复杂的业务规则。JSR 94(JavaTM...
drools-persistence-jpa-5.2.0.Final-sources.jar jbpm5 源码
drools-core-4.0.4.jar drools-core-4.0.4.jar
dools是一款开源规则引擎,drools-workbench是它的工作台web程序,可以编译,打包,发布规则,kie-server是可以运行规则的服务器程序, 两个服务单独部署,用户可以通过通过http请求发送数据,然后返回规则额匹配...
antlr-3.3.jar,antlr-runtime-3.3.jar,btm-2.1.3.jar,catch-exception-1.2.0.jar,dcharts-widget-0.10.0.jar,drools-compiler-5.5.0.Final.jar,drools-core-5.5.0.Final.jar,ecj-3.5.1.jar,javax.enterprise....
dools是一款开源规则引擎,drools-workbench是它的工作台web程序,可以编译,打包,发布规则,kie-server是可以运行规则的服务器程序, 两个服务单独部署,用户可以通过通过http请求发送数据,然后返回规则额匹配...