Monday, May 31, 2010

Debugging Alfresco Tomcat with Eclipse

I am having trouble debugging Alfresco (a web app running on Tomcat) with Eclipse. For some reason I can’t access it in debugging mode. I am sure this is not anything specific to Alfresco; probably it is to do with either not having Tomcat set up correctly for debug mode or something environmental on my PC preventing Eclipse from connecting to Tomcat in debug mode.

I posted about this on the Alfresco forums (Debugging Alfresco Tomcat with Eclipse), but haven’t received any response as yet. So here is a detailed description of my problem.

I have the JPDA_TRANSPORT environment variable is set to dt_socket.

The JPDA_ADDRESS environment variable is set to 8000.

In Tomcat’s startup script (C:\Alfresco\tomcat\bin\startup.bat), I changed the line that invokes Catalina to include jpda:

call "%EXECUTABLE%" jpda start %CMD_LINE_ARGS%

When I start Tomcat and see the below messages in the console.

Listening for transport dt_socket at address: 8000
  28/05/2010 1:44:42 PM org.apache.coyote.http11.Http11Protocol init
  INFO: Initializing Coyote HTTP/1.1 on http-8080

I set up Eclipse debug config as per the screen shot below.

And when I attempt to start that debug configuration, I get the below error from Eclipse.

Error detail is below.

eclipse.buildId=2.3.1.201003091003-RELEASE
  java.version=1.6.0_20
  java.vendor=Sun Microsystems Inc.
  BootLoader constants: OS=win32, ARCH=x86, WS=win32, NL=en_AU
  Framework arguments:  -product com.springsource.sts.ide
  Command-line arguments:  -os win32 -ws win32 -arch x86 -product com.springsource.sts.ide -clean -data D:\work\projects\JadeLynx\Alfresco-3.3

  Error
  Fri May 28 14:55:37 EST 2010
  Failed to connect to remote VM. Connection refused.

  java.net.ConnectException: Connection refused: connect
     at java.net.PlainSocketImpl.socketConnect(Native Method)
     at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
     at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
     at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
     at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
     at java.net.Socket.connect(Socket.java:529)
     at java.net.Socket.connect(Socket.java:478)
     at java.net.Socket.<init>(Socket.java:375)
     at java.net.Socket.<init>(Socket.java:189)
     at org.eclipse.jdi.internal.connect.SocketTransportService$2.run(SocketTransportService.java:136)
     at java.lang.Thread.run(Thread.java:619)

I made sure Windows firewall was turned off.

I made sure Eclipse has no proxy information.

I did a netstat -an | grep -i listen to confirm port is being listened at. I guess it is:

TCP    0.0.0.0:8080           0.0.0.0:0              LISTENING

I tried the advice in this thread: Debugging Alfresco Tomcat with Eclipse .

Open Catalina.bat [C:\Alfresco\tomcat\bin], find “DEBUG_OPTS=” and add following line..
  set DEBUG_OPTS= -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000

I tried the advice in this thread too : Remote Debugging with Eclipse.

You may also add following line to your alfresco.sh and start the server
  export JAVA_OPTS='-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=y'

All to no avail. So, how do I prove the server is really listening? Any other ideas would be more than welcome!

Further information: when the server has started, I see this on the console (before I even try to connect to the debugger):

CODE: SELECT ALL
31/05/2010 1:45:41 PM org.apache.coyote.http11.Http11Protocol start
INFO: Starting Coyote HTTP/1.1 on http-8080
31/05/2010 1:45:41 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 159453 ms
Debugger failed to attach: timeout during handshake

Solved!

Talk about egg on my face! The debugging was working perfectly all along.. each time I tried, Eclipse "did nothing", which I thought was weird - so I tried again and got the error message. What I didn't realise is that Eclipse had started debugging the first time: I just didn't realise it because I am used to Eclipse saying "Shall I enter debug mode?"

What a relief. *whew* :)