WedX - журнал о программировании и компьютерных науках

преобразование приложения J2EE из Sql в Oracle - предложения с эффективным подходом

У нас есть приложение J2EE, построенное на Struts2+spring+iBatis; не все DAO используют iBatis... некоторый код все еще использует старый подход JDBC для взаимодействия с базой данных. Все наши DAO вызывают хранимые процедуры, у нас нет встроенного SQL. Поскольку хранимые процедуры Oracle возвращают курсоры, нам приходится кардинально менять наш код.

Нам довольно легко преобразовать текущие сопоставления iBatis (в sql) в oracle (для этого мы использовали groovy script), также легко преобразовать код Java, который вызывал старые сопоставления, которые были в sql.

Наша проблема состоит в том, чтобы преобразовать старые DAO, которые все еще используют подход JDBC. Поскольку нам все равно придется изменить их (поскольку мы сейчас используем оракул), мы думаем о преобразовании их в отображения iBatis. это хороший подход? Это будет огромным усилием с нашей стороны...

как вы думаете, что будет лучшим подходом к решению этой огромной задачи?

  • мы должны просто приступить к работе и начать преобразовывать каждый метод в каждом DAO
  • мы должны попытаться сделать небольшой скрипт, который просматривает каждый метод, анализирует соответствующую информацию и создает из нее сопоставления iBatis.
  • для целей обслуживания и разделения у нас должно быть 1 сопоставление iBatis для каждого DAO

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

31.10.2009

Ответы:


1

Первое, что вы должны сделать, это протестировать слой DAO. Таким образом, вы будете знать, сломали ли вы что-то во время конвертации. Если вы перемещаете хранимую процедуру из одной СУБД в Oracle, вам также следует написать для нее тесты с использованием такой структуры, как DbUnit.

У вас должен быть экземпляр TEST DB, заполненный демонстрационными данными, которые не меняются. Вы должны иметь возможность обновить эту БД с тем же набором образцов данных после того, как вы закончите свои тесты. Это гарантирует, что ваша TEST DB находится в известном состоянии. Затем у вас будут входные параметры в паре с некоторым ожидаемым (правильным) результатом. Ваш тест прочитает эти пары и выполнит их для тестового экземпляра БД и подтвердит, что возвращен ожидаемый результат. Предполагая, что ваши тесты мутируют БД, вы захотите обновить БД между запусками вашего набора тестов.

Во-вторых, если вы уже приступили к изменению некоторых реализаций доступа к данным для Oracle, почему бы не использовать это как возможность перенести часть этой бизнес-логики из БД в Java? Есть много хорошо задокументированных проблем с поддержкой больших кодовых баз в СУБД.

мы должны попытаться сделать небольшой скрипт, который просматривает каждый метод, анализирует соответствующую информацию и создает из нее сопоставления iBatis.

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

для целей обслуживания и разделения у нас должно быть 1 сопоставление iBatis для каждого DAO

Это хорошая идея. Затем вы можете комбинировать их в своем sqlMapConfig с помощью

<sqlMap resource="sqlMaps/XXX.xml" />

Это сделает ваши сопоставления более управляемыми. Просто не забудьте указать атрибут namespace в каждом sqlMap, например:

<sqlMap namespace="User">

Таким образом, вы можете повторно использовать сопоставления между sqlMaps для создания экземпляров графов объектов (пример: при загрузке пользователя и его разрешений sqlMap User.xml вызывает сопоставление Permission.xml).

31.10.2009
  • ....Первое, что вы должны сделать, это протестировать свой слой DAO... - точно с этим. 31.10.2009
  • когда вы упоминаете тесты... вы имеете в виду модульные тесты? мой вопрос об этом... будут ли эти тесты запускаться автоматически? это означает, что мне придется переходить на каждую страницу jsp. Нажмите на что-то, что запускает метод или тест DAO. ИЛИ эти тесты будут запущены все сразу. Если все сразу, то будут ли параметры хранимых процедур жестко прописаны в тесте? 31.10.2009
  • @Omni: в Junit и TestNG есть различные механизмы для настройки наборов тестов. Вы должны запускать их автоматически и в идеале после каждого изменения, которое вы вносите в код. Их правильнее было бы назвать интеграционными тестами, потому что вы бы не просто выполняли реализацию DAO изолированно, а вместе с экземпляром БД. 31.10.2009
  • Я рекомендую вам настроить цель Maven, задачу Ant, сценарий оболочки или какой-либо другой механизм, в котором одним щелчком мыши (или даже автоматически при регистрации SCM) запускается полный набор тестов. Если это слишком медленно, попробуйте перенести его на другую машину или в другое расписание. 31.10.2009
  • Кроме того, вы не захотите жестко задавать параметры. Цель состоит в том, чтобы у вас был набор параметров вместе с их ожидаемым результатом. Вы можете сохранить эти пары ключ/значение в XML и легко прочитать их с помощью Commons Configuration. Тогда у вас будет экземпляр TEST DB, данные которого не изменяются. Это важно, потому что, если вы используете какой-то живой экземпляр, изменение данных может привести к некорректной работе ваших тестов. 31.10.2009
  • Если под модульными тестами вы подразумеваете автоматизированные, то да, DbUnit позволяет писать автоматизированные тесты. Кстати, я считаю их интеграционными, а не модульными тестами (поскольку они включают несколько уровней). 31.10.2009
  • Спасибо, парни. Я начну изучать Junit и DbUnit. Я тоже думал о тестах, но раньше опыта с ними не было. ..сейчас идеальное время :) 31.10.2009

  • 2

    Все наши DAO вызывают хранимые процедуры

    Я не понимаю, что iBatis покупает у вас здесь.

    Также непонятно, что такое миграция. Вы хотите сказать, что решили переместить весь код в хранимые процедуры, чтобы больше не было встроенного SQL? Если это так, я бы сказал, не используйте iBatis. Если вы уже используете Spring, позвольте ему вызывать Oracle, используя его StoredProcedure и сопоставьте курсоры с объектами.

    Рекомендация создавать тесты JUnit или, что еще лучше, TestNG — точна. Сделайте это, прежде чем что-либо менять.

    31.10.2009
  • Они, вероятно, используют его для автоматического создания объектов, поэтому им не нужно вручную переводить ResultSet в экземпляр Object. 31.10.2009
  • нет, мы не перемещаем наш код в хранимую процедуру. По сути, серверная часть меняется с SQL на Oracle, и наш код должен меняться вместе с этим. Еще до этой миграции мы использовали хранимые процедуры. теперь разница в том, что хранимые процедуры SQL возвращают наборы результатов, тогда как оракул возвращает курсоры. вот почему наш код должен измениться 31.10.2009
  • Новые материалы

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..


    Для любых предложений по сайту: [email protected]