Мы находимся в процессе разработки новой системы для поставщика телекоммуникационных услуг, в которой мы рассмотрели 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 и многое другое. Бизнес-сервис будет включать в себя функциональность для вызова фактического сервиса.
Таким образом, сценарий, на котором мы сосредоточимся в этой статье, выглядит следующим образом;
- У нас есть внутренняя служба, которая возвращает информацию об абоненте, если пользователь передает либо MSISDN, либо номер SIM-карты, и в зависимости от ввода данные будут получены и возвращены.
- Этот сервис должен быть представлен внешнему лицу более осмысленно, используя прокси-сервис.
Пример проекта можно скачать здесь .
Прежде всего, мы создаем бизнес-сервис, который будет служить фасадом для нашего внутреннего сервиса. В своем проекте OSB создайте следующие четыре папки;
- полномочие
- бизнес
- преобразование
- WSDL
Затем нам нужно скопировать внутренний WSDL-сервис и прокси-сервис WSDL, созданный для этого примера, в папку «wsdl».
Настройка бизнес-сервиса
Щелкните правой кнопкой мыши папку «бизнес» и выберите «New-> Business Service». Когда бизнес-сервис создан, вам сначала будет представлена вкладка «Общие». В этом мы делаем следующее;
- Выберите «Веб-сервис WSDL» и нажмите на браузер. Затем выберите «Обзор», выберите файл WSDL, и вам будет предложено два варианта. Выберите тот, который заканчивается на «(порт).
- Затем перейдите на вкладку «Транспорт» и измените URI как http: // localhost: 8088 / mockInstalledBaseSubscriberClassificationQueryWSServiceSoapBinding. Это потому, что мы будем использовать функцию фиктивного сервиса SOAPUI, чтобы проверить это, а URI представляет конечную точку фиктивного сервиса SOAPUI для сервиса, представленного WSDL.
- Использование проекта SOAPUI для этого примера можно скачать здесь .
Это все, что нам нужно сделать, чтобы настроить наш бизнес-сервис. Затем мы переходим на наш прокси-сервис, где происходит все действие.
Настройка прокси-сервиса
- Щелкните правой кнопкой мыши на созданной папке «proxy», выберите New-> Proxy Service и введите правильное имя.
- На вкладке «Общие» выберите «Веб-служба WSDL» и нажмите «Обзор».
- Теперь в прокси-службе вам нужно выбрать созданный нами прокси-файл WSDL, который будет доступен внешним клиентам.
- Перейдите на вкладку «Поток сообщений». На этой вкладке сначала перетащите элемент «Маршрут» из «Палитры дизайна» с правой стороны.
- Затем перетащите элемент «Маршрут» в элемент «Маршрут».
- Нажмите на элемент «Маршрутизация» и в нижней панели перейдите на вкладку «Свойства», где вы предоставите бизнес-сервис, к которому будет обращаться этот прокси-сервис, и имя операции.
- Результат будет следующим:
- Затем перетащите действие «Заменить» в компонент «Запросить действие».
- Прежде чем предоставить информацию на вкладке «Свойства» для действия «Заменить», нам нужно создать файлы преобразования 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 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 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» следующим образом;
- Затем нажмите «ОК», чтобы вернуться на вкладку «Свойства».
- Установите переключатель «Заменить содержимое узла». Конечный результат будет выглядеть следующим образом;
- Теперь давайте перетащим действие «Заменить» в компонент «Ответное действие».
- Как и прежде, выберите преобразование ответа «$ body / ins: InstalledBaseSubscriberClassificationQueryResponse».
- Теперь вы получите сообщение о том, что пространство имен «ins» не распознано.
- Чтобы решить эту проблему, на той же вкладке «Свойства» выберите вкладку «Пространства имен» и нажмите «Добавить». Введите префикс «ins», а URI — «http://www.openuri.org/».
И это все. Теперь мы можем проверить функциональность. Прежде чем сделать это, не забудьте сначала запустить фиктивную службу, созданную в интерфейсе SOAP.
Теперь давайте войдем в консоль служебной шины, перейдем в прокси-службу и запустим тестовую консоль. Это результат, который я получил, запустив образец;
Вы можете увидеть след того, что именно произошло, если пойти дальше вниз на том же экране в разделе «Отслеживание вызовов». Преобразование запроса и ответа, выполняемое OSB, можно увидеть следующим образом;
На этом наше введение в Oracle Service Bus заканчивается. Если у вас есть какие-либо вопросы по этому поводу, пожалуйста, не стесняйтесь оставить комментарий, и я отвечу на него как можно скорее. Кроме того, если есть какие-либо улучшения, которые вы можете увидеть, пожалуйста, оставьте свой отзыв, что всегда очень ценится.
Ссылка: | Знакомство с сервисной шиной Oracle от нашего партнера JCG Динуки Арурилератне в блоге « Мой путь через ИТ» . |