При реализации сервисов с использованием стека WSO2 (или любой другой Java-инфраструктуры с открытым исходным кодом) вы рано или поздно столкнетесь с ситуацией, когда поведение фреймворка не будет работать так, как вы ожидаете. Или вы просто хотите проверить, как работает продукт. В последнее время у меня было несколько таких событий, и я нашел способ настроить сеанс удаленной отладки, чтобы шаг за шагом пройтись по коду, чтобы увидеть, что именно происходит. Конечно, это имеет смысл, только если у вас есть доступный исходный код (да здравствует открытый исходный код ..
В этом посте приведен пример с WSO2 ESB (v 4.8.1) в сочетании с IntelliJ IDEA .
Первый шаг — получить исходный код ESB WSO2, способ сделать это описан здесь . Когда у нас есть загруженные исходники, мы также можем загрузить двоичный файл, чтобы ESB работал локально на нашей машине (Кстати, я также пытался собрать стек WSO2 из исходных кодов, но после нескольких часов попыток я так и не смог его успешно завершить) ). Когда у нас есть оба источника и двоичный файл, мы можем начать наш сеанс отладки. Сначала запустите ESB WSO2, перейдя в следующий каталог «$ ESB_HOME / bin» и выполните команду «./wso2server.sh -debug 5005», например:
Как видите, процесс запуска ESB приостановлен до запуска сеанса отладки на порту 5005. Теперь перейдите к IntelliJ IDEA (или я предполагаю, что другие IDE также поддерживают это) и создайте новую рабочую конфигурацию, такую как:
В конфигурации я меняю только имя конфига. Как вы можете видеть, сервер и порт по умолчанию являются правильными в моем случае:
После сохранения конфигурации мы можем начать сеанс отладки, щелкнув «ошибка» в строке меню:
Когда сеанс запущен, мы видим следующую строку в консоли IntelliJ:
Connected to the target VM, address: 'localhost:5005', transport: 'socket'
И мы видим, что ESB WSO2 продолжил запуск.
Now comes the hardest part and that is to place the breakpoint at the correct place in the source code, since there is a lot of it in the WSO2 stack :-). Best is if you have a stack trace pointing you to a certain class. Another common place to set a breakpoint are the builtin mediators. The pom.xml for this component can be found in ‘$SRC_HOME/dependencies/synapse/2.1.2-wso2v5/modules/core’. So import this pom.xml in your IntelliJ:
Browse to the class ‘org.apache.synapse.mediators.builtin.LogMediator.java’ and set a breakpoint at the ‘mediate’ method:
Now make sure the mediator is called by the ESB and you will see that IntelliJ will get the focus as soon as the code reaches the breakpoint:
Now from this point on you can step through the execution of the code and see why things are happening the way they do.
Hopefully this will help you like it helped me in several occasions where I didn’t find any help in the documentation or Google.