How to remote debug Datafari
Valid from Datafari X.X
The way you will debug Datafari depends on the component you want to debug ! According to the module you want to debug, you will need to open a debug port on the right component JVM.
For any webapp related class or jsp file, the tomcat JVM is concerned;
For any Manifoldcf connector, the Manfifoldcf agent and tomcat MCF JVM are concerned;
For any lib or class used by Solr (eg update processor, plugin), the Solr JVM is concerned.
To enable remote debug on a JVM, you must set the following java option in the start script of the JVM:
-agentlib:jdwp=transport=dt_socket,server=y,address=8000,suspend=n
This will allow IDEs (Integrated Development Environment) to connect to the port specified by the address
parameter to debug the JVM. The suspend
parameter can be set to 'y' to tell the JVM to only start once an IDE is connected, this can be useful when you want to debug something that happens at the very beginning of the JVM start and cannot be triggered on purpose for instance.
Be careful with the address, in case you are debuging several components, be sure to have a different address for each component and be also sure that the specified address is not already used by another process on the machine !
Here is the location of the file to modify in order to add the remote debug java option for each component of Datafari:
Component | Location of the file to modify | Where to set the java option |
---|---|---|
Tomcat (Datafari main webapp) | [DATAFARI_HOME]/tomcat/bin/setenv.sh | The file already contains a commented line that you just need to uncomment (and adjust the #CATALINA_OPTS="$CATALINA_OPTS -agentlib:jdwp=transport=dt_socket,server=y,address=*:8696,suspend=n" |
Tomcat MCF | [DATAFARI_HOME]/tomcat-mcf/bin/setenv.sh | The file already contains a commented line that you just need to uncomment (and adjust the #CATALINA_OPTS="$CATALINA_OPTS -agentlib:jdwp=transport=dt_socket,server=y,address=*:8697,suspend=n" |
ManifoldCF agent | [DATAFARI_HOME]/mcf/mcf_home/options.env.unix | As we cannot add comments to this file, unlike the other components, there is no prepared line. You will need to add the following line (and adjust the |
Solr | [DATAFARI_HOME]/solr/bin/solr.in.sh | The file already contains a commented line that you just need to uncomment (and adjust the |
Once the java option correctly set, you will need to restart the concerned component: https://datafari.atlassian.net/wiki/spaces/DATAFARI/pages/2852716547
After that you will be able to perform remote debugging with your favorite IDE. For instance, using Eclipse as an IDE, if we want to debug a servlet in the Datafari webapp, after having modified the setenv.sh
file to enable remote debug on port 8696, we simply need to configure a debug configuration on the datafari-webapp
module as follow:
Then in the Debug configuration window, we need to double click on the “Remote Java Application” option to create a new remote debug conf of a JVM associated to the selected module:
In the right panel we can set several options, like the name of the debug configuration, but also the host and port of the JVM we want to connect to:
The host depends on the location of the JVM you want to debug. If it is on the same machine where you are running your IDE then it is ‘localhost
', otherwise it is the hostname of the machine holding the JVM you want to debug (in that case you will need to be sure that a connection on the specified port is allowed between the machine running the IDE and the machine running the JVM to debug).
Connection Type selected on Socket Attach is suitable for most cases when you want to debug a VM and attach your source code to it. Connection Type selected on Socket Listen is suitable for listening incoming connections.
Once everything is correctly configured you can click on the “Apply” button, then on the “Debug” button. The IDE will connect to the JVM and you will be able to set breakpoints in the code as if you were debugging a local application.
Debugging on a remote Datafari Server
Depending on your environment when working on the customer's Datafari, there are several ways to remote debug you can try:
You must be connected to the customer’s VPN network.
If you can’t launch debugging, check the connection to the server port: nc -zvw3 datafari_server_IP port
, for example nc -zvw3 10.42.9.7 8696
. If the connection fails, ask for the port to be opened for external use.
First method
Considering the method explained above for local debug, there are 2 parameters to modify:
in the java option of the JVM, add “
*:
" to the addres parameter:address=*:8696
in your IDE, specify the IP address where the component affected is located for the Host parameter of the Remote Debug script.
For example, if we consider debugging the datafari-webapp
module of a Datafari installed on a server whose IP address is 10.42.9.7
on a VPN network:
The command line for the “[DATAFARI_HOME]/tomcat/bin/setenv.sh
" file:
Second method
If the first method does not work, you must redirect the port of the Datafari component you wish to debug.
For example, on a client server, all the elements described above remain valid, except for this difference: it is necessary to redirect the server desired port to the localhost:desired_port
, for example to debug the webapp (Tomcat on port 8696 as described above):
Then, your IDE configuration is the same as above.