Применение бизнес-правил для создания гибкой интеграционной шины на базе Oracle Service Bus

Источник: oracle
Бхуян Шамим Ахмед

к.т.н. Бхуян Шамим Ахмед,
"ФОРС - Центр разработки"

Аннотация : Для критически важных информационных систем частое изменение бизнес-логики или набора бизнес-правил является основной бизнес-стратегией. При применении движка бизнес-правил снижается сложность выполнения комплексных бизнес-правил для любой информационной системы. В данной статье мы рассмотрим способы применения бизнес-правил в OSB ( Oracle Service Bus ) для улучшения расширяемости систем.

В простом случае в каждой информационной системе бизнес-правила имплементируются в жёстко кодированном виде, в котором для произведения минимальных изменений требуется перекомпиляция и переустановка системы на сервере приложения. OSB в данном случае не исключение. Используя движок бизнес-правил можно отделить бизнес-правило от самого приложения, что позволяет более гибко реализовывать системы и сокращает расходы при изменяющихся рыночных условиях.

Движок бизнес-правил служит основой для реализации сложных бизнес-логик. Главным его достоинством является то, что для создания правил движок позволяет использовать декларативный язык, в которым учетывается некоторая информация или ранее полученные знания. Движок бизнес-правил также включает в себя инструменты для поддержки определения и управления правилами.

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

Не все приложения или OSB должны использовать движок бизнес-логики. Приведем список случаев, в которых наиболее эффективно использование движка бизнес-логики:

  1. Если запрограммированный код бизнес-логики содержит в себе сложные вложенные if-then выражения. Комплексная поддержка логики может оказаться сложной задачей, и средства движка бизнес-логики могут помочь организовать эту работу.
  2. Риск ошибки в изменении логики значительно уменьшается, когда используется декларативный подход создания логики вместе императивного языка программирования.
  3. Когда даже небольшое изменение бизнес-логики на этапе промышленной эксплуатации может принести серьёзный финансовой ущерб компании.
  4. При частом изменении бизнес-логики в связи с динамикой роста рынка.
  5. Если при изменении небольшого фрагмента кода требуется выполнить следующие работы, чтобы обеспечить общую эксплуатацию всей системы:
    • новую логику необходимо перекомпилировать;
    • код необходимо проверить в тестовой среде;
    • логику необходимо проверить и утвердить, привлекая аудитора и/или бизнес-аналитика;
    • изменение планируется к новое развертыванию.

В настоящие время на рынке существует несколько движков бизнес-логики, которые имплементируются JSR (Java Specification Requests)- 94. Продукт Jrules от Ilog, партнера компании Oracle, является одним из лидирующих в этом направлении программных продуктов. Кроме него существуют и другие средства разработки бизнес-логики, такие как Drools от компании Jboss, распространяющийся с открытым исходным текстом.

В данной статье мы будем рассматривать продукт Ilog Jrules и способы его применения на интеграционной шине OSB, учитывая некоторые его преимущества среди продуктов данного направления. К достоинствам продукта Ilog Jrules можно отнести следующие функции:

  1. Содержит полноценную BRMS (Business rules management System);
  2. Имеет мощную систему контроля версий;
  3. Имеет компонент для создания тестовых сценариев для бизнес-логики;
  4. Имеет отдельный независимый компонент для командной работы над набором правил;
  5. Имеет независимый компонент для запуска бизнес-правил и поддерживает широкий профиль протоколов для их вызова;
  6. Имеет средства создания и редактирования бизнес-правил на высоком уровне с помощью визуальной среда разработки.

Для определения правил в Jrules используется алгоритм RETE (рис. 1) [ RETE от латинского "Сеть" ]. В этом алгоритме применяются два термина: факт (fact) и действие (Action).

Рис. 1. Пример бизнес-логики в алгоритме RETE.

Таким образом, любое правило - это факт, и при наступлении этого факта совершаются некие действия. Все необходимые для выполнения логики объекты передаются в рабочее пространство, где производится проверка логики и действие.

Реализованные правила или набор правил в Jrules можно предоставить в виде веб-сервиса, так как созданный веб-сервис инкапсулирует все сложные аспекты вызова бизнес-правила в Jrules. Кроме создания веб-сервиса, любые созданные и развернутые правила можно вызвать на транспортном уровне TCP/IP, например ormi или t3 (см. пример кода для вызова через RMI).

    Properties jndi = new Properties();

        jndi.put(Context.INITIAL_CONTEXT_FACTORY,"com.evermind.server.rmi.RMIInitialContextFactory");
    jndi.put(Context.PROVIDER_URL,"ormi://172.24.10.74:12401/paksession");
    jndi.put(Context.SECURITY_PRINCIPAL,"bres");
    jndi.put(Context.SECURITY_CREDENTIALS,"bres");

    /* Jboss configuration
    System.setProperty("java.naming.provider.url","jnp://172.24.10.74");
    System.setProperty("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory");
    */
    try {
      IlrRuleSessionProvider rsProvider = new IlrRuleSessionProviderFactory.Builder(jndi).build();
      IlrStatelessRuleSession session = rsProvider.createStatelessRuleSession();
      // prepare a new request
      Order order = new Order();
      order.setRating(RATING.GOLD);
      order.setAmount(2100);
      order.setId(UUID.getUniqueID());
      String rulesPath = "/UFTPNRuleAppS/1.0/RosFinMonitoringReportUPFT/1.0";
      IlrSessionRequest request = new IlrSessionRequest(rulesPath);
      // Set the input parameters for the execution of the rules
      IlrSessionExecutionSettings sessionExecutionSettings = request.getExecutionSettings();
      IlrSessionParameters inputParameters = sessionExecutionSettings.getInputParameters();
      inputParameters.setParameter("order", order);
      request.getSessionDescriptor().enableTrace();
      //set the rule Set parameter in the request
      IlrSessionResponse response = null;
      IlrSessionExecutionResult executionResult = null;
      response = session.executeRules(request);

      executionResult = response.getExecutionResult();

      System.out.println("FiredRule:"+ executionResult.getNumRulesFired());
      ArrayList firedRules = executionResult.getRulesFired();
      for(int i=0, cnt=firedRules.size(); i < cnt; i++){
        //ilog.rules.engine.IlrRule rule = (IlrRule) firedRules.get(i);
        System.out.println("Fired Rule Name:"+firedRules.get(i));
      }
    } catch (IlrRuleSessionCreationException e) {
      e.printStackTrace();
    } catch(RemoteException e){
      e.printStackTrace();
    } catch(IlrRuleSessionException e){
      e.printStackTrace();
    } /*catch(NamingException e){
      e.printStackTrace();
    }*/

После этого наступает время применения бизнес-правил в OSB. Существует два подхода при использования заготовленных правил в OSB. Далее рассматриваются оба подхода.

  1. Вызов через веб-сервис:
    1. создаем один бизнес-сервис (Business Service) на проекте OSB из WSDL (описание веб-сервиса) бизнес-правил;
    2. подготавливаем все необходимые входные данные для вызова прокси-сервиса (Proxy Service);
    3. добавляем узел routing в прокси-сервис и указываем пути к данному бизнес-сервису, который инкапсулирует вызов бизнес-правила;
    4. результат вызова используем в остальных узлах процесса.

    Рис. 2. Вызов бизнес-правила

  2. Вызов через транспортный протокол:
    1. создаем один java-проект, добавляем статичный метод с фрагментом кода, который показан выше;
    2. компилируем проект и создаем сборку (jar) из данного проекта;
    3. импортируем созданный jar в проект OSB;
    4. добавляем в прокси-сервисе узел под названием JavaCallOut;
    5. указываем импортированный jar и выбираем статичный класс для вызова бизнес-правила.

Рис. 2 иллюстрирует все возможные варианты вызова бизнес-правила из OSB.

Движок правил использует декларативный подход для создания правил, что позволяет приложениям, использущих бизнес-правила, быть более гибким к настройкам и расширениям. Продукт Oracle Service Bus предоставляет широкие возможности для создания наиболее гибкой интеграционной шины на базе бизнес-правил.

ЛИТЕРАТУРА:

  1. Документация Ilog Jrules; http://ilog.com/products/jrules/documentation/jrules67
  2. Ernest Freidman-Hill, Jess in action - 2003.
  3. Tony Morgan, Business rules and information system - 2003.


Страница сайта http://185.71.96.61
Оригинал находится по адресу http://185.71.96.61/home.asp?artId=20804