суббота, 8 июня 2013 г.

Компания "Балтрос"

Сегодня - мой последний рабочий день в компании "Балтрос", в которой я проработал более 13 лет.
Я  хочу сказать СПАСИБО всем своим коллегам, которые все это время были со мной рядом. Я очень благодарен Вам за работу, которая была проделана вместе с Вами, и за то время, когда мы вместе отдыхали.
Я не собираюсь терять с Вами связь, но мне будет не хватать ежедневного общения с Вами.
 Еще раз - БОЛЬШОЕ ВАМ СПАСИБО!

пятница, 29 марта 2013 г.

New SOA Suite 11g Database Performance Tuning White Paper

Опубликованы новые статьи о нстройке производительности SOA Suite и BPM Suite.

Доступны здесь http://www.oracle.com/technetwork/middleware/soasuite/learnmore/psrsoadbperformance-1919499.pdf
http://www.oracle.com/technetwork/middleware/bpm/learnmore/bpm11gperftuning-1912340.pdf

Пока провести какие-то эксперименты и посчитать повышение производительности при выполнении SOAComposite не удалось.

пятница, 22 марта 2013 г.

Oracle JDeveloper & Oracle MapViewer

Сегодня мне потребовалось поизучать возможности Oracle JDeveloper и ADF по отображению геоинформации.
Изучал я эти технологии, как архитектурную альтернативу уже существующему нашему геоинформационному решению, примененному нами при разработке РГИС СПб http://rgis.spb.ru/map/

Не углубляясь в полученные результаты, хотел бы предупредить, что при попытке в JDeveloper подключения к Oracle MapViewer, можно получить сообщение
Failed to retrieve data from Mapview server
в окне Create geographic map

И это происходит, несмотря на то, что на предыдущем шаге соединение с сервером MavViewer установлено успешно.


Это происходит из-за того, что пока не создан ни один Tile Layer


Как только Вы в консоли управления MapViewer создадите хотя бы один слой Tile, ошибка пропадет.

понедельник, 18 марта 2013 г.

Прохождение границы из Эстонии в Россию в Нарве

Немного не по теме блога, но надо рассказать.
Вчера ездил с друзьями отдохнуть в Эстонию. Ехать из Питера недалеко и мы обычно ездили на один день. Приедем в Нарву, сходим в СПА (отель Мерессу), пообедаем в кафе, сходим в Призму за продуктами и домой. Выезжаем в 7 утра и в 19 обычно уже дома.
До вчерашнего дня все было хорошо....
Для того, чтобы выехать из Эстонии на машине, необходимо либо забронировать выезд на определенное время, либо встать в живую очередь. Скорость движения в живой очереди, которая движется в том случае, если есть возможность пропустить транспорт В ДОПОЛНЕНИЕ к транспорту, который забронировал выезд.
Раньше утром, въехав в Эстонию, мы ехали на площадку ожидания (Нарва, Раху,4) и бронировали выезд на этот же день на то время, которое удобно. Обычно в 16-17 мы уже получали пропуск на выезд и в 18 часов проходили границу.

Так было раньше. (((
Теперь (с 26 декабря) нельзя забронировать выезд за срок, меньший чем 24 часа. Если я буду выезжать завтра -пожалуйста, бронируй. Если сегодня -вставай в живую очередь. Мы вчера стояли 6 часов.

Теперь уже и не знаю, когда в следующий раз соберусь в Эстонию. Или в следующий раз буду переходить границу пешком. В Ивангороде это можно сделать.

среда, 20 февраля 2013 г.

Повторение учебного примера "Getting Started with Oracle BPM Suite11gR1". Часть 2

В этой части я расскажу о проблеме, которая возникла у меня при повторении учебного примера, приведенного в разделе 13  книги "Getting Started with Oracle BPM Suite11gR1".
В этом разделе предполагается, что читатель создаст два бизнес-индикатора и настроит информационную панель для их просмотра. 
Раздел называется "Tutorial: Using standard and custom dashboards for the Request Quote process".

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

ТУ проблему, на которую я натолкнулся, можно обойти несколькими способами, НО ... Ведь по документации должно работать и так... Из-за этого я настойчиво копал и разбирался с проблемой. Заключается эта проблема в следующем:

1. Для BPMпроцесса можно определить бизнес-индикаторы, которые измерения (dimension) и факты (Measure) 




Процедура создания бизнес-индикаторов подробно описана в учебном примере. 
Как я понял, смысл этих индикаторов - подготовка интересующих пользователя или аналитика данных, которые расчитываются на том или ином этапе процесса и сохранение этих данных в специальных таблицах базы данных. 
А поооотооом..., когда возникнет необходимость получить ту или иную количественную информацию о процессе или о результатах работы процесса, аналитик (не сам конечно, а с помощью средств анализа) обратиться уже к подготовленным данным, записанным в таблицы базы данных, вместо того, чтобы лазить по XMLданным, хранящимся в экземплярах выполненных или выполняющихся процессом. 
Вроде бы все просто.

2. Далее, после того, как мы определили индикаторы, нам необходимо выбрать место в процессе, где они будут заполняться.
Для этого создается шаг процесса, в котором производится заполнение измерений и фактов
Вот этот  шаг

А вот заполнение измерений и фактов.


3. Далее в учебном примере предлагают создать measurement mark
Из описания я для себя понял, что measurement mark - это "такая штука", нужная ВОТ для чего... 
Аналитические данные процесса (то, что пишется в базу данных) по умолчанию (умолчание конечно можно изменить) не захватываются после автоматических активностей. На рисунке ниже видно свойство активности, с помощью которого можно управлять генерацией аналитических данных после выполнения активности.


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


4. Прекрасно... Теперь (по моим ожиданиям) можно создать информационную панель (custom dashboards) и с наблюдать за изменением индикатора В ТОТ МОМЕНТ, когда выполниться операция заполнения индикатора.
Параметры созданной панели приведены ниже.


5. Панель я создал, но данных НИКАКИХ не увидел.
И только после того, как выполнил НЕАВТОМАТИЧЕСКУЮ активность после активности, в которой присваиваются значения бизнес-индикаторам, я увидел график в инфопанели.


Первой мыслью моей было -"блин, опять я где-то не тот флажек поставил или еще что-то пропустил"... Два дня я искал причину такого поведения, но так ничего найти и не смог ((((
Вроде бы все четко написано, "ЧТОБЫ ДАННЫЕ БЫЛИ ЗАХВАЧЕНЫ, НАДО УСТАНОВИТЬ measurement mark". Но данные не захватываются и не отображаются в дашбоарде, пока не выполняется следующая после measurement mark неавтоматическия активность. Обойти эту проблему можно так:
    - присвоить значения бизнес-индикаторам на выходе из активности "Enter Quote Details". Тогда они сразу появятся в инфо-панели (проверял, работает)
    - установить у автоматической активности признак генерации аналитических данных (проверял, работает).
Но, если эту проблему обходить, то ЗАЧЕМ ТОГДА НУЖНА measurement mark??? Непонятно...

Как я проверял, что правильно все сделал...:
- сначала я решил проверить процесс. Дошел ли он до нужной точки и выполнил ли он требуемые активности. Мало ли... Может какая-то ошибка возникла при выполнении активности "Assign Indiсators". Заглянул в EM... Посмотрел... Нет. Вроде все нормально


- потом я решил посмотреть, что записывается в базу данных при выполнении активностей. Что происходит при захвате значений бизнес-индикаторов? Для process analytics в схеме SOAINFRA существуют специальные таблицы с префиксом BPM_CUBE...
Интересующая меня информация записывается в таблицу BPM_CUBE_TASKPERFORMANCE.
Если посмотреть, что содержится в таблице по интересующему меня процессу, то можно можно увидеть примерно следующее:
 SELECT t2.processname, t1.activityname, t1.activitytype, t1.label, t0.FLEXSTRING01,
         t0.FLEXNUMBERRANGE01,
         t0.FLEXNUMBER02 
    FROM BPM_CUBE_TASKPERFORMANCE t0, BPM_CUBE_PROCESS t2, BPM_CUBE_ACTIVITY t1
   WHERE      t1.PROCESSID = t2.PROCESSID
          and t0.PROCESSID = t1.PROCESSID
          AND t0.ACTIVITYID = t1.ACTIVITYID
          and componentinstanceid=50007

Результаты получились следующие:


Видно, что данные в measurement mark захвачены. Нужная мне информация сохранена в трех последних колонках. 
Можно сделать вывод, что (скорее всего) данные для анализа подготовлены правильно.
Остается только попробовать разобраться с дашбоардом. Только как с ним разобраться, если он представляет собой закрытую систему?

- Разборки с дашбоардом. 
Я решил попробовать так... Если дашбоард отображает сведения из базы данных, то должен он это делать на основе результатов какого-то запроса. И запрос этот можно найти в V$SQLAREA

select sql_text, executions from v$sqlarea where parsing_schema_name = 'SOA_SOAINFRA' 
and sql_text like '%BPM_CUBE_TASKPERFORMANCE%' order by executions;

Я помотрел результаты приведенного выше запроса, потом несколько раз обновил информационную панель и еще раз выполнил запрос. После этого по разнице в поле EXECUTIONS я нашел тот запрос, результаты которого отображатся в интересующей меня информационной панели.
ВОТ ОН

  SELECT t0.FLEXSTRING01,
         t0.FLEXNUMBERRANGE01,
         AVG (t0.FLEXNUMBER02),
         COUNT (t0.FLEXNUMBER02)
    FROM BPM_CUBE_TASKPERFORMANCE t0, BPM_CUBE_PROCESS t2, BPM_CUBE_ACTIVITY t1
   WHERE (    (    (    (    (t2.UNDEPLOYDATE IS NULL)
                         AND (t0.DISCRIMINATOR IS NULL))
                    AND (t1.ACTIVITYTYPE NOT IN (:1, :2, :3, :4, :5)))
               AND (    (    (    (    (t2.DOMAINNAME = :6)
                                   AND (t2.COMPOSITENAME = :7))
                              AND (t2.SCALABEL = :8))
                         AND (t2.REVISION = :9))
                    AND (t2.PROCESSNAME = :10)))
          AND (    (t1.PROCESSID = t2.PROCESSID)
               AND (    (t0.PROCESSID = t1.PROCESSID)
                    AND (t0.ACTIVITYID = t1.ACTIVITYID))))
GROUP BY t0.FLEXSTRING01, t0.FLEXNUMBERRANGE01
ORDER BY t0.FLEXSTRING01 ASC, t0.FLEXNUMBERRANGE01 ASC



Условие, которое меня заинтересовало, выделено в запросе жирным шрифтом. 

Значения bindпеременных были мной получены из представления V$SQL_BIND_CAPTURE
select * from V$SQL_BIND_CAPTURE where sql_id = '6nj6tuy59tv9f'


И выяснилось, что в качестве переменных 1, 2, 3, 4, 5 в запрос подставляются значения
'MEASUREMENT_START',
'MEASUREMENT_STOP',
'MEASUREMENT_START_STOP',
'MEASUREMENT_COUNTER',
'SUBPROCESS'


С такими параметрами, естественно, в результатах запроса будут отсутствовать данные, полученные в указанной мною measurement mark.
Более того, все данные, которые получаются в ЛЮБОЙ measurement mark, будут исключаться из результатов dashboard.

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


пятница, 15 февраля 2013 г.

Повторение учебного примера "Getting Started with Oracle BPM Suite11gR1". Часть 1

Работая над одним проектом, я уже несколько лет проектирую SOA-системы. До недавнего времени я использовал Oracle SOA Suite, а конкретно - Oracle BPEL Server.
В начале 2013 года у меня появилось немног освободного времени, которое я посвятил изучению еще одного ораклового сьюта, используемого при разработке SOAприложений - Oracle BPM Suite.
Для самостоятельного "поверхностного" ознакомления с этой платформой написана неплохая книга - "Getting Started with Oracle BPM Suite 11gR1" Heidi Buelow, Manoj Das, Manas Deb, Prasen Palvankar, Meera Srinivasan ISBN 978-1-849681-68-1
С ее помощью можно за несколько дней получить начальные навыки проектирования, имитационного моделирования и развертывания бизнес-процессов.
Однако, даже имея подробные пошаговые инструкции в книге, без "грабель" пройти весь путь мне не удалось. Ну и чтобы не получать по носу второй раз, развертывая в будущем (если понадобиться) инфраструктуру BPM Suite уже для разработки или для исполнения бизнес-процессов у Заказчика, я решил сохранить перечень "граблей".

1. Установка маппингов между ролью BPMN и ролью LDAP (Mapping swim lane roles to LDAP roles).
При пропытке связать роль BPM с объектом LDAP (группой, пользователем или APPролью) я столкнулся с проблемой получения информации от  LDAP, встроенного в Weblogic-сервер.
В окне IdentytyLookup при выборе сервера приложений не отображался Realm...



  
Как ни странно, но оказалось, что для получения данных о пользователях и группах нужен запущенный managed server SOA. А он у меня, как раз был застоплен и был запущен только AdminServer.
 
2. Перенос спроектированного процесса в репозитарий MDS для работы с проектом в BPM Composer 

Для переноса проекта в репозитарий MDS необходимо настроить BPM MDS Connection
Однако, при нормально настроенном соединении SOA MDS, тестирование BPM MDS Connection приводило к ошибке.
Я разворачивал SOA и BPM Suite на виртуальной машине и для виртуальных машин нашел на оракловом форуме рекомендацию, в соответствии с которой необходимо настроить Listen Address для soa_server в консоли WLS.
После выполнения этой рекомендации и рестарта soa_server тест при создании соединения прошел и удалось экспортировать проект в BPM MDS.


Рекомендации на форуме Oracle

Что впечатлило:
1. Результаты симуляции (simulation results)
Сравнение стоимости по ролям - наглядно видно, кто РАБОТАЕТ, а кто находится в ОЖИДАНИИ. Диаграмма стоимости ресурсов наглядно показывает этот факт.



Все остальное, включая этапы Implementation & Deploy прошли без особых проблем.
Пока я остановился на главе 13  "Process Analytics and Business Activity Monitoring".
Впечатленими о следующих частях книги и проблемами (если они возникнут)  поделюсь в следующей записи.
Остались главы:

Chapter 13: Process Analytics and Business Activity Monitoring
Chapter 14: Using Business Rules
Chapter 15: Using Human Task Patterns and Other Concepts
Chapter 16: User Interface Development for Human Tasks
Chapter 17: Events and Exception Handling
Chapter 18: Customizing and Extending Process Spaces
Chapter 19: Administering the BPM Environment