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.

3d73332968c0bf62e1ece7299deb8b37?s=128

Baruch Sadogursky

October 19, 2013
Tweet

Transcript

  1. None
  2. None
  3. None
  4. None
  5. None
  6. None
  7. None
  8. None
  9. None
  10. None
  11. None
  12. None
  13. None
  14. None
  15. None
  16. None
  17. None
  18. None
  19. None
  20. None
  21. None
  22.  

  23.   

  24.    

  25.    

  26. None
  27. None
  28. – Сервер для intranet-а

  29. – Сервер для intranet-а – Обслуживает DM/CI/CD

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

    автоматизацию (REST API)
  31. – Сервер для intranet-а – Обслуживает DM/CI/CD – Заточен под

    автоматизацию (REST API) – И под расширение (user plugins)
  32. None
  33. None
  34. None
  35. None
  36. None
  37. None
  38. None
  39. None
  40. None
  41. – Запланированные чистки

  42. – Запланированные чистки – Свой собственный секьюрити

  43. – Запланированные чистки – Свой собственный секьюрити – Изменения на

    лету
  44. – Запланированные чистки – Свой собственный секьюрити – Изменения на

    лету – Подмена контента
  45. – Запланированные чистки – Свой собственный секьюрити – Изменения на

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

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

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

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

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

    rest – Своя логика при промотировании – Нестандартная метадата – И прочий ад...
  51. None
  52. None
  53. None
  54. None
  55. None
  56. – Привычно для Джавистов!

  57. – Привычно для Джавистов! – Простой DSL!

  58. – Привычно для Джавистов! – Простой DSL! – Простой деплоймент!

  59. – Привычно для Джавистов! – Простой DSL! – Простой деплоймент!

    – И никаких перезагрузок!
  60. – Привычно для Джавистов! – Простой DSL! – Простой деплоймент!

    – И никаких перезагрузок!
  61. None
  62. None
  63. None
  64. None
  65. None
  66. None
  67. None
  68. None
  69. None
  70. None
  71. None
  72. None
  73. None
  74. None
  75. Ништяки по- мелочи

  76. Ништяки по- мелочи «Это на каком языке написано?!»

  77. Ништяки по- мелочи «Это на каком языке написано?!»

  78. None
  79. None
  80. None
  81. None
  82. Ништяки по- мелочи «Это на каком языке написано?!»

  83. None
  84. Ништяки по- мелочи «Это на каком языке написано?!»

  85. <3

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

    SAM-ы в classpath Мапа SAM-ов Cast в Closure Запускаем
  87. None
  88. None
  89. None
  90. None
  91. None
  92. None
  93. None
  94. None
  95. None
  96. None
  97. None
  98. None
  99. None
  100. None
  101. None
  102. None
  103. Алло, покажите уже код уже!

  104. None
  105. None
  106. None
  107. None
  108. None
  109. None
  110. None
  111. Проектируем PAPI – Papi это контракт _____________

  112. None
  113. Проектируем PAPI – Papi это контракт _____________

  114. Проектируем PAPI – Papi это контракт – Не ломаем! Обратная

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

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

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

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

    Ругань пользователей подскажет, чего не хватает – Fluent APIs – Это хорошо – Не любишь писать доки? Тогда API должен быть strongly typed _____________
  119. Алло, покажите уже код уже!

  120. None
  121. None
  122. None
  123. None
  124. None
  125. None
  126. None
  127. None
  128. None
  129. История с радисткой Кэт подтверждает:

  130. В нашей профессии, зависимости – дело плохое!

  131. None
  132. Конфликт __________

  133. Конфликт – Нужен доступ к джарам artifactory (PAPI) __________

  134. Конфликт – Нужен доступ к джарам artifactory (PAPI) – Нужна

    изоляция от джаров artifactory (3rd party) __________
  135. None
  136. None
  137. None
  138. None
  139. None
  140. None
  141. None
  142. None
  143. None
  144. None
  145. Если нет времени, перематываем!

  146. None
  147. None
  148. Дано: Релиз Java 7 07/2011 Релиз Java 8 12/2012 Найти:

    Релиз Java 9 ?
  149. None
  150. Java 8: 12/2012

  151. Java 8: 12/2012 - Java 7: 07/2011

  152. Java 8: 12/2012 - Java 7: 07/2011 = Цикл в

    15 месяцев
  153. Java 8: 12/2012 - Java 7: 07/2011 = Цикл в

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

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

  158. Java 7: 07/2011 + 24 месяца =

  159. Java 7: 07/2011 + 24 Месяца = Java 8: 07/2013

  160. None
  161. Java 7: 07/2011 + 24 Месяца = Java 8: 07/2013

  162. Java 7: 07/2011 + 24 месяца = Java 8: 01/2014

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

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

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

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

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

    + 24 месяца = Java 9: 03/2016 (Если не будет больше постов про поезд) Сколько Марк скажет
  169. None
  170. None
  171. None
  172. None
  173. None
  174. None
  175. None
  176. Делов то... ________

  177. Делов то... 1. Вытягиваем наверх все общее ________

  178. Делов то... 1. Вытягиваем наверх все общее 2. Изолируем внизу

    все остальное ________
  179. Делов то... 1. Вытягиваем наверх все общее 2. Изолируем внизу

    все остальное ________
  180. None
  181. None
  182. None
  183. None
  184. None
  185. None