On Dec 13, 2009, at 8:22 PM, Ashish wrote:

Agreed, the SM approach should cover all cases; even the logging case in
your subsequent post.

So with that said, would it not make sense to have a set of fixed filter chains w/ each chain representing a state rather than a bucket of filters
with each filter deciding the next filter to execute?

Sorry , but I am confused :-(
can you help me understand how the Filter chains as a state would work?

Here is a simple Chain. The one with * can be dynamically
added/removed. Logging filter could be added at multiple places

Acceptor -> BlackList Filter -> Logging Filter* -> Throughput Filter*
-> Executor Filter -> Codec -> Logging Filter *
->IoHandler

Now how would the suggested approach work??


By previous posts we agreed that there is no need to dynamically add and remove filters in an ad hoc manner; it was merely a mechanism to simulate a state machine. Earlier in this thread we discussed how the state machine would fit into the Mina architecture:

It's my opinion that new filters get created to simulate state machine changes and any other use is an ad hoc mechanism that can be more cleanly refactored into a state machine mechanism. With that said aa session w/ N fixed chains where each chain represents a state would fit the bill. The number of states is fixed. The composition of the state machine can be changed until the acceptor/connector have established the connection.

Acceptor -> ChainMachine -> IoHandler

inside the chain machine:

S1: IOF1 -> IOF2 -> IOF3  -> IOF5 -> IOF4
S2: IOF1 -> IOF3 -> IOF5 -> IOF4
S3: IOF1 -> IOF2 -> IOF3 -> IOF4

From a user's perspective things are quite easy to grok and most cases the chain machine degenerates into a single state chain.


The above state machine supported your example of changing state chains:

             /  IOF->IOF2->IOF3->IOF5->IOF4->IoHandler
Acceptor->IOF1->X->IOF3->IOF5->IOF4->IoHandler
             \ IOF1->IOF2->IOF3->X->IOF4->IoHandler

Regards,
Alan


Reply via email to