2013-03-28 4 views
6

Мы должны разработать и поддерживать множество приложений на базе Java (для той же компании) разных размеров, областей и жизненных циклов. Некоторые из них огромны, а другие - просто простые страницы, которые могут прожить всего несколько месяцев (или дней), некоторые из них уже реализованы и нуждаются в рефакторинге.Как делиться бизнес-логикой между несколькими приложениями

Есть одна общая черта, хотя они нуждаются в доступе к (почти) той же информации.

Проблема

Из-за сложности данных компания обрабатывает, мы имеем дело с множеством различных источников, некоторые из них в наследство от древних времен. Наши объекты домена могут отображаться во многих из этих источников. Например, объект домена Контракт сопоставляется с нашей основной базой данных, но связанные с ним (физические) файлы хранятся на сервере документов, а связанная с ним деятельность хранится в базе данных NoSQL. Поэтому добавление, удаление, поиск любого из этих объектов связано со многими внутренними операциями.

Наши источники данных (хотя это может быть любой):

  • AS400 (с использованием DB2 в качестве базы данных)
  • Documentum менеджер документ
  • Монго DB
  • Внешние веб-сервисы
  • Другие устаревшие источники

Обычно мы используем Glas sfish как сервер приложений и maven как наш инструмент сборки.

Гол

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

  • Compact
  • последовательны
  • Простота в использовании
  • Прост в обслуживании
  • Доступен с человека у разных клиентов

То, что мы нашли до сих пор

Мы боролись в течение нескольких недель и до сих пор мы не можем найти что-либо полностью удовлетворительным. Некоторые решения:

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

  • Создайте проект Ejb, содержащий всю логику и доступ к нему удаленно: простота в обслуживании, безопасность, кэширование и конфигурация реализованы только один раз. Мы боимся штрафа за удаленные звонки. Как мы заметили в наших исследованиях, это кажется плохой практикой (у нас нет большого опыта работы с ejbs).

  • Создайте проект уха со всем, что внутри, и используйте локальный доступ: ну, это быстрее, чем удаленная версия, но это ад для поддержки.

  • Перейти к OSGI: Мы немного боимся этого, так как он не так популярен, как Ejb, и мы никогда не использовали его всерьез.

Есть ли обычная практика для такого рода проблем?

Большое спасибо!

+0

Прошло некоторое время с тех пор, как я сделал несколько EJB. Не могли бы вы объяснить, почему вам нужен отдельный BL. Для стороны данных вы используете шаблоны DAO? Можно ли сопоставить их с несколькими источниками? Должно быть возможным управлять несколькими источниками данных. –

+0

Спасибо за гипер-быстрый ответ! На самом деле это основная идея. Мы хотим использовать DAO для инкапсуляции всех грязных вещей. Проблема заключается в том, как получить доступ к этим DAO из приложений «клиент». – danielsan

+0

Я бы рекомендовал подход osgi, если вы строите совершенно новое приложение. Но я бы не рекомендовал его, если вы планируете переносить множество вещей, и если команда является новой для osgi. – techuser

ответ

2

Я бы не рекомендовал поместить всю логику в 1 проект EAR и использовать локальный доступ. Если у вас много кода в одном месте, его будет сложнее поддерживать, тестировать, развертывать и т. Д.

Я бы создал проект maven-модуля maven с общими зависимостями. Одна из зависимостей - служба с бизнес-логикой и доступом DAO, которая будет выставлять API. С проектом Maven вы можете легко управлять версиями файлов POM. Различные проекты могут работать с другой версией общего сервиса. Maven будет управлять версией для вас. Однако для этого требуются некоторые настройки и усилия по внедрению.

Другой вариант, упомянутый вами - автономный EAR с удаленными EJB, должен работать нормально. Не беспокойтесь о производительности и количестве удаленных вызовов, если у вас нет большой нагрузки. Просто кэшируйте удаленные EJB-заглушки на клиенте, чтобы избежать ненужного поиска JNDI.

Лично я предпочитаю первый вариант с общей зависимостью, управляемый Maven. Он прост в эксплуатации, легко управляется версиями, развертывается, настраивается. С Maven вам не нужно вручную менять файл jar для каждого проекта, вы можете просто использовать такие инструменты, как Nexus

+0

Спасибо Антон. Пока у нас есть мультимодульный проект maven, состоящий из 6 модулей (все бизнес-логики и объекты домена). Я понимаю, вы имеете в виду, что мы могли бы использовать каждое из клиентских приложений в качестве другого независимого проекта maven и называть бизнес-API как зависимость, правильно? В этом случае это означает, что мы будем развертывать Business API с каждым клиентским приложением, и в этом случае нам придется использовать разные серверы приложений. – danielsan

+0

Да, если вы извлечете свою бизнес-логику для разделения проекта maven, вы можете включить в качестве зависимости от всех ваших приложений. В этом случае вы можете использовать разные серверы приложений, если хотите – Anton

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