2009-10-23 3 views
57

Мы пытаемся определить, как реализовать простую структуру плагина для внедряемой нами службы, которая позволяет «подключать» различные типы калькуляторов.Выбор рамки плагина Java

После прочтения number постов о рамках плагина Java, похоже, наиболее распространенных вариантов являются:

OSGI, кажется, больше, чем нам нужно.

«Роллинг» - это нормально, но было бы полезно повторно использовать общую библиотеку.

Итак, мы спустились к JPF и JSPF. JPF, похоже, больше не находится в активной разработке.

JSPF кажется очень простым и действительно всем, что нам нужно. Однако я ничего не слышал об этом. Я видел только один post на StackOverflow об этом. Кто-нибудь еще имеет опыт работы с JSPF? Или любые другие комментарии по этому выбору дизайна?


Update: Существует не обязательно правильный ответ на этот вопрос .. однако мы будем идти с идеей Павла, как нам нужно просто очень, очень простое решение. Спасибо EoH за хороший гид.

ответ

29

Если вы планируете иметь только одну (или только несколько) не очень сложные «точки расширения», чем, возможно, четко определенный SPI, и может быть достаточно части конфигурации. Нет необходимости использовать плагиновую фреймворк.

Под куском конфигурации я имею в виду какой-то механизм для поиска ваших плагинов. Например, что-то вроде META-INF/services/ или просто перечисление ваших плагинов в файле конфигурации.

Подробнее (по запросу):

SPI = Service Provider Interface, "реализатором стороне эквивалент API". Чтобы узнать больше, попробуйте найти разницу между API и SPI. Однако в этом контексте просто фантастический термин для интерфейса, который будет реализован вашими плагинами (т. Е. Определяет контракт для ваших плагинов).

Прекрасная короткая статья «Creating a Service Provider Interface» от Ethan Nicholas описывает, как создать собственный SPI, как это делается в нескольких частях платформы Java.

META-INF/services/ можно рассматривать как более обобщенный подход к созданию SPI. Более подробную информацию можно найти в соответствующем разделе JAR File Specification.

+0

API или SPI? Что такое SPI? – Egwor

+0

У нас только один (или не более нескольких) прямых расширений. Можете ли вы рассказать о своей идее? –

+0

Извините за поздний ответ. Я обновил свой оригинальный ответ более подробно. –

43

(Отказ от ответственности: я являюсь автором JSPF, так что лучше взять мой комментарий с зерном соли ;-)

Основная причина, почему я начал с JSPF потому, что у меня была такая же проблема, как у вас сейчас : Я искал простое решение, чтобы сделать мой тезис-проект 1) расширяемым и 2) дать ему более или менее четкую структуру кода.

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

Мы пытаемся определить, как реализовать простую структуру плагин для службы мы реализуем, что позволяет различные типы калькуляторов быть «подключен в».

Я думаю, что вы могли бы дать JSPF выстрел и посмотреть, как далеко вы достигнете в течение одного или двух часов.

Однако окончательное решение также зависит от того, что именно вы хотите достичь, и конкретных обстоятельств.

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

Таким образом, чтобы ответить на ваш вопрос кратко (и, конечно, тенденциозно), я хотел бы использовать

OSGi для проектов и команд

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

JPF для проектов и команды

  • среднего размера (?, Если честно, я не уверен, что размер проекта/команды они ориентируются)
  • которые нуждаются в более структурированных объектах для организации их код, например, XML-конфигурации, подробное управление жизненным циклом плагина, расширяемые плагины ...

JSPF для проектов и команд

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

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

+3

Использует ли кто-нибудь JSPF в производстве? –

+0

есть кто-нибудь простой пример с JSPF? Я хотел бы понять функцию «Параметры». – capovawi

+4

Является ли jspf устаревшим? – wener

2

Если вам нужно действительно простое решение, попробуйте jin-plugin. Это минималистический плагин для Java и PHP.

Смежные вопросы