Я создаю приложение J2EE, в котором хочу разрешить плагины. Я вполне убежден в совершенстве инфраструктуры IoC, поэтому приложение будет иметь ее для управления службами.
Теперь я хочу разрешить добавление плагинов в виде простого JAR, добавленного в путь к классам +, возможно, простой файл конфигурации для редактирования, чтобы активировать их, никоим образом не похожий на файлы конфигурации Spring XML.
Большая часть архитектуры плагинов будет основываться на шаблонах стратегия/конвейер/цепочка команд: например, лучший плагин для действия выбирается по стратегии, несколько плагинов добавляют фильтрующие действия к пользовательскому вводу благодаря конвейеру и так далее.
Итак, я хочу иметь возможность:
- определить сервисные интерфейсы в основном приложении,
- настроить базовую реализацию для расширяемых сервисов с выбранным шаблоном в основном приложении,
- пусть сторонние плагины регистрируются в этих хуках.
Первые 2 пункта довольно просты, с IoC или без. Последнее кажется более сложным без поддержки на уровне контейнера IoC, или, по крайней мере, есть много подводных работ (как управлять обнаружением путей к классам/сервисам, как управлять сервисными заказами в конвейере, когда изменение контекста (новые плагины), как управлять переопределением службы и т. д.).
Я знаю, что Tapestry5 хорош в этом отношении[1], но я не могу найти ничего действительно подходящего для Spring и Guice. И моя компания больше String/Guice, чем T5 (ну, если я смогу показать, что это лучшее решение...)
Поэтому мне интересно:
- если я пропустил какую-то очевидную документацию;
- если мои требования такие особенные;
- если контейнер IoC не подходит для этого, и я должен искать OSGi или что-то еще.
Спасибо за любые советы!
[1] http://tapestry.apache.org/tapestry5.1/tapestry-ioc/configuration.html