четверг, 4 июня 2015 г.

Декодирование xsd:base64Binary в xsd:string

Цель:
При использовании JMS Adapter для получения текстового сообщения в формате XML, для которого XSD не известна, используется опция "Native format translation is not required (Schema is Opaque)". В этом случае входящее сообщение будет содержать элемент типа xsd:base64Binary, содержащий закодированное в base64 полученное сообщение.
Решение:
Т.к. в Oracle SOA Suite 11g отсутствует XSLT или XPATH-функции, позволяющая декодировать base64, поэтому можно использовать активность "Java Embedding" для решения данной задачи.
Итак, в BPEL-процессе есть две переменные:
 <!-- входная переменная из JMS Adapter -->
 <variable name="encoded_Input" messageType="ns1:Consume_Message_msg"/>  
 <!-- переменная в которую декодируем base64 -->
 <variable name="decoded_Input" type="xsd:string"/>
Добавляем в BPEL-процесс активность "Java Embedding" содержащую следующий код:
 try {      
     oracle.xml.parser.v2.XMLElement input = (oracle.xml.parser.v2.XMLElement) getVariableData("encoded_Input", "opaque");
     String input_str = input.getTextContent();   
     oracle.soa.common.util.Base64Decoder decoder = new oracle.soa.common.util.Base64Decoder();        
     String decoded = null;       
     decoded = decoder.decode(input_str);   
     setVariableData("decoded_Input", decoded);      
 } catch (Exception e) {  
     addAuditTrailEntry("EXCEPTION OCCURRED: " + e.toString());  
 }  

Альтернативный вариант - создание собственной XSLT или XPATH-функции для декодирования base64.

четверг, 16 апреля 2015 г.

Освоение Oracle BPM

Требуется:
Выполнить простейший tutorial с Oracle Technology NetworkДалее выполнить tutorial по одной из следующих книг:
  • Getting Started with Oracle BPM Suite 11gR1
  • Oracle BPM Suite 11g Developer's Cookbook
Изучить "продвинутые" аспекты по книге: 
  • Oracle BPM Suite 11g Advanced BPMN Topics
Полезные ссылки:

суббота, 4 октября 2014 г.

Пятая часть освоения SOA

Требуется изучить:

Выполнить задание:

  • Сенсоры и BAM:
    • По книге Getting Started With Oracle SOA Suite 11gR1 изучить и выполнить задания по главе 16 (посвящённой Oracle BAM);
    • Сделать композит (с BPEL-процессом), который будет вызывать внешний сервис (который нужно так же реализовать). Этот внешний сервис периодически возвращает ошибку (например такая логика: если минута в текущем времени четная, то вернуть ошибку). Нужно сделать отчёт средствами Oracle BAM содержащий информацию по общему кол-ву запущенных инстансов и сколько из них с ошибками
  • REST:
    • Сделать композит взаимодействующий с RESTful-сервисом (сам RESTful-сервис создайте его любым удобным средством).

пятница, 3 октября 2014 г.

Четвертая часть освоения SOA

Требуется изучить:


Выполнить задание:

  • MDS: задеплоить в MDS артефакты (XSD, WSDL, fault policy file) и сделать простой композит использующий данные артефакты.
  • Resequencing: сделать композит иллюстрирующий работу  всех вариантов Resequencing – Standard, FIFO, Best effort.
  • EDN
    • Сделать композит с WS-интерфейсом, который генерирует событие (EDN), а другой композит слушает это событие и записывает информацию в БД. 
    • Сделать отдельный композит который слушает события от HumanTask (в качестве композита с HumanTask предлагаю взять таковой из tutorial) и записать информацию (как минимум: идентификатор задачи, кто сделал (логина достаточно), что сделал (действие) и когда сделал(время)) в БД

четверг, 2 октября 2014 г.

Третья часть освоение SOA

Выполнить задания:

  • Задачка 1
Сделать композит, который периодически опрашивает (polling) таблицу БД на наличие строк со статусом READY и при их появлении пишет в файловую директорию cvs-файлы.

  • Задачка 2

Сделать композит, который периодически опрашивает (polling) файловую директорию на наличие csv-файлов следующей структуры:
First name,Last name,ID,E-mail
John,Doe,01234567,john.doe@domain.com
Alex,Smith,88888888,alex.smith@domain.com
Необходимо записать данные из csv-файлов в таблицу БД (сделать табличку с теми же полями и первичный ключ по всем полям). 

  • Задачка 3

Сделать композит, который «слушает» очереди JMS и AQ (т.е. две очереди; внутри XML-сообщения) и записывает данные сообщения в таблицу БД через вызов API-процедуры.

  • Задачка 4

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

  • Задачка 5

Добавить обработку ошибок в композите (см. задачку 2)  и в случае ошибки вставки в таблицу БД (ошибка по первичному ключу) переводить на администратора (humanIntervention), который может изменить значения полей и завершить выполнение композита