I've been working on the same medium-sized application since March--about 6 months. It's been frustrating. The app is built in JBoss Seam, which I didn't (and mostly don't) know, it has several configuration errors and one serious coding error that has pervasive influence and will be extremely hard to undo, and unbeknownst to me, it has been locking up daily for over a year.
Task 1 was to measure what the app has been doing. Inserting metrics into the main functional code enabled us to figure out that a key component was locking up every afternoon, unblocking eventually over the next 12 hours as various timeouts occurred. Logging helped us pinpoint the exact issue.
Once we understood where the problem was (which took the better part of a week), I uncommented 1 line of configuration and removed spaces from the ends of 2 other configuration lines, and suddenly, the blockages stopped and the application started to hum along happily.
I am leery of frameworks. This is why. You have to become an expert in the framework before you can use it reliably. The whole development team had better know what they're doing, or have excellent metrics, or both, when you're using a framework, because failures can be silent and deadly, and if your app is large enough and poorly-tested (a typical situation), you'll not know you broke something until it's far too late to figure out which change caused the problem.