After working with Java for more than 10 years, its hard to say goodbye, but everything that has a beginning has an end. I feel, Java become too much of overhead for any new software development projects whether it is enterprise projects or niche product development.
Too many standards, and too many implementations, make even a small project very complex.
Standards are great, but the main focus for these standards become vendor independence rather than simplicity and practicality. for this very reason, frameworks like Spring and Hibernate have overthrown standards like EJB.
last few years, new frameworks like Rails, not only changed the we develop applications, also brought new perspective on developing framework itself. with dynamic capabilities and user friendly DSL (Domain specific languange) approach, put these frameworks far ahead of java in terms of development speed and simplicity.
Today, time has come for us to move beyond Java and embrace some the better and simpler alternatives like ruby on rails for web development, Adobe Flex for rich internet applications, Adobe AIR for cross platform desktop applications, Groovy and Grails for web development with java integration. Erlang for concurrent applications.
in spite of all the complexity, the best thing happened to java is, that it has evolved beyond java and become a platform of languages, today it supports all leading languages including ruby(jruby), python (jpython), groovy, etc. this means you can use new languages and frameworks like groovy, and grails on java platform, while utilizing the existing java components.