I am not a true master of J2EE, but I feel I have seen enough to form some opinions. While there may be some applications which can benefit from J2EE, every case that I have seen is a disaster which could be done more efficiently and simply using a non-J2EE framework. The advantages of it are more than offset by the added complexity of the dozens -- if not hundreds -- of APIs which it seems to be drowning in. Worse, J2EE vendors seem to benefit from making everything seem more complex than it needs to be.
Overwhelmingly, I think that most business problems can be fairly simply handled by a servlet engine (like Tomcat or Resin) and plain-old Java. While there are some things which are simpler with J2EE (like connection pooling), they are offset by the added complexity.