directory-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Alex Karasulu <aok...@bellsouth.net>
Subject Re: [seda] event notifier pattern clarification
Date Wed, 22 Sep 2004 09:50:29 GMT
Hey before my lights go out here's the goods:

http://svn.apache.org/viewcvs.cgi?rev=47040&root=Apache-SVN&view=rev

Change it and patch at will :-).

Cheers,
Alex

On Wed, 2004-09-22 at 05:05, Trustin Lee wrote:
> Alex and I talked alot on IRC and I agree with his opinion completely.
> 
> > interface Advice {
> > ...
> >     Subscription[] getSubscriptions(Event, Subscriptions[]);
> >     Event getEvent(Event);
> > }
> 
> This API has two problems:
> 
> 1. Using array implies very frequent allocation of arrays which occurs
> whenever EventRouter gets an advice.  So I suggest to use some
> reusable object.
> 
> 2. EventRouter must call two methods (getSubscriptions and getEvent)
> for each event, and it can imply duplicate calculation on the same
> event.  For example, let's assume that there is an advice that
> transforms the specific type of event and filters its subscriptions,
> then the 'if' block which identifies the type of the event is executed
> twice, and it is an wate of time.
> 
> so.. I suggest this method:
> 
> public class RouterAdvice {
> 	// assume getters and setters exist
> 	Event event;
> 	List subscriptions;
> }
> 
> public interface RouterAdvisor { // RouterAdvice in Alex's code
> 	void getAdvice(RouterAdvice);
> }
> 
> RouterAdvisor.getAdvice() gets both event and subscriptions and then
> sets back the transformed (or not transformed) event and modifies the
> subscription list.
> 
> the advantage of this method is:
> 
> 1. RouterAdvice is reused (using threadlocal? not sure about this), so
> there is less overhead on GC.
> 
> 2. Can get RouterAdvice in a single method invocation, so there is no
> duplicate code.
> 
> but don't you think the name 'getAdvice' is strange?  It does not have
> a return type. :)
> 
> Trustin


Mime
View raw message