ibm的odm使用

IBM®Operational Decision Manager(ODM)提供了一组广泛的组件来设计,管理,测试和运行业务规则集,然后将这些业务规则一起组织为服务以提供业务决策。 对于大多数应用程序,规则的生命周期始于决策中心的业务控制台,业务用户可在其中创建,测试和更新规则。

但是,有时规则的初始表示形式是IBM ODM外部的工件,由外部系统以任意语法生成。 考虑以下从外部开始的常见规则示例:

  • 规则是从诸如IBM SPSS Modeler之类的平台创建的预测分析模型中生成的。 例如,这些规则可以采用使用预测模型标记语言(PMML)格式的XML文件形式。 要求可能是,每次模型更改时,规则都被导入到IBM ODM中(通常以决策表或决策树的形式),并被折叠成组成决策服务的更大的规则集。
  • 出于迁移目的,规则是从另一个业务规则管理平台导出的。 在这种情况下,可能会将来自外部平台的规则一次导入到IBM ODM中,然后使用IBM ODM组件进行管理和维护。
  • 规则来自具有自己的自定义用户界面(可能像Microsoft Excel电子表格一样简单)的自定义规则创建和管理组件。 在这种情况下,仅将IBM ODM平台用于其规则执行功能,并且要求每次将规则部署到Rule Execution Server时,都将导入规则。

在所有这些示例中,通用过程是导入规则的外部表示以生成IBM ODM规则工件。 该导入操作依赖于IBM ODM API的一个子集,该子集允许在Rule Designer规则项目或Decision Center存储库中以编程方式创建规则工件,如下图所示。

本教程说明如何使用IBM ODM API以编程方式创建规则工件。 它提供了一个蓝图,可用于建模规则导入工作。

请注意以下几点:仅仅因为可以以编程方式创建规则工件,但这并不意味着您应该在所有情况下都使用此技术。 相反,应根据应用程序的设计进行适当的判断。 例如,尝试使用IBM ODM API将包含数千行的数据库中的查找表以编程方式转换为决策表。 但是这种转换是不良设计的一个例子。

本教程中的示例基于可以与IBM ODM一起安装的loanvalidation-rules示例规则项目。 请参阅设置自定义报告生成示例 。 演示的代码基于IBM ODM版本8.7.1。

本教程说明了如何使用IBM ODM API以编程方式创建规则工件(操作规则和决策表)。 您将从示例中学习如何在Rule Designer和Decision Center中创建规则工件,这使您可以灵活地选择最适合您的需求的方法。

可以使用API​​创建规则项目和其他规则项目工件,例如包和变量集。 但是,为了清楚和简洁起见,本教程假定所需的项目和包结构已经就绪。

快速浏览Eclipse Modeling Framework

IBM ODM中的Rule Designer和Decision Center组件都提供了一个API,用于创建和管理规则项目及其包含的规则项目工件。 他们每个人都使用一个利用Eclipse Modeling Framework(EMF)和Ecore元模型的规则模型。

尽管您不需要了解EMF和Ecore的详细信息即可通过IBM ODM API创建和操作规则工件,但是它有助于记住,有时通过元模型协议对规则工件实例进行操作。

EMF是用于指定,构造和管理技术中立模型的抽象语言和框架。 使用Ecore元模型定义模型。

以下实体是使用Ecore的关键:

  • EObject接口是EMF中所有建模对象的根,并提供对所有建模对象共有的行为和功能的支持。
  • EClass接口,用于对通过名称标识的类进行建模,并且可以包含许多功能,例如属性( EAttribute ),操作( EOperation ),引用( Ereference )。
  • EFactory接口,为工厂创建实例对象建模。

下图显示了Ecore元模型的关键类建模元素的组织:

对于任何给定的模型,所有部分(包括其类,属性,引用)都分组在Epackage类型的包中。

规则设计器的规则模型API

使用Rule Designer的规则模型API,可以访问和操纵规则模型元素,例如规则包,操作规则,技术规则和决策表,以及管理它们在Eclipse工作区中的文件持久性。

Rule Designer API由在ilog.rules.studio.model程序包及其子程序包中找到的一组类和接口定义。

除了数据模型外,API还通过规则工件(例如,搜索和查询)提供通知和服务。

要开始使用Rule Designer API的关键元素,请了解以下类和接口:

  • IlrStudioModelPlugin :此类是使用Rule Designer API时的主要入口点类。 它提供了以下一组静态方法来访问主要模型对象:

    • Eclipse工作区单例实例( getWorkspace
    • 规则模型单例实例( getRuleModel
    • 资源管理器单例实例( getResourceManager
  • IlrRuleModel :此接口由规则模型单例类实现,允许使用以下getRuleProject方法选择和检索要处理的规则项目:
    // Retrieve the target rule project where the rules will be created
    IlrRuleProject ruleProject = IlrStudioModelPlugin.getRuleModel().getRuleProject(projectName);
  • IlrResourceManager :此接口管理规则模型和Eclipse工作区之间的映射。 在此接口中,使用getElementFromResource方法将工作空间资源映射到规则模型元素,并使用saveElement方法将规则模型元素另存为工作空间资源:
    // Persist the action rule to the workspace
    IlrResourceManager resourceManager = IlrStudioModelPlugin.getResourceManager();
    resourceManager.saveElement(actionRule);

    下图基于IBM ODM产品文档,显示了如何映射规则模型的关键元素及其关联的Eclipse资源:

规则项目服务

在Rule Designer API之上构建的服务(例如IlrDTServiceIlrBRLService对于构建规则很有用。 它们提供了专用于规则设计器中工件管理的功能。 您可以通过将服务ID传递给IlrRuleProjectgetService方法来获得服务的IlrRuleProject

// Get handle to IlrDTService
IlrDTService dtService = (IlrDTService) ruleProject.getService(IlrDTService.SERVICE_ID);

规则工厂

工厂类(例如IlrBrlFactoryIlrDTFactoryIlrIrlFactory )为规则模型的每个非抽象类提供一个create方法。 规则工厂类实现单例模式。 使用名为eINSTANCE的静态实例获取工厂的句柄,如以下示例所示:

/ Create a factory for Action Rules
IlrBrlFactory factory = IlrBrlFactory.eINSTANCE;// Create a factory for decision table or decision tree
IlrDtFactory factory = IlrDtFactory.eINSTANCE;// Create a factory for Technical Rules
IlrIrlFactory factory = IlrIrlFactory.eINSTANCE;

示例:使用Rule Designer API创建操作规则

大多数IBM ODM决策服务实现将操作规则和决策表混合使用,因此本教程显示了如何使用Rule Designer API进行创建的示例。

在规则设计器中,使用IlrBrlFactory接口创建IBM ODM操作规则的IlrBrlFactory ,如以下示例所示:

// Create a factory for Action Rules
IlrBrlFactory factory = IlrBrlFactory.eINSTANCE;// Create an instance of action rule using the factory
IlrActionRule actionRule = factory.createActionRule();

操作规则实例可用后,您将填充规则模型的不同属性,例如规则名称,规则项目和它所属的规则包。

使用definition属性指定操作规则的主体,其字符串形式为if <conditions> then <actions> ,类似于用于定义操作规则的业务操作语言(BAL)内容的表达式。 Rule Designer规则编辑器,如以下示例所示:

// Set the attributes of the model
actionRule.setName(ruleName);
actionRule.setLocale(Locale.US);
actionRule.setDefinition(ruleDefinition);

以下示例显示了在validation.borrower规则包下,在loanvalidation-rules项目中创建和保留checkName操作规则的不同步骤的组合。

IlrRuleModel model = IlrStudioModelPlugin.getRuleModel();
IlrRuleProject ruleProject = model.getRuleProject("loanvalidation-rules");
IlrRulePackage rulePackage = ruleProject.getRulePackage("validation.borrower");// Create the rule instance
IlrActionRule actionRule = IlrBrlFactory.eINSTANCE.createActionRule();// Set the rule properties.
actionRule.setName("checkName");
actionRule.setLocale(Locale.US);
actionRule.setPriority(Integer.toString(IlrPriorityValues.maximum));// Set the rule definition.
String body = "if \n" +"  the last name of 'the borrower' is empty \n" +"then \n" +"  in 'the loan report' , reject the data with the message \"Name is empty\";";
actionRule.setDefinition(body);// Add the rule to the rule package.
rulePackage.getFolderElements().add(actionRule);// Persist the rule in the workspace.
IlrResourceManager resourceManager = IlrStudioModelPlugin.getResourceManager();
resourceManager.saveElement(actionRule);

规则设计器的以下屏幕截图显示了运行checkName操作规则示例代码的结果:

示例:使用Rule Designer API创建决策表

与操作规则类似,您可以使用Rule Designer API的IlrDtFactory接口创建决策表的实例,然后为基本工件属性(例如名称和语言环境)设置值,如以下示例所示:

// Create the decision table object using IlrDtFactory.
// Use the createDecisionTree method to create a decision tree.
IlrDecisionTable dt = IlrDtFactory.eINSTANCE.createDecisionTable(); // Set the attributes of the model.
dt.setName(ruleName);
dt.setLocale(Locale.US);

到目前为止,还不足为奇,构造决策表与构造动作规则非常相似。 决策表的主要区别和复杂性是使用IBM ODM决策表模型构建表定义。

请注意,适用于决策表工件的大多数Rule Designer API操作也可以用于操纵决策树。 但是,从8.8.1版开始,IBM ODM中不推荐使用决策树,因此本教程不再侧重于决策树。

决策表模型:IlrDTModel

要创建决策表实例的定义,请使用IlrDTController的实例。 该控制器是通过IlrDTService规则项目服务获得的。 它控制由IlrDTModel接口实例表示的决策表模型。

IlrDTModel实例定义决策表模型,并提供API以创建决策表的结构并编辑其内容。 下面的示例演示如何获取与现有决策表实例关联的IlrDTModel实例。

IlrDTService dtService =(IlrDTService) ruleProject.getService(IlrDTService.SERVICE_ID);
IlrDTController dtController = IlrDTHelper.createDTController(dt, dtService);
IlrDTModel dtModel = dtController.getDTModel();

IlrDTModel接口在规则设计器和决策中心之间是公用的,用于表示决策表。 它将决策表的内容组织为分区项目树。 该树中的每个分支代表决策表的一行,例如一组条件,而叶节点代表一组条件满足条件时要运行的动作。

现在,更详细地检查决策表的树结构。 IlrDTModel表表示IlrDTModel涉及以下元素:

  • 分区项目 ( IlrDTPartitionItem ),代表表的条件列中的单元格。 分区项目分组在分区 ( IlrDTPartition )中。 所有分区都有一个父分区项,它代表前面条件列中的单元格。
  • 操作按操作集 ( IlrDTActionSet )进行分组, 操作集 IlrDTActionSet与操作列数一样多的操作 ( IlrDTAction )。 所有操作集都有一个父分区项,它代表最后一个条件列中的单元格。
  • 分区定义 ( IlrDTPartitionDefinition )捕获决策表中条件列的基本表达式。 表达式(BAL语句)保存在表达式定义对象( IlrDTExpressionDefinition )中。 表达式定义是通过从决策表模型获得的表达式管理器 ( IlrDTExpressionManager )创建的。
  • 同样, 操作定义 ( IlrDTActionDefinitions )捕获操作列的基本表达式。 动作的表达式定义也通过表达式管理器创建。

下图显示了构成IlrDTModel决策表模型的不同元素的组织,以及对决策表行和列的直观概念的映射。

考虑loanvalidation-rules样本规则项目中等级决策表示例的模型元素组织。 以下屏幕截图显示了成绩决定表的结构和内容:

下图显示了用于对该决策表进行建模的元素的相应树结构:

使用决策表模型创建决策表

本节介绍使用IlrDTController和关联的类为表创建模型的步骤。

当为决策表创建IlrDTController ,将使用根分区,分区定义,单个分区项以及带有空操作的操作集创建相应的初始模型。 只需通过为该列创建一个表达式定义,将其与现有分区定义相关联,并为该列命名,即可定义第一个条件列,如以下示例所示:

// Create the base expression for the “Yearly repayment” condition column.
String repaymentDefinitionText = "the yearly repayment of 'the loan' is at least <min> and less than <max>";
IlrDTExpressionDefinition repaymentExpression = dtModel.getExpressionManager().newExpressionDefinition(repaymentDefinitionText);// The first partition and partition definition already exist, so they are just
// retrieved from the model, not created.
IlrDTPartitionDefinition repaymentPartitionDefinition = dtModel.getPartitionDefinition(0);// Associate the expression definition with the partition definition
repaymentPartitionDefinition.setExpression(repaymentExpression);// Set a title for the column (set on the partition definition)
IlrDTPropertyHelper.setDefinitionTitle(repaymentPartitionDefinition, "Yearly repayment");

模型中最初不存在第一个条件列之后的条件列。 创建他们使用newPartitionDefinition所述的方法IlrDTModel ,如图以下示例:

// Create the base expression for the “Corporate score” condition column.
String scoreDefinitionText = "the corporate score in 'the loan report' is at least <min> and less than <max>";
IlrDTExpressionDefinition scoreExpression = dtModel.getExpressionManager().newExpressionDefinition(scoreDefinitionText);// Create a new partition definition associated with the expression definition
IlrDTPartitionDefinition scorePartitionDefinition =       dtModel.newPartitionDefinition(scoreExpression);// Set a column title on the partition definition
IlrDTPropertyHelper.setDefinitionTitle(scorePartitionDefinition, "Corporate score");// Add the new partition definition to the model
dtModel.addPartitionDefinition(1, scorePartitionDefinition);

决策表中的操作列表示为IlrDTActionDefinition 。 与条件列(分区定义)一样,操作列采用其定义的表达式,并以相同的方式分配标题。 使用addActionDefinition方法将操作列添加到IlrDTModel ,如以下示例所示:

// Create the base expression for the “Grade” action column.
String gradeDefinitionText = "set the grade of 'the loan report' to a <string>";
IlrDTExpressionDefinition gradeExpression = dtModel.getExpressionManager().newExpressionDefinition(gradeDefinitionText);// Create a new action definition associated with the expression definition
IlrDTActionDefinition gradeActionDefinition =  dtModel.newActionDefinition(gradeExpression);// Set a column title on the action definition
IlrDTPropertyHelper.setDefinitionTitle(gradeActionDefinition, "Grade");// Add the new action definition to the model
dtModel.addActionDefinition(0, gradeActionDefinition);

定义条件和操作列之后,通过分区项为决策表创建行。 第一列的分区项目存储在根分区中。

每个分区项目都有一个与该项目的列表达式定义关联的表达式实例( IlrDTExpressionInstance ),并且该表达式实例包含该行的参数值。 创建使用表达式实例newExpressionInstance从方法IlrDTExpressionManager ,如图以下示例:

IlrDTPartition repaymentPartition = dtModel.getRoot();// The root node of a newly created model contains a single partition item
IlrDTPartitionItem itemZeroTo10K = repaymentPartition.getPartitionItem(0);// Prepare the parameter values for the partition item
List<String> parameters = Arrays.asList(new String[]{"0", "10000"});// The values along with the definition are passed to the Expression
// Manager to generate the Expression Instance for this Partition Item
IlrDTExpressionInstance repaymentExpressionInstance = dtModel.getExpressionManager().newExpressionInstance(repaymentExpression, parameters);
itemZeroTo10K.setExpression(repaymentExpressionInstance);

在某些情况下,表达式实例应使用与分区定义所定义的语句不同的语句。 例如,在“成绩”表中,分区定义中的以下语句使用两个参数值: the yearly repayment of 'the loan' is at least <min> and less than <max>

但是,对于">= 60,000"单元格,请改为使用以下语句: the yearly repayment of 'the loan' is at least <a number>

对于这些情况,当给定分区项目使用不同的运算符和不同数量的参数值时,请使用newOverridenExpressionInstance方法而不是newExpressionInstance创建表达式实例:

// Prepare the parameter values for the partition itemList<String> parameters = Arrays.asList(new String[]{"60000"});// The values along with the definition are passed to the Expression
// Manager to generate the Expression Instance for this Partition Item
IlrDTExpressionInstance repaymentExpressionInstance = dtModel.getExpressionManager().newOverriddenExpressionInstance("<a number> is at least <a number>", parameters, repaymentExpression);

创建其它分区项目,使用addPartitionItem的方法IlrDTModel ,如图以下示例:

// Create a second partition item, after the itemZeroTo10K (i.e. position 1)
parameters = Arrays.asList(new String[]{"10000", "30000"});
repaymentExpressionInstance = dtModel.getExpressionManager().newExpressionInstance(repaymentExpression, parameters);dtModel.addPartitionItem(repaymentPartition, 1, repaymentExpressionInstance);

如前所述,决策表模型是树结构,因此第一列或节点只有一个分区,称为根分区。 但是,对于每个后续列,您必须为上一列中的每个分区项目创建一个分区。 您添加分区到每个项目从使用以前的列或节点获取分区的addPartition的方法IlrDTModel

例如,要填充“ Corporate score列,您需要向“ Yearly repayment列的每个分区项目添加一个新分区。 以下代码段显示了一个示例,该示例将“ Corporate score列的分区添加到“ Yearly repayment列的第一个分区项目:

// Add a partition for Corporate score as a child of the first
// partition item of the root partition
IlrDTPartition firstScorePartition =dtModel.addPartition(itemZeroTo10K, scorePartitionDefinition, null);parameters = Arrays.asList(new String[]{"900"});
IlrDTExpressionInstance scoreExpressionInstance = dtModel.getExpressionManager().newOverriddenExpressionInstance("<a number> is at least <a number>", parameters, scoreExpression);dtModel.addPartitionItem(firstScorePartition, 0, scoreExpressionInstance);

最后,要定义操作,您可以在第一个操作列之前检索条件列的分区项目,并将操作分配给每个分区项目。 action列中的每个单元格IlrDTActionSet的实例IlrDTActionSet

getStatement方法返回树中的下一个分支,这是该分区项之后的下一个条件(如果存在)。 如果没有其他分区,它将返回操作集。 用与决策表中每个操作列对应的操作( IlrDTAction )填充操作集,如以下示例所示:

parameters = Arrays.asList(new String[]{"\"A\""});
IlrDTExpressionInstance gradeExpressionInstance = dtModel.getExpressionManager().newExpressionInstance(gradeExpression, parameters);IlrDTActionSet actionSet =(IlrDTActionSet) firstScorePartition.getPartitionItem(0).getStatement();
actionSet.addAction(0, gradeActionDefinition, gradeExpressionInstance);

填充决策表模型中的所有列之后,使用与操作规则相同的方式,使用IlrResourceManager实例将决策表保留在工作空间中:

// Persist the decision table in the workspace
IlrResourceManager resourceManager = IlrStudioModelPlugin.getResourceManager();
resourceManager.saveElement(dt);

决策中心的规则模型API

IBM ODM Decision Center应用程序是规则管理服务器和集成到Java EE应用程序服务器中的存储库。 您可以使用它来编写,管理,验证和部署业务规则。 Decision Center API允许您使用注册用户的凭据连接到Decision Center实例,管理项目和基准,创建包和规则,搜索存储库以及锁定,解锁和提交项目元素。

要通过Decision Center API创建规则工件,请熟悉以下三个关键接口:

  • IlrSession ,代表与Decision Center实例的连接,
  • IlrSessionHelper ,提供了一组帮助程序方法来创建和操作规则工件,
  • IlrBrmPackage ,它定义构成规则模型的所有部分的集合。

决策中心会议

开始与Decision Center进行任何交互之前,您需要通过创建IlrSession实例来建立与它的远程会话。 您使用IlrSessionFactory实例连接到决策中心并获取IlrSession实例的句柄。 IlrSession对象是有状态的,并与将凭据提供给connect方法的用户相关联,如以下示例所示:

String serverUrl = "http://localhost:9080/teamserver";
String datasource = "jdbc/ilogDataSource";
String login = "rtsAdmin";
String password = "rtsAdmin";// IlrRemoteSessionFactory is an implementation of IlrSessionFactory
// that can be used to connect to Decision Center through a client.
IlrSessionFactory factory = new IlrRemoteSessionFactory();
factory.connect(login, password, serverUrl, datasource);// Use the IlrSessionFactory instance to connect to Decision Center
// and get handle to IlrSession instance
IlrSession session = factory.getSession();

决策中心会话帮助程序方法

您可以使用IlrSession实例创建规则工件。 但是,帮助程序类IlrSessionHelper提供了一组静态方法,这些方法使创建和操作规则项目工件(例如规则包,操作规则,决策表和变量集)更加容易。

会话帮助程序对于从决策中心存储库访问项目和项目基线也很有用。 特别是,在成功创建与决策中心的连接后,下一步通常是设置整个会话中要处理的项目和基准,如以下代码所示:

// Retrieve the rule project by name
IlrRuleProject ruleProject =(IlrRuleProject) IlrSessionHelper.getProjectNamed(session, "loanvalidation-rules");// Set the sessions’s working baseline to the current baseline
IlrBaseline currentBaseline =IlrSessionHelper.getCurrentBaseline(session, ruleProject);
session.setWorkingBaseline(currentBaseline);

规则模型包

IlrBrmPackage接口是用于Decision Center业务规则模型的EMF包。 它包含元对象的访问器,以表示支持业务规则工件定义的每个类,功能,枚举和数据类型。 您经常使用此包来检索以下信息,例如:

  • 您要创建的规则工件的EMF EClass 。 例如, IlrBrmPackagegetActionRule方法返回与操作规则关联的EClass实例。
  • 您要获取或设置的规则工件类的EMF EAttribute 。 例如, getRule_Priority的方法IlrBrmPackage返回EAttribute用的规则的优先级属性相关联的实例。

示例:使用决策中心API创建操作规则

大多数IBM ODM决策服务实现都将操作规则和决策表混合使用,因此本教程显示了如何同时使用Decision Center API和Decision Center API进行创建的示例。

您可以创建一个规则工件,并使用会话帮助程序的createRule方法将其提交到工作基线。 您可以通过提供规则工件的EClass指定规则工件的类型,该EClassIlrBrmPackage获得。

以下示例显示如何使用getActionRule方法从BRM包中选择操作规则EClass来创建操作规则。 如果要创建技术规则,请使用getTechnicalRule方法在包中查找和使用Eclass技术规则:

// Get handle to the package for the Decision Center rule model
IlrBrmPackage model = session.getBrmPackage();// Create an action rule instance
IlrActionRule actionRule = (IlrActionRule)IlrSessionHelper.createRule(session, model.getActionRule(), rulePackage, ruleName, ruleDefinition);

请注意,helper类还提供了专用的createActionRule方法,您可以使用该方法直接创建操作规则。

要为规则工件设置结构特征( EAttributeEReference )的值,请使用IlrElementDetails接口的setRawValue方法。

如果目标功能是基本规则模型的一部分,则可以从BRM包中获取功能。 例如,以下代码段显示了如何设置操作规则的优先级功能的值:

IlrBrmPackage model = session.getBrmPackage();
String priorityValue = Integer.toString(IlrPriorityValues.maximum);
actionRule.setRawValue(model.getRule_Priority(), priorityValue);

如果目标功能是规则模型扩展(自定义属性)的一部分,则可以通过IlrModelInfo实例获取功能,该实例包含有关整个决策中心模型(尤其是规则模型扩展)的信息。

下面的示例演示如何设置作为规则模型扩展的一部分的属性的值:

IlrModelInfo modelInfo = session.getModelInfo();
EAttribute e = (EAttribute) modelInfo.getElementFromFQN(propertyName);
actionRule.setRawValue(e, propertyValue);

规则属性的标准名称通常以brm.BusinessRule 。 例如,生效日期属性的完全限定名称为brm.BusinessRule.effectiveDate

示例:使用决策中心API创建决策表

使用Decision Center API创建决策表的过程类似于创建操作规则:使用createRule方法,并从BRM包中获取适当的EClass (使用getDecisionTablegetDecisionTree方法),如以下示例所示。 如果未提供定义( null值),则生成默认的空表或树。

// Get handle to the package for the Decision Center rule model
IlrBrmPackage model = session.getBrmPackage();// Create a decision table instance
IlrDecisionTable dTable = (IlrDecisionTable) IlrSessionHelper.createRule(session, model.getDecisionTable(), rulePackage, ruleName, null);

创建表之后,使用IlrDTModelIlrDTController API以与对Rule Designer API相同的方式填充表。 (如前所述, IlrDTModel在Rule Designer和Decision Center模型之间是通用的。)获取控制器和相关模型,如以下示例所示:

IlrDTController dtController = IlrSessionHelper.getDTController(session, dTable, Locale.US);
IlrDTModel dtModel = dtController.getDTModel();

请注意,使用会话帮助器生成的默认决策表包含空行,条件列和操作列。 (类似地,默认决策树包含空节点。)在填充决策表模型之前,需要删除这些列和行。

决策表模型的定义完成后,使用会话帮助器的setDefinition方法将其分配给决策表:

String dtBody = IlrSessionHelper.dtControllerToStorableString(session, dtController);
IlrSessionHelper.setDefinition(session, dTable, dtBody);

最后,使用IlrSession类的commit方法将决策表提交到Decision Center存储库:

session.commit(dTable);

导入外部规则工件

因为本教程的重点是使用IBM ODM API,所以这些示例有意使导入规则的源非常简单。 如果要使用任意语法表示要导入的源规则,请首先使用解析器将它们转换为中间模型,然后从以下位置生成IBM ODM规则工件(使用本教程中描述的Rule Designer API或Decision Center API)。中间模型。 中间模型往往因项目而异。 因此,这些示例避免使用中间模型。

要将以任意语法表示的一组源规则转换为中间模型,可以使用ANTLR框架构建解析器。 ANTLR是强大的解析器生成器,用于读取,处理,运行或翻译结构化文本。 该框架允许您基于语法为解析的实体生成解析器。 从语法上,ANTLR生成Java Lexer和Parser类,以及一个侦听器类,用于在使用每个语法规则时侦听实体的遍历。

#运算符标记规则(例如#DecisionTable )。 在侦听器类中生成两种方法:一种用于输入语法规则,另一种用于退出语法规则:

public void enterDecisionTable(SourceRulesParser.DecisionTableContext ctx)
public void exitDecisionTable(SourceRulesParser.DecisionTableContext ctx)

要构建表示要解析的工件的抽象语法树的中间模型的实例,请实现基本侦听器类的子类。 这样,您可以使用ANTLR框架将使用任意语法定义的规则转换为中间模型。

最后,使用本教程中描述的API从中间模型生成IBM ODM规则工件。

结论

本教程简要描述了基于Eclipse Modeling Framework的IBM ODM规则的元模型。 它涵盖了用于Rule Designer和Decision Center的规则模型API,并说明了如何使用这些API以编程方式生成IBM ODM规则工件。 本教程还提出了一种通过中间模型将具有任意语法的规则工件作为规则工件导入IBM ODM的方法。 它引入了ANTLR作为用于生成中间模型的框架。

您可以从GitHub的vmayenkar / ruleimporterworkspace下载本教程示例中使用的示例代码,然后自己尝试一下。 如果您的组织有用于规则工件生成的用例,则可以在IBM ODM产品文档的进一步帮助下,使用在本教程中获得的知识,以编程方式为应用程序生成规则工件。

致谢

作者要感谢Matt Voss和Uzma Siddiqui对本教程的认真审阅和有见地的建议。


翻译自: https://www.ibm.com/developerworks/library/mw-1608-mayenkar-trs/1608-mayenkar.html

ibm的odm使用

ibm的odm使用_使用IBM ODM API生成规则工件相关推荐

  1. ibm cloud怎么使用_使用IBM Cloud设置安全的混合云环境

    ibm cloud怎么使用 关于本系列 这个由3部分组成的系列文章"使用带有WebSphere Liberty的SAML 2.0进行跨域单点登录"介绍了一种在混合云环境中使用IBM ...

  2. ibm mq安装配置_在IBM Integration Bus v10和IBM MQ v8之间配置MQ连接

    ibm mq安装配置 在IBM Integration Bus v10之前,Integration节点依靠队列管理器来连接到IBM MQ. 如果Integration节点必须处理发送到队列管理器的消息 ...

  3. ibm服务器内存型号_【IBM联想 46W0821 46W0823 16GB DDR4-2666 8GB, 服务器内存】价格_厂家 - 中国供应商...

    适用于    x3650M4,x3550M4,X3500M4 (E5-2600V3机器)等服务器 46W07844GB   TruDDR4 Memory (1Rx8, 1.2V) PC4-17000 ...

  4. mysql在ibm上安装教程_在ibm服务器上安装配置MySQL集群的方法

    在ibm服务器上安装配置MySQL集群的方法 2014-07-13 16:45来源:中国存储网 导读:本文只是介绍安装和配置,关于一些名词和原理,请参考MySQL手册.一.环境:IBM x3560Vm ...

  5. arcgis fishnet 单位_【转载】ArcGIS生成规则网格(Fishnet)

    在利用ArcGIS处理数据时,有时需要对整个工作区域进行规则网格划分,这个在ArcGIS中是一件非常简单的事情,现在就将利用ArcGIS生成规则网格的步骤详细的介绍一下. 首先我有一个工作的范围,比如 ...

  6. arcgis fishnet 单位_【转】ArcGIS生成规则网格(Fishnet)

    在利用ArcGIS处理数据时,有时需要对整个工作区域进行规则网格划分,这个在ArcGIS中是一件非常简单的事情,现在就将利用ArcGIS生成规则网格的步骤详细的介绍一下. 首先我有一个工作的范围,比如 ...

  7. ibm语音识别_为什么IBM决定停止所有面部识别开发

    ibm语音识别 In a letter to congress sent on June 8th, IBM's CEO Arvind Krishna made a bold statement reg ...

  8. ibm aix 抓包命令_在IBM AIX上模拟丢弃的TCP / IP数据包

    本文介绍: AIX内核扩展,允许来往于指定主机的指定百分比的TCP / IP数据包被随机丢弃,以模拟不利的网络状况. 加载,激活和卸载内核扩展的实用程序. C和Java™实用程序,用于监视到达目标主机 ...

  9. ibm服务器频繁自动重启,[求救]IBM X3650 服务器安装2003 后不断重启

    将RAID卡驱动整合到Windows 2003 Server安装盘的总结 准备工作: 1. 2003server 系统安装盘 2. RAID卡驱动(本次使用IBM RAID 8K卡,用于IBM X36 ...

  10. ibm服务器和微软,微软与IBM不得不说的事情

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 在Windows 3.x 开 始 为 世 人 接 受 之 初, 个 人 电 脑 的 操 作 系 统 中 唯 一 可 以 与Windows 操 作 系 统 ...

最新文章

  1. 如何确定python对应电脑版本_查看Anaconda版本、Anaconda和python版本对应关系和快速下载...
  2. linux 运行lua脚本语言,你知道在linux下搭建lua脚本语言的编程环境?
  3. 编写高质量代码改善C#程序的157个建议——建议127:用形容词组给接口命名
  4. Visual C++下对匿名管道的编程实现
  5. Efficient Sparse Coding Algorithm
  6. wxpython 安装教程
  7. vue --- 2.0数据的响应式的一种实现
  8. matlab做比例积分微分控制,收放卷卷径计算+闭环摆杆控制参数自适应PID控制算法(变比例变积分变微分)介绍...
  9. 使用Selenium WebDriver测试自动化的22条实用技巧
  10. LeetCode 1293. 网格中的最短路径(DP/BFS)
  11. kubernetes pv-controller 解析
  12. 理工科同学转行经管咨询金融,一定要慎重
  13. git bash 出现vim的时候怎么退出
  14. PHP 编写接口并在header中进行简单的校验
  15. C/C++[codeup 2046]8皇后
  16. 四菱天线怎么加强_关于自制电视四菱天线材料好坏和买连接线和转接头问题
  17. html里怎么旋转视频文件,拍摄的视频如何旋转 三种方法教你旋转视频
  18. Javascript中Math常用操作,向上取整、向下取整、四舍五入
  19. 趣味点名软件_网传川大教授用刷脸软件点名 无人逃课
  20. 计算机打印机密码怎么设置,电脑设置了密码打印机打不了怎么办

热门文章

  1. 在自己订阅的GOOGLE快讯中,看到自己的文章
  2. Traceback (most recent call last):IndexError: list assignment index out of range
  3. 康托尔点集matlab实数,康托尔(Cantor)是如何证明实数集是不可数的
  4. 身份证读取设备开发解决方案:1、Windows下开发Qt程序demo读取身份证信息
  5. HDU 5698 瞬间移动 (2016百度之星 - 初赛(Astar Round2B) 1003)
  6. android内核编译 me525,今天给ME525+刷了Android 4.0系统,很流畅!
  7. 内网端口映射软件之80端口映射全端口映射
  8. Appium_3_环境配置_Appium-desktop配置
  9. 英语四六级选择题自动判卷算法
  10. 配电网PMU优化配置与状态估计(Matlab代码实现)