Drools 5.1.1_DOC (59)

Drools 5.1.1_DOC_Drools Flow


Drools流程能够通过一个网页控制台被管理。它包括的功能有管理你的流程实例(启动/停止/检查)、检查你的(人类)任务列表和执行这些任务、产生报告。

Drools 构建系统为你产生两个能够部署到你的应用程序服务器中wars包,包含必要的库、实际应用程序等等。一个jar包包含服务器应用程序,另外一个客户端。 下载gwt-console-server-drools-{version}.war 和gwt-console-drools-{version}.war,并把它们部署到你的应用程序服务器,{AS_HOME}/server /{configuration}/deploy(作为例子,我们使用的是jboss-4.2.3.GA/server/default /deploy)。

 

 

入手控制台最容易的方法可能是使用安装器。它会下载、安装和配置所有必要的组件,让控制台得以运行,包括Guvnor、一个人类任务服务等等。有关详情请查看安装器章节。如果你想手动安装控制台,你可能继续阅读。

 

你需要有一个安装好的应用程序服务器。本章假设你使用的是 JBoss AS version 4.2.3.GA,而其他版本和其他服务器应该是可行的。

 

 

流 程管理控制台使用Drools Guvnor加载能够被用于该控制台内的流程定义。因此你需要安装 Guvnor,才能添加新的流程定义到仓库,这样它们才能通过控制台被管理。要做这个,简单地复制drools-guvnor.war到你的应用程序服务 器 server,{AS_HOME}/server/{configuration}/deploy.

 

 

被 包括在服务器war包中的persistence.xml,为了存储运行时信息,引用名为"java:jdbc/testDS1"的JTA数据源。要定义 这个数据源,用下面的内容(注意我们使用了一个嵌入式H2内存数据库,但是相似配置对于其他JPA数据源当然也可行)创建一个testDS1- ds.xml 文件,并复制它到你的应用程序服务器的deploy目录:

 

<?xml version="1.0" encoding="UTF-8"?>
<datasources>
  <local-tx-datasource>
    <jndi-name>jdbc/testDS1</jndi-name>
    <connection-url>jdbc:h2:mem:mydb</connection-url>
    <driver-class>org.h2.jdbcx.JdbcDataSource</driver-class>
    <user-name>sa</user-name>
    <password></password>
  </local-tx-datasource>
</datasources>

 

还要确保驱动类能够在服务器的类路径中找到。在这种情况下,我们复制了h2-1.0.77.jar 到 {AS_HOME}/server/{config}/lib folder。

 

 

Drools 使用Hibernate持久化历史信息在一个数据库中 ,为了长期存储。drools-bam模块(在gwt-console-server-drools war包内)包含了一个hibernate.cfg.xml文件, 含有默认配置,即,使用了一个嵌入式H2内存数据库。然而嵌入式数据库不允许并发访问。 如果你打算使用报告,可能需要并发访问,那么在这种情况下,你应该使用H2内存数据库的服务器配置。在hibernate.cfg.xml中改变连接 url为:

 

<property name="connection.url">jdbc:h2:tcp://localhost/~/test</property>

 

在这种情况下,你还应该确保在运行应用程序时,你的H2数据库运行在服务器模式——例如,通过执行org.h2.tools.Server类。

 

报 告引擎是基于Eclipse BIRT引擎。你需要安装Eclipse BIRT运行时间引擎在你的应用程序服务器中,才能够使用报告功能。要做此,创建一个新的目录,名为{AS_HOME}/server /{configuration}/data/birt。下载Eclipse BIRT报告引擎版本 2.3.2 (birt-runtime-2_3_2_2.zip),解压它,并复制ReportEngine目录到新创建的目录(不需要其他目录)。

 

接下来,你还需要复制你的流程实例报告到新创建的目录。Eclipse BIRT允许你根据现有的数据源定义你自己的报告 。控制台期望两个不同的报告:

 

  1. overall_activity.rptdesign:  这个报告显示在你的系统中的所有运行流程实例的一个概述。
  2. process_summary.rptdesign:  当用户想深入查看一个流程定义时,显示这个报告。它给出了有关这个流程的所有实例的详情。

 

我 们已经创建了一些例子报告,你可以使用,你也可以根据你自己的需要自定义。例子报告模板可以drools-bam模块中找到(src/test /resources)。注意,那个例子报告还是使用H2内在数据库(以服务器模式)。如果你配置了不同的历史数据的持久化,你必然相应地更新这些报告的 数据源。你也需要复制数据库驱动给报告插件。在这种情况下,使用H2,复制h2-1.0.77.jar 到 {AS_HOME}/server/{configuration}/data/birt/ReportEngine/plugins/ org.eclipse.birt.report.data.oda.jdbc_2.3.2.r232_v20090212/drivers。

 

该应用程序使用简单密码认证,验证谁被允许使用此应用程序。例如,用户名/密码可以在{AS_HOME}/server/{configuration}/conf中的一个users.properties文件中指定:

 

admin=admin krisv=mypassword

 

与这些用户关联的角色也可能在相同目录中的roles.properties文件中指定,例如:

 

admin=admin,manager,user krisv=admin,manager,user

如果你碰上了OutOfMemory异常,你可能想增加应用程序服务器(尤其是永久代空间(PermGen space))使用的内存。要做这,编辑 run.conf或 run.bat (取决于你的 OS),例如增加以下行:

 

JAVA_OPTS="$JAVA_OPTS -XX:MaxPermSize=256m"

 

现在你准备好启动应用程序服务器了。如果你在你的流程中使用人类任务,你还应该确保你运行了任务服务(在127.0.0.1:9123)。当然还要确保你的数据被启动和运行。

 


Drools Guvnor允许你在一个(逻辑上)集中的地方管理所有你的业务知识。 其包括所有你的流程定义、业务规则等等。该流程管理控制台自动从Guvnor的"defaultPackage"包的最新快照中检索所有你的流程。要查明如何得到Guvnor仓库中的流程(例如,手动上传它们,或者使用Eclipse Guvnor同步),请参考Guvnor文档。在部署Guvnor到你的应用程序服务器后,导航到后面的URL,打开Guvnor(更换主机和/或端口,取决于该应用程序服务器如何被配置): http://localhost:8080/drools-guvnor

 

下面的截屏显示了一个例子,在那儿"defaultPackage" 包包含了一个"Evaluation"流程。在添加必要的流程定义后,确保构建了该包,那么该构建包能够被网页控制台下载。

 

Drools 5.1.1_DOC (59) - *工* - 要有光,于是就有了光

 

重 要的是你确保 (1) 你添加了你的流程到名字为"defaultPackage"的包,否则你的流程不会显示在控制台中;(2) 你的流程也定义了"defaultPackage"作为该流程的包。如果流程没有放在与它定义的相同的包中,Guvnor不允许该流程被构建。

 


现在,导航到后面的URL(更换主机和/或端口,取决于该应用程序服务器如何被配置): http://localhost:8080/gwt-console

 

一个注册屏幕应该弹出,询问你的用户名字和密码。

 

Drools 5.1.1_DOC (59) - *工* - 要有光,于是就有了光

 

在填写这些后,流程管理工作台应该被打开,如下截屏所示。在右边你会看见几个相对于流程实例管理、人类任务列表和报告的标签,在后面的章节会解释。

 

Drools 5.1.1_DOC (59) - *工* - 要有光,于是就有了光

 

 "Processes"部分允许你检查流程定义——其目前是安装的知识库的一部分,启动新流程实例,管理运行的流程实例(包括检查它们的状态和数据)。 

 

 

当你打开流程定义列表,所有存储在Guvnor的"default"包中的流程被显示出来。然后你可以检查一个特定流程的一个流程实例,或者启动一个新的流程实例。

 

Drools 5.1.1_DOC (59) - *工* - 要有光,于是就有了光

 

要 启动一个特定流程定义的一个新流程实例,在流程定义列表中选择该流程定义,并选择流程实例标签。点击"Start"按钮,启动那个特定流程的一个新实例。 当一个表单与这个特殊流程关联时(在启动流程前,询问附加信息),会显示这个表单。在完成这个表单后,该流程会用提供的信息启动此流程。

 

Drools 5.1.1_DOC (59) - *工* - 要有光,于是就有了光

 

流程实例标签也包含一个表,显示那个特定流程定义的所有运行的实例。选择一个流程实例,会显示出那个特定流程实例的细节。

 

Drools 5.1.1_DOC (59) - *工* - 要有光,于是就有了光

 

通 过点击"Diagram"按钮,你可以检查一个特定流程实例的状态。这会显示给流程的流程图,在那儿当前活动的节点显示一个红三角(譬如一个人类任务节 点,等待任务的完成,或者一个联合节点,在继续之前,等待更多的输入连接)。[注意一个节点的多个实例能够同时被执行。它们仍然会只显示一个红三角。]

 

Drools 5.1.1_DOC (59) - *工* - 要有光,于是就有了光

 

通过点击"Instance Data"按钮,你可以检查一个特定流程实例的(顶层)变量。这会显示给你,在该流程中定义的每个变量如何映射到它的相应的特定流程实例的值

 

Drools 5.1.1_DOC (59) - *工* - 要有光,于是就有了光

 

任 务管理部分允许一个用户了解他/她的当前任务列表。组任务列表显示还没有分配给一个特定用户的所有任务,但是当前注册用户可以主张它。人个任务列表显示分 配给当前注册用户的所有任务。要执行一个任务,在你的个人任务列表中选择它,并选择"View"。如果一个表单与所选任务相关联(例如询问附加信息),会 显示这个表单。该表单完成后,任务也会被完成。

 

Drools 5.1.1_DOC (59) - *工* - 要有光,于是就有了光

 

报告部分允许你浏览有关流程执行的报告。其包括一个整体报告,显示所有流程的一个概貌,如下所示:

 

Drools 5.1.1_DOC (59) - *工* - 要有光,于是就有了光

 

还可以产生有关一个特定流程实例的一个报告。

 

Drools 5.1.1_DOC (59) - *工* - 要有光,于是就有了光

 

Drools Flow提供了一些例子报告,能够被用来可视化一些普通执行特性,如每流程的活动流程实例的数量等等。 但是也可以通过替换在report目录中的报告模板,产生自定义报告,显示你公司认为的重要信息。

 

 

表 单可以被用于 (1) 启动一个新流程;(2) 完成一个人类任务。我们使用freemarker模板,动态地创建表单。要为一个特定流程定义创建一个表单,创建一个名 为  {processId}.ftl的freemarker模板。模板本身应该使用HTML代码建模表单。例如,用于启动上面显示的评估流程的表单被定 义在com.sample.evaluation.ftl文件中:

 


<html>
<body>
<h2>Start Performance Evaluation</h2>
<hr>
<form action="complete" method="POST" enctype="multipart/form-data">
Please fill in your username: <input type="text" name="employee" /></BR>
<input type="submit" value="Complete">
</form>
</body>
</html>

 

类 似的,用于人类任务(由它的任务名字唯一标识)的一个特定类型的任务表单,可以通过创建一个名为{taskName}.ftl的freemarker模 板,连接到那个人类任务。表单访问一个代表当前人类任务的"task" 参数,所以它允许你根据任务输入动态地调节任务表单。任务参数是一个Task模型对象,与在 odrools-process-task模块中定义的一样。例如,允许你根据与那个任务相关的描述或输入数据自定义任务表单。例如,前面显示的评估表 单,使用了任务参考访问任务的描述,并显示在那个表单中:

 


<html>
<body>
<h2>Employee evaluation</h2>
<hr>
${task.descriptions[0].text}<br/>
<br/>
Please fill in the following evaluation form: 
<form action="complete" method="POST" enctype="multipart/form-data">
Rate the overall performance: <select name="performance">
<option value="outstanding">Outstanding</option>
<option value="exceeding">Exceeding expectations</option>
<option value="acceptable">Acceptable</option>
<option value="below">Below average</option>
</select><br/>
<br/>
Check any that apply:<br/>
<input type="checkbox" name="initiative" value="initiative">Displaying initiative<br/>
<input type="checkbox" name="change" value="change">Thriving on change<br/>
<input type="checkbox" name="communication" value="communication">Good communication skills<br/>
<br/>
<input type="submit" value="Complete">
</form>
</body>
</html>

 

在 填写任务表单时,由用户提供的数据会被作为参数添加。例如,在完成上面的任务时,输出参数的Map包括名为"performance"、 "initiative"、"change" 和"communication"的结果变量。通过映射这些参数到流程变量,可以在相关的流程中访问这些结果参数。

 

表单应该被包括在服务器war包的drools-gwt-form.jar包中。

posted @ 2011-11-09 17:58  skyme  阅读(1061)  评论(0)    收藏  举报