Выбор платформы Java-плагина

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

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

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

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

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

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


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

3 ответа

Решение

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

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

Более подробная информация (по запросу):

SPI = http://en.wikipedia.org/wiki/Service_Provider_Interface, "эквивалент API на стороне разработчика". Чтобы узнать больше, попробуйте найти разницу между API и SPI. Однако в этом контексте это просто модный термин для интерфейса, который будет реализован вашими плагинами (т.е. определяет контракт для ваших плагинов).

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

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

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

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

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

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

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

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

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

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

ОСГи для проектов и команд

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

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

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

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

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

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

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

Другие вопросы по тегам