2013-08-08 2 views
1

При работе над модульной архитектурой системы для корпоративного приложения я сталкиваюсь с некоторыми проблемами с инициализацией базы данных. У нас есть базовая библиотека, которая предоставляет базовые объекты и базовую конфигурацию. В дополнение к этому ядру построено несколько модулей. Они подключаются и могут иметь свои собственные объекты и конфигурацию. Некоторые характеристики:Инициализация модульной базы данных

  • Конфигурация, как и системные свойства, ресурсные базы и т. Д., Хранится в базе данных.
  • JPA используется для независимой системной базы данных.
  • Система работает на Java SE

Каждый модуль может принести свои собственные таблицы, но они могут также потребовать, чтобы заполнить сердечнике таблицу или таблицу ядра ResourceBundle. Поэтому нам как-то понадобится некоторый механизм для запуска DDL и инициализации DML для базы данных. Некоторые варианты:

  1. Создайте простые скрипты sql. Недостатком является то, что они должны быть независимыми от базы данных, и, возможно, это не самый дружественный разработчик. Разве мы не можем сгенерировать их с помощью некоторого инструмента DB diff?
  2. Использовать классы Java для инициализации через JPQL?
  3. Конфигурация магазина в файлах? Это позволяет избежать много (но не всех) конфигурации DML.
  4. Используйте какой-нибудь инструмент, например, жидбаза?

Какова будет наилучшая практика для этой (или аналогичной) проблемы?

+0

Вы отметили это сообщение с помощью Liquibase ... Разве этот инструмент вам не помогает? –

+0

@ MarkO'Connor это может быть вариант. Но я рассматриваю здесь подход с лучшей практикой. Поэтому, если есть другие/лучшие подходы, я с удовольствием узнаю о них. –

ответ

0

Использование базы данных для хранения всех данных конфигурации является наилучшим вариантом. Многие продукты, такие как WebSphere Portal или Liferay, используют базу данных для хранения данных конфигурации для каждого портлета или даже для темы. Не забудьте включить те, которые используются как часть SOA и бизнес-правил.

Таким образом, использование SQL-скриптов также является лучшим выбором. Однако, если вам требуются очень специфические функции SQL, возможно, вам потребуется создать несколько версий одного и того же сценария для каждой системы управления базами данных.

0

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

Обычно мы используем maven и несколько src папок, а также профили maven и различные сборки, чтобы иметь возможность создавать развертываемые с различными модулями. (у нас нет необходимости выталкивать отдельные модули и устанавливать их позже - это может быть другим в вашем проекте. Мы просто создаем разные версии с разными модулями.)

Во всяком случае, для БД мы используем жидкобумагу. Во-первых, чтобы управлять БД и внесенными в нее изменениями. Но также (и это может быть полезно для вас) включить/сгенерировать еще один SQL-скрипт, который добавляет таблицы для модулей.

Каждый модуль имеет свой собственный файл изменений, который включает в себя все, что необходимо для этого модуля (также в разных версиях по мере развития модулей во времени). Они могут быть применены или нет.

Итак, я думаю, что Liquibase также может быть полезна в вашем случае (хотя основная цель - управлять изменениями в БД).

Смежные вопросы