Drools 5.1.1_DOC (45) (转载)

四、Drools流(flow)用户指南

 

第1章       介绍

 

Drools流是一个工作流或流程的引擎,允许流程和规则的高级集成。流程或工作流使用流程图描述了需要执行的一系列步骤的顺序。例如,下面的图表显示了一个流程,首先Task1Task2需要并行执行。这两个完成后,才执行Task3

 

后面的章节将教给你需要知道的一切有关Drools流的东西。它的显著特点有:

 

  1. 1.         流程和规则的高级集成:在涉及定义业务逻辑时,通常把流程和规则视为不同的范例。尽管通过集成流程和规则引擎,流程和规则之间的松耦合是可能的,然而我们提供了开箱即用流程和规则的高级集成。这允许用户在定义他们的业务流程时,使用规则定义他们的部分业务逻辑,反之亦然。

 

  1. 2.         流程和规则的标准化:我们把规则、流程和事件流程都视为不同类型的知识。我们不仅允许这三种类型的高级集成,而且还提供了一个统一的API和统一的工具,目的在于用户不必了解三种不同的产品,能够使用我们的基于知识的API轻松地组合这三种类型。该工具也允许无缝集成那些不同类型的知识,包括东西有:一个统一的知识库、审计日志、调试等等。

 

  1. 3.         声明式模型:Drools流 尽可能地保持声明式的流程,即,侧重于发生了什么,而不是为什么。因此,我们尽量避免在你的流程中使用硬编码细节,而是提供一种抽象的方式描述你的工作 (例如,通过使用可插式工作项目、业务脚本语言等等)。我们也允许用户轻松地创建特殊域扩展,让读、更新和创建这些流程更简明,因为它们使用了与眼前问题 密切相关的特殊域概念,并且可以被域专家理解。

 

  1. 4.         支持多流程语言的普通流程引擎:我们不相信存在有一种流程语言适合所有用途。因此,Drools流引擎是基于普通流程引擎的,允许不同类型流程语言的定义和执行,例如,我们的规则流(RuleFlow)语言、WS-BPEL (一个面向网页服务安排的标准)、OSWorkflow(另外一个依然存在的工作流语言)、 jPDL(由jBPM项目定义的流程语言)等等。所有这些语言是基于相同的核心构建块集合的,通过重用和按需组合这些低级构建块,让你更容易实现你自己的流程语言。

 

在后面的章节会解释所有这些特点(尽可能多的)。

第2章         安装器

 

Drools现在带有一个安装器。

 

2.1         先决条件

 

这个脚本假定你已经安装了 Java JDK 1.5+ (设置了JAVA_HOME)Ant 1.7+ 。如果你没有,使用下面的链接下载并安装它们:

 

Java: http://java.sun.com/javase/downloads/index.jsp

Ant: http://ant.apache.org/bindownload.cgi

2.2         下载安装器

 

首先,你需要下载安装器:drools-{version}-install.zip

例如,你可以在面找到最新的快照版本:

http://hudson.jboss.org/hudson/job/drools/lastSuccessfulBuild/artifact/trunk/target/

 

2.3         下载安装器

启动最容易的方法是简单地运行安装脚本来安装演示设置(demo setup)。直接到安装文件夹,并运行:

ant install.demo

它将:

l         下载 JBoss AS

l         下载 Eclipse

l         安装Guvnor JBoss AS

l         安装 gwt-控制台到JBoss AS

l         安装Eclipse插件

一旦演示设置完成(可能要等一会儿,因为它必须下载各种组件),通过启动演示设置,你可以开始使用各种组件:

ant start.demo

它将:

l         启动H2数据库

l         启动JBoss AS

l         启动Eclipse

l         启动人类任务服务(Human Task Service

一旦所有都被启动了,你可以开始使用Eclipse工具、Guvnorgwt-控制台,如在接下来的三部分解释的一样。

2.4         使用Eclipse工具

 

 跟随截屏[http://people.redhat.com/kverlaen/install-eclipse.swf] ,给出了如何在Eclispe中运行一个简单演示流程的一个概述。它显示给你:

 

l         如何把一个存在的例子项目导入到你的工作区,包括:

?           一个简单的用于请求性能评估的BPMN2流程。

?           一个启动流程的简单Java类。

l         如何启动流程。

l         如何在Eclipse中使用人类任务客户端完成人类任务。

 

如果你想了解更多,我们建议你看看Drools文档的其余部分。

 

2.5         使用Guvnor

.

打开Drools Guvnor

 

http://localhost:8080/drools-guvnor

 

注册,使用任何非空用户名/密码(为了演示的目的,我们禁用了认证)。跟随截屏[http://people.redhat.com/kverlaen/install-guvnor.swf] ,给出了如何管理你的库的一个概述。它显示给你:

 

l         如何导入一个存在的例子库,如上面部分显示的一样,包括了性能评估流程。

l         如何查找是一个包的部分的流程。

l         如何构建包,这样就可以用它来创建一个会话(如在下面的gwt-控制台的例子中显示的一样)。

 

如果你想了解更多,我们建议你看看Drools文档的其余部分。

 

2.6         使用网页管理控制台

 

 

首先确保你导入了例子库,并且在Guvnor中先构建了默认包(请看前面的部分)。打开流程管理控制台:

 

http://localhost:8080/gwt-console

 

注册,使用krisv / krisv作为用户名/密码。跟随截屏 [http://people.redhat.com/kverlaen/install-gwt-console.swf],给出了如何管理你的流程实例的一个概述。它显示给你:

 

l         如何启动一个新的流程。

l         如何查找一个运行的流程实例的当前状态。

l         如何查找你的任务。

l         如何完成一个任务。

l         如何产生监视你流程执行的报告。

 

如果你想了解更多,我们建议你看看Drools文档的其余部分。

一旦你完成了播放:

ant stop.demo

简单地关闭所有的支持物。

第3章         开始

这部分描述如何开始使用Drools流。它将指导你创建和执行你的第一个Drools流程。

3.1         安装

对于Eclipse开发环境,开始最好的方法是使用Drools Eclipse插件。它允许用户创建、执行和调试Drools流程和规则。要开始使用这个插件,你首先需要安装Eclipse 3.4.x,包括Eclipse Graphical Editing Framework (GEF)Eclipse可以从下面的链接下载(如果不知道你需要下载那个Eclispe版本,简单地选择"Eclipse IDE for Java Developers",这一个已经包括了GEF插件):

 

http://www.eclipse.org/downloads/

 

接下来,你需要安装Drools Eclipse插件。从下面的链接下载Drools Eclipse插件。在你的主Eclipse文件夹中解压下载的文件(不要复制文件到那儿,解压它是为了feature plugin jar包最终放在Eclipsefeaturesplugin目录中),并启动(重启)Eclipse

 

http://www.jboss.org/drools/downloads.html

 

要检查安装已经成功,试着打开Drools透视图:点击在你的Eclipse窗口右上角的"Open Perspective"按钮,选择"Other...",并点取Drools透视图。如果在可能的透视图中找不到Drools透视图,那么安装可能没有成功。检查你是否正确地执行了每个所需的步骤:你有正确的Eclipse (3.4.x)版本吗?通过检查是否org.eclipse.gef_3.4.*.jar存在于你的Eclipse根文件夹的plugins目录中,确保你已经安装了Eclipse GEF。通过检查org.drools.eclipse_*.jar存在于你的Eclipse根文件夹的plugins目录中,确保你已经正确地解压了Drools Eclipse插件。如果你没有找到问题所在,请试着联系我们,无论是在irc,还是在用户邮件列表。更多信息可以在我们主页找到:

 

http://www.jboss.org/drools/

 

3.2         创建你的第一个流程

Drools项目向导可以被用来建立可执行项目,其包含了容易上手定义和执行流程的必要文件。该向导会建立一个基本项目结构,类路径,一个例子流程,以及一个让你启动的执行代码。要创建一个新的Drools项目,只需要在Eclipse工具条的上左击Drools动作按钮(有一个Drools头),并选择"New Drools Project"(注意Drools动作按钮只显示在Drools透视图中。要打开Drools透视图(如果你还没有这么做),点击你的Eclispe窗口右上角的"Open Perspective"按钮,选择"Other...",并点取Drools透视图)。另外,你也可以选择"File"->"Project ..."->Drools->"Drools Project"。这将打开下面的对话框:

给项目一个名字,点Next。在接下来的对话框中,你可以选择默认添加到你项目中的元素。因为我们要创建一个新的流程,取消前面两个复选框,选取最后两个。这将产生一个例子流程,以及执行这个流程的Java类。

如果你还没有设置Drools运行时间,你现在可应该做它了。一个Drools运行时间是在你的文件系统上的一个jars包集合,代表一个特定版的Drools项目jars包。要创建一个运行时间,你必须指定IDE到你选择的版本,或者你可以在你的文件系统上根据包含在Drools Eclipse插件中的jars包简单地创建一个新的运行时间。因为我们只想使用包含在这个插件中的Drools版本,我们按后者来做。注意你只需要做一次即可;下次你创建Drools项目时,它将自动使用默认Drools运行时间(除非你指定其他的)。

 

除非你已经设置了一个Drools运行时间,点击"Next"按钮。随后的对话框,如下所示,显示出,告诉你还没有定义默认运行时间,那么你应该首先配置工作区设置。点击"Configure Workspace Settings ..."链接。

弹出的对话框显示用于Drools运行时间的工作区设置。你第一次做时,安装的Drools运行时间的列表可能是空的,如下所示。要在你的文件系统上创建一个新的运行时间,点击"Add..."按钮。它显示一个对话框,在那儿你应该给新的运行时间一个名字(例如,"Drools 5.0.0 runtime"),以及在你文件系统中到你的Drools运行时间的一个路径。在这个教程中,我们将根据内嵌在Drools Ecipse插件中的jars包简单地创建一个新的Drools 5运行时间。点击"Create a new Drools 5 runtime ..."按钮,选择你想要的这个运行时间被存储的文件夹,并点击"OK"按钮。你会看见选择的路径显示在上一个的对话框中。当我们全部做完,点击"OK"按钮。你会看见新创建的运行时间显示在你的运行时间列中。通过点击在你的运行时间名字前面的复选框,选择这个运行时间作为默认运行时间,并点击"OK"按钮。在成功设置了你的运行时间后,你现在可以点击"Finish"按钮完成项目创建向导。

最终结果看起来象这样,并包括:

l       ruleflow.rf:流程定义,这是一个简单的流程,包括一个Start节点(入口点),一个Action 节点(它打印显示出"Hello World"),以及一个End节点(流程终点)。

l         RuleFlowTest.java:一个Java类,执行流程。

l         必要的库作为一个Drools库被自动添加到项目的类路径。

双击ruleflow.rf文件,该流程会在规则流编辑器中被打开。规则流编辑器包含了你的流程定义的一个图形表示。它由互相连接的节点构成。编辑器显示了整个控制流,同时可以在下面的Properties视图的浏览(编辑)每个元素的细节。编辑器的左边包含了一个调色板,可以用来拖放新的节点,而在它的右边是一个大纲视图。

 

这个流程是三个节点的一个简单序列。Start节点定义了流程的开始。它连接到一个Action 节点(名为"Hello",它简单地打印"Hello World"到标准输出)。通过点击"Hello"你可以了解它,并且可在下面的Properties视图中检查动作属性。然后这个节点连接到一个End节点,标志流程结束。

 

虽然使用图形编辑器可以轻松地编辑流程,但是用户也可以直接修改底层的XML。对于我们简单流程的XML显示如下(注意为了简单起见,我们在这里没有包含图形信息)。流程元素包含了诸如流程的名字和ID参数,并且由三个主要的小部分构成:一个头部header(可以定义诸如变量、全局、导入等信息的地方),节点nodes和连接connections

 <?xml version="1.0" encoding="UTF-8"?>

<process xmlns="http://drools.org/drools-5.0/process"
             xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
           xs:schemaLocation="http://drools.org/drools-5.0/process drools-processes-5.0.xsd"
             type="RuleFlow"
        name="ruleflow"
           id="com.sample.ruleflow"
           package-name="com.sample" >
    <header>
    </header>
  
  <nodes>
      <start id="1" name="Start" x="16" y="16" />
    <actionNode id="2" name="Hello" x="128" y="16" >
      <action type="expression"
                 dialect="mvel">System.out.println("Hello World");</action>
    </actionNode>
    <end id="3" name="End" x="240" y="16" />
  </nodes>

  <connections>
      <connection from="1" to="2" />
    <connection from="2" to="3" />
  </connections>

</process>

3.3         执行你的第一个流程

 

要执行这个流程,右击RuleFlowTest.java,并选择"Run As..." -> "Java Application"。当流程被执行后,在控制台窗口应该出现下面的输出:

 

Hello World

 

如果你研究RuleFlowTest类的代码(见后),你会了解到执行这个流程需要下面几步:

 

  1. 1.         你应该首先创建一个知识库。一个知识库包含所有与你应用程序相关联的规则(即,流程、规则等等)。这个知识库通常创建一次,然后可重用。在这个案例中,该知识库只是由我们的例子流程构成。
  2. 2.         下一步,你应该创建一个与引擎交互的会话。注意我们也增加了一个日志给该会话,用于记录执行的事件,而更容易显现发生了什么。
  3. 3.         最后,你可能通过调用在会话中 startProcess(String processId)方法,启动流程的一个新实例。这启动了你的流程实例的执行,导致Start节点、Action节点和 End节点依次执行, 在这之后,流程实例会被完成。
package com.sample;
 
import org.drools.KnowledgeBase;
import org.drools.builder.KnowledgeBuilder;
import org.drools.builder.KnowledgeBuilderFactory;
import org.drools.builder.ResourceType;
import org.drools.io.ResourceFactory;
import org.drools.logger.KnowledgeRuntimeLogger;
import org.drools.logger.KnowledgeRuntimeLoggerFactory;
import org.drools.runtime.StatefulKnowledgeSession;
 
/**
 * This is a sample file to launch a process.
 */
public class ProcessTest {
 
  public static final void main(String[] args) {
    try {
      // load up the knowledge base
      KnowledgeBase kbase = readKnowledgeBase();
      StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
      KnowledgeRuntimeLogger logger = KnowledgeRuntimeLoggerFactory.newFileLogger(ksession, "test");
      // start a new process instance
      ksession.startProcess("com.sample.ruleflow");
      logger.close();
    } catch (Throwable t) {
      t.printStackTrace();
    }
  }
 
  private static KnowledgeBase readKnowledgeBase() throws Exception {
    KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
    kbuilder.add(ResourceFactory.newClassPathResource("ruleflow.rf"), ResourceType.DRF);
    return kbuilder.newKnowledgeBase();
  }
 
}
恭喜,你已经成功地执行了你的第一个流程!因为我们给会话添加了一个日志,通过查看审计记录,你能够容易地检查内部发生了什么。
选择在底部右边的"Audit View"标签,接下来到控制台标签。点"Open Log"按钮(视图右边的第一个),导航到你的项目文件夹找到新创建的test.log
文件(如果你不能确定这个项目文件夹的位置在哪儿,右击项目文件夹,你会在"Resource"部分中找到其位置)。应该显示如下这样的一个图象。
它是在运行时间发生的事件的一个树状视图。作为另一个事件的直接结果的已执行事件,被作为那个事件的子事件被显示。该日志显示,在流程启动后,
Start
节点、Action节点和 End节点依次被触发,在这之后,流程实例会被完成。

你现在可以通过修改我们的例子,开始实验和设计你自己的流程了。注意,通过点击"Check the ruleflow model"按钮,你可验证你的流程,即,如果你正在编辑一个流程时,显示在上面的工具条中的绿色检查框动作。流程也会验证后被保存,并且错误也会在Error视图中显示。

要了解我们更高级的功能,请继续阅读我们的文档。
posted @ 2011-11-09 17:16  skyme  阅读(1114)  评论(0)    收藏  举报