Remote debugging Wildfly application in IntelliJ
Remote debugging a Java application means connecting to the remotely running application using your local development environment. Java supports remote debugging out of the box: the target application must be executed with -agentlib:jdwp[=options]
option which loads Java Debug Wire Protocol (jdwp) library that allows remote debugging using for example socket connection. In this short article you will learn how to get started with debugging web application deployed to Wildfly server by using IntelliJ.
The application
For the demo purposes a very simple application can be used: it contains a single (entry) JSP file and a single Java Servlet:
Wildfly Application Server
In this sample you can use Wildfly Servlet-Only Distribution. Get it from here: http://wildfly.org/downloads/
Configure Wildfly for remote debugging
Once the server is downloaded and extracted follow the below steps:
- Edit
WILDFLY_HOME/standalone/configuration/standalone.xml
and change the socket binding port for management console from9990
to9991
(this can be found insocket-binding-group
element). With the default port setting you will see an exception while running the server:
ERROR [org.jboss.msc.service.fail] (MSC service thread 1-2) MSC000001: Failed to start service jboss.serverManagement.controller.management.http: org.jboss.msc.service.StartException in service jboss.serverManagement.controller.management.http: java.net.BindException: Address already in use: bind /127.0.0.1:9990
- Navigate to
WILDFLY_HOME/bin
and runstandalone.bat
(Windows) orstandalone.sh
(Linux) with--debug
parameter. This parameter will force the server to run in debug mode hence enables remote debugging. The extra parameters passed to theJVM
you will notice during the startup in the console:
JAVA_OPTS: "-client -Dprogram.name=standalone.bat -Xms64M -Xmx512M -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman -agentlib:jdwp=transport=dt_socket,address=8787,server=y,suspend=n"
The command: agentlib:jdwp=transport=dt_socket,address=8787,server=y,suspend=n
loads jwdp
library and listens on port 8787
for the socket connection.
- Deploy the application (e.g.
webapp-demo.war
) by copying theWAR
file toWILDFLY_HOME/standalone/deployments
. Verify the application was deployed.
Remote debugging Wildfly application in IntelliJ
Assuming that the application is running properly, open the source code for this app in IntelliJ to remotely debug it. In order to do so, you need to create a run configuration for the project.
- Open
Run > Edit configurations
and add new configuration. FindJBoss
on the list of available configurations and selectRemote
. In case application server is not yet configured, please configure it by pointing JBoss home to the directory of your Wildfly installation (WILDFLY_HOME
):
- Now change some default settings of the configuration and save. Set
Management port
to9991
inServer
tab, setPort
to8787
inStartup/Connection
tab forDebug
configuration:
- Run the debug configuration and wait until IntelliJ connects to Wildfly server.
- Set the breakpoint in the Java Servlet you want to debug (e.g.
MyServlet.java
) or in any of your JSP files and execute the code on the server e.g. by calling a valid servlet URL. Wait for the debugger to hit your breakpoints:
Enjoy remote debugging Wildfly application in IntelliJ!
Reference: | Remote debugging Wildfly application in IntelliJ from our JCG partner Rafal Borowiec at the Codeleak.pl blog. |
When I run with –debug, the debug port(8787) is only bound to the localhost ip addr. The management and regular ports (9997, 8081) are bound to all addresses. I can’t find a property to bind the debug port to an ipaddr in the standalone.xml.
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 127.0.0.1:9992 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:9997 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:8081 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:8082 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:8787