Встраивание Groovy Shell В Приложение

На работе иногда нам нужно получить доступ к работающему Java-приложению, чтобы просмотреть некоторые данные или изменить методы.

Раньше мы обходились написанием jsp, бросанием его в каталог, в котором развернуто наше приложение, и последующим запросом этого jsp. Это было не очень удобно.

И однажды мне пришла в голову идея облегчить себе жизнь, встроив в приложение заводную оболочку, сделав ее доступной по телнету.

Мы используем Spring, поэтому сам сервис реализован как Spring Bean, и сервис обеспечивает доступ к контексту, в котором он определен.

Для того, чтобы включить telnet-сервер, вам необходимо добавить в конфиг следующие строки:

  
   

<bean class="ru.ind.tgs.GroovyShellService" p:listenPort="3333"/>

По соображениям безопасности сокет привязан только к интерфейсу обратной связи.

Теперь, после запуска проекта, мы можем подключиться к работающей Java-машине с помощью telnet, в котором мы увидим groovy-интерфейс оболочки, где мы можем написать произвольный groovy-код. В оболочке доступны специальные имена переменных: context — для доступа к контексту Spring, в котором находится наш GroovyShellService и многие идентификаторы bean-компонентов, определенные в этом контексте, для прямого доступа к ним.

В groovy-оболочке работает автодополнение идентификаторов компонентов и вызываемых методов (с помощью клавиши табуляции).

Пример сеанса:

$ 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 .

Теги: #groovy Shell #telnet #java

Вместе с данным постом часто просматривают: