Выбор платформы Java plugin

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

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

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

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

Итак, мы отстаем от JPF и JSPF. JPF больше не работает в активной разработке.

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


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

Ответ 1

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

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

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

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

Хорошая, короткая статья " Создание интерфейса поставщика услуг. Этан Николас описывает, как создать свой собственный SPI таким же образом, как и сделано в нескольких частях самой платформы Java.

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

Ответ 2

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Ответ 3

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