JBoss规则引擎与Web Services <o:p></o:p>
作者: Mark Proctor <o:p></o:p>
我最近刚刚完成了一个项目,其中JBoss规则引擎通过Web Services来提供使用。因此我写下其中的一些细节。<o:p></o:p>
在这个特殊的项目中,只有有效负载(payload)中的根对象被设置,整个payload不被分成更小的关联对象设置到Working Memory中,通常这样被认为是最佳实践方式;无论怎样,我们在这里演示给你看怎样有效率的在嵌套的XML有效负载中使用‘from’。
我所理解的步骤可以简单定义如下:<o:p></o:p>
- 为你的模型建立一个XSD<o:p></o:p>
- 使用JAXB's XJC产生类<o:p></o:p>
- 在你的XML有效负载中解包(Unmarshal),并设置root对象<o:p></o:p>
- 在你的规则中使用from对模型导航<o:p></o:p>
- 得到修改后的模型和封包(marshal)<o:p></o:p>
为你的模型建立XSD
<o:p></o:p>
一开始你需要使用XSD来描述你的模式,看起来如下:
xml 代码
- <?xml version="1.0" encoding="UTF-8"?>
- <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="creditscore" targetNamespace="creditscore">
- <xs:complexType name="root">
- <xs:sequence>
- <xs:element name="division" type="xs:string"/>
- <xs:element name="occupancy" type="xs:string"/>
- <xs:element name="occupancyAdjustment" type="xs:double"/>
- <xs:element name="creditScore" type="CreditScore" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
-
- <xs:complexType name="CreditScore">
- <xs:sequence>
- <xs:element name="programGroup" type="xs:string"/>
- <xs:element name="lienType" type="xs:string"/>
- <xs:element name="division" type="xs:string"/>
- <xs:element name="score" type="xs:double"/>
- </xs:sequence>
- </xs:complexType>
-
- <xs:element name="Root" type="root"/>
- </xs:schema>
Pojo
从Sun网站https://jaxb.dev.java.net/可获得最新的JAXB参考实现,我使用jaxb<st1:chsdate w:st="on" isrocdate="False" year="1899" day="30" islunardate="False" month="12">2.1.3</st1:chsdate>。从命令行执行下面的命令:<o:p></o:p>
jaxb-ri-20070413\bin\xjc -p org.domain -d c:\folder MyModel.xsd <o:p></o:p>
这建立了三个对象,ObjectFactory和Root、CreditScore两个类。看起来如下:<o:p></o:p>
<o:p> </o:p>
<o:p>
java 代码
- @XmlAccessorType(XmlAccessType.FIELD)
- @XmlType(name = "root", propOrder = {"division", "occupancy", "occupancyAdjustment", "creditScore1", "creditScore2"})
- public class Root {
- @XmlElement(required = true)
- protected String division;
- @XmlElement(required = true)
- protected String occupancy;
- protected double occupancyAdjustment;
- protected CreditScore creditScore1;
- protected List creditScore2;
-
- public String getDivision() {
- return division;
- }
-
- public void setDivision(String value) {
- this.division = value;
- }
-
- public String getOccupancy() {
- return occupancy;
- }
-
- public void setOccupancy(String value) {
- this.occupancy = value;
- }
-
- public double getOccupancyAdjustment() {
- return occupancyAdjustment;
- }
-
- public void setOccupancyAdjustment(double value) {
- this.occupancyAdjustment = value;
- }
-
- public CreditScore getCreditScore1() {
- return creditScore1;
- }
-
- public void setCreditScore1(CreditScore value) {
- this.creditScore1 = value;
- }
-
- public List getCreditScore2() {
- if ( creditScore2 == null ) {
- creditScore2 = new ArrayList();
- }
- return this.creditScore2;
- }
- }
-
- @XmlAccessorType(XmlAccessType.FIELD)
- @XmlType(name = "CreditScore", propOrder = {"programGroup", "lienType", "division", "score"})
- public class CreditScore {
-
- @XmlElement(required = true)
- protected String programGroup;
- @XmlElement(required = true)
- protected String lienType;
- @XmlElement(required = true)
- protected String division;
- protected double score;
-
- public String getProgramGroup() {
- return programGroup;
- }
-
- public void setProgramGroup(String value) {
- this.programGroup = value;
- }
-
- public String getLienType() {
- return lienType;
- }
-
- public void setLienType(String value) {
- this.lienType = value;
- }
-
- public String getDivision() {
- return division;
- }
-
- public void setDivision(String value) {
- this.division = value;
- }
-
- public double getScore() {
- return score;
- }
-
- public void setScore(double value) {
- this.score = value;
- }
- }
-
在你的XML有效负载中解包(Unmarshal),并设置Root对象
<o:p></o:p>
你现在可以用JAXB解包你的XML负载:<o:p></o:p>
<o:p> </o:p>
<o:p>
java 代码
</o:p><o:p>
- JAXBContextImpl jc = (JAXBContextImpl) JAXBContext.newInstance( "org.domain" );
- Unmarshaller unmarshaller = jc.createUnmarshaller();
- JAXBElement element = ( JAXBElement ) unmarshaller.unmarshal( new File( XML_FILE ) );
- Root root = ( Root ) element.getValue();
在你的规则中使用from对模型导航<o:p></o:p>
'from' 在Drools4.0中是一个新的元素,它允许规则对working memory以外的数据上进行规则推论。我们可以使用‘from’对模型中的子对象进行导航<o:p></o:p>
<o:p> </o:p>
<o:p></o:p>得到修改后的模型和封包(marshal)<o:p></o:p>
java 代码
- package creditscore
-
- import creditscore.CreditScore
-
- rule "Credit_Score_Adjustments_0"
- dialect "mvel"
- no-loop true
- when
- r : Root( division=="wholesale",
- occupancy=="Investors" )
- cs : CreditScore( programGroup=="ACMEPowerBuyerGroup",
- lienType=="FIRST_TD; SECOND_TD",
- division=="Wholesale",
- score >= 500,
- score <= 579) from r.creditscore
- then
- cs.score = cs.score + 1;
- modify(cs);
- end
<o:p> </o:p>
<o:p>
java 代码
</o:p><o:p>
- RuleBase ruleBase = RuleBaseFactory.newRuleBase();
- ruleBase.addPackage( pkg );
-
- StatelessSession session = ruleBase.newStatelessSession();
-
- StatelessSessionResult results = session.executeWithResults( new Object[] { root } );
-
- Root returnedRoot = ( Root ) results.iterateObjects().next();
- Marshaller marshaller = jc.createMarshaller();
- marshaller.marshal( new JAXBElement( new QName("org.domain", "Root"), returnedRoot.getClass(), returnedRoot ), System.out );
</o:p></o:p></o:p>模型现在可以使用JAXB's XJC建立。
分享到:
相关推荐
kie drools的Web规则引擎可以与其他Java EE应用服务器(如JBoss EAP)或云环境(如OpenShift)一起使用,但这里我们专注于在Tomcat 7上的部署。 总的来说,kie drools 6.4与Tomcat 7的结合为业务规则管理提供了高效...
一个drools规则引擎RESTful Web Services。目的是让用户可以通过resuful web service来使用drools规则引擎。 要求 Java JDK 1.7 Gradle 构建和运行 获取源代码 $ git clone ...
- **规则引擎集成**:论文引入了Drools规则引擎,并将其扩展为一个独立的项目Xdrools。Xdrools不仅作为消息中心模块的核心引擎,还覆盖了物流平台业务逻辑层的部分公共非功能性需求。 - **API设计**:为了方便开发者...
2.5. Drools 规则引擎 22 2.5.1. 概述 23 2.5.2. 编制 24 2.5.3. RuleBase 30 2.5.4. WorkingMemory 和有状态/无状态Sessions 33 2.5.5. StatefulSession 38 2.5.6. StatelessSession 40 2.5.7. Agenda 41 2.5.8. ...
drools 是一个强大的规则引擎,它基于Java语言,主要用于实现业务规则自动化。在这个场景中,网友遇到的问题可能与Drools的使用、配置或者规则编写有关。由于没有具体的问题描述,我们将从一般的角度来探讨Drools的...
5. **规则集成**:JBPM集成了Drools规则引擎,使得业务流程可以灵活地根据预定义的规则进行决策。这使得流程的执行不仅依赖于固定逻辑,还能动态响应业务环境的变化。 6. **监控与调试**:JBPM提供了强大的监控工具...
2. **Drools**:jbpm4.4中的规则引擎使用了Drools 5.x版本,它是一个强大的规则推理引擎,可以将业务逻辑以规则的形式表达,便于管理和维护。Drools提供了规则定义、规则运行时管理以及规则执行报告等功能。 3. **...
这里我们将基于drools 7.10.0版本进行操作,drools是一个强大的规则引擎,kie-server则是其服务接口。 首先,理解Tomcat 8.5:它是Apache Tomcat服务器的一个版本,符合Java Servlet 4.0、JavaServer Pages (JSP) ...
8. **jbpm-drools**:集成了Drools规则引擎,用于在流程中执行业务规则。 这些库文件对于理解和使用JBPM4.4至关重要,它们提供了完整的业务流程管理功能,包括流程建模、执行、监控、规则处理、任务分配以及与各种...
3. **规则引擎**:jbpm集成了Drools规则引擎,使得业务流程可以根据预定义的规则进行决策。这使得开发者可以将复杂的业务逻辑以规则的形式表达,从而与流程分离,便于维护。 4. **持久化机制**:jbpm使用JPA(Java ...
在本文中,我们将详细介绍如何在Eclipse IDE中安装一系列关键插件,这些插件对于Java开发者,特别是专注于Web开发、Maven项目管理、版本控制、ORM框架和规则引擎的开发者非常有用。以下是一步步的安装步骤: 1. **...
KIE Services允许开发人员通过RESTful接口或者Java API来与jBPM引擎进行通信,实现流程的启动、查询、干预和终止等功能。 【voms-api-java.zip】描述的是VO(Virtual Organization)Management System(VOMS)的...
4. **规则引擎**:jbpm4集成了Red Hat的JBoss Drools规则引擎,使得流程决策可以根据预定义的业务规则动态调整。 5. **事件处理**:jbpm4支持事件驱动的流程,如超时事件、信号事件等,使得流程可以根据外部条件...
此外,熟悉Drools规则引擎的使用,能帮助开发者更好地利用jBpm实现智能决策。 总之,jBpm 3.1.2是业务流程自动化领域的一个强大工具,它为开发高效、灵活的工作流应用提供了坚实的基础。无论是对于企业内部的流程...
5. **规则引擎**: 结合Drools,提供业务规则的管理和服务,使流程决策更加灵活。 ### 三、jbpm开发环境搭建 要开始jbpm开发,首先需要安装以下组件: 1. **Eclipse IDE**: 集成jbpm插件,提供图形化流程设计。 2....
- **规则引擎**:使用JDK的JS引擎或Drools等工具进行业务规则管理。 - **工作流**:基于Activiti或Jbpm实现业务流程自动化。 - **数据库**:选用MySQL作为主数据库。 - **应用服务器**:使用Tomcat。 - **负载均衡**...
9. **drools-** 开头的jar包:Drools是Red Hat的规则引擎,jbpm与其紧密集成,用于在流程中执行业务规则。 10. **guvnor-** 开头的jar包:Guvnor是jbpm的一部分,提供了规则和流程资产的版本控制、管理和部署功能。...
5. **规则集成**: JBPM集成了Drools规则引擎,允许在流程中嵌入业务规则,实现灵活的决策逻辑。 6. **事件处理**: 支持事件驱动的流程,可以捕获和处理系统内外的事件,如定时事件、信号事件等。 7. **监控和管理*...
jbpm还包括了一个规则引擎(Drools),这是Red Hat的一个规则管理系统,能够处理复杂的业务规则。在流程执行过程中,可以通过规则引擎进行决策判断,根据当前流程状态和输入数据动态调整流程行为。 为了便于集成和...