axis-java-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From oleg shteynbuk <oshteyn...@nyc.rr.com>
Subject Architecture Guide: Chain of Responsibility, Interceptor and Composite patterns
Date Fri, 27 Jun 2003 23:00:37 GMT
Thanks for "Axis Architecture Guide" it was very useful to me.
Below is a feedback::

1)    In "Message Flow Subsystem" -> "Handlers and Chains" under the 
second diagram first paragraph:
 "A Chain also has similarities to the Chain of Responsibility design 
pattern in which a request flows along a  sequence of Handlers until it 
is processed. Although an Axis Chain may process a request in stages 
over   a succession of Handlers, it has the same advantages as Chain of 
Responsibility: flexibility and the ease with which new function can be 
added."

I don't believe that there are similarities to the Chain of 
Responsibility design pattern. GoF implies that each handler in the 
chain either handlers the request completely and chain stops there, or 
if it could not handle the request then it passes the request to its 
successor without doing anything. "The Design Patterns Smalltalk 
Companion" book in chapter on Chain of Responsibility discusses OO 
recursion and says that examples of Chain of Responsibility is hard to 
find and considers Chain of Responsibility a specialization of 
Object-Oriented recursion but we do not have recursion here, it looks 
more like an iteration.  

Flexibility and the ease with which new function can be added are also 
different. In the Chain of Responsibility handlers are chained and each 
handler has a reference to the next one and it is usually used if you 
want to configure chain at run time. In Axis handlers usually are 
configured at design time in deployment configuration and we have more 
like AOP interceptors and some processing or weaving is needed before we 
can use it.

Interceptors and AOP becoming increasingly popular, and a lot of 
developers are familiar with it, did i mention JBoss. Interceptor would 
be also more descriptive word then handler.
BTW theserverside.com recently has a discussion "Opinion: Interceptors 
should be added to J2EE".

it make sense to replace the Chain of Responsibility paragraph with:
"Handlers act like interceptors, the Interceptor pattern is in POSA 2 book."

2)    The sentence before the same diagram in "Message Flow Subsystem" 
-> "Handlers and Chains"
"A Chain is a composite Handler, i.e. it aggregates a collection of 
Handlers as well as implementing the Handler interface as shown in the 
following UML diagram:"
and after the diagram it make sense to add the following sentence to 
clarify relationship to the GoF Composite pattern.
"Interface Chain acts like a Composite and interface Handler like a 
Component  from the GoF Composite pattern. In GoF Component is a common 
abstract class; in Axis Handler is an interface that Chains and Handlers 
implement so they could be treated uniformly."
I believe that Composite pattern usage is related to item 4 in the "Open 
Issues" chapter.

3)     The Iterator pattern could be mention too and there are other 
patterns that are used internally in Axis. Maybe it make sense to have 
two Architectural Guides, one simplified version for Axis users and 
another one with all patterns for Axis developers.

oleg



Mime
View raw message