Выбор платформы Java-плагина
Мы пытаемся определить, как реализовать простую инфраструктуру плагинов для внедряемой нами службы, которая позволяет подключать различные типы калькуляторов.
После прочтения ряда постов о фреймворках для плагинов Java, кажется, что наиболее распространенные варианты:
- OSGI
- " Rolling your own" Плагин фреймворк
- Плагин Java Framework (JPF)
- Простая платформа плагинов Java (JSPF)
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.