Содержание


Упрощение сложного кода в правилах Decision Server Insights с помощью служб OSGi

Интеграция служб Open Service Gateway initiative в IBM Operational Decision Manager

Comments

IBM ODM Decision Server Insights – это управляемое событиями решение высокой готовности для транзакционных вычислений, которое сочетает в себе возможности обнаружения изменений с механизмами принятия решений и бизнес-анализа. В Decision Server Insights есть очень богатый и интуитивно понятный язык правил, который позволяет составлять бизнес-логику на естественном языке. Возможность создавать правила с использованием естественного языка позволяет пользователям без технического образования непосредственно контролировать ситуации, которые несут в себе коммерческие возможности или риски.

Язык правил обеспечивает большую гибкость при работе с данными и их анализе с последующим принятием решений по поводу действий. Однако бывают случаи, когда необходимы более сложные манипуляции с данными или когда нужно использовать корпоративные системы или существующие веб-сервисы. Подобные операции часто включают сложный код Java™, который должен быть скрыт от пользователей с нетехническим образованием. Задача состоит в том, чтобы включить эти расширенные возможности в состав естественного языка правил, знакомого пользователям.

Decision Server Insights позволяет решить эту задачу с помощью службы OSGi и модели бизнес-объектов (BOM). В общем случае OSGi-службу можно считать компонентом инкапсуляции логики Java. BOM обеспечивает язык правил с удобным интерфейсом пользователя для этой логики. После создания этих технических артефактов пользователи без технического образования получают удобное представление службы в бизнес-правилах.

Это руководство знакомит читателя с процессом создания OSGi-службы и соответствующей модели бизнес-объектов. В нем также показано, как использовать OSGi-службу в бизнес-правилах и включить ее в состав решения Decision Server Insights.

Читатель должен иметь общее представление об IBM ODM Decision Server Insights, включая то, как построено и структурировано решение Decision Server Insights. Дополнительные сведения о Decision Server Insights содержатся в документации Operational Decision Manager 8.7 в Центре знаний IBM. В этом руководстве предполагается, что читатель знаком с Java и IDE Eclipse, и очевидные шаги процесса подробно не описаны. Для эффективного выполнения инструкций этого руководства не обязательно знать OSGi, но читателям, знакомым с OSGi, будет легче понять некоторые разделы.

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

В этом руководстве решаются следующие задачи:

  • создание проекта комплекта OSGi;
  • создание интерфейса службы и ее реализация;
  • создание модели бизнес-объекта службы и ее вербализация тем способом, который устраивает бизнес-пользователей;
  • создание решения Decision Server Insights;
  • создание агента правил с правилом, использующим службу OSGi;
  • настройка зависимостей проекта и экспорт решения;
  • развертывание и исполнение решения;
  • использование клиента тестирования для тестирования службы и проверки результатов.

Все артефакты и код, описанные в этом руководстве, доступны для загрузки. По завершении изучения этого руководства вы сможете загрузить пример кода из раздела «Загрузки», чтобы сравнить его со своей работой. Загрузите файл code_sample.zip из раздела «Загрузки» этого руководства и распакуйте его.

Создание проекта комплекта OSGi

Выполните следующие действия в своей среде Eclipse, чтобы создать проект комплекта OSGi, в котором будет содержаться API службы и ее реализация:

  1. Убедитесь, что у вас в среде Eclipse установлена функция IBM WebSphere® Application Server Developer Tools for Eclipse. В противном случае нажмите кнопку Modify в IBM Installation Manager for Decision Server Insights и выберите WebSphere Application Server Development Tools. Затем выполните инструкции раздела Установка Decision Server Insights в существующей среде Eclipse документации продукта из Центра знаний IBM.
  2. Выберите File > New и откройте мастер OSGi Bundle Project, как показано на рисунке 1.
    Рисунок 1. Мастер OSGi Bundle Project
  3. В первом окне мастера введите имя проекта. Выберите пункт Generate blueprint file и снимите флажок Add bundle to application, как показано на рисунке 2.
    Рисунок 2. Настройка проекта комплекта OSGi
  4. В следующем окне убедитесь, что поле Bundle root не заполнено, как показано на рисунке 3. Такая конфигурация приводит к тому, что папки META-INF и OSGI-INF размещается в корне проекта комплекта OSGi.
    Рисунок 3. Параметры комплекта с пустым полем bundle root
  5. Нажмите кнопку Finish для завершения работы мастера.
  6. Создание Java-комплектов для интерфейсов службы и ее реализаций. В примере из этого руководства создается пакет com.ibm.osgiservice.example.api интерфейса и пакет com.ibm.osgiservice.example.impl реализации службы.
  7. Создание интерфейса и класса реализации. Пример службы из этого руководства, DateUtilService, вычисляет возраст по указанной дате рождения. В этом примере в качестве входных данных службы используются три параметра: год, месяц и день. В реализации метода в примере также используется класс org.threeten.bp.LocalDate, так как это более подходящий формат для указания даты рождения и так как класс org.threeten.bp.Period можно использовать для вычисления числа лет между двумя датами. В следующем примере приведен код интерфейса и реализации службы:

    Интерфейс

    package com.ibm.osgiservice.example.api;
    public interface DateUtilService { /** * Считая входными данными год, месяц и день, определить число лет, прошедших с этой даты */ public int ageFromDate(int year, int month, int day ); }

    Реализация

    package com.ibm.osgiservice.example.impl; 
    import org.threeten.bp.LocalDate; 
    import org.threeten.bp.Period; 
    import com.ibm.osgiservice.example.api.DateUtilService; 
     
    public class DateUtilServiceImpl implements DateUtilService { 
     
    	public DateUtilServiceImpl() { 
    } 
     
    	//@Override 
    	public int ageFromDate(int year, int month, int day ) {		 
    		LocalDate localDate = LocalDate.of(year, month, day); 
    		Period p = Period.between( localDate, LocalDate.now()); 
    		return p.getYears();		 
    } 
    }
  8. Дважды щелкните на файле MANIFEST.MF, который обычно находится в каталоге META-INF комплекта OSGi, чтобы открыть редактор манифестов и задать зависимости проекта. Пример из руководства демонстрирует зависимость пакета org.threeten.bp, как показано на рисунке 4.
    Рисунок 4. Зависимости проекта в редакторе манифестов
  9. Перейдите на вкладку Build и настройте параметры сборки, как показано на рисунке 5. Убедитесь, что пункт Custom Build не выбран.
    Рисунок 5. Параметры сборки манифеста
  10. Перейдите на вкладку Runtime и добавьте пакет Java, который нужно экспортировать. Это пакет, в котором вы создали интерфейс службы, как показано на рисунке 6.
    Рисунок 6. Экспортированный пакет API службы
  11. Закройте редактор манифестов и дважды щелкните на файле blueprint.xml, чтобы открыть XML-редактор шаблонов. На вкладке Design нажмите кнопку Add, чтобы создать элемент службы, как показано на рисунке 7.
    Рисунок 7. Добавление к шаблону элемента службы
  12. В следующем окне введите интерфейс службы и создайте определение модуля реализации, как показано на рисунке 8.
    Рисунок 8. Создание интерфейса службы и модуля реализации.

    Перейдите на вкладку Source, и вы должны увидеть определение службы и модуля, аналогичное следующему примеру:

    <?xml version="1.0" encoding="UTF-8"?> 
    <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">	 
    	<bean id="DateUtilServiceImplBean" 
    		class="com.ibm.osgiservice.example.impl.DateUtilServiceImpl" /> 
    	<service id="DateUtilService" ref="DateUtilServiceImplBean" interface= 
    "com.ibm.osgiservice.example.api.DateUtilService"></service> 
    </blueprint>

    Служба OSGi готова. На следующем шаге создается проект правила, содержащего модель бизнес-объекта службы.

Создание проекта модели бизнес-объекта

Теперь создайте проект правила, содержащий модель бизнес-объекта (BOM) для исполняемой модели (XOM) службы OSGi. BOM описывает интерфейс службы и позволяет использовать его в языке правил. Кроме того, она определяет вербализацию, которая используется для вызова службы удобным для пользователя способом. Чтобы создать и настроить BOM службы, выполните следующие действия:

  1. Выберите File > New и откройте мастер Rule Project, как показано на рисунке 9.
    Рисунок 9. Мастер Rule Project
  2. Дайте проекту имя (например, service_osgi_bom) и нажимайте кнопку Next до тех пор, пока не откроется страница параметров XOM. Укажите проект OSGi, созданный на предыдущих шагах (например, service_osgi), как показано на рисунке 10.
    Рисунок 10. Выбор проекта комплекта OSGi в окне Rule Project XOM Settings
  3. Нажмите кнопку Finish, чтобы создать проект.
  4. Для создания записи BOM в новом проекте нажмите кнопку File > New и откройте мастер BOM Entry, как показано на рисунке 11.
    Рисунок 11. Мастер BOM Entry
  5. Нажмите кнопку Next и перейдите к OSGi XOM. Выберите пакет, содержащий интерфейс службы, как показано на рисунке 12.
    Рисунок 12. Пакет службы, выбранный в записи Create a BOM в окне XOM
  6. Нажмите кнопку Finish, чтобы создать запись BOM.
  7. Откройте model.bom в редакторе BOM, щелкните на вкладке Class и перейдите к классу DateUtilService.
  8. Добавьте специальное свойство OSGi.service, указывающее на интерфейс службы, как показано на рисунке 13. Обратите внимание, что регистр символов должен совпадать.
    Рисунок 13. Добавление специального параметра OSGi.service
  9. Дважды щелкните на ageFromDate(int,int,int) и выберите вкладку Member. Затем выберите Static, чтобы сделать этот метод статическим, как показано на рисунке 14.
    Рисунок 14. Статический метод службы
  10. Измените вербализацию на то, что понятно бизнес-пользователю, как показано на рисунке 15.
    Рисунок 15. Вербализация
  11. Наконец, отредактируйте параметры проекта BOM и настройте механизм правил на механизм принятия решений, как показано на рисунке 16.
    Рисунок 16. Выбор механизма принятия решений

Создание решения Decision Server Insights для службы OSGi

Теперь создайте решение Decision Server Insights для службы. Детали процесса разработки решений Decision Server Insights выходят за рамки этого руководства. Те, у кого нет опыта разработки решений, могут обращаться к документации Operational Decision Manager 8.7 в Центре знаний IBM.

Решение Decision Server Insights обычно состоит из бизнес-модели и агентов по крайней мере одного из трех типов: агентов правил, агентов Java и агентов предикативной оценки. В примере из этого руководства решение для службы OSGi содержит агент правил с правилом, которое ссылается на службу. Поэтому проект агента правил должен ссылаться на BOM службы OSGi, как показано на рисунке 17.

Рисунок 17. Проект ссылается на BOM службы из агента правил.

Бизнес-модель в примере очень проста, как показано на рисунке 18. Обратите внимание, что дата рождения моделируется в виде концепта с тремя полями типа int (год, месяц и день).

Рисунок 18. Простая бизнес-модель решения
  1. Теперь можно создать простое правило с использованием службы, как показано на рисунке 19. Пользуясь контекстной подсказкой, можно определить возраст по вербализации службы OSGi и ввести необходимые параметры, не зная Java-реализации.
    Рисунок 19. Простое правило со ссылкой на службу OSGi
  2. Теперь у вас есть все необходимое для проверки вызова службы из бизнес-правила, но вам еще нужно экспортировать и развернуть свое решение. Прежде чем экспортировать решение, проверьте, что проект решения ссылается на проект службы OSGi (в данном примере он называется service_osgi), как показано на рисунке 20.
    Рисунок 20. Проект решения ссылается на проект OSGi
  3. После того как решение будет экспортировано и развернуто, новую службу OSGi можно протестировать с помощью простого класса test, как показано в следующем примере:
    public class TestOSGiService { 
    	TestDriver client = null; 
     
    	@Before 
    	public void setUp() throws Exception { 
    		client = new TestDriver(); 
    		client.connect("service_consumer_sol"); 
    } 
    
    	@After 
    	public void tearDown() throws Exception { 
    		client.disconnect(); 
    } 
     
    	@Test 
    	public void test() throws Exception{		 
    createEntities(); 
     
    		Thread.sleep(10000); 
    sendEvents();  
    } 
    	private void createEntities() throws Exception { 
    		Customer customer = client.getConceptFactory 
    							(ConceptFactory.class).createCustomer("111"); 
    		customer.setName("Mickey Mouse"); 
    		BirthDate dob=new com.ibm.service.comsumer.impl.BirthDate(); 
    dob.setYear(1928); 
    dob.setMonth(5); 
    dob.setDay(15); 
    customer.setDateOfBirth(dob); 
     
    		client.loadEntity(customer); 
    } 
     
    	private void sendEvents() throws Exception { 
    		CustomerEvent ev =  client.getEventFactory() 
    					.createEvent(CustomerEvent.class); 
    		ev.setCustomerId("111"); 
    		client.submitEvent(ev); 
    } 
    }

    После запуска этого теста в журнале должно появиться следующее сообщение:

    [21/11/14 15:04:57:962 GMT] 00000246 SystemOut O Mickey Mouse's age is 86

Заключение

В этом руководстве описан процесс создания службы OSGi и предоставления доступа к ней из правила посредством описания этой службы в BOM. Вы узнали, как использовать службу в бизнес-правилах и как упаковать ее в решение Decision Server Insights. С помощью этого процесса можно расширить возможности языка правил и упростить составителям правил доступ к сложным службам и их использование.


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


Похожие темы


Комментарии

Войдите или зарегистрируйтесь для того чтобы оставлять комментарии или подписаться на них.

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Information Management
ArticleID=1023157
ArticleTitle=Упрощение сложного кода в правилах Decision Server Insights с помощью служб OSGi
publish-date=12032015