среда, 1 октября 2014 г.

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

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

Выполнить tutorial. Есть следующие полезные книги:
  • Getting Started With Oracle SOA Suite 11gR1 (главы 1-10,13-15,17)
  • Oracle SOA Suite 11g R1 Developers Guide (главы 1-8,11,13-14,18-21)
  • WS-BPEL 2.0 for SOA Composite Applications with Oracle SOA Suite 11g (главы 1-7 включительно)
Книги однотипные, главы связанные с BAM (Business Activity Monitorung) и OSB (Oracle Service Bus) пока не рассматриваем. Первые две книги содержат tutorial-ы. Пройдите от начала до конца одину из них (см. указанные главы). Обрати внимание, что оба tutorial-а по немного более старой версии SOA (например по 11.1.1.5), хотя на данный момент чаще всего используется версии 11.1.1.6 и 11.1.1.7 - поэтому скриншоты в книгах могут немного не совпадать.
После завершения tutorial просмотреть остальные книги на непроработанный/незатронутый функционал.

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

  1. Создать две JMS Queue в Weblogic;
  2. Создать MDB, который перекладывает сообщения из одной очереди в другую;
  3. Развернуть на сервере и протестировать.

Полезные ссылки:

  1. Рекомендую использовать официальный developers guide по Oracle SOA, как справочник.
  2. Хороший блог по Oracle SOA на русском языке
  3. Блоги на английском:

вторник, 30 сентября 2014 г.

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

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

Книг по XML много, в том числе и на русском. Дополнительно полезно знать XQuery. Нужно понимание функциональности и возможностей XQuery по сравнению с XSL. Рекомендую книгу «W3C XML: Xquery от экспертов. Руководство по языку запросов» или в оригинале «XQuery from the Experts: A Guide to the W3C XML Query Language».

  • Weblogic. Требуется разобраться:
    • Как минимум, в следующих технологиях:
      • JMS (Java Message Service)
      • MDB (Message Driven Bean)
      • JTA & JTS (Java Transaction API & Java Transaction Service)
    • В основах администрирования.

Полезные ссылки:

Освоение Oracle SOA

За основу данного набора статей взята моя переписка с начинающими разработчиками SOA, целью которой было вырастить разработчиков Oracle SOA Suite. Кроме переписки было обсуждение вопросов и задач через Skype. Формат следующий:

  • Что нужно изучить с ссылками на материалы;
  • Простейшие практические задачки;
  • Полезные ссылки.

Обращаю внимание, что этот набор статей не охватывает весь функционал Oracle SOA Suite, а включает только наиболее часто используемый функционал. Так же смотрите на полезные ссылки в постах пройдя по которым можно изучить неохваченный функционал.

Этот пост подержит ссылки на все посты из данного набора:

P.S. рекомендации приветствуются J

понедельник, 29 сентября 2014 г.

Список необходимых патчей для Oracle SOA & BPM Suite 11g PS6 (11.1.1.7)

Перечень патчей которые необходимо развернуть для Oracle SOA & BPM Suite 11g PS6 (11.1.1.7):
  • Patch 17294404: XSDCOMPLEXTYPE.GETCHILDELEMENTS() IS NOT THREAD SAFE
  • Patch 18325165: MERGE REQUEST ON TOP OF 11.1.1.7.0 FOR BUGS 16319620 16487002
  • Patch 18609527: SOA BUNDLE PATCH 11.1.1.7.4
  • Patch 18366461: NULLPOINTEREXCEPTION AT WEBSERVICEEXTERNALBINDINGCOMPONENT.GETINVOCATIONMETADATA
Скачать эти патчи можно c support.oracle.com.

P.S. список патчей будет дополняться (при необходимости).
P.P.S. рекомендации по патчам приветствуются :-)

вторник, 13 мая 2014 г.

ADF: Ошибка InvalidOwnerException JBO-25030 при одновременном создании master- и detail-записей

Ошибка:
При создании Master- и Detail-записи последовательно через ADF Data Binding, например как в следующем коде:
  public String createMasterDetail() {
  
   BindingContainer bindings = getBindings();  
   OperationBinding operationBinding =  
   bindings.getOperationBinding("CreateInsertMaster");  
   Object result = operationBinding.execute();  

   OperationBinding operationBinding1 =  
   bindings.getOperationBinding("CreateInsertDetail");  
   result = operationBinding1.execute();  

   return null;  
  }  
Причина:
При создании новой строки через ADF Data Binding её статус будет STATUS_INITIALIZED. А когда Detail-запись пытается найти Master-запись в кеше (у которой статус STATUS_INITIALIZED), то будет брошено исключение InvalidOwnerException.

Решение:
  1. Установить флаг Сascade Update Key Attributes в ассоциации между Master- и Detail-сущностями;
  2. Сгенерировать View Row Class (...ViewRowImpl) для Master-сущности и переопределить в нём следующий метод:
      @Override  
      public void setNewRowState(byte b) {  
       if (b!=Row.STATUS_INITIALIZED || getNewRowState()!=Row.STATUS_NEW){  
       super.setNewRowState(b);  
       }  
      }  
    
Пример простейшего ADF-приложения здесь.