Todd, I have been so frustrated by Java. 'Broken by design'. Making matters worse, were the mass of programmers jumping in because they wanted to get their applications on the web, rather than any interest in OO.
EJB 1.0 was indeed a disaster. I had to substitute teach a class in it, in 2000, and I disappointed the class gravely when I told them it was a butchery of an object app server. No 're-entrant' code? Who were they kidding? What were they imagining an OO app server was supposed to do?
Gemstone Smalltalk? Now that was an amazing app server database.
Take something so simple as protected/private/public/package. Private variables aren't really encapsulated. All objects within the same class can see each others' instance variables. I've never once needed 'protected' or 'package'. So, they've got overkill, without providing the essential task of encapsulation.
The collection classes? Back in Smalltalk, it was abundantly clear how they worked. Fabulous code. Elegant. Looking at Java's first iteration, in the mid 90s, they didn't even have collections worth speaking of. Then when they finally implemented them, they were as awkward as a bag of hammers.
Swing? I heard they hired Smalltalk guys to come in and implement MVC, but couldn't separate the V from C, due to the limitations of strong typing.
Threading? Can you say 'deprecated'?
The bottom line is these people never once had an inkling of what they were supposed to be trying to do, and by deliberately de-emphasizing Java's debt to Smalltalk in their marketing, they shot themselves in the foot. They assembled a clueless society of people who memorize APIs but can't architect OO.
I'm not sure, but I think that Java is starting to sink in its own quagmire. Smalltalk's sin was that it didn't cater to the masses. Java's sin was that it did.
Inner classes. They changed the fundamental constructs of their language for a workaround, which in the wrong hands has led to layers of unmanageable convolution.
Bill Venners wrote: >> Because a lot of people are involved in Java right now, a lot of people tend to do things that add more value to Java. That does tend to sustain itself. Perhaps it has inertia, but that just means value tends to keeps getting added.
Or you could say there are 'too many cooks in the kitchen'. I certainly appreciate what you are saying, in terms of add-on functionality with additional packages (telephony, taglibs, etc.), absolutely, but the underlying structure of Java has been mangled by committee, imo, and it's irreparable. Nowhere does this show more than when they spearhead a new venture, like EJB. It was cacophony.
I guess it's going to be fixed as they intend to make JRuby compatible with Ruby C.
There are various ways of implementing continuations on platforms that don't support it. The work on Ruby.NET at QUT seems to be in a similar boat. Continuations are not implemented yet but there are ways.