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