Paulo Gaspar wrote: > Answer inline: >
>>Can I ask a couple questions? How do you propose to handle the difference >>between a Component that is ThreadSafe (i.e. can be used simultaneously >>by multiple clients) and one that is SingleThreaded (i.e. must have a >>unique instance for each client)? >> > > What I do in my framework is to ALWAYS have a factory which takes care of > reading and holding the component configuration, creating it, initializing, > disposing, etc. It works a bit like a component factory for a pool. Which is exactly what ExcaliburComponentManager does. There are necessary improvements, but they will come. > That factory only implements enough functionality to "make the bridge" > between the framework and the specifics of each component and the factory > interface has a function to describe what is the component's lifestyle. > > Another object takes care of managing the components depending on that > lifestyle (I do not rely on the factory for that, of course). > > > >>They do have purpose. If all you deal with are ThreadSafe Components, >>then the DefaultComponentManager would be enough for you. Unfortunately, >>not all projects have that luxury. Creating a new instance for every >>client is wasteful and causes more work for the server than is necessary. >> > > I understand that. > > At the moment, the only components I use that are not ThreadSafe are those > that are pooled - like database Connections - and some special cases that > do not match Avalon current scope (like sql queries and other stuff > specific to my framework). > > I do NOT, however, mark (trough their factory) those components as > Poolable. I just mark them as SingleThreaded and hide the specifics of the > pool behind the component factory. Which was the point of this thread. > > This way, using a third party component or pool is trivial. True. >>The next question is why make everything more "bean" like. JavaBeans, >>while usable, do have a distinct disadvantage in that they are not >>clearly marked. >> > > I do not see much use for most pure (no methods) markers. I ended up > deleting them some 3 months ago and I do not miss them a bit. The Idea of a Component being marked explicitly as a Component does have some value to me. It forces you to think in terms of what a Component is supposed to do. That way you don't run into the JavaBeans antipattern of everything (data objects included) being a Bean. You encapsulate data accessor logic apart from the data itself. It is not a correct pattern to implement Data as a Component. > > Of course that for many objects (including the above mentioned > Component factories) I do use interfaces like: > Initializable > Disposable > Startable > Contextualizable > Configurable > Loggable (like your LogEnabled) > etc. That's good. I'd hate to see it all merged together into one large monolithic interface. That way you only use what you need. >>A Role defines the logical use of the Component in the system. If >>the Role interface extends the Component interface, all the hard >>work is done for you and you don't have to recast the Component >>to release it. >> > > I understand and I do not have to recast any component since my > component manager returns Object instead of Component. And if your Role interface extends Component, you have the same convenience--while maintaining the protection that forces you to separate data and the interface to get the data. > Since I focus on building components that are as independent from > the framework as possible (which makes them more reusable) I always > use a component factory. Even if only to take care of configuration. That's fine. I just would have a hard time with a ComponentManager that is really simply an ObjectManager. That would be bad. >>>If you change this one I will only miss having an easy to use >>>component manager that can manage several components for the same >>>role (naming them). If one day you want to do this one, I would >>>like to contribute. >>> >> >>We had explored this in the past. We had big, very impassioned >>discussions. The result of that is the ComponentSelector interface. >>You use a ComponentManager to get the ComponentSelector for a role >>that will have many implementations. The ComponentSelector will >>select your exact implementation of the Role based on an arbitrary >>Object as a hint (the most common being a string name). >> > > I also understand that. I tried to use that mechanism as it is but, > in the end, I found it simpler to change it since my needs are quite > different. > > I know the Avalon Framework (and some other bits) quite well (at > least last Summer's version) since it was my starting code base for > the component management and other parts of my framework and I > rewrote or rearranged most of it to suite my needs. > > I am only focusing on the parts of what I have that can be done in > Avalon since what I have is quite a bit different. How much so? > To give you a slight idea, I am building something like Cocoon with > much less XML and I use my standard ComponentManager to build a kind > of SiteMap. (Obviously I also studied quite a bit of Cocoon.) And this forces differences how? -- "They that give up essential liberty to obtain a little temporary safety deserve neither liberty nor safety." - Benjamin Franklin -- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>