Створення програми для бронювання номерів в готелях за допомогою служби Business Rules в Bluemix

  1. Що потрібно для створення додатка
  2. Створення програми для бронювання номерів в готелях
  3. 1. Визначення моделі Execution Object Model (XOM)
  4. 2. Опис моделі business object model
  5. 3. Створення бізнес-логіки
  6. Крок 3. Розгортання бізнес-логіки в службі Business Rules в Bluemix
  7. Створення проекту RuleApp в Rule Designer
  8. Розгортання RuleApp в службі Business Rules в Bluemix
  9. 2. Додавання і завантаження залежностей
  10. 3. Створення сторінки пошуку готелів
  11. 4. Пошук готелів в місті
  12. 5. Звернення за результатами до служби Business Rules
  13. 6. Відображення результатів
  14. висновок
  15. Ресурси для скачування

Оновлене 8 жовтня 2014 р

Служба Business Rules , Розміщена в хмарі IBM Bluemix ™ і заснована на Operational Decision Manager, дозволяє визначати, розгортати і обслуговувати бізнес-правила і політики в RuleApp окремо від коду програми, що забезпечує підвищену гнучкість програми. Бізнес-логіку в RuleApp можна відредагувати і заново розгорнути, не вносячи жодних змін в додаток, що веде до меншого витраті часу на написання і тестування нових бізнес-правил, таких як розрахунок ціни, визначення прийнятності або твердження кредиту.

Щоб продемонструвати переваги відділення бізнес-логіки від зухвалої програми, що працює в хмарі, ми проведемо вас по етапах створення прикладу додатки, яке використовує службу Business Rules. Згодом ви зможете доповнити його більш складними правилами або дуже легко побудувати своє власне додаток.

Наш приклад програми призначений для готельної мережі, яка створює систему бронювання та хоче надати своїм клієнтам додаток для пошуку та бронювання номерів. Власники готелів повинні визначити різні бізнес-правила для обчислення ціни бронювання, такі як знижки за раннє бронювання або гарячі пропозиції. Вони можуть захотіти змінювати ці правила, наприклад, для адаптації до різних туристичним сезонах і виняткових подій. Вони також можуть в майбутньому додавати нові правила для спеціальних пропозицій і програм лояльності.

Щоб забезпечити все це, ми створили додаток з використанням Node.js і службу бізнес-правил для спрощення управління та виконання визначають бізнес-правил. Ми також скористалися властивостями простоти розгортання і масштабованості платформи Bluemix.

запустити програму отримати код

Що потрібно для створення додатка

  1. Знайомство з Node.js .
  2. Деякі модулі Node.js: Express framework , EJS , async .
  3. Знайомство з HTML і Bootstrap 3 CSS.
  4. Знайомство з IBM Operational Decision Manager (ODM) (рекомендується).
  5. IDE Eclipse Juno 4.2.2 для Java EE-розробників. встановіть плагіни Rule Designer plugins для служби Business Rules .
  6. Інтерфейс командного рядка Cloud Foundry cf V6. Завантажте його з GitHub і запустіть програму установки.

Створення програми для бронювання номерів в готелях

Крок 1. Створення примірника служби бізнес-правил у Bluemix

  1. Виберіть з каталогу Bluemix службу Business Rules. У розділі Add Service додайте ім'я служби, наприклад, BlueBooking-BusinessRules, і виберіть [Leave unbound] [залишити Неприв'язані]. (Ми прив'яжемо цю службу до додатка на наступному кроці). Натисніть кнопку CREATE.
  2. Зверніть увагу на наступну інформацію на сторінці відомостей про службу BlueBooking-BusinessRules:
    • URL консолі і облікові дані (для розгортання набору правил);
    • URL кінцевої точки REST-API Execution і облікові дані (для виконання набору правил).

На цьому кроці ми пройдемо основні концепції і дії, необхідні для створення бізнес-правил у Rule Designer. Однак докладні роз'яснення виходять за рамки основної теми цієї статті.

Перед виконанням цього кроку:

1. Визначення моделі Execution Object Model (XOM)

Модель XOM - це модель середовища виконання, до якої застосовуються правила. IBM Operational Decision Manager (ODM) підтримує моделі XOM, побудовані з вихідного коду Java ™ або XML. В рамках цієї статті ми будемо працювати з простою моделлю XOM на основі Java, яка визначена в проекті Java BlueBookingXom і містить два класи.

  1. Клас Hotel відображає готель з наступними атрибутами:
    • назва,
    • місце розташування (місто),
    • базова ціна за номер.
  2. Клас Result визначає результат запиту клієнта з наступною інформацією:
    • готель,
    • дата заїзду,
    • дата від'їзду,
    • ціна, розрахована шляхом виконання бізнес-правил.

2. Опис моделі business object model

Business object model (BOM) - це модель з якої створюються правила. Зазвичай запис BOM створюється з існуючої вихідної записи XOM. У нашому випадку проект правила BlueBookingRules вже містить запис BOM, створену з Java-XOM BlueBookingXom.

3. Створення бізнес-логіки

Тепер можна приступити до створення бізнес-логіки додатка. Приклад проекту правила BlueBookingRules містить таблицю рішень advanceReduction і логіку виконання правил bluebooking.

Таблиця рішень advanceReduction обчислює знижки в залежності від того, як рано здійснюється бронювання.

Логіка виполнененія правил bluebooking визначає виконання як дві послідовні завдання -initReservation і pricing:

  • initReservation инициализирует екземпляр Result, який повертається після виконання правил;
  • pricing запускає обчислення застосовується знижки.

Параметри набору правил визначають зв'язок між бізнес-логікою і клієнтським додатком. В даному випадку у нас є:

  • три вхідних параметри: готель, дата заїзду, дата від'їзду;
  • один вихідний параметр, який передається в клієнтську програму після виконання бізнес-логіки: екземпляр класу Result.

Крок 3. Розгортання бізнес-логіки в службі Business Rules в Bluemix

Перш ніж продовжити цей крок, ознайомтеся з порядком розгортання програми на основі бізнес-правил.

Створення проекту RuleApp в Rule Designer

Розгортання бізнес-правил здійснюється в рамках проекту RuleApp.

  1. У поданні Rule Explorer виберіть проект правил BlueBookingRules.
  2. Натисніть на посилання Create RuleApp project в розділі Deploy and Integrate уявлення Rule Project Map.
  3. У майстра New RuleApp Project вкажіть ім'я проекту BlueBookingRuleApp і натисніть кнопку Finish. У вашій робочій області буде створено новий проект RuleApp, що містить набір правил проекту BlueBookingRules.

Розгортання RuleApp в службі Business Rules в Bluemix

Тепер можна розгорнути RuleApp в службі Rules.

  1. У поданні Rule Explorer виберіть проект BlueBookingRules.
  2. Клацніть правою кнопкою миші на проекті RuleApp і виберіть RuleApp> Deploy.
  3. У майстра Deploy RuleApp Archive натисніть кнопку Next, щоб зберегти політику управління версіями за замовчуванням для розгортання RuleApp і набору правил. Якщо ви використовуєте JDK 7, відкриється вікно попередження. Натисніть кнопку ОК, щоб закрити його.
  4. На наступній сторінці майстра виберіть пункт Create a temporary Rule Execution Server configuration. Введіть URL-адресу консолі адміністрування, логін і пароль вашого примірника служби Business Rules service . Натисніть кнопку Finish.
    Якщо все піде добре, то на консолі відобразиться повідомлення про успішне виконання.
  1. В каталозі Bluemix виберіть середу виконання SDK for Node.js. У розділі Start with a runtime: дайте своєму додатку ім'я і надайте URL хоста, який стане його точкою доступу в Інтернеті (наприклад, mybookingapp.mybluemix.net). Потім натисніть кнопку CREATE.
  2. Виберіть програму і натисніть кнопку BIND A SERVICE. Виберіть екземпляр служби Business Rules, створений на попередньому кроці, і натисніть кнопку ADD. Тепер служба Business Rules прив'язана до додатка.
  3. Тепер можна завантажити приклад програми, згенерований Bluemix, і внести в нього деякі зміни. Натисніть кнопку VIEW> GUIDE і виберіть пункт Download the starter application package, щоб завантажити ZIP-файл. Розпакуйте його в файлової системі.

2. Додавання і завантаження залежностей

Почнемо з додавання в залежності необхідних модулів Node.js. Змініть назву програми, опис і залежності в файлі package.json.

{ "Name": "mybookingapp", "version": "0.0.1", "description": "A simple hotel booking app using Rules Service in BlueMix", "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. Створіть файл index.ejs в папці views проекту і HTML-форму пошуку готелю з трьома вхідними параметрами: місто, дата заїзду і дата від'їзду. Можна надати сторінці кращий зовнішній вигляд і зробити її адаптується до різних розмірів екрану за допомогою Bootstrap, але в цій статті ми не будемо вдаватися в подробиці HTML-розмітки і CSS-стилів. Можна також скопіювати і вставити код з проекту BlueBookingServer в Git-репозиторії.
  3. Закінчивши роботу з index.ejs, просто направте запити за замовчуванням до цієї головній сторінці. // Головна сторінка додатка app.get ( '/', function (req, res) {res.render ( 'index');});

4. Пошук готелів в місті

Коли форма пошуку відправлена, запит GET направляється на адресу / hotels. Тепер потрібно витягти параметри цього запиту і знайти доступні готелі в потрібному місті. Зверніть увагу, що дати аналізуються в часовому поясі Coordinated Universal Time (UTC).

// Результати пошуку готелів app.get ( '/ hotels', function (req, res) {// отримання параметрів запиту var city = req.query.city; // рядок дати в форматі мм / дд / рррр var fromDateStr = req .query.from; var toDateStr = req.query.to; // аналіз рядка дати в часовому поясі UTC var 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]); ... // відображення сторінки});

Для простоти ми не будемо звертатися до бази даних готелів в цьому прикладі програми. Замість цього ми завантажимо файл даних (data / hotels.json) і повернемо масив готелів для запитуваної міста.

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

5. Звернення за результатами до служби Business Rules

прив'язавши службу Business Rules service до свого додатком, ми додали її конфігурацію до незмінної змінної середовища додатки 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. Набір правил, розгорнутий в службі Business Rules, можна виконати шляхом виклику виконання REST API. Потрібно виконати розбір змінної VCAP_SERVICES і використовувати її в додатку для отримання кінцевої точки виконання REST. // Витяг параметрів Rules Service if (process.env.VCAP_SERVICES) {var env = JSON.parse (process.env.VCAP_SERVICES); var rules = env [ 'businessrules'] [0] .credentials; } Else {// для локального тестування var rules = { "executionRestUrl": "http: // {your_execution_url} .mybluemix.net / DecisionService / rest", "user": "{username}", "password": "{ password} "}; }
  2. Потім в додатку Node.js можна завантажити модулі https і url і використовувати їх для коду REST-клієнта. var https = require ( 'https'), url = require ( 'url');
  3. Створіть допоміжну функцію (invokeRulesService), яка приймає такі параметри:
    • rulesetPath- рядок в формі / {ruleappName} / {ruleappVersion} / {rulesetName} / {rulesetVersion}. Служба Business Rules підтримує управління версіями RuleApps і наборів правил. Якщо версія не вказана, буде автоматично використовуватися остання;
    • inputParam- об'єкт JSON, який містить вхідні параметри набору правил;
    • callback- функція зворотного виклику для відповіді, так як HTTP-запит - асинхронний.
  4. Функція направить запит POST до executionRestUrl + rulesetpath, де в якості значення Content-Type встановлено application / json, а вхідні параметри набору правил знаходяться в тілі запиту. Служба Business Rules виконає набір правил і поверне вихідні значення в тілі відповіді в форматі JSON. / * * Виклик служби Rules Service для обчислення ціни бронювання * / function invokeRulesService (rulesetPath, inputParams, callback) {var restUrl = url.parse (rules.executionRestUrl); var dataString = JSON.stringify (inputParams); // кодування 'user: password' в рядку Base64 для звичайної перевірки автентичності при виконанні API var 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. Нарешті, для кожного готелю можна викликати службу Business Rules за допомогою допоміжної функції, щоб отримати результат з ціною номера. Переконайтеся, що вказано правильний шлях до набору правил і імена вхідних параметрів відповідають тим, що визначені в вашому наборі правил. Оскільки виклик служби Business Rules асинхронний, можна використовувати модуль async для перебору масиву готелів та повернення масиву результатів по завершенні всіх викликів. Не забудьте експортувати цю функцію, щоб її можна було викликати з app.js. / * * Виклик служби Rules Service для розрахунку ціни номера кожної з готелів * / 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);}}); } // експорт загальнодоступних функцій exports.getResults = getResults;

6. Відображення результатів

Повертаючись до app.js, тепер можна відобразити сторінку hotel.ejs з результатами, отриманими від служби Business Rules.

service.getResults (city, fromDate, toDate, function (results) {// відображення сторінки з даними res.render ( 'hotels', { "city": city, "from": req.query.from, "to": req.query.to, "results": results});});

Тепер ми готові перенести свій додаток Node.js в Bluemix. Знайдіть в папці проекту файл manifest.yml, що містить ім'я і домен додатки в Bluemix, кількість створюваних екземплярів, що виділяється обсяг пам'яті і т.д.

  1. Увійдіть в Bluemix з командного рядка: cf login -a api.ng.bluemix.net. У відповідь на запит введіть ім'я користувача, пароль, організацію і простір.
  2. Подайте команду cf push, щоб розгорнути додаток в Bluemix.
  3. Коли додаток буде запущено, перейдіть на сторінку http://mybookingapp.mybluemix.net, щоб протестувати своє застосування.

висновок

Служба бізнес-правил дозволяє відокремити бізнес-логіку від логіки додатки для досягнення більшої гнучкості додатків. Бізнес-логіку можна відредагувати і заново розгорнути RuleApp, не вносячи жодних змін в додаток для бронювання номерів. Це зменшить час кодування і тестування при зміні бізнес-правил, таких як розрахунок ціни, визначення прийнятності або твердження кредиту. Цей приклад програми для бронювання номерів демонструє можливості інтеграції служби Business Rules з додатком Node.js в хмарі, а також простоту розгортання і масштабованість платформи Bluemix .

Ресурси для скачування

Схожі теми

Підпишіть мене на повідомлення до коментарів

Уважаемые партнеры, если Вас заинтересовала наша продукция, мы готовы с Вами сотрудничать. Вам необходимо заполнить эту форму и отправить нам. Наши менеджеры в оперативном режиме обработают Вашу заявку, свяжутся с Вами и ответят на все интересующее Вас вопросы.

Или позвоните нам по телефонам: (048) 823-25-64

Организация (обязательно) *

Адрес доставки

Объем

Как с вами связаться:

Имя

Телефон (обязательно) *

Мобильный телефон

Ваш E-Mail

Дополнительная информация: