Hi folks! I've followed (as best I could) the discussions here and on general@jakarta, about making components reusable and sharing them. However, an old doubt of mine arises now and again: what is a component? Or, if you prefer an operative definition, what are the necessary steps to make a bunch of code into a component? Sun's Java site, for example, talks all the time about them, without defining the term; and even when they are a standard member of UML diagrams, I've never seen the concept discussed.
I will now expose my musings on the subject. They are just a gross approximation but, lacking a more accurate description, it can serve as a starting point. I think that the notion of 'component' must be closely related to what a 'framework' is. Only inside a framework can you define what entities can reside inside it, and call them 'components'. Also, when you have a bunch of 'components', you can call that a 'framework'. But the term hints at 'independence' too, as if they could live on their own (which is seldom the case). Even worse when 'reusable' is added. Any piece of code needs a basic set of services, usually the same, that must be provided somehow -- if the framework does not, or there is no framework, then the user should. Now, going to the operative side of the question: what problems do arise when trying to make components really independent? E.g., take them from their craddle framework and put them in Commons. They are quite often the same: build, discovery, log, communication, error management and configuration. You can surely add a few more of your own. It's probably not the time to enter a point-by-point discussion, for those that are still reading this far. As a general remark, some of these issues are no problem in Jakarta land: the build tool (ant) is standardized, and error management only lacks a firm criteria for checked exceptions. Others are more tricky: there's a logging component (log4j), but some people have decided to go in other directions, and a common interface (logkit) has been built. Still others are a complete mess, such as component discovery and configuration. I think that at least part of the misunderstandings come from not agreeing on what a 'component' is supposed to be inside Commons. I hope someone can throw a bit of light into this matter, so that all of us can tell a Commons component from a mile off. Un saludo, Alex Fernández.