2010-07-13 3 views
8

Я хотел бы узнать все реализации интерфейса во время выполнения в приложении Java и динамически загружать эти классы из файлов JAR, которые пользователь может добавить в папку. Это плагин, в основном.Простая инфраструктура обнаружения служб Java

Я нашел несколько решений для этого:

  • Использование SPI - это не очень гибким: Я хотел бы кое-что, возможно, работает с аннотациями, или просто ищет интерфейс, который продлевается, без добавив внешние текстовые файлы.
  • Использование Commons Discovery - выглядит как тупик, так как последний релиз 0,4 от спины в 2005
  • Использование Java Simple Plugin Framework. 5 minutes and it works. No XML. - это выглядит очень незрелыми.

Есть ли другие широко используемые решения для этого?

Обновление: Нет необходимости в разделении кода, а OSGi кажется слишком сложным для моих простых нужд прямо сейчас. Я также добавил «Простой» к названию этого вопроса, чтобы прояснить мои намерения.

+0

OSGi может решить такие проблемы и, кроме того, предоставляет способы блокировки модулей и т. Д., Что будет важно, если у вас есть подключаемые модули, которые имеют зависимости от других библиотек. – Jesper

ответ

4

Это бит на тяжелой стороне, но вы должны рассмотреть Apache Felix или Eclipse Equinox, обе версии OSGi очень живы и пинаются, но, возможно, переполнены для ваших нужд. Однако это одна из тех проблем, которые OSGi предназначена для решения.

0

Как и @skaffman, OSGi и современные реализации, построенные на основе, кажутся идеальным решением. Если вы выступаете в качестве приглашенного зрителя, подумайте о iPOJO, который прекрасно сочетает аннотации в стеке OSGi (обратите внимание, что iPOJO работает на любой платформе OSGi). Если вы больше в идее XML/Spring, рассмотрите возможность использования Blueprint.

Наконец, учитывая JSPF, я не буду делиться вашим мнением о его незрелости. Поработав немного над этим проектом, я считаю его действительно полезным в своей области, так как он позволяет легко использовать плагин, без разделения проблем и классов, которые предоставляет OSGi.

+0

Вы могли бы разместить ссылку на простой пример JSPF? Я пытаюсь использовать эту структуру, но я не могу понять, как работает функция «Параметры». – capovawi

0

+1 SPI - это легкий вес, немного обслуживания (услуги/* текстовые файлы), но способ, которым загрузчики классов Java работают с любым «автообнаружением», не будет на 100% надежным; вы можете уменьшить сложность текстовых файлов с помощью простой программы, которая для данного проекта/каталога генерирует и/или (я рекомендую) тесты, что все реализации включены

+2 OSGi - если вы готовы пойти полусреднем весе, и обратите внимание на реализации становятся легче и проще (по крайней мере, некоторые из них!)

1

Вы могли бы попробовать открытие службы реки Apache (ранее Jini)

http://river.apache.org/

Он открывает услуги по Удаленный интерфейс и загружает прокси-сервер для вас, который является местным RMI-заглушкой.