![Page 1: Как не наступить на грабли, внедряя скрипты в java приложение](https://reader033.vdocuments.net/reader033/viewer/2022052304/55878a90d8b42a3c318b46f5/html5/thumbnails/1.jpg)
Как не наступить на
грабли, внедряя скрипты
в java приложение
![Page 2: Как не наступить на грабли, внедряя скрипты в java приложение](https://reader033.vdocuments.net/reader033/viewer/2022052304/55878a90d8b42a3c318b46f5/html5/thumbnails/2.jpg)
Это грабли
![Page 3: Как не наступить на грабли, внедряя скрипты в java приложение](https://reader033.vdocuments.net/reader033/viewer/2022052304/55878a90d8b42a3c318b46f5/html5/thumbnails/3.jpg)
Когда ваше приложение требует
динамичности
![Page 4: Как не наступить на грабли, внедряя скрипты в java приложение](https://reader033.vdocuments.net/reader033/viewer/2022052304/55878a90d8b42a3c318b46f5/html5/thumbnails/4.jpg)
![Page 5: Как не наступить на грабли, внедряя скрипты в java приложение](https://reader033.vdocuments.net/reader033/viewer/2022052304/55878a90d8b42a3c318b46f5/html5/thumbnails/5.jpg)
Исполняем код динамически
![Page 6: Как не наступить на грабли, внедряя скрипты в java приложение](https://reader033.vdocuments.net/reader033/viewer/2022052304/55878a90d8b42a3c318b46f5/html5/thumbnails/6.jpg)
JSR 199: Java Compiler API
![Page 7: Как не наступить на грабли, внедряя скрипты в java приложение](https://reader033.vdocuments.net/reader033/viewer/2022052304/55878a90d8b42a3c318b46f5/html5/thumbnails/7.jpg)
JSR 199: Java Compiler API
![Page 8: Как не наступить на грабли, внедряя скрипты в java приложение](https://reader033.vdocuments.net/reader033/viewer/2022052304/55878a90d8b42a3c318b46f5/html5/thumbnails/8.jpg)
Javassist
![Page 9: Как не наступить на грабли, внедряя скрипты в java приложение](https://reader033.vdocuments.net/reader033/viewer/2022052304/55878a90d8b42a3c318b46f5/html5/thumbnails/9.jpg)
Groovy
![Page 10: Как не наступить на грабли, внедряя скрипты в java приложение](https://reader033.vdocuments.net/reader033/viewer/2022052304/55878a90d8b42a3c318b46f5/html5/thumbnails/10.jpg)
Why Groovy?
Синтаксический сахар
Динамичность
Простота интеграции
Java код – валидный groovy код
Просто построить DSL
![Page 11: Как не наступить на грабли, внедряя скрипты в java приложение](https://reader033.vdocuments.net/reader033/viewer/2022052304/55878a90d8b42a3c318b46f5/html5/thumbnails/11.jpg)
DSL
A domain-specific language (DSL) is a
computer language specialized to a particular
application domain
![Page 12: Как не наступить на грабли, внедряя скрипты в java приложение](https://reader033.vdocuments.net/reader033/viewer/2022052304/55878a90d8b42a3c318b46f5/html5/thumbnails/12.jpg)
Groovy in 5 minutes
![Page 13: Как не наступить на грабли, внедряя скрипты в java приложение](https://reader033.vdocuments.net/reader033/viewer/2022052304/55878a90d8b42a3c318b46f5/html5/thumbnails/13.jpg)
![Page 14: Как не наступить на грабли, внедряя скрипты в java приложение](https://reader033.vdocuments.net/reader033/viewer/2022052304/55878a90d8b42a3c318b46f5/html5/thumbnails/14.jpg)
![Page 15: Как не наступить на грабли, внедряя скрипты в java приложение](https://reader033.vdocuments.net/reader033/viewer/2022052304/55878a90d8b42a3c318b46f5/html5/thumbnails/15.jpg)
![Page 16: Как не наступить на грабли, внедряя скрипты в java приложение](https://reader033.vdocuments.net/reader033/viewer/2022052304/55878a90d8b42a3c318b46f5/html5/thumbnails/16.jpg)
![Page 17: Как не наступить на грабли, внедряя скрипты в java приложение](https://reader033.vdocuments.net/reader033/viewer/2022052304/55878a90d8b42a3c318b46f5/html5/thumbnails/17.jpg)
![Page 18: Как не наступить на грабли, внедряя скрипты в java приложение](https://reader033.vdocuments.net/reader033/viewer/2022052304/55878a90d8b42a3c318b46f5/html5/thumbnails/18.jpg)
JSR 223: Scripting for the Java
Platform
The specification will describe mechanisms
allowing scripting language programs to
access information developed in the Java
Platform and allowing scripting language
pages to be used in Java Server-side
Applications.
![Page 19: Как не наступить на грабли, внедряя скрипты в java приложение](https://reader033.vdocuments.net/reader033/viewer/2022052304/55878a90d8b42a3c318b46f5/html5/thumbnails/19.jpg)
JSR 223: Scripting for the Java
Platform
![Page 20: Как не наступить на грабли, внедряя скрипты в java приложение](https://reader033.vdocuments.net/reader033/viewer/2022052304/55878a90d8b42a3c318b46f5/html5/thumbnails/20.jpg)
Пишем ScriptService
![Page 21: Как не наступить на грабли, внедряя скрипты в java приложение](https://reader033.vdocuments.net/reader033/viewer/2022052304/55878a90d8b42a3c318b46f5/html5/thumbnails/21.jpg)
![Page 22: Как не наступить на грабли, внедряя скрипты в java приложение](https://reader033.vdocuments.net/reader033/viewer/2022052304/55878a90d8b42a3c318b46f5/html5/thumbnails/22.jpg)
Мы несем ответственность за
свой API
![Page 23: Как не наступить на грабли, внедряя скрипты в java приложение](https://reader033.vdocuments.net/reader033/viewer/2022052304/55878a90d8b42a3c318b46f5/html5/thumbnails/23.jpg)
Правила проектирования
скриптового API
1. Обратная совместимость
![Page 24: Как не наступить на грабли, внедряя скрипты в java приложение](https://reader033.vdocuments.net/reader033/viewer/2022052304/55878a90d8b42a3c318b46f5/html5/thumbnails/24.jpg)
Правила проектирования
скриптового API
1. Обратная совместимость
2. Документация
![Page 25: Как не наступить на грабли, внедряя скрипты в java приложение](https://reader033.vdocuments.net/reader033/viewer/2022052304/55878a90d8b42a3c318b46f5/html5/thumbnails/25.jpg)
Правила проектирования
скриптового API
1. Обратная совместимость
2. Документация
3. Immutable объекты в контексте с
информацией +
Stateless сервисы взаимодействия
![Page 26: Как не наступить на грабли, внедряя скрипты в java приложение](https://reader033.vdocuments.net/reader033/viewer/2022052304/55878a90d8b42a3c318b46f5/html5/thumbnails/26.jpg)
Как написать хороший скрипт
1. Шапка скрипта
![Page 27: Как не наступить на грабли, внедряя скрипты в java приложение](https://reader033.vdocuments.net/reader033/viewer/2022052304/55878a90d8b42a3c318b46f5/html5/thumbnails/27.jpg)
Как написать хороший скрипт
1. Шапка скрипта
2. Логирование
![Page 28: Как не наступить на грабли, внедряя скрипты в java приложение](https://reader033.vdocuments.net/reader033/viewer/2022052304/55878a90d8b42a3c318b46f5/html5/thumbnails/28.jpg)
Как написать хороший скрипт
1. Шапка скрипта
2. Логирование
3. Используйте преимущества Groovy
![Page 29: Как не наступить на грабли, внедряя скрипты в java приложение](https://reader033.vdocuments.net/reader033/viewer/2022052304/55878a90d8b42a3c318b46f5/html5/thumbnails/29.jpg)
![Page 30: Как не наступить на грабли, внедряя скрипты в java приложение](https://reader033.vdocuments.net/reader033/viewer/2022052304/55878a90d8b42a3c318b46f5/html5/thumbnails/30.jpg)
Groovy IDE
1. Groovy Eclipse Plugin
2. IntelliJ IDEA
![Page 31: Как не наступить на грабли, внедряя скрипты в java приложение](https://reader033.vdocuments.net/reader033/viewer/2022052304/55878a90d8b42a3c318b46f5/html5/thumbnails/31.jpg)
![Page 32: Как не наступить на грабли, внедряя скрипты в java приложение](https://reader033.vdocuments.net/reader033/viewer/2022052304/55878a90d8b42a3c318b46f5/html5/thumbnails/32.jpg)
CodeMirror
![Page 33: Как не наступить на грабли, внедряя скрипты в java приложение](https://reader033.vdocuments.net/reader033/viewer/2022052304/55878a90d8b42a3c318b46f5/html5/thumbnails/33.jpg)
![Page 34: Как не наступить на грабли, внедряя скрипты в java приложение](https://reader033.vdocuments.net/reader033/viewer/2022052304/55878a90d8b42a3c318b46f5/html5/thumbnails/34.jpg)
![Page 35: Как не наступить на грабли, внедряя скрипты в java приложение](https://reader033.vdocuments.net/reader033/viewer/2022052304/55878a90d8b42a3c318b46f5/html5/thumbnails/35.jpg)
DSLD
![Page 36: Как не наступить на грабли, внедряя скрипты в java приложение](https://reader033.vdocuments.net/reader033/viewer/2022052304/55878a90d8b42a3c318b46f5/html5/thumbnails/36.jpg)
DSLD
![Page 37: Как не наступить на грабли, внедряя скрипты в java приложение](https://reader033.vdocuments.net/reader033/viewer/2022052304/55878a90d8b42a3c318b46f5/html5/thumbnails/37.jpg)
![Page 38: Как не наступить на грабли, внедряя скрипты в java приложение](https://reader033.vdocuments.net/reader033/viewer/2022052304/55878a90d8b42a3c318b46f5/html5/thumbnails/38.jpg)
![Page 39: Как не наступить на грабли, внедряя скрипты в java приложение](https://reader033.vdocuments.net/reader033/viewer/2022052304/55878a90d8b42a3c318b46f5/html5/thumbnails/39.jpg)
![Page 40: Как не наступить на грабли, внедряя скрипты в java приложение](https://reader033.vdocuments.net/reader033/viewer/2022052304/55878a90d8b42a3c318b46f5/html5/thumbnails/40.jpg)
![Page 41: Как не наступить на грабли, внедряя скрипты в java приложение](https://reader033.vdocuments.net/reader033/viewer/2022052304/55878a90d8b42a3c318b46f5/html5/thumbnails/41.jpg)
![Page 42: Как не наступить на грабли, внедряя скрипты в java приложение](https://reader033.vdocuments.net/reader033/viewer/2022052304/55878a90d8b42a3c318b46f5/html5/thumbnails/42.jpg)
![Page 43: Как не наступить на грабли, внедряя скрипты в java приложение](https://reader033.vdocuments.net/reader033/viewer/2022052304/55878a90d8b42a3c318b46f5/html5/thumbnails/43.jpg)
![Page 44: Как не наступить на грабли, внедряя скрипты в java приложение](https://reader033.vdocuments.net/reader033/viewer/2022052304/55878a90d8b42a3c318b46f5/html5/thumbnails/44.jpg)
“CodeNarc analyzes Groovy code for defects, bad practices, inconsistencies, style issues and more”
![Page 45: Как не наступить на грабли, внедряя скрипты в java приложение](https://reader033.vdocuments.net/reader033/viewer/2022052304/55878a90d8b42a3c318b46f5/html5/thumbnails/45.jpg)
![Page 46: Как не наступить на грабли, внедряя скрипты в java приложение](https://reader033.vdocuments.net/reader033/viewer/2022052304/55878a90d8b42a3c318b46f5/html5/thumbnails/46.jpg)
CI для скриптов
![Page 47: Как не наступить на грабли, внедряя скрипты в java приложение](https://reader033.vdocuments.net/reader033/viewer/2022052304/55878a90d8b42a3c318b46f5/html5/thumbnails/47.jpg)
![Page 48: Как не наступить на грабли, внедряя скрипты в java приложение](https://reader033.vdocuments.net/reader033/viewer/2022052304/55878a90d8b42a3c318b46f5/html5/thumbnails/48.jpg)
![Page 49: Как не наступить на грабли, внедряя скрипты в java приложение](https://reader033.vdocuments.net/reader033/viewer/2022052304/55878a90d8b42a3c318b46f5/html5/thumbnails/49.jpg)
![Page 50: Как не наступить на грабли, внедряя скрипты в java приложение](https://reader033.vdocuments.net/reader033/viewer/2022052304/55878a90d8b42a3c318b46f5/html5/thumbnails/50.jpg)
Я только запустил скрипт
![Page 51: Как не наступить на грабли, внедряя скрипты в java приложение](https://reader033.vdocuments.net/reader033/viewer/2022052304/55878a90d8b42a3c318b46f5/html5/thumbnails/51.jpg)
@TimedInterrupt
![Page 52: Как не наступить на грабли, внедряя скрипты в java приложение](https://reader033.vdocuments.net/reader033/viewer/2022052304/55878a90d8b42a3c318b46f5/html5/thumbnails/52.jpg)
![Page 53: Как не наступить на грабли, внедряя скрипты в java приложение](https://reader033.vdocuments.net/reader033/viewer/2022052304/55878a90d8b42a3c318b46f5/html5/thumbnails/53.jpg)
![Page 54: Как не наступить на грабли, внедряя скрипты в java приложение](https://reader033.vdocuments.net/reader033/viewer/2022052304/55878a90d8b42a3c318b46f5/html5/thumbnails/54.jpg)
![Page 55: Как не наступить на грабли, внедряя скрипты в java приложение](https://reader033.vdocuments.net/reader033/viewer/2022052304/55878a90d8b42a3c318b46f5/html5/thumbnails/55.jpg)
@ThreadInterrupt
![Page 56: Как не наступить на грабли, внедряя скрипты в java приложение](https://reader033.vdocuments.net/reader033/viewer/2022052304/55878a90d8b42a3c318b46f5/html5/thumbnails/56.jpg)
@ConditionalInterrupt
![Page 57: Как не наступить на грабли, внедряя скрипты в java приложение](https://reader033.vdocuments.net/reader033/viewer/2022052304/55878a90d8b42a3c318b46f5/html5/thumbnails/57.jpg)
@ConditionalInterrupt
![Page 58: Как не наступить на грабли, внедряя скрипты в java приложение](https://reader033.vdocuments.net/reader033/viewer/2022052304/55878a90d8b42a3c318b46f5/html5/thumbnails/58.jpg)
ImportCustomizer
![Page 59: Как не наступить на грабли, внедряя скрипты в java приложение](https://reader033.vdocuments.net/reader033/viewer/2022052304/55878a90d8b42a3c318b46f5/html5/thumbnails/59.jpg)
SecureASTCustomizer
![Page 60: Как не наступить на грабли, внедряя скрипты в java приложение](https://reader033.vdocuments.net/reader033/viewer/2022052304/55878a90d8b42a3c318b46f5/html5/thumbnails/60.jpg)
![Page 61: Как не наступить на грабли, внедряя скрипты в java приложение](https://reader033.vdocuments.net/reader033/viewer/2022052304/55878a90d8b42a3c318b46f5/html5/thumbnails/61.jpg)
![Page 62: Как не наступить на грабли, внедряя скрипты в java приложение](https://reader033.vdocuments.net/reader033/viewer/2022052304/55878a90d8b42a3c318b46f5/html5/thumbnails/62.jpg)
Спасибо за внимание