Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Groovy DSL для plugin-ов - Расширения человеческим языком

Groovy DSL для plugin-ов - Расширения человеческим языком

It is often beneficial to allow users extend your software with their own logic and with dynamic languages on the JVM it is also easy to do. In this session, we will share our experience in creating a public, Groovy-authored user plugin interface. We will explain what domain specific languages (DSLs) are, what their relevance to user plugins is, and how they can be implemented both in Groovy or Java. We will talk about another very important aspect of plugability: good public API design. Then we will cover security concerns and how they should be tackled. We will also discuss classpath isolation issues you may run into and will compare different solutions to this problem.

Baruch Sadogursky

October 19, 2013
Tweet

More Decks by Baruch Sadogursky

Other Decks in Technology

Transcript

  1. – Сервер для intranet-а – Обслуживает DM/CI/CD – Заточен под

    автоматизацию (REST API) – И под расширение (user plugins)
  2. – Запланированные чистки – Свой собственный секьюрити – Изменения на

    лету – Подмена контента – Реакция на события – Хитрый поиск
  3. – Свой собственный секьюрити – Изменения на лету – Подмена

    контента – Реакция на события – Хитрый поиск – Новые команды rest
  4. – Изменения на лету – Подмена контента – Реакция на

    события – Хитрый поиск – Новые команды rest – Своя логика при промотировании
  5. – Подмена контента – Реакция на события – Хитрый поиск

    – Новые команды rest – Своя логика при промотировании – Нестандартная метадата
  6. – Реакция на события – Хитрый поиск – Новые команды

    rest – Своя логика при промотировании – Нестандартная метадата – И прочий ад...
  7. <3

  8. Парсируем Groovy скрипты Создаем объекты closure Cast в SAM Находим

    SAM-ы в classpath Мапа SAM-ов Cast в Closure Запускаем
  9. Проектируем PAPI – Papi это контракт – Не ломаем! Обратная

    совместимость – наше все! – Начинаем по-маленьку _____________
  10. Проектируем PAPI – Papi это контракт – Не ломаем! Обратная

    совместимость – наше все! – Начинаем по-маленьку – Ругань пользователей подскажет, чего не хватает _____________
  11. Проектируем PAPI – Не ломаем! Обратная совместимость – наше все!

    – Начинаем по-маленьку – Ругань пользователей подскажет, чего не хватает – Fluent APIs – Это хорошо _____________
  12. Проектируем PAPI совместимость – наше все! – Начинаем по-маленьку –

    Ругань пользователей подскажет, чего не хватает – Fluent APIs – Это хорошо – Не любишь писать доки? Тогда API должен быть strongly typed _____________
  13. Конфликт – Нужен доступ к джарам artifactory (PAPI) – Нужна

    изоляция от джаров artifactory (3rd party) __________
  14. Java 8: 12/2012 - Java 7: 07/2011 = Цикл в

    15 месяцев Вывод: Java 9: 05/2013
  15. Java 8: 12/2012 - Java 7: 07/2011 = Цикл в

    15 месяцев Вывод: Java 9: 05/2013 Это-ж полгода назад! Oh, wait… Ещё-ж даже 8 не вышла!
  16. Java 7: 07/2011 + 24 месяца = Java 8: 01/2014

    Сколько Марк скажет
  17. Java 7: 07/2011 + 24 месяца = Java 8: 01/2014

    + 24 месяца = Сколько Марк скажет
  18. Java 7: 07/2011 + 24 месяца = Java 8: 01/2014

    + 24 месяца = Java 9: 01/2016 Сколько Марк скажет
  19. Java 7: 07/2011 + 24 месяца = Java 8: 01/2014

    + 24 месяца = Java 9: 01/2016 Сколько Марк скажет
  20. Java 7: 07/2011 + 24 месяца = Java 8: 03/2014

    + 24 месяца = Java 9: 03/2016 (Если не будет больше постов про поезд) Сколько Марк скажет
  21. Java 7: 07/2011 + 24 месяца = Java 8: 03/2014

    + 24 месяца = Java 9: 03/2016 (Если не будет больше постов про поезд) Сколько Марк скажет