I'm not a big fan of J2EE but the bit that I think is really silly is EJB. The rest of J2EE (servlets, jdbc, and the other services) aren't totally sucky (although jsp and the other java templating mechanisms that keep coming out are amazingly lame and clumsy to use).
Of the web development environments I've used, I find Seaside amazing (the continuation based state management and html rendering api is very easy to use and thus productive),
WebObjects very good (the quality is coming back with some new blood on the team), and Servlets only marginally better than CGI (the core advantage being some automatic session tracking and memory residency).
While I am completely in favor of the logical business tier - I don't see any good reason to move it to another process space like EJB typically does. Nor do I find the constraints that EJB puts on my code to be acceptable. Whats left is nothing like objects. The one exception would be message driven beans - basically a reasonable way to have another process sit at the other end of a queue and chew away on async tasks.
I'm forming more and more concrete opinions on this recently as I've begun working on a system in exchange for equity in a local startup. We acquired the system for pennies from another company that folded. It started out on WebLogic, but as they got into it they first pitched WL's jdbc connection pooling and wrote their own because of an inability to cache prepared sql statements.
They also pitched JSP as being too simplistic and wrote their own html template processor. The object to database mapping was written by hand (ie - class methods provide meta info to their custom mapping code). Bottom line is that WL has been reduced to running servlets. Since we're a startup with no funding (everybody has a second job except me), I'm probably going to end up moving the thing to Tomcat or Jetty or something free like that.
I think the whole J2EE app server market is overblown and agree that its mostly FUD and snake oil for sale there.