Before we start looking at on how to debug on SAP Portals PDK Application with Tomcat using Eclipse, let me introduce you to JPDA Server and its options.
JPDA – a Brief Intro
The Java Platform Debugger Architecture (JPDA) provides support and infrastructure needed to remotely debug Web/Servlet Application in Java 2 Platform, Standard Edition since version 1.3. To Debug a Java Application remotely Tomcat and JVM has to communicate with each other along with Eclipse. The Java Virtual Machine needed to be started with JPDA Server listening for Connections. In the reference implementation the JVM can listen from different sources.
- Socket Connection to JVM. Using a socket is perhaps the best method of remotely debugging the Java Application.
- Shared Memory (Only in Windows OS). Using Shared memory on windows platform JPDA Server can remotely debug the applications. I have tested this with a simple Servlet Web Application, but experienced very slow response times in processing debugging instructions from/to JPDA Server. And I could not make it work in ECLIPSE/PDK/TOMCAT Environment.
I recommend using Socket Connection to the JVM. Generally ‘X Flags’ are used to pass the JVM about debugging information with various options. -XDebug (notice the case) flag is the one which enables Debugging on JVM. The -Xrunjdwp flag is to set the type of transport (like dt_socket or dt_shmem) and its address. This parameter can be specified as below.
java appName -Xdebug -Xrunjdwp:server=y,transport=dt_shmem,address=jdbconn
server=y - Start the JPDA Server
transport=dt_shmem - Under Windows - Shared Memory
address=jdbconn - Name of the shared memory
to Use Socket Connection to the JPDA Server use the following parameter statement
java appName -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=5000
Problem. “Cannot Start Remote Debugging using Eclipse IDE on Tomcat 4.x?”
Generally Eclipse throws “Remote connection refused…..” etc messages while trying to connect to JVM using dt_shmem debug option. I have faced the similar problem while trying to start the remote debugging in Eclipse. I then started looking deeper into the CATALINA.bat script. I found out that out-of-box CATALINA script is trying to start the debugger with the Shared Memory option (transport=dt_shmem and address=jdbconn). This is the actual problem in not able to connect to the Virtual machine when you click on start debug button in Eclipse. To avoid this problem we can simply use the other JPDA Server option Socket.
Solution. There are two ways to resolve this problem.
2. By changing the catalina script – Search and replace the following variables
transport=dt_socket and address=5000 (Make sure the port is available by typing netstat -a in the dos window)
1. The simplest way is to set two environmental variables in windows system as follows. This is good becoz it works even if you reinstall/upgrade your tomcat to next version.
a. Right click on 'My Computer' and select properties
b. Click on 'Advanced' Tab and Select 'Environment Variables'
c. Click on 'New' button in the Second window (which is for all the users using the system)
d. Type 'JPDA_TRANSPORT' in Variable Name
e. Type 'dt_socket' in Variable Value
f. Click OK.
g. Repeat step C.
h. Type 'JPDA_ADDRESS' in Variable Name
i. Type '5000' in Variable Value. (Remember to type the same value you set in your Eclipse debug options)
j. Click OK.
k. Close all the windows by clicking OK.
Before you start the debuggin in Eclipse, Start your Tomcat server in Debug mode by typing
catalina jpda start
In ECLIPSE, after the tomcat started, now you are ready to start the remote debugger in Eclipse. Goto Run->Debug->Remote Application and click DEBUG button. You will see that DEBUG perspective shows messages that it has connected. Set some break points in your Application and run your iView from ECLIPSE by switching to Java perspective and deploying to the local portals. Vol la you are all set to debug your application.
Finally a note on the above instructions, the above procedure tested only with Tomcat 4.x. If you are running Tomcat 3.3 please make sure that it supports JPDA_TRANSPORT and JPDA_ADDRESS environment variables by looking at tomcat.bat script.