About the time it started getting called "Java EE" instead of "J2EE" they started stripping out most of the requirements for redundant default configurations. Some of the complexity is gratuitous, sure, but a lot is because it attempts to let developers handle more complex situations or scaling requirements (horizontal and/or vertical). I used to scoff years ago at some of the layers and knobs, until I found myself needing to use them, then I thought "these guys were smart to think of this in advance".
There are worse things than having a codebase -- already somewhat sanity-checked by the compiler, mind you -- that you can drop into an application server along with a small configuration file, and it can just plug into your preferred vendor, your preferred database, your system/user/network configuration.
I've played with a lot of frameworks and written others. Regardless of hype or abstract quality (and by the way I used to really detest Java as a language; now it's down to a mild dislike as they've improved it and things like Lombok have come along) it turns out I can just sit down and get work done with it and to some extent it helps my projects be "the right way" out of the box for later growth, and I have to respect that.