вбудовувати groovy shell в додаток

    У нас на роботі іноді виникає необхідність отримати доступ до працюючого 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 .
    
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.