Опыт внедрения Oracle BAM в ЦНИИ Атоминформ

Источник: oracle

1. Введение

Постановка задачи: оперативное отслеживание прохождения платежей в учетной системе Oracle E-Business Suite

Целевая группа: руководители

Требования:

  1. Вывод информации на Единый портал Росатома
  2. Визуализация в виде графиков и диаграмм
  3. Возможность детализации вплоть до конкретных записей в табличном виде
  4. Автоматическое обновление графиков без необходимости перезагрузки страницы
  5. Обновление информации в реальном времени, по мере прохождения платежей
  6. Применение современного инструмента с большим потенциалом

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

В Центральном научно-исследовательском институте управления, экономики и информации Федерального агентства по атомной энергии (ФГУП ЦНИИАтоминформ) была поставлена задача мониторинга в реальном времени графика платежей, проходящих в Учетной системе.

Мониторинг будут производить руководители Агентства.

Клиентское место для мониторинга не должно требовать дополнительного прикладного программного обеспечения, кроме системного ПО (Windows + Internet Explorer).

Кроме того, информация должна быть доступна из любой точка Агентства независимо от расположения Учетной системы. Данное требование логично и естественно решается с помощью Единого портала Агентства. Значит, требуется вывод результатов мониторинга на Портал. Т.к. по факту уже внедрен портал Oracle Portal - требуется вывод именно в Oracle Portal.

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

Рисунок 1. Требования по представлению информации

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

2. Выбор решения

Такой постановке задачи и всем предъявляемым требованиям удовлетворяет средство класса Business Activity Monitoring (BAM) [1].

Принимая во внимание сильные позиции и большой потенциал Oracle (по материалам указанного исследования), а также наличия уже полного пакета продуктов Oracle у заказчика (Oracle E-Business Suite, Oracle Collaboration Suite, Oracle SOA Suite, Oracle Database), было принято решение использовать продукт Oracle BAM для решения поставленной задачи.

С технической точки зрения Oracle BAM представляет собой приложение на Java, выполняющееся в сервере приложений, с репозитарием в БД Oracle. Для открытия и запуска отчетов (мониторинга) с клиентской машины требуется обратиться по установленному URL через Internet Explorer или открыть соответствующую страницу Портала. При этом прозрачно для пользователя загружается небольшой апплет, который берет на себя функции поддержки связи с сервером Oracle BAM, а также позволяет обновлять только измененные данные и графики без обновления страницы целиком.

С точки зрения внутренней архитектуры сервера Oracle BAM можно выделить 4 крупных компонента:

  1. Enterprise Link - реализация механизма ETL - Extract Transform and Load : подключение к источникам данных и загрузка данных во внутреннее хранилище

    Внутреннее хранилище Oracle BAM реализовано в БД Oracle. Используется для временного хранения информации после ее поступления в BAM с анализируемых систем. Дает возможность агрегирования и анализа исторической информации, в т.ч. накапливаемым итогом.

  2. Active Data Cache - реализация отчетности "реального времени" : мониторинг внутреннего хранилища на изменение данных и "проталкивание" только измененных данных на визуализацию
  3. Report Server (+ Report Cache) - реализация визуализации : кеширование, форматирование и визуализация отслеживаемых данных в виде графиков, таблиц, диаграмм и прочих отчетов
  4. Event Engine - реализация уведомлений и предупреждений : обработка событий, исключений, пороговых значений; формирование сигналов, уведомлений, предупреждений и корректирующих воздействий

Рисунок 2. Трехмерная архитектура сервера Oracle BAM

Рисунок 2а. Двухмерная архитектура сервера Oracle BAM

Разработка подсистемы мониторинга на Oracle BAM разбивается на этапы, коррелирующие c внутренней архитектурой сервера.

Задача разбивается на следующие этапы:

  1. Определение исходных систем и событий для мониторинга
  2. Разработка показателей для мониторинга
  3. Подключение к "событийным" моделям систем (Business Event System, Enterprise Message Source)
  4. Разработка структур для сохранения значений отслеживаемых показателей (другими словами: разработка внутреннего хранилища - фундамента данных для Active Data Cache)
  5. Создание процесса (плана) обработки и загрузки в хранилище входящих показателей (Enterprise Link Plan)
  6. Разработка отчетов и панелей для визуального мониторинга (BAM Reports)

3. Проектирование решения

В рассматриваемой задаче мониторинга платежей в режиме реального времени задействованы следующие программные модули:

  1. OEBS 11.5.10 - модуль Кредиторы
  2. Oracle BAM 10.1.3
  3. Oracle Portal 10.1.4

При создании нового платежного поручения в Oracle E-Business Suite информация о нем (номер, дата, размер платежа, поставщик) передается в Oracle BAM и немедленно визуализируется на графическом отчете BAM в Oracle Portal.

В качестве источника данных для BAM использована JMS очередь в БД OEBS.

Функциональная архитектура решения представлена на Рис. 3.

Рисунок 3. Функциональная архитектура решения для мониторинга платежей

Техническое описание процесса мониторинга :

  1. При заведении нового платежного поручения в OEBS срабатывает BES событие:
    oracle.apps.ap.payment - Создание платежных поручений
    [Событие для мониторинга в BAM]
  2. На данное событие сделано 2 подписки в Business Event System.
    1-я подписка наполняет сообщение события данными платежного поручения (номер, дата, размер платежа, поставщик) в формате XML и готовит его для записи в очередь
    [Сбор показателей для BAM]
  3. 2-я подписка на событие передает сформированное сообщение события агенту JMS очереди, на которую "подписан" BAM. Агент публикует полученное сообщение в ассоциированную JMS очередь. [Передача показателей в BAM]
  4. Как только агент положил сообщение с новым платежом в JMS очередь, сервер Oracle BAM немедленно:
    • считывает его - [Enterprise Message Source]
    • разбирает на показатели (номер, дата, размер платежа, поставщик) - [XSLT преобразования входящих сообщений]
    • и сохраняет в объекте данных "платежи OEBS" внутреннего хранилища Oracle BAM - [план обработки входящих сообщений]
  5. Active Data Cache (ADC) "замечает" изменение объекта данных "платежи OEBS" и немедленно передает серверу отчетов BAM данные о новом платеже (новую строку объекта данных)
  6. Сервер отчетов, получив порцию обновленных данных и зная, что данный отчет открыт на просмотр (помните про связь сервера с апплетом на клиентской машине в Internet Explorer!), немедленно передает данные апплету и тот, в свою очередь, обновляет графики и диаграммы отчета в окне Портала.

Таким образом, происходит мониторинг и визуализация прохождения платежей Учетной системы в режиме "реального времени", автоматически, без перезагрузки страницы в браузере.

Рисунок 4. Пример простого отчета BAM в Портале Агенства (данные скрыты)

Особенности интеграции Oracle BAM в Oracle Portal :

  1. В рассматриваемой версии Oracle BAM 10.1.3 отсутствует стандартный портлет для вывода BAM в Портал
  2. В рассматриваемом решении BAM выведен в Портал с использованием iFrame
  3. Все отчеты и графики BAM (вплоть до размера шрифтов) автоматически масштабируются под текущий размер iFrame области
  4. С точки зрения авторизации Oracle BAM поддерживает авторизацию по LDAP-каталогу (единый реестр пользователей предприятия). В частности поддерживается OID. Таким образом, любой пользователь портала может всегда зайти на страничку с отчетом BAM при наличии соответствующих привилегий.
  5. С точки зрения аутентификации Oracle BAM не поддерживает Oracle SSO, по крайней мере, в стандартной конфигурации. Поэтому в качестве ограничения, но и в тоже время дополнительной защиты, при открытии странички портала с отчетом BAM, приходиться вводить пароль еще раз, несмотря на то, что пользователь уже авторизован в портале на данный момент.

4. Реализация решения

Внедрение решения по шагам:

  1. Сначала необходимо создать JMS-очередь (в данном примере - в БД OEBS), JMS-агента (в BES OEBS) и зарегистрировать JMS-очередь в JNDI на сервере приложений (в данном примере - в standalone OC4J в составе Oracle BAM: \OracleBAM\OC4J\j2ee\).
  2. Затем в OEBS необходимо создать процедуру сбора показателей платежа и создать подписки BES на событие oracle.apps.ap.payment, одна из которых будет вызывать данную процедуру, а вторая передавать сообщение события JMS агенту
  3. Далее - настроить BAM:
    • в BAM Architect необходимо создать Enterprise Message Source для "подписки" и считывания платежей с JMS очереди. Указать XSLT преобразования входящего платежа.
    • в BAM Architect создать объект данных для хранения приходящих из OEBS платежей
    • в BAM Enterprise Link -> Design Studio создать план обработки входящего платежа
    • в BAM Administrator - запустить созданный план
    • в BAM Active Studio - создать отчет в виде графиков и диаграмм платежей.
  4. Затем нужно вставить в Portal на требуемой страничке iFrame-область, которую направить на созданный в BAM Active Studio отчет.
  5. Выводы : Решения для мониторинга бизнес-процессов предприятия становятся все более и более совершенны и удобны для работы. Благодаря гонке вендоров-конкурентов и быстрому росту и взрослению данного сектора, международными аналитическими агенствами сформулированы требования, и выделен класс продуктов для мониторинга бизнеса Business Activity Monitoring. В пользу решения Oracle BAM, относящегося к данному классу, говорит большой его потенциал (согласно исследованию Gartner) и лидирующие позиции на данном рынке на момент приобретения продукта корпорацией Oracle.

После прочтения данной статьи, вероятно, у Вас возникло ощущение, что слепить прототип простейшей системы мониторинга в настоящее время по силам каждому. Благодаря быстрому развитию соответствующих средств класса BAM это действительно реально. Однако построение промышленной системы мониторинга бизнеса и бизнес-процесов, пусть даже и небольшой, требуют глубоких, прежде всего теоретических знаний в данной области и во множестве смежных областей. А самое главное - требует опыта построения и внедрения таких систем, знания подводных камней и "тонких" мест, настройки производительности и многого другого. Такой опыт и знания есть у Консалтинговой Группы "Борлас".

Дополнительно:

  1. Технические аспекты для реализации подобного решения, а также примеры можно почерпнуть в документе [3] на сайте Oracle Technology Network ( otn.oracle.com ). Для построения и просмотра отчетов не обязательно выносить BAM на портал, в режиме прототипа это проще и удобнее делать, просто открывая соответствующую домашнюю страничку Oracle BAM в браузере Internet Explorer.
  2. Фрагменты решения
    1. Вставка отчета BAM в Oracle Portal
      1. Запустить BAM Active Studio, открыть созданный отчет, кликнуть Copy Shortcut и скопировать <ссылку на отчет BAM> из открывшегося окна
      2. Создать в требуемом месте портал новую область и вставить в него отчет BAM в виде iFrame:
        <html>
         <head>
         </head>
         <body>
           <iframe name="place" src="<ссылка на отчет BAM>" 
                                        width="100%" height="500">
           </iframe>
         </body>
        </html>

    2. Процедура сбора показателей платежа OEBS
      (вызывается из первой подписки BES)
      CREATE OR REPLACE PACKAGE APPS.xx_BAM AUTHID CURRENT_USER as
        FUNCTION payment_rule(p_subscription_guid in raw,
                              p_event  in out nocopy wf_event_t)
          return varchar2;
      end xx_BAM;
      /
      
      
      CREATE OR REPLACE PACKAGE BODY xx_BAM as
        FUNCTION payment_rule(p_subscription_guid in raw,
                              p_event in out nocopy wf_event_t)
          RETURN varchar2 is
          dxml_ctxHandle dbms_xmlquery.ctxType;
          clRslt         clob;
          nPos           number;
          nTagLength     number;
        BEGIN
          -- Сконструируем данные по организации и товару
          dxml_ctxHandle := dbms_xmlquery.NewContext
              ('select check_number as doc_num,
                       to_char(check_date,''DD.MM.YYYY HH24:MI:SS'') 
                       as payment_date,amount as
                        payment_account,vendor_name as supplier 
                          from ap_checks_all where org_id=' //
                          p_event.GetValueForParameter('ORG_ID')//
                            ' and check_id=' //
      p_event.GetValueForParameter('CHECK_ID'));
          dbms_xmlquery.UseNullAttributeIndicator(dxml_ctxHandle, true);
          -- создаем xml на базе запроса
          clRslt := dbms_xmlquery.GetXml(dxml_ctxHandle);
          dbms_xmlquery.CloseContext(dxml_ctxHandle);
          -- добавляем namespace
          nTagLength := Length(dbms_xmlquery.DEFAULT_ROWSETTAG);
          nPos       := instr(clRslt,
                              '<' // dbms_xmlquery.DEFAULT_ROWSETTAG // '>');
          if nPos > 0 then
            clRslt := SubStr(clRslt, 1, nPos + nTagLength) //
                      ' xmlns="http://xmlns.oracle.com/oebsdata"' //
                      SubStr(clRslt,
                             nPos + nTagLength + 1,
                             Length(clRslt) - nPos - nTagLength);
          end if;
          -- замисываем xml-сообщение в событие  
          p_event.SetEventData(clRslt);
          return 'SUCCESS';
        EXCEPTION
          when OTHERS then
            return 'ERROR';
        END payment_rule;
      END xx_BAM;

    3. Создание первой подписки BES
      (вызова процедуры сбора показателей платежа)
      1. Зайдите в OEBS под SYSADMIN.
      2. Откройте полномочие "Workflow Administrator Web Applications"->"Business Events" (Администратор потоков операций Web приложений->Бизнес события).
      3. Встаньте на Subscriptions (Подписки) и создайте подписку со следующими параметрами:
        System: <имя системы OEBS>
        Source Type: Local
        Event Filter: oracle.apps.ap.payment
        Phase: 40
        Status: Enabled
        Rule Data: Key
        Action Type: Custom
        On Error: Skip to Next
        Rule Function PL/SQL: xx_BAM.payment_rule
        Owner Name: XX_BAM
        Owner Tag: XX_BAM

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