At first blush, JEE6 looked like just the transfer of injection consensus to a standard, and a bunch of long-overdue fixes for JSF. But after a week of using it, the cumulative effect is pretty amazing. I still believe that DI has taken a disproportionate amount of the caloric burn of the last decade, but CDI is a positive development. Per my earlier post, JEE5 was more immediately appealing, but JEE6 is the denser, higher fiber offering. It‘s frankly pretty remarkable how well it all hangs together. Today, I was thinking ‘what is the binding agent here?‘ and the answer came to me pretty quickly: JEE6 represents the final victory of a concept that has been in utero for a very long time. Of course I am thinking of the component.
The concept originated from a speech in 1968 that was directed at addressing the software crisis; unix‘s pipes and filters were the first attempt to embody the concept in practice. But, of course, things didn‘t really happen for objects until the end of the 80s, and then the component reemerged. Unfortunately, in the 90s, the concept was saddled up as a means of system/language interop by CORBA, and interapplication integration by Microsoft (OLE/COM). Having programmed both OLE and COM, the former was a complete joke (though interesting) and the latter was interesting, but it washitched to such a pile of schlock, it was painful. Then came Java and EJB, which, let‘s face the facts, was an unmitigated disaster. EJB 2 really only attempted to address the glaringly absurd omission of asynchronicity. Seriously, tacking on a message-driven bean and having a single onMessage method seemed kind of like progress at the time, but in retrospect, makes you wonder what the team thought was a realistic timeframe for a real, comprehensive approach that could hold water.
Here we are. JEE6 may just be the best real realization (reification) of the concept of CbD to have come down the pike. Now, I know that sounds kind of absurd. But consider: http/html is pretty limited, but finally, with AJAX, REST, and continuations, it almost doesn‘t really matter anymore. Despite its flaws, JSF was clearly the right approach because doing interface without any components is beyond absurd. Count on this, if nothing else: the emergence of real component frameworks, e.g. IceFaces, RichFaces, PrimeFaces, was just a warmup. JSF2 is going to make things so much better on the component side of things, we should finally see components that are flexible, layered, adaptable. RichFaces is great, but clearly, it‘s showing the painful effects of swimming against the stream.
John Vlissides, one of the legendary Gang of Four authors, converted to components shortly before his untimely death. It is ludicrous to not see the efficacy of them, not just in the ui, but all the way down to resource layers. Clearly, one of the reasons that it took so long is components don‘t make much sense unless they are part of a system that is pretty comprehensively componentized from top to bottom. Finally, consider the fact that people are deploying serious apps now on glassfish that are tiny. There‘s something kind of scary about being told most of what you need will be waiting for you in the container, but on the other hand, a little anxiety often accompanies tremendous evolutionary milestones.