As one of the first wave of neophytes - some would say acolytes - to tinker with Java it has a special place in my heart. It was the first language in modern times to incorporate some of the academic purity of Smalltalk in a pragmatic and useful way while retaining much of the syntax and approach of the familiar C++. It was/is a managed platform an as such operated as a sort of proving ground to the concept leading to .Net. For those first 5 years or so I grew to enjoy the language and see it perform wonderfully.
Unfortunately, the initial exuberance that led to cool applets and later to incomprehensible user interfaces wore off for many people as they started to realize that "write once" only meant once if you never intended A) any user interface code, and B) to run on a single platform. Portability was only marginally better than C/C++. However, as the months and years passed and with the introduction of 1.1 Java started to become a usable and productive platform.
I've spent the last several years mostly doing C#.Net (and still feel like I've had a 3 year affair with the houselady) and over the past several months wandered back into the Java fray. I've missed the much more "purist" and eclectic mentality of the Java development world. In C# you are playing in Microsoft's playground. While the Sun's and Weblogic's of the world have become the several hundred pound gorilla's in the Java world, they still do not have the leverage given the well-organized projects such as Apache, Eclipse and others. There is just too much freely available code for any one company to bully developers like Microsoft can (can you say Team Foundation Services and what happened to us smaller MSDN Universal subscribers?)
Speaking of well run projects I'm very impressed with Hibernate, Spring and JSF. These have leveraged well thought-out software techniques and have really put together productive and reliable platforms. While I had used Struts, I like the approaches Spring and JSF take much better. And Inversion of Control - why wasn't everyone developing in that way (many of us were).
I'm pleased and nostalgic with Java. Unfortunately my current employer (no offense if they're reading this) still has a mountain of C++ spaghetti, ASP and COM to endure. I fear that too many Microsoft based projects have simply not nurtured an appreciation for the development and design methodologies that have taken firm root in the Java world. Certainly they have not had the benefit of a wide variety of choices when considering how to solve the many common problems that arise in laying out a software architecture.
Java in 2007? Looking good. Looking good.