`
alienj
  • 浏览: 79836 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

第14章 Seam 和 JBoss 规则

阅读更多

14 Seam JBoss 规则

 

Seam使从Seam组件或jBPM处理定义调用JBoss规则(Drools) 规则库变得容易。

 

14.1. 安装规则

 

第一步,是用一个Seam上下文变量产生一个可用的org.drools.RuleBase实例。为测试的目的,Seam提供了一个内建的组件,编译来自类路径的一个静态规则集。你可能安装这个组件,通过components.xml

 

<drools:rule-base name="policyPricingRules">

    <drools:rule-files>

        <value>policyPricingRules.drl</value>

    </drools:rule-files>

</drools:rule-base>

 

组件从一组.drl文件编译规则,并且缓存一个org.drools.RuleBase实例在Seam APPLICATION上下文中。注意,它与你需要安装的基于规则驱动的应用程序的多重规则十分相似。

 

如果你想使用一个Drools DSLDomain Specific Language),你还需要指定DSL定义:

 

<drools:rule-base name="policyPricingRules" dsl-file="policyPricing.dsl">

    <drools:rule-files>

        <value>policyPricingRules.drl</value>

    </drools:rule-files>

</drools:rule-base>

 

在大部分规则驱动的应用程序,规则需要动态地部署,因此,一个产品应用程序需要使用一个Drools规则代理管理规则库。规则代理能从一个本地文件仓库连接到一个Drools规则服务器(BRMS)或者热部署规则包。受管理规则代理的规则库在components.xml中也是可配置:

 

<drools:rule-agent name="insuranceRules"

                    configurationFile="/WEB-INF/deployedrules.properties" />

 

属性文件包含规则代理的属性细节。这里是一个配置文件例子,来自发布的Drools例子:

 

newInstance=true

url=http://localhost:8080/drools-jbrms/org.drools.brms.JBRMS/package/org.acme.insurance/

fmeyer

localCacheDir=/Users/fernandomeyer/projects/jbossrules/drools-examples/drools-examples-

brms/cache

poll=30

name=insuranceconfig

 

 

绕过配置文件,直接配置依附于组件的选项也是可能的。

 

<drools:rule-agent name="insuranceRules"

   url="http://localhost:8080/drools-jbrms/org.drools.brms.JBRMS/package/org.acme.insurance/

fmeyer"

      local-cache-dir="/Users/fernandomeyer/projects/jbossrules/drools-examples/drools-

examples-brms/cache"

   poll="30"

   configuration-name="insuranceconfig" />

 

 

下一步,我们需要为每个对话产生一个可用的org.drools.WorkingMemory实例。(每个WorkingMemory‘工作存储器’收集涉及当前对话的facts

 

<drools:managed-working-memory  name="policyPricingWorkingMemory"  auto-create="true"

 rule-base="#{policyPricingRules}"/>

 

注意,我们通过 ruleBase 配置属性给policyPricingWorkingMemory 一个返回到我们的规则库的引用。

 

14.2. 从一个Seam组件使用规则

 

现在我们能注入我们的WorkingMemory进入任何Seam组件,声称facts,并触发规则:

 

@In WorkingMemory policyPricingWorkingMemory;

@In Policy policy;

@In Customer customer;

public void pricePolicy() throws FactException

{

    policyPricingWorkingMemory.assertObject(policy);

policyPricingWorkingMemory.assertObject(customer);

    policyPricingWorkingMemory.fireAllRules();

}

 

14.3.从一个 jBPM 处理定义使用规则

 

你甚至能允许一个规则库担当一个jBPM动作处理器、决定处理器或分配处理器——在一个页面流或商业处理定义中。

 

<decision name="approval">

        

    <handler class="org.jboss.seam.drools.DroolsDecisionHandler">

        <workingMemoryName>orderApprovalRulesWorkingMemory</workingMemoryName>

        <assertObjects>

            <element>#{customer}</element>

            <element>#{order}</element>

            <element>#{order.lineItems}</element>

        </assertObjects>

    </handler>

   

    <transition name="approved" to="ship">

        <action class="org.jboss.seam.drools.DroolsActionHandler">

            <workingMemoryName>shippingRulesWorkingMemory</workingMemoryName>

            <assertObjects>

                <element>#{customer}</element>

                <element>#{order}</element>

                <element>#{order.lineItems}</element>

            </assertObjects>

        </action>

    </transition>

   

    <transition name="rejected" to="cancelled"/>

   

</decision>

 

<assertObjects>元素指定EL表达式,其返回一个被声明为facts进入到WorkingMemory之内的对象或者对象集。

 

还支持对jBPM 任务分配使用Drools

 

<task-node name="review">

    <task name="review" description="Review Order">

        <assignment handler="org.jboss.seam.drools.DroolsAssignmentHandler">

            <workingMemoryName>orderApprovalRulesWorkingMemory</workingMemoryName>

            <assertObjects>

                <element>#{actor}</element>

                <element>#{customer}</element>

                <element>#{order}</element>

                <element>#{order.lineItems}</element>

            </assertObjects>

        </assignment>

    </task>

    <transition name="rejected" to="cancelled"/>

    <transition name="approved" to="approved"/>

</task-node>

某些对象作为Drools globals提供给规则使用,即,jBPM Assignable 作为assignableSeam Decision对象作为decision。处理决定的规则将要调用decision.setOutcome("result")来确定决定的结果。处理分配的规则将要使用Assignable设置参与者的id

 

package org.jboss.seam.examples.shop

import org.jboss.seam.drools.Decision

global Decision decision

rule "Approve Order For Loyal Customer"

  when

    Customer( loyaltyStatus == "GOLD" )

    Order( totalAmount <= 10000 )

  then

    decision.setOutcome("approved");

end

 

 

package org.jboss.seam.examples.shop

import org.jbpm.taskmgmt.exe.Assignable

global Assignable assignable

rule "Assign Review For Small Order"

  when

    Order( totalAmount <= 100 )

  then

    assignable.setPooledActors( new String[] {"reviewers"} );

end

 

 

注意:在http://www.drools.org能找到更多内容

 

警告: Seam 配备了足够的Drools从属物来实现一些简单的规则。如果你想对Drools增加额外的能力 ,你应该下载完整的分发版并增加需要的额外的从属物。

 

技巧:Drools专为Java 1.4配备了MVEL 编译器,它兼容Java 1.4Java 5 Java 6。您可以用一个你正使用的java版本的编译器改变你的MVEL jar

分享到:
评论

相关推荐

    jboss seam

    这是中文手册,Seam为持久化集成了JPA和Hibernate 3,为轻量化的异步性集成了EJB Timer Service和Quartz,为工作流集成了jBPM,为业务规则集成了JBoss规则,为电子邮件集成了Meldware Mail,为完整的文本搜索集成了...

    JBoss Seam

    JBoss Seam JBoss Seam JBoss Seam

    JBOSS_SEAM配置

    JBOSS_SEAM配置

    Jboss Seam中文版

    #### 第四章:配置Seam组件 最后一章重点介绍了如何通过配置文件和注解等方式来定制Seam组件的行为。 1. **通过属性设置配置组件**:说明了如何使用属性来调整组件的默认行为。 2. **后续内容预告**:预览了接下来...

    JBOSS SEAM组件中文手册

    **JBoss Seam组件中文手册** **一、Seam框架概述** Seam是一个开源的企业级Java框架,由JBoss公司开发,旨在简化Java EE应用程序的开发。它将多种技术如JavaServer Faces (JSF),Java Persistence API (JPA),EJB 3...

    JBoss Seam入门介绍

    Seam支持多个开源JSF AJAX库,如JBoss RichFaces和JBoss ICEFaces,甚至内置了一个AJAX远程调用层,极大地提升了Web应用的交互性和响应速度。 #### 4. 声明式状态管理 Seam扩展了Servlet规范中的三个上下文(请求、...

    jboss seam 教程

    - **JBoss Seam**:由JBoss提供的Seam实现,提供了一系列功能强大的工具和服务,帮助开发者快速构建复杂的Web应用。 - **本教程**:主要介绍了JBoss Seam的基本概念、核心组件以及通过一系列示例项目来学习Seam的...

    jboss seam 中文文档集合

    JBoss Seam 是一个开源的应用框架,它结合了JavaServer Faces (JSF)、Java Persistence API (JPA)、Enterprise JavaBeans (EJB) 3.0 和其他Java EE组件,旨在简化企业级开发。这个文档集合包含了对Seam及其相关技术...

    Jboss seam3 实战

    标题中的“Jboss seam3 实战”表明,本文将重点介绍JBoss Seam框架的第三个版本的实际应用。JBoss Seam是一个开源的Java EE框架,它通过依赖注入和会话模型,简化了基于Java EE的企业级应用开发。Seam框架为开发者...

    jboss-seam2.0文档

    JBoss Seam 是一个开源的企业级开发框架,它旨在简化Java EE应用的开发过程,特别是在Web和富互联网应用程序(Rich Internet Applications, RIA)领域。Seam 2.0是其重要的版本,提供了许多增强的功能和改进,为...

    jboss-seam-selectitems

    java jboss seam jboss-seam-selectitems

    jboss教程及深入浅出JBoss+Seam

    【JBoss教程及深入浅出JBoss+Seam】是一个针对企业级Java应用服务器JBoss的深度学习资源,其中包含了两个主要部分:JBoss教程和对JBoss与Seam框架结合使用的详细介绍。这两个主题都是Java开发人员在部署和管理企业...

    深入浅出JBoss Seam

    例如,Seam与jBPM、JBoss Rules(Drools)、JBoss Portal和JBoss Microcontainer等框架的整合,既保持了各框架的原有功能,又提升了整体的效能。 Seam还特别关注ORM的使用。由于大多数Web框架并未为ORM设计,所以在...

    [JBoss] JSF & Facelets & JBoss Seam 核心技术 (英文版)

    [TipTec Development] JSF & Facelets & JBoss Seam 核心技术 (英文版) [TipTec Development] Essential JSF, Facelets & JBoss Seam (E-Book) ☆ 出版信息:☆ [作者信息] Kent Ka Iok Tong [出版机构] TipTec ...

    jboss-seam2.1

    Seam 是一种业级 企 Java 的应规用程序框架。它的灵感源自下列原 : 只有一种“工具” Seam为 应 业务业业 义 种统 组 你的 用程序中所有的 定 了一 一的 件模型。 Seam组件可能是 态义 关关 态 有状 的,包含与几...

    深入浅出JBoss Seam.pdf

    除了整合EJB 3.0和JSF之外,Seam还能够扩展其他一系列开源框架,例如jBPM、JBoss Rules (Drools)、JBoss Portal 和 JBoss Microcontainer等。这不仅使得Seam能够成为一个高度集成的平台,还能够利用这些框架的功能来...

    jboss seam 2.01GA REF DOC

    #### 第四部分:Seam 页面流示例 本节通过一个数字猜谜游戏展示了 Seam 页面流的概念。 **1.5.1 理解代码** - **页面流**:页面流是 Seam 中一种组织页面逻辑的方式。 - **游戏逻辑**:通过页面流管理游戏的状态...

Global site tag (gtag.js) - Google Analytics