Hi all,
I have a requirement for pooling components and am using a version of merlin which is a couple of months old. I seem to recall that the pooled lifestyle handling was switched off. Is this still the case and if so, is there a recommended pattern for providing pooled components?
Correct.
Based on discussion on this subject over the last six months - my conclusion is that the related semantics area for all intensive purposes a rather gray area. This is primarily related to strong relationship between pool and the components it manages (in particular things like recycling strategies), and subtle relationships between a component that is using a pooled component and the pool itself.
My recommendation concerning pooled components is:
1. declare a factory service with formal instance acquisition and release methods .. e.g.
public interface WidgetPool { Widget aquireWidget(); void releaseWidget( Widget widget ); }
2. implement a component the exposes the pooled interface as a service using whatever pool technology you like (excalibur, commons pool, etc.)
/** * @avalon.service type="WidgetPool" */ public class DefaultWidgetPool implements WidgetPool { ... }
3. for consumer components, declare a dependency on the pool directly
/** * @avalon.dependency key="pool" type="WidgetPool" */ public void service( ServiceManager manager ) throws ServiceException { m_pool = (WidgetPool) manager.lookup( "pool" ); }
Using this approach you component implementation is crystal clear about the assumptions concerning the WidgetPool and your implementation can be much more strict about acquisition and release policies.
Hope that helps.
Cheers, Stephen.
I will be grateful for any thoughts.
Many thanks.
Peter
-- |------------------------------------------------| | Magic by Merlin | | Production by Avalon | | | | http://avalon.apache.org/merlin | | http://dpml.net/ | |------------------------------------------------|
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]