У зарубежного заказчика существует система под управлением СУБД Oracle – множество схем, содержащие помимо данных пакеты с бизнес логикой на PL/SQL. В наши задачи входило расширение функционала путем реализации новых пакетов и дальнейшая интеграция с разрабатываемыми веб сервисами на технологиях Java.
Для задачи интеграции веб сервисов с PL/SQL процедурами были сформированы следующие требования к библиотекам:
• поддержка как хранимых процедур, так и функций;
• поддержка множественных как входных, так и выходных параметров;
• поддержка сложных структур, как для входных, так и для выходных параметров.
В качестве потенциальных кандидатов, реализующих механизм вызова хранимых процедур Oracle из Java, значились технологии, часто нами используемые:
• Hibernate;
• Spring.
Hibernate налагает множества ограничений для вызова хранимых процедур (функций) СУБД и Oracle в частности: хранимая процедура или функция должны возвращать resultset первым out (выходным) параметром. Это ограничение означает, что мы можем вернуть в Java только единственный выходной параметр. А именно: для функции – возвращаемое значение, для процедуры – out (выходной) параметр, причем этот параметр должен быть первым. Уже при одном таком ограничении hibernate не подходил для решения наших задач. Подробнее о вызове хранимых процедур узнайте в главе 16.2.2. “Using stored procedures for querying” документации hibernate.
Spring предлагает более гибкий вариант, а именно, расширяя класс StoredProcedure, инкапсулировать каждую процедуру/функцию в объект. Допустимы множественные входные и выходные данные. Структура данных может быть сложной, для ее преобразования реализуется мэппинг. Документация содержит информацию об использовании хранимых процедур/функций и пример реализации: 11.4.4. StoredProcedure.
В итоге мы использовали Spring для реализации вызова хранимых процедур/функций Oracle из Java. Мне было бы интересно узнать, какие технологии, библиотеки Вы используете для доступа к данным СУБД, для вызова хранимых процедур/функций?
Для задачи интеграции веб сервисов с PL/SQL процедурами были сформированы следующие требования к библиотекам:
• поддержка как хранимых процедур, так и функций;
• поддержка множественных как входных, так и выходных параметров;
• поддержка сложных структур, как для входных, так и для выходных параметров.
В качестве потенциальных кандидатов, реализующих механизм вызова хранимых процедур Oracle из Java, значились технологии, часто нами используемые:
• Hibernate;
• Spring.
Hibernate
Hibernate налагает множества ограничений для вызова хранимых процедур (функций) СУБД и Oracle в частности: хранимая процедура или функция должны возвращать resultset первым out (выходным) параметром. Это ограничение означает, что мы можем вернуть в Java только единственный выходной параметр. А именно: для функции – возвращаемое значение, для процедуры – out (выходной) параметр, причем этот параметр должен быть первым. Уже при одном таком ограничении hibernate не подходил для решения наших задач. Подробнее о вызове хранимых процедур узнайте в главе 16.2.2. “Using stored procedures for querying” документации hibernate.
Spring
Spring предлагает более гибкий вариант, а именно, расширяя класс StoredProcedure, инкапсулировать каждую процедуру/функцию в объект. Допустимы множественные входные и выходные данные. Структура данных может быть сложной, для ее преобразования реализуется мэппинг. Документация содержит информацию об использовании хранимых процедур/функций и пример реализации: 11.4.4. StoredProcedure.
Вместо заключения
В итоге мы использовали Spring для реализации вызова хранимых процедур/функций Oracle из Java. Мне было бы интересно узнать, какие технологии, библиотеки Вы используете для доступа к данным СУБД, для вызова хранимых процедур/функций?