由IBM Cloud托管并由Operational Decision Manager支持的业务规则服务使您可以在RuleApp中与应用程序代码分开定义,部署和维护业务规则和策略,从而提供更大的应用程序敏捷性。 您可以在RuleApp中更新业务逻辑并重新部署它,而无需对预订应用程序进行任何更改,花费更少的时间重新编码和测试业务策略更改,例如定价计算,资格确定或信贷批准。

为了演示将业务逻辑从在云中运行的调用应用程序的生命周期中分离出来的好处,我们将引导您逐步完成构建利用业务规则服务的示例应用程序的步骤。 然后,您将能够使用更复杂的规则扩展此应用程序,或者非常轻松地构建自己的应用程序。

“该示例预订应用程序展示了将Business Rules服务与Cloud中的Node.js应用程序集成的可能性,同时还利用了IBM Cloud平台的易于部署和可扩展性。 ”

我们的示例应用程序是针对正在构建其预订系统并希望为其客户提供搜索和预订房间的应用程序的一家连锁酒店的。 酒店的所有者需要定义各种业务策略来计算预订价格,例如提前预订折扣或最后一刻的报价。 例如,他们可能需要修改这些政策以适应不同的旅行季节和特殊事件。 他们可能还希望将来在特惠或会员计划上添加更多政策。

为了完成所有这些工作,我们将使用Node.js构建一个应用程序,并使用业务规则服务轻松管理和执行定义这些策略的业务规则。 同时,我们还利用了IBM Cloud平台的易于部署和可扩展性。

运行应用程序 获取代码

您的应用程序需要什么

  1. 熟悉Node.js。
  2. 一些Node.js模块: Express framework , EJS , async 。
  3. HTML和Bootstrap 3 CSS的基础知识。
  4. IBM Operational Decision Manager (ODM)的基本知识(推荐)。
  5. 适用于Java EE开发人员的Eclipse Juno 4.2.2 IDE。 为业务规则服务安装规则设计器插件 。
  6. Cloud Foundry cf命令行界面V6。 从GitHub下载并启动安装程序。

免费试用IBM Cloud

使用IBM Cloud Lite快速轻松地构建您的下一个应用程序。 您的免费帐户永不过期,并且您将获得256 MB的Cloud Foundry运行时内存以及2 GB的Kubernetes Clusters。 获取所有详细信息,并了解如何开始。 如果您是IBM Cloud的新手,请在developerWorks上查看IBM Cloud Essentials课程 。

构建酒店预订应用

步骤1.在IBM Cloud中创建业务规则服务实例

  1. 在IBM Cloud目录中,单击“ 业务规则”服务。 例如,在“ 添加服务”部分中,将服务命名为BlueBooking-BusinessRules,然后选择[Leave unbound] 。 (您将在下一步中将该服务绑定到您的应用程序。)单击CREATE

  2. 在BlueBooking-BusinessRules服务详细信息页面中,请注意以下信息:
    • 控制台URL和凭据(用于规则集部署)
    • REST Execution API端点URL和凭据(用于规则集执行)

步骤2.使用Rule Designer定义您的应用程序业务逻辑

在此步骤中,您将学习用于在Rule Designer中编写业务规则的核心概念和活动。 但是,本文的重点不是提供有关此内容的详细说明。 有关更多信息,请参见下文。

在继续此步骤之前:

  • 确保已在Eclipse Juno 4.2.2 IDE中为业务规则服务安装了规则设计器插件 。
  • 从Git存储库中检查BlueBookingXomBlueBookingRules项目:
    git clone https://git.ng.bluemix.net/rules_service_sample/BlueBookingV1.git
  • 将它们导入到Eclipse工作区中,然后切换到Rule透视图以打开Rule Explorer

1.定义执行对象模型(XOM)

执行对象模型(XOM)是针对其执行规则的运行时模型。 IBM Operational Decision Manager(ODM)支持从Java™或XML源构建的执行对象模型。 出于本文的目的,您将使用在BlueBookingXom Java项目中定义的基于Java的简单XOM,它包含两个类:

  1. Hotel类代表具有以下属性的酒店:

    • 饭店名称
    • 酒店位置(城市)
    • 房间的基本价格
  2. Result类使用以下信息定义客户端请求的结果:
    • 旅馆
    • 登记日期
    • 离开日期
    • 通过业务规则执行计算的预订率

2.指定您的业务对象模型

业务对象模型(BOM)是在其上创建规则的模型。 通常,您可以从现有XOM源创建BOM表条目。 在我们的例子中, BlueBookingRules Rule项目已经包含从BlueBookingXom Java XOM创建的BOM表条目。

3.编写您的业务逻辑

现在,您可以编写应用程序业务逻辑。 样品BlueBookingRules规则项目包含advanceReduction决策表和bluebooking规则流。

advanceReduction决策表根据提前预订的时间计算折扣。

bluebooking规则流定义了执行两个连续的任务- initReservationpricing

  • initReservation初始化将在执行规则后返回的Result实例。
  • pricing会触发要应用的折扣的计算。

4.定义业务逻辑和客户应用程序之间的契约

规则集参数指定您的业务逻辑和客户端应用程序之间的协定。 在这种情况下,您具有:

  • 三个输入参数:酒店,入住日期,退房日期
  • 执行业务逻辑后传递到客户端应用程序的一个输出参数: Result类的实例

步骤3.将业务逻辑部署到IBM Cloud中的业务规则服务

在继续此步骤之前,您可能需要熟悉业务规则应用程序的部署体系结构:

在Rule Designer中创建RuleApp项目

您将通过RuleApp项目部署业务规则:

  1. 在“ 规则资源管理器”视图中,选择“ BlueBookingRules规则”项目。
  2. 单击“ 规则项目图”视图的“ 部署和集成”部分中的 创建RuleApp项目”链接。
  3. 在“ 新建RuleApp项目”向导中,将项目名称设置为BlueBookingRuleApp ,然后单击“ 完成” 。 将在您的工作空间中创建一个包含BlueBookingRules Rule项目(作为规则集)的新RuleApp项目。

RuleApp部署到IBM Cloud中的业务规则服务

现在,您可以将RuleApp部署到Rules服务:

  1. 在“ 规则资源管理器”视图中,选择BlueBookingRuleApp项目。
  2. 右键单击RuleApp项目,然后选择RuleApp>部署
  3. 在“ 部署RuleApp存档”向导中,单击“ 下一步”以保留RuleApp和规则集部署的默认版本控制策略。 如果使用的是JDK 7,则会打开一个警告对话框。单击“ 确定”将其关闭。
  4. 在下一个向导页面上,选择“ 创建临时Rule Execution Server配置” 。 填写管理控制台的URL,登录名和密码以及您的业务规则服务实例的相应信息。 点击完成

    如果一切顺利, 控制台将显示一条成功消息:

步骤4.在IBM Cloud中构建一个Node.js Express应用程序

1.创建一个Node.js入门应用程序并将其绑定到业务规则服务

  1. 在IBM Cloud目录中,单击用于Node.js运行时的SDK 。 在“ 以运行时开始:”部分中,为您的应用程序命名和一个主机URL,这将是它在Internet上的访问点(例如,mybookingapp.mybluemix.net)。 然后点击创建

  2. 选择应用程序,然后单击“ 绑定服务” 。 选择您在上一步中创建的业务规则服务实例,然后单击添加 。 现在,业务规则服务已绑定到您的应用程序。
  3. 现在,您可以下载IBM Cloud生成的样本启动程序应用程序并进行一些修改。 单击查看>指南 ,然后单击下载启动程序应用程序包以下载ZIP文件。 将其解压缩到您的文件系统。

2.添加和下载依赖项

首先,将必需的Node.js模块添加到依赖项中。 修改package.json文件中的应用程序名称,描述和依赖关系。

{"name": "mybookingapp","version": "0.0.1","description": "A simple hotel booking app using Rules Service in IBM Cloud","dependencies": {"express": "3.4.7","ejs": "0.8.5","async": "0.7.0"},"engines": {"node": "0.10.0"},"repository": {}
}

从应用程序的根目录运行npm install命令,将依赖项下载到node_modules目录。

3.制作页面搜索酒店

在该示例中,我们选择EJS作为模板引擎,因为它使用标准HTML语法。 但是您可以使用任何其他模板引擎,例如Jade,Hogan或Underscore。

  1. 修改'view engine'配置参数,使其成为您的应用程序的默认值:

    app.set('view engine', 'ejs');
  2. 在项目的views文件夹中创建一个index.ejs文件,并创建一个包含三个输入HTML表单:城市,入住日期和退房日期以搜索酒店。 您可能希望在Bootstrap的帮助下为页面提供更好的外观并使其对不同的屏幕尺寸做出响应,但是在本文中我们将不涉及HTML标记和CSS样式的详细信息。 或者,您可以从Git存储库中的BlueBookingServer项目复制并粘贴代码。
  3. index.ejs完成时,您只需将默认请求路由到该主页即可。
    // Main app page
    app.get('/', function(req, res){res.render('index');
    });

4.查找城市中的酒店

提交搜索表单后, GET请求将路由到/ hotels。 我们要从请求中提取参数,并找到请求的城市中可用酒店的列表。 请注意,日期以协调世界时(UTC)时区解析。

// Hotel search results
app.get('/hotels', function(req, res){// get the request parametersvar city = req.query.city;// the date string is in mm/dd/yyyy formatvar fromDateStr = req.query.from;var toDateStr = req.query.to;// parse the date string in UTC timezonevar fromDate = Date.UTC(fromDateStr.split('/')[2], fromDateStr.split('/')[0]-1, fromDateStr.split('/')[1]);var toDate = Date.UTC(toDateStr.split('/')[2], toDateStr.split('/')[0]-1, toDateStr.split('/')[1]);… //render the page
});

为简化起见,在此示例应用程序中,我们不会在数据库中查询酒店。 相反,我们加载数据文件(data / hotels.json)并返回所查询城市的酒店数组。

function findHotels(city) {var hotels = require(__dirname + '/data/hotels.json');return hotels[city];
}

5.调用业务规则服务以获取结果

当我们将业务规则服务绑定到我们的应用程序时,服务配置将添加到VCAP_SERVICES ,这是您的应用程序的只读环境变量。 您可以在仪表板中看到它。

with:
{"businessrules": [{"name": "BlueBooking-BusinessRules","label": "businessrules","plan": "standard","credentials": {"executionAdminUrl": "https://brsv2-XXXXXXXX.ng.bluemix.net/res","executionSoapUrl": "https://brsv2-XXXXXXXX.ng.bluemix.net/DecisionService/ws","executionAdminRestUrl": "https://brsv2-XXXXXXXX.ng.bluemix.net/res/apiauth","executionRestUrl": "https://brsv2-XXXXXXXX.ng.bluemix.net/DecisionService/rest","password": "password","user": "username"}}]
}
  1. 可以通过调用执行REST API来执行部署在业务规则服务中的规则集。 您需要解析VCAP_SERVICES变量,并在您的应用程序中使用它来获取REST执行端点。

    // Retrieve the Rules Service parameters
    if (process.env.VCAP_SERVICES) {var env = JSON.parse(process.env.VCAP_SERVICES);var rules = env['businessrules'][0].credentials;
    } else { // for local testingvar rules = {"executionRestUrl": "http://{your_execution_url}.mybluemix.net/DecisionService/rest","user": "{username}","password": "{password}"};
    }
  2. 然后,在Node.js应用程序中,您可以加载httpsurl模块,并使用它们对REST客户端进行编码。
    var https = require('https'), url = require('url');
  3. 创建一个使用以下参数的实用程序函数( invokeRulesService ):
    • rulesetPath —以/{ruleappName}/{ruleappVersion}/{rulesetName}/{rulesetVersion}形式的字符串。 业务规则服务支持RuleApp和规则集的版本控制。 如果您未指定版本,则将自动使用最新版本。
    • inputParam —包含规则集输入参数有效负载的JSON对象。
    • callback —响应的回调函数,因为HTTP请求是异步的。
  4. 该函数将向executionRestUrl+rulesetpath发出POST请求,其中Content-Type设置为application/json ,规则集输入参数位于请求正文中。 业务规则服务将执行规则集,并以JSON格式返回响应正文中的输出值。
    /** Invoke the Rules Service to calculate the booking rates*/
    function invokeRulesService(rulesetPath, inputParams, callback) {var restUrl = url.parse(rules.executionRestUrl);var dataString = JSON.stringify(inputParams);// encode 'user:password' in Base64 string for basic authentication of the execution APIvar encodedCredentials = new Buffer(rules.user+':'+rules.password).toString('base64');headers = {'Content-Type': 'application/json','Content-Length': dataString.length,'Authorization': 'Basic ' + encodedCredentials // basic authentication header};var options = {host: restUrl.host,path: restUrl.path + rulesetPath,method: 'POST',headers: headers};var req = https.request(options, function(resp) {resp.setEncoding('utf-8');var responseString = '';resp.on('data', function(data) {responseString += data;});resp.on('end', function() {console.log(responseString);if (resp.statusCode == 200)var responseObject = JSON.parse(responseString);callback(responseObject);});});req.on('error', function(e) {console.log(e.message);});req.write(dataString);req.end();
    }
  5. 最后,您可以为每个酒店调用带有实用程序功能的业务规则服务,以获取带有价格的结果。 确保规则集路径正确,并且输入参数名称是您在规则集中定义的名称。 由于对业务规则服务的调用是异步的,因此您可以使用异步模块来遍历酒店数组,并在所有调用完成后返回结果数组。 不要忘记导出此函数,以便您可以从app.js调用它。
    /** Invoke the Rules Service to calculate the rate for each of the hotels*/
    function getResults(city, fromDate, toDate, callback) {var results = new Array();var rulesetPath = '/BlueBookingRuleApp/BlueBookingRules/';var hotels = findHotels(city);async.each(hotels, function(hotel, callback) {var inputParams = {"hotel": hotel, "checkin": fromDate, "checkout": toDate};invokeRulesService(rulesetPath, inputParams, function(responseObj) {   results.push(responseObj['result']);callback();});    }, function(err) {if (err) {console.log(err);} else {callback(results);}});
    }
    // export public functions
    exports.getResults = getResults;

6.显示结果

回到app.js; 您现在可以使用业务规则服务返回的结果来呈现hotel.ejs页面。

service.getResults(city, fromDate, toDate, function(results){// render the page with datares.render('hotels', {"city": city, "from": req.query.from, "to": req.query.to, "results": results});});

步骤5.在IBM Cloud中推送并运行您的应用程序

现在,我们准备将Node.js应用程序推送到IBM Cloud。 您可以在项目文件夹中找到一个manifest.yml文件,该文件描述IBM Cloud中应用程序的名称和域,要创建多少实例,要分配多少内存等。

  1. 使用命令行cf login -a api.ng.bluemix.net登录到IBM Cloud。 出现提示时,输入您的用户名,密码,组织和空间。
  2. 运行cf push将应用程序部署到IBM Cloud。
  3. 应用程序运行时,请访问http://mybookingapp.mybluemix.net来测试您的应用程序。

结论

业务规则服务允许您分离业务逻辑和应用程序逻辑,以提高应用程序敏捷性。 您可以更新业务逻辑,然后重新部署RuleApp而无需对预订应用程序进行任何更改。 因此,当业务策略更改(例如定价计算,资格确定或信贷批准)时,您花费更少的时间进行编码和测试。 该示例预订应用程序展示了将Business Rules服务与Cloud中的Node.js应用程序集成的可能性,同时还利用了IBM Cloud平台的易于部署和可扩展性。

翻译自: https://www.ibm.com/developerworks/cloud/library/cl-hotel-rules-app/index.html

ibm cloud怎么使用_使用IBM Cloud中的业务规则服务构建酒店预订应用程序相关推荐

  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. 网络研讨室_网络研讨会:Java 9的第一印象–构建可伸缩企业应用程序的新方法...

    网络研讨室 在此网络研讨会上听我们对新Java版本的一些初步想法 关于Java 9的新版本,有很多宣传.将Java平台迁移到模块上,由Mark Reinhold领导的专门团队进行了近十年的艰苦工作. ...

  6. java token redis生成算法_如何访问 Redis 中的海量数据,服务才不会挂掉?

    来源:www.toutiao.com/i6697540366528152077 一.前言 有时候我们需要知道线上的Redis的使用情况,尤其需要知道一些前缀的key值,让我们怎么去查看呢?并且通常情况 ...

  7. insights 磁力_使用IBM ODM Decision Server Insights进行跨站点复制和恢复

    insights 磁力 随着Decision Server Insights的推出,IBM ODM产品家族得到了扩展,可以应对日益复杂的业务场景. 跟踪与特定业务实体相关的事件,并在先前事件的上下文中 ...

  8. insights 磁力_在IBM ODM Decision Server Insights中冷却热实体

    insights 磁力 在任何大容量事件处理系统中,例如IBM®Operational Decision Manager(ODM)中的Decision Server Insights,被数千个事件引用 ...

  9. ibm cloud怎么使用_使用VueJS,FeathersJS和GraphQL快速入门IBM Cloud

    ibm cloud怎么使用 by Thomas Reinecke 由托马斯·雷内克(Thomas Reinecke) 使用VueJS,FeathersJS和GraphQL快速入门IBM Cloud ( ...

  10. IBM Cloud Computing Practitioners 2019 (IBM云计算从业者2019)Exam答案

    Cloud Computing Practitioners 2019 IBM Cloud Computing Practitioners 2019 (IBM云计算从业者2019)Exam答案,加粗的为 ...

最新文章

  1. FaceL:一个靠谱的开源人脸标注训练识别程序
  2. Dubbo-go 发布 1.5 版,朝云原生迈出关键一步
  3. python画一颗心_利用python画一颗心的方法示例
  4. 智能停车O2O 独角兽初现:“ETCP停车”获5000万美金A轮融资
  5. unity 获取预制体_新手如何从零学习unity
  6. C#session共享+redis_Redis+Tomcat+Nginx集群实现Session共享,Tomcat Session共享
  7. 【Spring 工厂】注入详解 — Set注入(JDK内置类型,用户自定义类型)、构造注入(重载)
  8. Ubuntu 16.04 下安装运行 Suricata
  9. 用 Truffle 插件自动在Etherscan上验证合约代码
  10. charles证书下载
  11. 修复计算机u盘,u盘损坏怎么修复 u盘损坏修复方法
  12. java计算机毕业设计企业固定资产管理系统源码+系统+数据库+lw文档+mybatis+运行部署
  13. DateTime转为特定时区时间
  14. 2014年全国专业技术人员计算机应用能力考试大纲,2014年全国专业技术人员计算机应用能力考试 Excel2003...
  15. GarsiaWachs算法
  16. 经济金融投资计量与数据分析Python应用
  17. 通过ppk文件连接sftp示例
  18. 剑与远征服务器维护,剑与远征:海岛版本入坑须知注意点,少走弯路!
  19. 今天把一张人像照片制作成白色背景的一寸免冠照并进行打印排版!
  20. UE4动画系统:什么是动画通知(Anim Notify)

热门文章

  1. 国际高智商组织门萨的智商测试题-谋杀你的脑细胞
  2. Unity版本升级指南 从unity xx 到 unity 20xx
  3. 程序员真的是吃青春饭的行业吗?
  4. Android手机怎么找回微信好友,安卓手机微信好友删除怎么找回?这三种方法真香...
  5. [经典论文分享] Decision Transformer: Reinforcement Learning via Sequence Modeling
  6. Eclipse同屏显示两个代码编辑窗口
  7. android 常用机型尺寸_安卓手机屏幕多大合适?6.4英寸是“黄金尺寸”吗?
  8. 基于Vue的数据埋点统计
  9. 虚拟opc服务器软件,几个OPC服务器开发工具比较
  10. 视频加水印怎么加?比较简单的方法