Drools 5.1.1_DOC (62)
Drools 5.1.1_DOC_Drools_Guvnor
1.4 快速入门指南
1.4.1 快速入门指南
如果你正在阅读此文,你一定是一个急躁类型人,走马观花地看看。 本节将提供一个所涉步骤的快速端对端的巡视(但是不涉及概念细节)。这假定你已经正确地安装仓库,并且能够访问主注册屏幕。
为了得到一些教程和用户技巧,你也可以参考wiki: http://wiki.jboss.org/wiki/Wiki.jsp?page=RulesRepository (它是一个维基,所以你甚至能够贡献你自己的技巧和例子,如果你愿意,甚至可以上传文件)。

图 1.7 Guvnor的主要功能区。
上面的图片显示了Guvnor的主要功能区。
- Info: 这是初始化屏幕,带有到资源的链接。
- Rules: 这是分类和业务用户的透视。
- Package: 这是配置和管理包的地方。
- Deployment: 这是管理部署快照的地方。
- Admin: 管理功能(分类、状态、导入和导出)。
1.4.1.1 支持的浏览器平台
1.4.1.3 初始配置
第一次需要一些初始设置。首次启动服务器时,它会创建一个空的仓库,然后采取以下步骤:
- 一旦部署,到"http://<your server>/drools-guvnor/" (其会显示初始的info屏幕——或者注册屏幕,取决于配置)。
- 如果它是一个全新的仓库,你会想到"Admin",并选择"Manage Categories" (添加一些你选择的分类,分类只是用于分类,不是为了执行,或其他的事情)。
- 工作规则需要一个事实模型(对象模型)用于脱机工作,所以接下来,你会想要到包管理功能(Package management feature)。从这儿,你可以点击图标创建一个新的包(给它一个有意义的名字,不要有空格)。
- 要上传一个模型,使用一个拥有你将在你的规则和代码中使用的事实模型(API)的jar包(如果需要,去做一个新的!)当你在模型编辑器屏幕(model editor)时,你可以上传一个jar包文件,从列表中选取在上一步创建的包名。
- 现在编辑你的包配置(你刚创建的),导入你刚上传的事实类型(增加import语句),然后保存改变。
- 此刻,包被配置,准备好了(你一般不必经常通过那个步骤)。
1.4.1.4 编写一些规则
- 一旦你至少设置一个分类和一个包 。你可以创作规则了。
- 有多种规则“格式”,但是从BRMS的角度来看,它们都是“资产”。
- 通过点击具有规则徽标的图标(头部),你创建一条规则,并且从那儿输入一个名字。
- 你还必须选择一个分类。分类提供浏览与包分离的规则的一个方法(你可以让规则显示在多个包中)——把它看作标记。
- 选择"Business rule (guided editor)"格式。
- 这会打开一个规则建模器,它是一个指南式编辑器。你能够根据在当前包中使用的模型添加和编辑条件和动作。为该包设置的任何DSL语句模板将是可用的。
- 当你正在做使用规则编辑时,你可以登记变化(保存),或者可以验证或“浏览源代码”(对有效的源代码)。
- 你也可以从规则编辑器添加/删除分类,以及其他的属性,如文档(如果你不确定做什么,用自然语言编写一个描述规则的文档,并登记它,也可以把它作为以后的一个模板)。
在导航方面,你能够使用规则功能(Rules feature),显示分类分组的东西,或者你能够使用包功能,通过包浏览(和规则类型)。如果你知道一个资产的名字或部分名字,你还能够使用 "Quick find",开始输入一条规则的名字,它将返回与你的输入相匹配的一个列表(所以,如果你有一个合理的命名方案,查找东西就会非常快)。
1.4.1.6 部署
- 在你编辑了一个包中的一些规则后,你可以点击包功能(package feature),打开你希望的包,并构建整个包。
- 如果成功,则你将能够下载一个二进制包文件,可以把它部署到一个运行时系统中。
- 你 也可以获得一个用于部署的一个包的“快照”。这及时在此点冻结了该包,所以任何并发变化不会影响该包。它还使该包能够以一个 "http://<your server>/drools-guvnor/org.drools.guvnor.Guvnor/packages/<packageName>/<snapshotName>" 格式的URL可用。(你能够使用那个URL和下载的地方,会被用在部署时的部件覆盖。)
1.4.2 BRMS 概念
1.4.2.1 规则是资产
因为BRMS能够管理不同类型的规则(甚至更多),它们都被归类为“资产”。一个资产是能够作为一个版本被存储在仓库中的任何东西。这包括决定表、模型(models)、DSLs,以及更多。有时候,单词“规则”的真正意思习惯指“资产“(即,你能够做的事情也适用其他资产类型)。你可以把资产看作象一个文件夹中的许多文件。为了浏览,资产被分组在一起,或者为了部署,做成一个包,等等。
1.4.2.2 分类

分 类允许规则(资产)用你定义的任意数量的分类标记。这意味着,你可以浏览匹配一条特殊分类的一个规则列表。规则可以属于任意数量的分类。在上面的示图中, 你可以看见,实际上这能够创建像资产视图一样的一个文件夹/资源管理器。名字可以是任何你想要的,并由BRMS管理员定义(你也可以删除/添加新的分类 ——如果你目前没有使用它们,你可以只删除它们)。
通常用有意义的名字创建分类,其匹配该规则应用到的业务领域(如果该规则应用到多个领域,则可以连接到多个分类)。分类还可以用来“标记”规则作为它们生命周期的一部分,例如,标记为"草稿" 或 "用于审查".

当你打开一个资产时,上面的视图显示所见的分类编辑器/浏览器。在这个例子中,你可以看见资产属于2两个分类,用一个"+"按钮添加其他的条目(使用垃圾桶可以删除它们)。这意味着当任何一个分类被用来显示一个资产列表时,你会看见这个资产。
当你打开一个资产浏览或编辑时,它会显示它目前所属分类的一个列表,如果你做了一个改变(删除或增加了一个分类),你将需要保存该资产——这会在版本历史中创建一个新条目。一条规则的分类的改变,不影响它的执行。

图1.10 创建分类
上面的视图显示了管理屏幕,用于设置默认时在系统中没有分类的分类。因为分类能够被分层,所以你选取用于你想创建一个子分类的"父"分类 在这儿,分类也可以被删除(但是只在它们没有被任何当前版本的资产使用时才可)。
作为一个普通原则,一个资产在同一时间应该只属于1或2个分类。 分类的关键是在于你有大量规则的情况时。分层不必太深,但是应该能够了解到它如何能帮助你把规则/资产分解为可管理的块。如果在第一次是不清楚,那么好了,现在你可以随意地改变分类了。
1.4.2.3 资产编辑器

图1.11 资产编辑器视图
上面的示图显示了带有一些注释区的“资产编辑器”。资产编辑器是所有规则做改变的地方。下面是一个列表,描述该编辑器的不同部分。
A 这是编辑器“部件”存活的地方——编辑器采用的精确形式,取决于资产或规则的类型。
B 这是文档区——一个自由文本区,该规则的描述能够存活的地方。鼓励在编辑该规则前写一个简单的描述。
C 这些是动作——用于保存、归档、更改状态等等。归档等价于删除一个资产。
D 这儿有资产的名字,以及资产属于的分类列表。
E
这部分包含只读元数据,包括什么时候做了改变,由谁做的。"Modified on:" ——最新修改的日期。"By:"
——谁最后做的改变。"Note:"——当该资产最后更新时,所做的注解(即,为什么做改变)。"Version:"
——-这是一个数字,每一次改变被检查(保存)时,增加1。"Created on:" ——该资产创建的日期和时间。"Created by:"
——资产的最初作者。"Format:" ——资产类型的短格式名字。
F 这显示该资产属于什么包(在这儿,你也可以改变它)。
G 这是一些其他的元数据选项(取自柏林核心元数据标准)。
H 这将显示在请求时的版本历史列表。
1.4.2.4 规则创作
BRMS支持一个越来越的资产(规则)格式的列表 。在这里描述重要的一个。其中的一些的在手册的其他部分介绍,并且这里的细节不会重复。
1.4.2.4.1 业务规则与指南编辑器
指南编辑器使用 "业务规则"样式:(也被称为"BRL格式")。 这些规则使用指南式GUI,控制和提示用户根据对象模型的知识输入。还可以使用DSL语句增加它。
重要:使用BRL指南编辑器,一些人需要你事先配置你的包。
还要注意,在Eclipse插件中有一个指南编辑器,在本节中的大部分细节也适用于它。

图1.12 指南BRL编辑器
上面的示图显示了在行动中的该编辑器。以下描述适用于上面示图中的字母框:
A 一条规则的不同部分。"WHEN" 部分是条件,"THEN"动作, 而 "(options)"是可能影响该规则的操作的可选属性 。
B
其显示了一个模式,正在声明该规则正在查找一个"Driver"事实 fact
(字段列在下面,在这里只有"age")。点击事实名字(Driver)会弹出选项列表,用于添加到事实声明:你可以添加多个字段(例如他们
的 "location"),或者你可以分配一个变量名给该事实(如果需要,你以后可能使用它)。以及添加更多字段给这个模式——你可以添加“多字段”约
束——即约束跨字段(例如age > 42 or risk > 2)。
C 小三角指示你可以删除某物。在这里,它将删除整个Driver事实声明。如果是下面那个,则只会删除age的约束。
D "+"号允许你添加更多的模式(patterns)给规则的条件或动作部分,或者添加更多属性.所有这些情况下,都会提供一个弹出选项。对规则的"WHEN"部分,你可以从一个规则的列表中选择添加:
- "A Constraint on a Fact":它会给你一个事实列表。
- "The following does not exist":事实+约束一定不存在。
- "The following exists": 至少存在有一个匹配(但是只需要一个——它不会触发每一个匹配)。
- "Any of the following are true":模式的任何一个都能够匹配(然后,你添加模式到这些更高级的模式)。
- "From":这会插入一个新的From条件元素到该规则。
- "From Accumulate": 这会插入一个新的Accumulate条件元素到该规则。
- "From Collect":这会插入一个新的Collect条规元素到该规则。
- "Free Form DRL":这会让你插入一个DRL自由块。
E: 其显示 "age"字段的约束。从左到右看,你会发现:
- 字段名: 点击它,你可以分配一个变量名字给它,或访问它的嵌套属性。
- 一个约束操作的列表:这个列表的内容变化,取决于字段的数据类型。
- 值字段:它可能是一个
- 字面值:根据字段数据类型,不同的组件会被显示:String 或Number ->文本框,Date -> 日历,Enumeration ->复选框,Boolean -> 单选框
- 一个"formula":这是一个被计算的(只是为高级用户准备的)表达式。
- 一个表达式——其让你使用一个表达式构建器来构建一个纯mvel表达式。(现在,只支持基本表达式)
F: 这显示一条规则的“动作”,规则的RHS由一个动作列表构成。在这里,我们正断言/插入一个新的事实,其为一个 Rejection(带有设置解释的"reason"字段)。你可以使用相当多的其他动作类型: 你可以修改一个现有的事实(通知引擎该事实更改了)——或者你可以只设置一个事实的一个字段(在这种情况下,引擎并不知道有关的变化——因为通常你设置一 个结果)。你还可以收回一个事实。在多数情况下,就如在事实类型(Fact Types)中一样,点击事实名字会得到一个属性列表,或绑定它到一个变量名字。你输入的值为“字面字符”——在这种情况下,你的类型是什么,则值是什么。如果需要一个计算,那么添加一个"=" 在该值的开头——这会被解释为一个“公式”(只对高级用户)!并且计算会被执行(并不象一个电子表格)。你还能够执行一个事实的逻辑插入,添加事实到现有的全局列表,就一个变量调用一个方法,或写一些自由格式的代码块。
G: 这是规则选项存活的地主。在这里,只使用了salience,该数值代表规则的“优先权”。这可以能是使用得最普通的选项。
H: 模式/动作( Pattern/Action)工具条。紧挨着每个模式或动作,你会发现一个包含3个按钮的工具条。第一个按钮让你在你选择的下面插入一个新模式/动作, 其他两个按钮用于你上下移动当前的模式/动作。默认时工具条是半透明的;当你移动鼠标的光称到其中之一时,会激活它们。
1.4.2.4.1.1 用户驱动的下拉列表

图 1.13 用一个下拉列表显示数据枚举

图 1.14 在指南编辑器中的DSL

图 1.15 一个更复杂的例子
在上面的例子中,你可以看到如何使用条件元素、字面字符值和公式的的混合体。该规则有4个“顶级”模式和一个动作。“顶级”模式为:
-
一 个关于Person的事实模式。这个模式包含两个字段约束:一个用于生日字段,另一个是一个公式。注意,生日限制的值从一个日历中选择。另外还要注意,你 可以做计算,并且在公式约束中使用嵌套(即,car.brand)。最后,我们设置了一个变量名字($p) 给Person事实类型。然后,你可以在其他模式中使用这个变量。
注意
从这个模式产生的DRL将是:
$p : Person( birthDate < "19-Dec-1982" , eval( car.brand == "Ford" && salary > (2500 * 4.1) )) -
一个 From模式。这个条件会创建一个匹配 ,用于匹配来自Person的地址列表中的每个Address的street名字为"Elm St."的。From的左边是一个标准的事实模式,而右边是一个表达式构建器,让我们检查变量的字段。
注意
从这个模式产生的DRL将是:Address( street == "Elm St." ) from $p.addresses -
一个 "Not Exist"条件元素。 当它的内容没有创建一个匹配时,这个条件才匹配。在这里,它的内容是一个标准的事实模式(Person)。在这个事实模式中,你可以看到变量($p)如何被用于一个公式值的内部。
注意
从这个模式产生的DRL将是:not Person( salary == ( $p.salary * 2 ) )
-
一 个 "From Accumulate"条件元素。这可能是你使用的最复杂的模式之一。它由一个左边模式(必须是一个事实模式。在这里是一个 Number模式。该 Number被命名为 $totalAddresses),一个源模式(可以是事实模式、 From、Collect 或Accumulate条件元素。在这里是一个Address模式限制 ,其用它的邮编字段进行限制)和一个公式部分(你可以使用任何内置或自定义累积函数。在这个例子中,使用了count()函数)构成。总的来说,这个条件 元素会统计来自于 Person的地址列表的,且的邮编代码为43240的地址个数。
注意
从这个模式产生的DRL将是:
$totalAddresses : Number() from accumulate ($a : Address( zipCode == " 43240") from $p.addresses, count($a))

图 1.16 添加模式
当 点击WHEN部分的+按钮时,会显示一个新弹出对话框,让你添加新的模式到该规则。 弹出的看起来类似于上面的图片。在这个弹出对话框中,你可以通过点击列表条目之一,选择添加模式类型。在这个列表中,除了已经提及的条件元素, 如,"exists", "doesn't exist", "from","collect","accumulate"和"free form DRL",你将有每个定义的事实类型的条目。一旦你选择了一个元素,你点击"Ok"按钮可以添加一个新的模式。新的模式会被添加到该规则的左手边的底部。 如果你希望选取一个不同的位置,你可以使用放置在弹出对话框顶部的组合框。
你还可以点击一个模式的动作工具条中的+按钮打开这个弹出对话框。如果是这种情况,显示的弹出对话框没有位置(
position
)组合框,因为新模式只会添加到你点击的模式的后面。
图 1.17 添加约束
当你想添加约束到Person事实时,上面的对话框是你得到东西的地方。在上半部是简单的选项:你可以马上添加一个字段约束( Person事实的一个字段列表会被显示),或者你可以使用AND或OR运算符添加一个“多字段约束”。在窗口的下半部,你有高级选项:你可以添加一个公式(它解析为True或False——如上面的例子:"... salary > (2500 * 4.1)")。你还可以分配一个变量名字给Person事实(这意味着,你以后在规则的动作部分可以访问那个变量,设置一个值,等等)。
1.4.2.4.2 DSL规则

图1.18 DSL规则
DSL规则是单个规则。参阅上面的图片,你可以看到一个文本编辑器。你能够使用右边的图标,提供用于选择的条件和动作的列表(或者同时按Control + Space,弹出一个列表)。
1.4.2.4.3 电子表格决策表

图 1.19 电子表格决决策表
1.4.2.4.4 指南决策表(基于网页)

图 1.20 决策表
在右上角有一个按钮,用于显示指南决策表的配置区域:

图 1.21 决策表的配置
在这个屏幕中,条件和动作列被配置。“属性列”是用于每规则(行)的方式设置属性,例如,salience优先级。基于网页的决策表像其他的规则资产一样被编译到DRL内。
列 配置:当你编辑或创建一个新列时,你将会选择约束的类型:字面字符(在单元格中的值将使用运算符与该字段比较)、公式(在这个情况下,在单元格中的表达式 会被求值,然后再与该字段比较)、谓词(这意味着,不需要字段,表达式会被求值为 true 或false)。你可以设置一个默认值,但是如果在单元格中没有值,通常不会应用约束。
"in"运算符: 当你选取该运算符时,表明“是在随后的列表中”,那么该单元格值可以是一个逗号分隔的值列表,只要它们其中一个匹配指定的字段,约束会被视为true.
通常,存在有小的"info" 图标(带有字母 "i"),如果你点击它, 会在上下文中提供该功能的弹出式描述。
1.4.2.4.5 规则流

图 1.22 DRL技术规则
1.4.2.4.7 函数

图 1.23 函数
1.4.2.4.8 数据枚举(下接列表配置)
数据枚举是一个可选资产类型, 技术人员能够配置来为指南编辑器提供下拉列表。它们就像任何其他的资产一样被存储和被编辑,并应用到它们属于的包。
一 个枚举配置的内容是一个事实.字段(Fact.field)到一个被用于一个下拉列表中的值列表的映射。那个列表可以是字面字符,或者使用一个实用类(你 设置它在类路径上)加载一个字符串列表。字符串是在一个下拉列表中被显示的一个值,或者来自代码值的一个映射(最终被用于该规则中),以及一个显示值(看 下面的例子,使用 '=')。

图 1.24 数据枚举
在上面的示图中上——"MM"表明一个值会被用于该规则中, 然而"Mini Mal"会被显示在GUI中。
从外部数据源得到数据列表:让BRMS调用将加载一个字符串列表的一段代码是可能的。要做它,你需要一些代码,返回java.util.List(字符串的)到BRMS的类路径。而不是在BRMS自身中指定一个值列表——该代码能够返回字符串列表(如果你想用不同的显示的值为该规则的值,如通常一样,你能够在字符串内使用"=" )。例如,在上面的'Person.age'行,你可以改变它为:
'Person.age' : (new com.yourco.DataHelper()).getListOfAges()
这 假设你有一个类名为"DataHelper",它有一个方法"getListOfAges()",其返回一个字符串列表(并且是在类路径中)。当然,你可 以利用固定列表混合这些“动态”枚举。例如,你可以使用JBDC从一个数据库中加载。在一个会话中,你第一次使用指南编辑器,数据枚举会被加载。如果你有 一些指南编辑器会话打开——你将需要关闭,然后打开该规则,了解变化。要检查枚举被加载——如果你到包配置屏幕,你能够“保存和验证(save and validate)“该包——这将检查包,并提供一些任何错误反馈。
1.4.2.4.9 高级枚举概念
依赖于字段值的下拉列表:让我们设想一个简单的事实模型,我们有一个类名为Vehicle(机动车),它有2个字段: "engineType(发动机类型)" 和"fuelType(燃料类型)"。 我们希望为 "Petrol(汽油)" 或 "Diesel(柴油)"的"engineType(发动机类型)"做一个选择。现在,显然对燃料的选择类型必须取决于发动机类型(所以对于Petrol ,我们有ULP 和 PULP,对于Diesel我们有BIO和NORMAL)。我们可以像这样用一个枚举表达这种依赖关系:
'Vehicle.engineType' : ['Petrol', 'Diesel'] 'Vehicle.fuelType[engineType=Petrol]' : ['ULP', 'PULP' ] 'Vehicle.fuelType[engineType=Diesel]' : ['BIO', 'NORMAL' ]
这说明如何依赖于其他字段值做选择是可能的。注意,一但你点取了发动机类型,燃料类型的选择列表也会被决定。
用编程方式加载枚举:在某些情况下,人们可能想完全从外部数据源加载他们的枚举数据(如,一个关系数据库)。要做这,你可以实现一个返回一个映射(Map)的一个类。映射的key键是一个字符串(如上所示,它是一个Fact.field名字),值是一个字符串的java.util.List
public class SampleDataSource2 { public Map<<String>, List<String>> loadData() { Map data = new HashMap(); List d = new ArrayList(); d.add("value1"); d.add("value2"); data.put("Fact.field", d); return data; } }
在BRMS的枚举中,你设置:
=(new SampleDataSource2()).loadData()
"="告之通过执行你的代码加载数据。
模
式高级枚举:在上面的情况下,在列表中的值预先被计算。这对于相对静止的数据或少量数据是很好的。设想一种情形,你有一个国家的列表,每个国家有一个州的
列表,每一个州有一个地区的列表,每个地区有一个街道的列表,依次类推。你可以看到这是多么大量的数据,并且不能被加载起来。应该被加载的列表取决于所选
的国家,等等……
好的,能够以下面的方式处理上面的情形:
'Fact.field[dependentField1, dependentField2]' : '(new com.yourco.DataHelper()).getListOfAges("@{dependentField1}", "@{dependentField2}")'
类似于上面的,但是注意我们只指定了需要的字段,并且在 ":" 的右边,用单引号把表达式括起来了。只在需要时,那么这个表达式才会被计算,根据指定的字段替代该值。这意味着你可以从GUI使用字段值来驱动一个数据库查询,并且深入到数据内,等等。当下拉列表被加载,或者该规则被加载,它会根据字段刷新该列表。'depenentField1'和'dependentField2' 在
'Fact'的
类型中的字段的名字——它们被用于计算值的列表,如果是该字段的值,它会被显示在下拉列表中。1.4.2.5 资产/规则的模板
提示:因为你可能有许多相似的规则,你可以创建规则模板,其仅仅是保存在一个非活动包( inactive package)中的规则——然后你可以相应地分类模板,并按需要复制它们(选取一个活动包作为作为目标包)。
1.4.2.6 状态管理
在Guvnor中的每个资产(还有包)有一个状态标志集。状态标志的值在BRMS的Administration部分中设置。(你可以添加你自己的状态名字)。类似于分类 Categories,状态Statuses不会以任何方式影响执行,是纯信息的。不像分类,资产在同一时间只有一个状态。
使用状态完全是可选的。你可以使用它管理资产的生命周期(如果你喜欢,你可以用分类替代)。

图 1.25 资产状态
你能够改变一个单独资产的状态(如上面的示图)。它会立即生效,不需要单独保存。

图 1.26 资产状态
你可以改变整个包的状态——这会设置包自身的状态标志,但是它还一举改变了属于那个包的所有资产的状态(与你为包所设的相同)。
1.4.2.7 包管理
配置包通常是由一些具有使用规则/模型经验的人一次性做的事情。一般来说,很少有人会需要配置包,它们被一次性配置,如果需要可以反复地复制它们。包配置绝对是一个技术性的任务,需要相当的经验。
所有资产存活在BRMS的 "包packages"中 ——一个包就像一个文件夹(它还适合作为一个“命名空间”)。存在一个规则资产的主文件夹。尤其是规则需要知道事实模型是那个,命名空间是谁,等等。

图1.27 包资源管理器
上面的图显示了资源管理器。点击一个资产类型会显示匹配的一个列表(对于有成千上成规则的包,显示列表会需要几分种——因此,使用分类帮助你查找是重要的)。
所
以,尽管规则(普通资产)可以显出在任何数量的分类中,但是它们只存活一个包中。如果你把BRMS看作一个文件系统,那么每个包就是一个文件夹,并且资产
存活在那个文件夹中——作为文件的一个大列表。当你创建一个包的部署快照时,你有效地复制了在那个“文件夹”中所有资产到另外一个特殊“文件夹”。
包管理功能允许你看见一个包的列表,然后“展开”它们,显示每个资产”类型“的列表(有很多资产,所以它们中的一些被分组在一起):
资产类型:
- 业务资产(Business assets):这显示所有“业务规则”类型的一个列表,包括决策表、业务规则,等等。
- 技术资产(Technical assets):这是被认为技术(例如,DRL规则、数据枚举和规则流)条目的一个列表。
- 函数(Functions):在BRMS中,你也可以有函数定义(当然是可选的) you can also have functions defined (optionally of course).
- DSL:域特殊语言也被存储作为一资产。如果它们存在(通常只有一个),那么它们会被用于相应的编辑器GUIs中。
- 模型(Model):一个包至少需要一个模型——用于规则。: A package requires at least one model - for the rules.
- 工作集(WorkingSets):工作集让你创建包的事实类型的子集,并应用约束到它们的字段。

图1.28. 创建新的资产
从包资源管理器,你能够创建新规则,或新资产。某些资产,你只能够从包资源管理器中创建。上面的图片显示的图标,为这个目的而启动向导。如果你移到鼠标到它们上面,一个工具提示条会告诉你它们做什么。

图 1.29 包配置
你需要做的关键事情之一是配置包。这主要是被规则使用的导入的类,和全局变量。一旦你做一改变,你需要保存它们,然后包被配置,并为构建作好了准备。例如,你可能添加一个模式,它有一个名为"com.something.Hello"的类,那么你应该在你的包配置中添加"import com.something.Hello",并且保存改变。

图 1.30 包构建
最后你应该“构建(build)”一个包。那么捕获的任何错误在这时会被显示。如果构建成功,那么你将有机会创建一个部署快照。你还可以浏览这个包产生的"drl"。警告:在大量规则的情况下,所有这些操作可能要花一些时间。
在这个阶段,输入“选择器selector”的名字是可选的——有关如何为你的系统配置自定义选择器的详情,请看管理员(admin)章节(如果你需要它们——选择器允许你过滤你构建的东西到一个包中——如果你不了解它们是为了什么,你也许不需要使用它们)。
1.4.2.7.1 导入drl包
还
可以通过导入现有的"drl"文件创建一个包。当你选择创建一个新包时,你可以选择一个选项,上传一个.drl文件。然后BRMS会企图理解那个drl,
为你分解创建一个包。在它里面的规则会被作为单独的资产被存储(但是仍然作为drl文本内容)。注意,要真正地构建该包,你将需要用一个单独的步骤上传相应的模式(以一个jar包)来验证。
1.4.2.8 版本管理

图 1.31 资产版本
1.4.2.9 部署管理
快照, URLs和二进制包:
如何能在你的应用程序使用这些URLs(二进制下载包),以及规则如何能被联机更新,有关的细节请参考有关知识代理的章节。



浙公网安备 33010602011771号