Pull to refresh

Comments 26

Столкнулся с требованием отправлять и получать SOAP сообщения из базы данных Oracle.

А можете объяснить, зачем?
В инфраструктуре которой я работаю почти все базы на Oracle. В основном вся логика написана на PL/SQL. Сторонние Компании-партнёры которые предоставляют нам услуги и с которым необходима интеграция предоставляют нам Web Service. Поэтому появилась необходимось из рабочих процедур базы напрямую обрашатся к Веб службам в режиме Онлайн.
Из первых предложений последнее никак не вытекает. (Почти) всегда можно найти альтернативный способ построения интеграционного решения.
А чем же плох данный способ?
Тем, что сервер БД — не сервер приложений. И даже (то место, где вы это делаете) — не интеграционная шина. Как следствие, вы постоянно будете влетать в ограничения и неудобства.

Что вы будете делать, когда ответ «с той стороны» будет занимать 100 мегабайт и идти полторы минуты? А когда понадобится SSL? А если нужно будет сделать аутентификацию на сертификатах?
--Как следствие, вы постоянно будете влетать в ограничения и неудобства.
Решение уже работает на боевой системе и пока ни с чем таким не сталкивался. Как писал ниже:
Данное решение далеко не претендует быть в списке лучших… Но необходимо было реализовать что то быстро и практично. Данное решение полностью отвечает всем необходимым(в моем случае) требований… И реализовано и применено довольно таки быстро)

Целью было написать простое решение именно для Базы Данных. Которое легко настроить и синтегрировать. Целью не было писать Уникальный SOAP/XML Клиент. Таких уже не мало написано и на той же Java.

--Что вы будете делать, когда ответ «с той стороны» будет занимать 100 мегабайт и идти полторы минуты? А когда понадобится SSL? А если нужно будет сделать аутентификацию на сертификатах?
Таких требований не возникало. Но думаю и эти пробелмы решаемы.
Простота этого решения иллюзорна. Мне искренне жаль того человека, который будет это поддерживать.
Уважаемый, здесь всего около 200 строк кода и 3 таблицы. Ваше мнение я не оспариваю и уважаю, но уж извините, если человек не может поддеражть 200 строк PL/SQL кода с инструкцией описанной выше, то его вы можете пожалеть.

P.S.: Я уже синтегрировал данное решение в нескольких модулях. Учитывая что среда телеком и трафик не малый. Проблем пока не возникало. Все работает стабильно. Проблемы и баги возможно будут, я буду их решать по мере их появления. Может быть об этих проблемах напишу в следующей статье.
здесь всего около 200 строк кода и 3 таблицы

А на подходящем для этого языке — порядка 5 строчек кода и ни одной таблицы. Разницу в стоимости поддержки представляете?

Как ваше решение отреагирует на недоступность сервиса? А на то, что сервис вернет 404? А на fault?

Я уже синтегрировал данное решение в нескольких модулях. Учитывая что среда телеком и трафик не малый. Проблем пока не возникало. Все работает стабильно. Проблемы и баги возможно будут, я буду их решать по мере их появления.

В этом пассаже самое характерное — это «я». Это и выглядит как типичное решение одного человека, которое этот человек сам и планирует поддерживать.
А на подходящем для этого языке — порядка 5 строчек кода и ни одной таблицы.

Подходящим языком для меня стал PL/SQL.

Разницу в стоимости поддержки представляете?

Я думаю данный цыфры (о строк кода) слишком ничтожны чтобы говорить о поддерже и тем более о стоимости данной поддержки. В моем случае статья и является инструкцией для поддержки.

Как ваше решение отреагирует на недоступность сервиса? А на то, что сервис вернет 404? А на fault?

На 404 вернет XML ответ в котором так и написано что путь не найден.
При fault попадет на exception запишет лог и процедура вернет NULL для каждого параметра.
В данных ситуациях стандартное поведение системы.

В этом пассаже самое характерное — это «я». Это и выглядит как типичное решение одного человека, которое этот человек сам и планирует поддерживать.

Да на первом этапе я буду поддерживать. Но ни какой сложности обьяснить человеку который свободно чувствует сеа в среде Оракла не вижу.

Я все же не пойму что же вас не устраивает?
-То что можно следать это другим способом? Ок, можно я не спорю. Но в данной статье я описал именно этот способ.
-То могут появится требования(SSL) которые «невозможно» сделать на PL/SQL? Я думаю нет ни чего невозможного. А также можно придумать уймо обходных путей, я уже не говорю о том что для тех «сложных» требований можно написать что то своё на той же Java.
-То что много кода и трудно поддерживать? На данный момент это не является проблемой и нет необходимости вовлечения людей которые не смогут поддерживать данное решение. Не говоря о том что не вижу никаких трудностей для человека который свободно чувствует сеа в среде Oracle.
Я думаю данный цыфры (о строк кода) слишком ничтожны чтобы говорить о поддерже и тем более о стоимости данной поддержки.

Вообще-то, не 0, а 200 и 5. И зная, что приложение даже в 100 строк может съедать часы на поддержку, я с подозрением отношусь к неэффективным реализациям.

В моем случае статья и является инструкцией для поддержки.

Если для поддержки нужна инструкция — это уже плохо.

процедура вернет NULL для каждого параметра.

Как отличить эту ситуацию от «сервис вернул null»?

Я все же не пойму что же вас не устраивает?

Применение неподходящих инструментов. Я могу понять, когда это делают «когда иначе вообще никак», но у вас не тот случай. Но воспринимать это как нормальное решение я не могу — именно по озвученным причинам.
Но воспринимать это как нормальное решение я не могу

Ваше право
Как я уже говорил,
Данное решение далеко не претендует быть в списке лучших… Но необходимо было реализовать что то быстро и практично. Данное решение полностью отвечает всем необходимым(в моем случае) требований…

Способов много и у всех есть свои плюсы и минусы…

В данной статье я рассматривал именно этот способ. А не степень его правильности.

Кого то это устроит а кого то нет. Суть и цель не в этом. Если вас не устраивает данное решение, то прошу напишите свое, а я с радостью с ним ознакомлюсь. Но это уже будет ваш способ решения. И может быть он будет правильным. Для вас.
Забавненько, а почему бы и нет. Хотя вообще для таких целей вероятнее всего нужен какой-ньть BPEL/SOA, на котором строится бизнес-логика.
Согласен, решений уймо. Данное решение далеко не претендует быть в списке лучших… Но необходимо было реализовать что то быстро и практично. Данное решение полностью отвечает всем необходимым(в моем случае) требований… И реализовано и применено довольно таки быстро)
Да этого решения я не находил… Но в данном случае думаю лучше написать что то свое чем капаться в чужом коде… Но с этим решением я тоже ознакомлюсь) Спасибо
Глянул ддл мельком — всегда индексируйте внешние ключи во избежание tm-блокировок
К слову, сейчас я решал бы сооовсем по-другому…
Как решили бы? Поделитесь опытом)
Сделал бы на готовом во встроенной java
Этот вариант я тоже рассматривал. Да соглашусь и так можно было сделать. Но данное решение заняло у меня в разы меньше времени.
Взглянул только мельком честно. А какая версия Oracle у вас? Древность похоже.
Советую просто почитать про XMLTRANSFORM для использования XSLT шаблонов вместо постановки подстроки с параметрами.
Зачем для хранения шаблона использовать varchar2(4000) когда есть уже давно тип поля XMLTYPE?
Опять же генерации ответа или XSLT или почитать XMLELEMENT.
Не так давно просто нужно поработать было с SOAP и прочим XML в Oracle, так там функционала просто море уже готового.
--Зачем для хранения шаблона использовать varchar2(4000) когда есть уже давно тип поля XMLTYPE?
Перед тем как перевести их в XMLTYPE необходимо заменить параметры в шаблоне XML на значения из параметров. Это же шаблон, а не само сообщение XML. На случай если границ Varchar2 будет не хватать можно использовать CLOB.

--Советую просто почитать про XMLTRANSFORM для использования XSLT шаблонов вместо постановки подстроки с параметрами.
--Опять же генерации ответа или XSLT или почитать XMLELEMENT.
Принял во внимание. Спасибо.
Перед тем как перевести их в XMLTYPE необходимо заменить параметры в шаблоне XML на значения из параметров. Это же шаблон, а не само сообщение XML. На случай если границ Varchar2 будет не хватать можно использовать CLOB

Смысл XMLTRANSFORM в том чтобы взять данные в виде XMLTYPE, применить на них XSLT и получить на выходе готовый XMLTYPE.
Тип XMLTYPE в Oracle тот же CLOB только с валидацией структуры XML. Невалидный XML не вставляется/апдейтится.
Я тоже сперва думал что 4000 этого хватит и очень быстро понял что это очень мало.
Делайте на будущее хорошо сразу, заготовки пригодятся 100%.
Примного признателен. Изучу данный материал и может применю что нибудь в данное решение.

Делайте на будущее хорошо сразу, заготовки пригодятся 100%.

Это точно
Sign up to leave a comment.

Articles