Мы должны разработать и поддерживать множество приложений на базе Java (для той же компании) разных размеров, областей и жизненных циклов. Некоторые из них огромны, а другие - просто простые страницы, которые могут прожить всего несколько месяцев (или дней), некоторые из них уже реализованы и нуждаются в рефакторинге.Как делиться бизнес-логикой между несколькими приложениями
Есть одна общая черта, хотя они нуждаются в доступе к (почти) той же информации.
Проблема
Из-за сложности данных компания обрабатывает, мы имеем дело с множеством различных источников, некоторые из них в наследство от древних времен. Наши объекты домена могут отображаться во многих из этих источников. Например, объект домена Контракт сопоставляется с нашей основной базой данных, но связанные с ним (физические) файлы хранятся на сервере документов, а связанная с ним деятельность хранится в базе данных NoSQL. Поэтому добавление, удаление, поиск любого из этих объектов связано со многими внутренними операциями.
Наши источники данных (хотя это может быть любой):
- AS400 (с использованием DB2 в качестве базы данных)
- Documentum менеджер документ
- Монго DB
- Внешние веб-сервисы
- Другие устаревшие источники
Обычно мы используем Glas sfish как сервер приложений и maven как наш инструмент сборки.
Гол
Наша цель состоит в том, чтобы создать бизнес-слой или библиотеку, все наши приложения могут получить доступ и это:
- Compact
- последовательны
- Простота в использовании
- Прост в обслуживании
- Доступен с человека у разных клиентов
То, что мы нашли до сих пор
Мы боролись в течение нескольких недель и до сих пор мы не можем найти что-либо полностью удовлетворительным. Некоторые решения:
пакет все бизнес-логики в одном или нескольких банках: Очень легко разделить, но все приложения должны будут содержать все зависимости фляги и конфигурационные файлы и заботиться о безопасности, кэширование и другие вещи. Трудно поддерживать (мы должны обновлять банки для каждого проекта, когда есть изменения).
Создайте проект Ejb, содержащий всю логику и доступ к нему удаленно: простота в обслуживании, безопасность, кэширование и конфигурация реализованы только один раз. Мы боимся штрафа за удаленные звонки. Как мы заметили в наших исследованиях, это кажется плохой практикой (у нас нет большого опыта работы с ejbs).
Создайте проект уха со всем, что внутри, и используйте локальный доступ: ну, это быстрее, чем удаленная версия, но это ад для поддержки.
Перейти к OSGI: Мы немного боимся этого, так как он не так популярен, как Ejb, и мы никогда не использовали его всерьез.
Есть ли обычная практика для такого рода проблем?
Большое спасибо!
Прошло некоторое время с тех пор, как я сделал несколько EJB. Не могли бы вы объяснить, почему вам нужен отдельный BL. Для стороны данных вы используете шаблоны DAO? Можно ли сопоставить их с несколькими источниками? Должно быть возможным управлять несколькими источниками данных. –
Спасибо за гипер-быстрый ответ! На самом деле это основная идея. Мы хотим использовать DAO для инкапсуляции всех грязных вещей. Проблема заключается в том, как получить доступ к этим DAO из приложений «клиент». – danielsan
Я бы рекомендовал подход osgi, если вы строите совершенно новое приложение. Но я бы не рекомендовал его, если вы планируете переносить множество вещей, и если команда является новой для osgi. – techuser