You really need to understand how ext3 which is a journaled ext2 filesystem works. The most common way to recover from a bad journal or corrupt journal is using the commands e2fsck, debugfs and tune2fs.
In some cases, simply removing the journal can fix the issue. You would run something like this:
tune2fs -f -O ^has_journal /dev/hda1
If that usually results in error, you could try using the debugfs command. If that fails, it might result in cloning the drive and maybe using something like ddrescue
Always try to repair a filesystem first with e2fsck. I've been using ext3 since it's basically been introduced as the default in Linux and have never had any problems. I had to run fsck's way more often on just ext2 filesystems without the journal. I don't miss those days..