Простая среда обнаружения сервисов Java - PullRequest
8 голосов
/ 13 июля 2010

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

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

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

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

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

Ответы [ 4 ]

4 голосов
/ 13 июля 2010

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

1 голос
/ 05 апреля 2012

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

http://river.apache.org/

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

0 голосов
/ 02 ноября 2011

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

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

0 голосов
/ 13 июля 2010

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

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

...