Статьи

Введение в сервисную шину Oracle

Мы находимся в процессе разработки новой системы для поставщика телекоммуникационных услуг, в которой мы рассмотрели Oracle Service Bus (OSB) для использования в качестве корпоративной сервисной шины. Одним из первых плюсов для меня была удивительная поддержка инструментов, которую он включает. Oracle объединила весь свой программный стек для интеграции предприятий в единое целое, объединив его в Oracle SOA Suite. В этой статье основное внимание будет уделено Oracle OSB 11g, который является частью Oracle SOA Suite 11g. Существуют значительные изменения, которые были сделаны с новым Oracle SOA Suite 12c, которые мы не будем углубляться в эту статью. Однако одна особенность, которая мне нравится в новом Oracle SOA Suite 12c, заключается в том, что разработчики могут использовать JDeveloper для разработки BPEL (язык выполнения бизнес-процессов) и кода OSB в одной IDE (интегрированная среда разработки).

Вот пара основных компонентов, о которых нужно знать в OSB:

Прокси Сервис

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

Бизнес Сервис

Бизнес-сервис, с точки зрения OSB, представляет собой сервис внутренних приложений. Это может быть WebService, очередь / тема JMS, служба REST, служба FTP и многое другое. Бизнес-сервис будет включать в себя функциональность для вызова фактического сервиса.

Таким образом, сценарий, на котором мы сосредоточимся в этой статье, выглядит следующим образом;

  1. У нас есть внутренняя служба, которая возвращает информацию об абоненте, если пользователь передает либо MSISDN, либо номер SIM-карты, и в зависимости от ввода данные будут получены и возвращены.
  2. Этот сервис должен быть представлен внешнему лицу более осмысленно, используя прокси-сервис.

Пример проекта можно скачать здесь .

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

  • полномочие
  • бизнес
  • преобразование
  • WSDL

Затем нам нужно скопировать внутренний WSDL-сервис и прокси-сервис WSDL, созданный для этого примера, в папку «wsdl».

Настройка бизнес-сервиса

Щелкните правой кнопкой мыши папку «бизнес» и выберите «New-> Business Service». Когда бизнес-сервис создан, вам сначала будет представлена ​​вкладка «Общие». В этом мы делаем следующее;

  • Выберите «Веб-сервис WSDL» и нажмите на браузер. Затем выберите «Обзор», выберите файл WSDL, и вам будет предложено два варианта. Выберите тот, который заканчивается на «(порт).

img1

  • Затем перейдите на вкладку «Транспорт» и измените URI как http: // localhost: 8088 / mockInstalledBaseSubscriberClassificationQueryWSServiceSoapBinding. Это потому, что мы будем использовать функцию фиктивного сервиса SOAPUI, чтобы проверить это, а URI представляет конечную точку фиктивного сервиса SOAPUI для сервиса, представленного WSDL.
  • Использование проекта SOAPUI для этого примера можно скачать здесь .

Это все, что нам нужно сделать, чтобы настроить наш бизнес-сервис. Затем мы переходим на наш прокси-сервис, где происходит все действие.

Настройка прокси-сервиса

  • Щелкните правой кнопкой мыши на созданной папке «proxy», выберите New-> Proxy Service и введите правильное имя.
  • На вкладке «Общие» выберите «Веб-служба WSDL» и нажмите «Обзор».
  • Теперь в прокси-службе вам нужно выбрать созданный нами прокси-файл WSDL, который будет доступен внешним клиентам.

img2

  • Перейдите на вкладку «Поток сообщений». На этой вкладке сначала перетащите элемент «Маршрут» из «Палитры дизайна» с правой стороны.
  • Затем перетащите элемент «Маршрут» в элемент «Маршрут».
  • Нажмите на элемент «Маршрутизация» и в нижней панели перейдите на вкладку «Свойства», где вы предоставите бизнес-сервис, к которому будет обращаться этот прокси-сервис, и имя операции.

img3

  • Результат будет следующим:

img4

  • Затем перетащите действие «Заменить» в компонент «Запросить действие».
  • Прежде чем предоставить информацию на вкладке «Свойства» для действия «Заменить», нам нужно создать файлы преобразования XQuery, которые сопоставят запрос прокси-службы с запросом бизнес-службы, а затем ответ бизнес-службы обратно на ответ прокси-службы. ,
  • Щелкните правой кнопкой мыши папку «трансформация» и выберите «New-> XQuery Transformation». Введите правильное имя. Это должно быть сделано для файлов преобразования запроса и ответа.
  • Используемый файл преобразования запроса выглядит следующим образом;
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
(:: pragma bea:global-element-parameter parameter="$fetchSubscriber1" element="ns2:FetchSubscriber" location="../wsdl/SubscriberProxyService.wsdl" ::)
(:: pragma bea:local-element-return type="ns1:InstalledBaseSubscriberClassificationQuery/ns0:InstalledBaseSubscriberClassificationQuery" location="../wsdl/subscriber_classfication.wsdl" ::)
 
declare namespace ns1 = "http://www.openuri.org/";
 
declare function xf:subscriberrequest($fetchSubscriber1 as element(ns2:FetchSubscriber))
    as element() {
     <ns1:InstalledBaseSubscriberClassificationQuery>
        <ns0:InstalledBaseSubscriberClassificationQuery>
            <ns0:Request>
               
                    {
                        if (data($fetchSubscriber1/EquipmentType) = "MSISDN") then
                           <ns0:MSISDN>  { (data($fetchSubscriber1/EquipmentValue))}</ns0:MSISDN>
                        else
                           <ns0:SIMCard> { data($fetchSubscriber1/EquipmentValue)}</ns0:SIMCard>
                    }
 
            </ns0:Request>
        </ns0:InstalledBaseSubscriberClassificationQuery>
        </ns1:InstalledBaseSubscriberClassificationQuery>
};
 
declare variable $fetchSubscriber1 as element(ns2:FetchSubscriber) external;
 
xf:subscriberrequest($fetchSubscriber1)

Здесь, как вы можете видеть, мы проверяем, равен ли тип оборудования «MSISDN», а затем устанавливаем соответствующий элемент в бизнес-сервисе.

  • Файл преобразования ответа используется следующим образом;
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
(:: pragma bea:global-element-parameter parameter="$installedBaseSubscriberClassificationQueryResponse1" element="ns1:InstalledBaseSubscriberClassificationQueryResponse" location="../wsdl/subscriber_classfication.wsdl" ::)
(:: pragma bea:global-element-return element="ns2:FetchSubscriberResponse" location="../wsdl/SubscriberProxyService.wsdl" ::)
 
declare namespace ns1 = "http://www.openuri.org/";
 
declare function xf:subscriberresponse($installedBaseSubscriberClassificationQueryResponse1 as element(ns1:InstalledBaseSubscriberClassificationQueryResponse))
    as element(ns2:FetchSubscriberResponse) {
        <ns2:FetchSubscriberResponse>
            <TradeCustomerCode>{ data($installedBaseSubscriberClassificationQueryResponse1/ns0:InstalledBaseSubscriberClassificationQuery/ns0:Response/ns0:Subscriber/@ServiceProviderCode) }</TradeCustomerCode>
            <PackageCode>{ data($installedBaseSubscriberClassificationQueryResponse1/ns0:InstalledBaseSubscriberClassificationQuery/ns0:Response/ns0:Subscriber/ns0:Package/@ProductCode) }</PackageCode>
            <PaymentOption>{ data($installedBaseSubscriberClassificationQueryResponse1/ns0:InstalledBaseSubscriberClassificationQuery/ns0:Response/ns0:Subscriber/@PaymentOption) }</PaymentOption>
        </ns2:FetchSubscriberResponse>
};
 
declare variable $installedBaseSubscriberClassificationQueryResponse1 as element(ns1:InstalledBaseSubscriberClassificationQueryResponse) external;
 
xf:subscriberresponse($installedBaseSubscriberClassificationQueryResponse1)

Это простое преобразование, в котором мы отображаем элементы ответа на прокси-элементы ответа по мере необходимости.

Теперь вернемся к нашему прокси-серверу, нажмите на действие «Заменить», перейдите на вкладку «Свойства».

  • В поле «В переменной» введите значение «тело».
  • Нажмите на ссылку «Выражение». Перейдите на вкладку «Ресурсы XQuery», нажмите «Обзор» и выберите файл преобразования запроса.
  • В компоненте «Variable Structures» с правой стороны разверните элемент «body», затем выберите элемент запроса и перетащите его в текстовое поле «Binding» следующим образом;

img5

  • Затем нажмите «ОК», чтобы вернуться на вкладку «Свойства».
  • Установите переключатель «Заменить содержимое узла». Конечный результат будет выглядеть следующим образом;

img6

  • Теперь давайте перетащим действие «Заменить» в компонент «Ответное действие».
  • Как и прежде, выберите преобразование ответа «$ body / ins: InstalledBaseSubscriberClassificationQueryResponse».
  • Теперь вы получите сообщение о том, что пространство имен «ins» не распознано.
  • Чтобы решить эту проблему, на той же вкладке «Свойства» выберите вкладку «Пространства имен» и нажмите «Добавить». Введите префикс «ins», а URI — «http://www.openuri.org/».

img7

И это все. Теперь мы можем проверить функциональность. Прежде чем сделать это, не забудьте сначала запустить фиктивную службу, созданную в интерфейсе SOAP.

img8

Теперь давайте войдем в консоль служебной шины, перейдем в прокси-службу и запустим тестовую консоль. Это результат, который я получил, запустив образец;

img9

Вы можете увидеть след того, что именно произошло, если пойти дальше вниз на том же экране в разделе «Отслеживание вызовов». Преобразование запроса и ответа, выполняемое OSB, можно увидеть следующим образом;
img10

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

Ссылка: Знакомство с сервисной шиной Oracle от нашего партнера JCG Динуки Арурилератне в блоге « Мой путь через ИТ» .