Swing,EJB,RMI,CORBA is real enterprise technologies. But some design in Java is stupid. I think:
1 Lack of template in Java (STL in C++ is excellent, isn't it?)
2 The IO class in Java is too bad!
3 It seems garbage collection in Java is a significant improve than C++, maybe it's true. But in C++, we can do same thing with encaplucating pointer in smart point class (just like _var class in CORBA), and without lost performance.
So Java is successful as a platform but not so successful as a programming language.