We've discussed all these points previously, but the following is a quick summary, in no particular order, of what I've found to be the primary causes of performance and scalability problems in J2EE apps I've seen.
Wrongly configured JVMs, app servers, or databases.