- PVSM.RU - https://www.pvsm.ru -
У нас на работе иногда возникает необходимость получить доступ к работающему java приложению, чтобы посмотреть какие-нибудь данные или подёргать методы. Раньше мы обходились тем, что писали jsp, закидывали в каталог, в котором развёрнуто наше приложение, и затем запрашивали эту jsp. Это было не очень удобно.
И однажды мне пришла в голову мысль облегчить себе жизнь, встроив groovy shell в приложение, сделав доступ к нему через telnet.
Мы используем spring, поэтому сам сервис реализован в виде spring-бина и сервис даёт доступ к контексту, в котором он определён.
Для того, чтобы включить telnet-сервер, нужно добавить в конфиг следующие строчки:
<bean class="ru.ind.tgs.GroovyShellService" p:listenPort="3333"/>
По причинам безопасности сокет биндится только на loopback интерфейс.
Теперь, после запуска проекта, можно подключиться к работающей java машине с помощью telnet, в котором мы увидим интерфейс groovy shell, где можем писать произвольный groovy код.
В шелле доступны специальные имена переменных: context — для доступа к spring контексту, в котором находится наш GroovyShellService и множество идентификаторов бинов, определенных в этом контексте, для прямого доступа к ним.
В groovy shell работает автодополнение идентификаторов бинов и вызываемых методов (по клавише tab).
Пример сессии:
$ telnet 127.0.0.1 3333
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
Groovy Shell (1.8.5, JVM: 1.7.0_51)
Type 'help' or 'h' for help.
-----------------------------------------------------------------------------------------------------------
groovy:000> context.isActive()
===> true
groovy:000> Arrays.toString(context.getBeanDefinitionNames())
===> [org.springframework.context.annotation.internalConfigurationAnnotationProcessor, ....]
groovy:000> userDAO.findAll();
===> [XXX, YYY]
Исходный код лежит на github [1].
Автор: ivnik
Источник [2]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/java/60448
Ссылки в тексте:
[1] github: https://github.com/ivnik/telnet-groovysh
[2] Источник: http://habrahabr.ru/post/223745/
Нажмите здесь для печати.