Какие механизмы расширения / плагина / провайдера можно использовать для расширения моего веб-приложения?

Я работаю над веб-приложением JavaEE, которое сможет извлекать данные из разных источников. Данные будут извлечены и сохранены в базе данных для последующей обработки и составления отчетов. Я начал с одного поставщика данных по умолчанию, охватывающего конкретный источник, но хотел бы спроектировать архитектуру приложения таким образом, чтобы я или даже другие могли писать плагины поставщиков данных / поставщиков данных для разных источников данных.

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

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

Я думал о "точках расширения OSGI", но это больше для приложений на платформе rcp, а мое - это веб-приложение. Так что я исключил это сейчас.

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

Какие механизмы / подходы / рамки вы можете порекомендовать для решения этого архитектурного вопроса?

Большое спасибо заранее и ура, Майкл

1 ответ

Решение

Я бы использовал наблюдателя событий. Во время запуска приложения вы поднимаете DiscoverDataProviders событие, которое имеет registerDataProvider(...) метод. Расширительные банки могут наблюдать за событием и регистрировать себя.

См. http://docs.oracle.com/javaee/6/api/javax/enterprise/event/Observes.html

Другие вопросы по тегам