Hi, I am new to Avalon and only just started programming in Java. I find, however, Avalon to be aesthetically appealing, yet still struggle to get a firm grip on some of the concepts promoted by the framework. What follows is my preliminary, somewhat sketchy picture of it. I would appreciate any corrections or improvements.
1. Central is the concept of a component. This one is quite clear. It is a highly reusable programmatic entity with a well-defined lifecycle and a work interface, performing a non-trivial task. All dependencies that must be resolved for a component to be able to fulfill its duty must be satisfied via its lifecycle interfaces. 2. The concept of a component is dependent upon that of a container. A component's container is that piece of code that creates the component and possibly promotes its availability to other components. It is NOT, however, (my first thought) another component using said component after being composed. Neither Avalon nor ECM seem to have a programmatic means of clearly defining what a container is. To them, it's just a concept. This situation is different with Fortress and Merlin2. 3. A central aspect of any application modelled after the concepts promoted by Avalon is that it constitutes - either implicitly or explicitly - a unidirected (from parent to child) circle-free graph, in short a tree, of dependent components, child components being dependent on parent components, but not vice versa (IOC). While this is conceptually true, it need not be on the implementation level, since threadsafe components might be shared by multiple parent components. This is, however, hidden from the components' view. 4. While the knowledge of this component tree is only implicit in ECM and - to a certain degree - in Fortress (any application must have an at least implicit knowledge of its structure to function correctly), Merlin2 explicitly defines a meta model for it, thus enabling a user to dynamically access and manipulate it. These observations, if true, will probably appear trivial to most of you, but I wanted to get the basics straight before moving on. I just started porting a small app I once wrote to Avalon, wondering, which container framework to use. Since it need not be of production quality - it's just for the fun of it - I currently tend towards Fortress, though I started out using ECM. Yet I am getting tired of all those deprecation warnings, and Fortress seems quite easy to understand, whereas Merlin2 is a different beast altogether (and probably overkill for my purposes). Any different views? Some minor remarks regarding the documentation: 1. In "Avalon Framework - Guide - COP in Avalon" - "The Component Manager" : Towards the end, it reads "Sometimes you need to create a new interface name that does nothing more than allow access to alternate roles who have the same role." Shouldn't it end with "... who perform the same function" or " ...who are functionally equivalent."? 2. In "Developing With Apache Avalon" - "Implementing The Dream" - "Initialization and Disposal Approach" : I struggled a bit with the paragraph "The main disadvantage of this approach comes into play...", at times confusing "this object", "component", thinking hard about "... the component whose reference it has". I Think I got it right, and making the reader think hard could be considered a virtue in itself ;) Otherwise, it is undoubtedly one of the best pieces of documentation/introduction I have ever read! Keep up the good work. Olaf -- To unsubscribe, e-mail: <mailto:avalon-users-unsubscribe@;jakarta.apache.org> For additional commands, e-mail: <mailto:avalon-users-help@;jakarta.apache.org>
