Простая среда обнаружения служб Java

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

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

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

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

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


person Lóránt Pintér    schedule 13.07.2010    source источник
comment
OSGi может решить такие проблемы и, кроме того, предоставляет способы разделения модулей и т. д., что будет важно, если у вас есть подключаемые модули, которые зависят от других библиотек.   -  person Jesper    schedule 13.07.2010


Ответы (4)


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

person skaffman    schedule 13.07.2010

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

http://river.apache.org/

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

person user469187    schedule 05.04.2012

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

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

person Riduidel    schedule 13.07.2010
comment
не могли бы вы опубликовать ссылку на простой пример JSPF? Я пытаюсь использовать эту структуру, но я не могу понять, как работает функция «Параметры». - person capovawi; 14.03.2014

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

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

person Partly Cloudy    schedule 02.11.2011