передача данных из хранимых процедур Oracle в Java - PullRequest
2 голосов
/ 14 сентября 2011

Мы собираемся написать новый веб-интерфейс для большой системы на основе базы данных Oracle. Все бизнес-правила уже закодированы в PL/SQL хранимых процедурах, и мы хотели бы повторно использовать как можно больше кода. Мы напишем несколько новых хранимых процедур, которые будут объединять существующие бизнес-правила и возвращать набор данных конечного результата.

Мы хотим сделать это на уровне базы данных, чтобы избежать обходов java-db. Уровень интерфейса будет написан на Java (мы хотели бы использовать GWT), поэтому нам нужен способ передачи данных из хранимых процедур Oracle на сторону службы Java. Данные могут быть, например, набор свойств определенного элемента или список элементов, соответствующих определенным критериям. Кто-нибудь порекомендует предпочтительный способ сделать это?

Мы рассматриваем один из 2 следующих сценариев:

  • передача объектов и списков объектов (типы объектов БД, определенные на уровень схемы)

  • прохождение sys_refcursor

Мы убедились, что оба подхода «выполнимы», вопрос больше в проектных решениях, наилучшей практике, возможных проблемах обслуживания, гибкости и т. Д.

Буду признателен за любые подсказки.

Ответы [ 3 ]

2 голосов
/ 14 сентября 2011

Я бы порекомендовал придерживаться рефкурсора с четко определенными ключами (согласовано с обеими сторонами разработчиками java и pl / sql).В будущем это будет гораздо проще расширять, вы можете легко преобразовать refcursor в hashmap, а затем hashmap в POJO, используя утилиты bean-компонента apache, если это необходимо.Я работаю над крупным телекоммуникационным проектом с множеством подходов к этой проблеме, и рефкурсор, кажется, лучший в конце дня.

1 голос
/ 14 сентября 2011

В прошлом я достиг того же самого с классическим JDBC CallableStatement без каких-либо проблем с производительностью или техническим обслуживанием. С ORM решениями, такими как Hibernate, делающими упорство гораздо более гибким, вы можете обернуть ваше решение в Hibernate, как это можно сделать в этой публикации . Также посмотрите этот пример , если вы еще не знакомы с процедурой сохранения пути и CallableStatement работает.

0 голосов
/ 14 сентября 2011

Прошло много времени с тех пор, как я сделал что-то подобное, но я помню, что вам нужно определить представление, которое вызывает вашу хранимую процедуру, и вы можете легко прочитать наборы результатов изнутри Java, с помощьюOR-mapper на ваш выбор.

Итак, это похоже на ваш сценарий 1, который никогда не вызывал никаких проблем в моем опыте.

Единственное, что нужно соблюдать осторожность, - это обработка транзакций:Если ваши хранимые процедуры записывают данные, и вы вызываете несколько из них в транзакции Java EE, вы можете оказаться в ситуации несогласованности данных.

...