JMS and EJBs aren't buzz words. They're specifications implemented by the Java EE reference implementation - allowing one to develop JMS and EJB components for their applications which are deployable in glassfish application server (and any other Java EE application server platform).
And it is easy to use Java EE components like these without the need for frameworks like Spring - if anything I think they just obscure what's really going on. Again I'd like to re-iterate I'm not a highly experienced developer but I've learnt how to use most of the Java EE technologies in my applications rather quickly.
I would totally disagree with you on that. If you use only the IOC controller for injecting your classes, maybe, Spring is not bloated, but also, its usefulness is not that great. But as soon as you begin to enter the wonderful spring-mvc world (which is the standard way to handle web apps using Spring), bloat is all around.
Take a look for example at the family of spring MVC controllers (http://static.springsource.org/spring/docs/2.5.x/api/org/spr...) : before doing any development, should you have to study such a family to know which controller should fit everyone of your use cases ? That, for me is the very definition of bloat.
Furthermore, the documentation is terrible, IMHO. That said, I have been spoiled by months of Django development, maybe it is not that bad according to Java Standards.
More generally, the main problem with Java is the emphasis on architecture astronautism, not the language itself, which is ok, if not very powerful (no function as first class objects, really ? ).
I don't mind the core of spring but the full spring stack is nearly as bad as Java EE - I was reading through what was suppose to be a simple minimalist tutorial on how to implement CRUD operations in spring the other day and my jaw dropped at the amount of duplication, verbosity & incomprehensible config involved:
I'm no fan of Spring, but I do want to echo your sentiment. There are a lot of really good Java libraries and frameworks that are often lumped together in people's view with the more verbose "enterprisey" concepts.
There are two things I really like about Java in the broad sense: the excellent Eclipse environment, and the multitude of quality open source libraries.
avoid IDE's -- or at least, anything that causes your team to need an IDE just to counter-act some other linguistic or procedural vomit you often encounter in the typical Enterprise Java shop
avoid abstraction-for-the-sake-of-abstraction -- the Java ecosystem, not necessarily the language, is notorious for this
by this you mean the frameworks like Spring, Struts or the buzzwords like JMS, EJBs?