Joine Music

  • Subscribe to our RSS feed.
  • Twitter
  • StumbleUpon
  • Reddit
  • Facebook
  • Digg

Thursday, 8 May 2008

Advanced Enterprise Debugging Techniques - TS-6072

Posted on 07:40 by Unknown
DISCLAIMER:
These are the tidied up notes I took from the session at the JavaOne 2008 conference in San Francisco, California. There may well be mistakes and ommissions. I will come back and correct them once the conference has completed. However my first priority is to get the information published before the backlog gets too large and swamps me. All comments welcome. Enjoy!

Neal Ford, Thoughtworks

Debugging 101
- Problem? Before you do anything else, step away from the computer and think. This is the hardest thing to learn

Forensic debugging with loggers
- Log4J
- Examine log4j's xml log files with Chainsaw (aSwing UI) which hacks up your log dumps. It allows filtering to look at particular log files post mortem
- You can create a genrator for Log4J which you can plug right into chainsaw which allows you to view running apps live (still with the filtering etc.)

Fiddling with your application in production? - Fiddle
- Ideally your debug (dev.) environment would like like production - but it never does
- But you don't want to turn on remote debugging in live
- There is an OSS app which allows you to fiddle with your app using scripting languages to find out what is going on in there in production
- Fiddle: A single jar file with no external dependencies which you drop into your app server
- Get it from fiddle.dev.java.net
- It provides a fiddle executable servlet. You send it some scripting code which it will execute and display the output on the fiddle web page
- It also comes with fiddler - a text area where you type in the script
- fiddle-scripts - pre rolled fiddle scripts for you to use
- Your scripts can use groovy, javascript, jython (scripting so you don't need to compile.)
- e.g. get info from system tables, get the loader path, find out which xml parser is loaded, get all the system properties, you can even tweak security settings and get values out of HTTP sessions
- To use it, take the fiddle servlet, put it behind a password protected page, and use as required

Debugging back in time - Omniscient Debugger
- Takes regular snapshots when your app runs and saves them.
- Allows you to visit any snapshots in the past - i.e. run your app until it gets corrupted, then you go back in time to find out where things went wrong. It effectievly sprinkles breakpoints and allows you to go and use them
- Now you can walk through, one snapshot at a time. You can also walk backwards through the timestamps.
- All you need to tweak is how granular you want the snapshots. But you can make this pretty coarse grained and still see how things work
- Good for multithreaded problems
- It is a jar file and easy to run along with your application server
- N.b. it uses a lot of memory but can save you time in debugging

Untangling Jars - Jar Analyzer
- It's hard to look at a directory with all the jars and see what all the relationships between them are
- use jar analyzer
- It has a xml output (ugly but packed with data)
- Fortunately this comes with a XSL stylesheet => transformed to a nice page.
- Points out cyclic dependencies
- There is also a graphical view output which gives a Tree view. The problem is this can get really complicated. All it does is show you the mess
- Commercial alternatives? - SonarJ. The Spring project used this to make sure they didn't get into such a mess. Now they use Structure101
- Step one is knowing that a mess exists. Then you can fix it by hand or use one of these tools

Mocks for Faster Debugging - MockRunner
- There are multiple testing levels: unit (simple, single component - my thing works like I think it does), functional (my stuff works with their stuff if their stuff isn't there yet - mocking. I can also mock out parts of J2EE), integration (major chunks talking to one another - my stuff and their stuff works together) and user acceptance
- To speed up functional tests you want a Mocking infrastructure (e.g. MockRunner to mock J2EE infrastrcture). You use it to ceate a test fixture (harness). This then rnus the tests using regular JMock tests
- Now it is almost instantaneous to run your tests. An example is to mock out JMS with thread pools. You can also do this with Servlets, EJB, and all the other interesting parts of J2EE
- Great time gains

Automating UAT - Selenium
- Use this to automate tests which run against your running web app for UAT
- It can also be used to automate tedious debugging tasks
- It includes a side project called Selenium IDE to record tests
- This allows you to automate debugging "wizard" style web applications and removes the hassle of manually stepping through the bits you have working to the broken bit in wizards
- Because you always think "this is the last time I have to do this" but it never is
- You don't even need Selenium installed to do it; it's a Firefox plugin. You can record your interactions with a web site and play it back automatically
- There are single step and pause buttons in Selenium IDE for stepping through
- All you do is record an interaction the first time you do it manually
- When you record your steps, it is stored as an HTML table. This looks like a fit test
- You can export this table to java - this is then a regular JUnit test case which you can run standalone
- You can also export as Ruby, Python, Perl and other languages
- Basically it's an interation API for a web browser/applications - you could even create a black box for web browsers (i.e. in airplanes) to track what users are doing.
- You could also get your QA dept to record their tests so they can send you the script which breaks the app
- What if I want to run in IE? => use Selenium remote control. I don't want to deploy parts of Selenuim to a production application. SRC creates a proxy server (flavour of jetty) which the test runs against which in turn runs against the real server by spawning a new instance of a browser. There is no selenium on the production server. You can tell it to launch IE, or some other browser.
- You can have a headless server which kicks off many different types of test clients and kick this off from your CI server
Email ThisBlogThis!Share to XShare to Facebook
Posted in debugging tips javaone 2008 | No comments
Newer Post Older Post Home

0 comments:

Post a Comment

Subscribe to: Post Comments (Atom)

Popular Posts

  • (no title)
    The Significance and Importance of Quotes in JSTL EL I just spent a few hours debuggung a null pointer in a Portlet JSP I'm writing. It...
  • (no title)
    Agile Development Ramblings: Part I Introduction I've just completed my first Agile development project. We developed a fully functiona...
  • EJB 3.0 Outside the Container, Inside the JVM - Part 2: Configuring JPA Declaratively
    Welcome to part two of this blog entry introducing using EJB3.0 inside the JVM. Click here to view the first part. As we've seen, JPA ...
  • Reuse (ii): Definition of Done
    As I said in my previous post , our project has suddenly taken a new path. There are two bits of collateral which I'd recently produced...
  • Notes from the FindBugs BOF9231 at JavaOne 2007
    NOTE: These are my incomplete notes from the FindBugs BOF at JavaOne 2007. I got in late due to the crush outside so missed the start of th...
  • Writing Unit Tests to Ensure Your "@Transactional ... rollbackFor" Annotations are Honoured
    Thanks to Russ Hart for providing the info on how to get this to work.  I just cut and paste, and then blogged it. It's nice to write un...
  • (no title)
    Can Your Own Demo I found something great on t'internet the other day. I had been asked to do a demo of our new ystem to some users but...
  • JavaOne Bred Over-Enthusiasm...
    I want to build and fiddle with Wonderland , and my own JDK ! The problem is my graphics card sucks (I need acceleration) and I'm runnin...
  • Booting Apache Derby ("JavaDB") with your Java App's Startup
    If you're embedding the Derby RDBMS with your java desktop application and want it to start when you start your app, you need to make th...
  • STS and RTC – Getting them to Play Nice
    We’re developing our new app using Spring 3.0 RC1 and we want the best tools available. We’ve picked the following: SpringSource Tools ...

Categories

  • 0
  • 2008
  • ant maven pimp build javaone 2008
  • apple ipod touch
  • asm
  • blog new ruby
  • blogtag list
  • bond casinoroyale mashup mi6 film movie
  • build
  • bytecode
  • CI
  • cobertura
  • communityone 2008 nutter jvm scala jruby groovy davinci
  • communityone 2008 opensocial socialsite
  • communityone javaone keynote oreilly
  • configuration
  • cowley
  • css div layout column ie firefox safari example
  • custom
  • darkstar mpk20 wonderland java3d commaboration SL
  • dashboard rss communication news development
  • db2 database SQL max min howto tip
  • db2 database ibm lessons tips
  • db2 database load batch howto example
  • db2 import upload data howto command
  • debt technical java annotation
  • debugging tips javaone 2008
  • development web2.0
  • findbugs JavaOne 2008 pugh
  • findbugs JavaOne BOF notes
  • gafter closures java javaone notes
  • google trouble patriarchal patriarchy
  • groovy metaprogramming javaone 2008
  • grubby oss data generation project announce
  • guice javaone 2008
  • gwt maven howto example simple
  • howto
  • hudson
  • hudson CI javaone 2008
  • ibm
  • invokeDynamic jvm dynamic ruby javaone
  • itinerant web2.0 portable desktop
  • jacl was websphere wsadmin trace logging
  • james gosling sun java open source tech days second life SL
  • jar java manifest properties config howto tip
  • java
  • java applet javaone 2008 reloaded jnlp
  • java javafxscript javaone 2008 fxscript
  • java javaone 2007 07
  • java javaone 2008 bytecode cobertura asm singleton testability
  • javaone
  • javaone keynote gage schwarz javafx
  • javaone semantic web bof notes web3
  • jazz
  • jruby rails javaone charlesnutter thomasenebo
  • jruby ruby netbeans development
  • kill dead laptop computer rebuild restore
  • lessonslearned
  • mac osx java gui shellscript classpath problem solution
  • maven plugin unittest test packager
  • mylin mylar javaone eclipse 2008
  • netbeans development ide
  • netbeans development ide RC
  • netbeans maven2 profiling
  • netbeans ruby sun tech days visual web pack roman strobl
  • ola bini java javaone 2008 thoughtworks ruby jruby
  • openjdk java javaone javafx wonderland
  • overheard
  • pojo ejb3.0 jpa orm java example howto
  • rant
  • rest restful jsr311 java web2.0 javaone ts-6411
  • rome rss feed blog rss atom propono java javaone
  • rsa uml profile plugin howto
  • ruby inheritance example
  • ruby jruby rss xml hpricot
  • ruby unless example
  • scm
  • setup
  • subversion svn xp windows cleanup
  • sun java soa web2.0 netbeans opensource javacaps
  • sun tech days java derby database rdbms london
  • sun tech days london impressions
  • terracotta java javaone 2008 android gwt
  • tip
  • tips
  • vwp netbeans JPA howto
  • was jython scripting nfr ibm pmi jvm
  • was tpv jython scripting nfr ibm pmi
  • webrick ruby jruby actadiurna investigation code howto
  • workitem

Blog Archive

  • ►  2012 (1)
    • ►  October (1)
  • ►  2010 (8)
    • ►  November (1)
    • ►  October (3)
    • ►  June (1)
    • ►  May (1)
    • ►  February (1)
    • ►  January (1)
  • ►  2009 (9)
    • ►  December (1)
    • ►  November (5)
    • ►  March (2)
    • ►  February (1)
  • ▼  2008 (22)
    • ►  December (1)
    • ►  November (3)
    • ▼  May (15)
      • JavaOne 2008 - Java Recrystalised
      • CommunityOne 2008 - Open Social For Your Website
      • CommunityOne 2008 - The Road to Babel: Bringing th...
      • JRuby at Thoughtworks - BOF-4807
      • Boldly go where the Java programming language has ...
      • Using Findbugs in Anger - TS-6590
      • Overview of JavaFX Script - TS-5152
      • Mylyn: Code at the Speed of Thought - TS-6421
      • Pimp My Build - TS-5596
      • Improving the Engineering Process through Automati...
      • The Future of Guice - BOF-6400
      • Applets Reloaded - TS-6290
      • Advanced Enterprise Debugging Techniques - TS-6072
      • Groovy: The Red Pill (or Metaprogramming : The way...
      • Practical Applications of Static Bytecode Analysis...
    • ►  March (1)
    • ►  January (2)
  • ►  2007 (53)
    • ►  December (1)
    • ►  November (3)
    • ►  September (3)
    • ►  August (2)
    • ►  July (3)
    • ►  June (1)
    • ►  May (12)
    • ►  April (5)
    • ►  March (13)
    • ►  February (7)
    • ►  January (3)
  • ►  2006 (35)
    • ►  December (8)
    • ►  October (1)
    • ►  August (1)
    • ►  July (5)
    • ►  June (8)
    • ►  May (3)
    • ►  April (7)
    • ►  March (2)
Powered by Blogger.

About Me

Unknown
View my complete profile