On Jul 1, 2011, at 8:04 AM, Emmanuel Lecharny wrote:

> On 7/1/11 4:59 PM, Alan D. Cabrera wrote:
>> On Jun 30, 2011, at 4:13 PM, Emmanuel Lecharny wrote:
>> 
>>> On 6/30/11 9:52 PM, Alan D. Cabrera wrote:
>>>> On Jun 30, 2011, at 2:42 AM, Ashish wrote:
>>>> 
>>>>> <snip/>
>>>>> This does meet some of our requirements, but not all. We can have 
>>>>> something
>>>>> similar to this and instead of returning true/false
>>>>> from Filters, we can return the next step to be executed. Something like
>>>>> this
>>>>> 
>>>>> IoFilter messageReceived(IoSession session, Object message) {
>>>>>    // process
>>>>> 
>>>>>   // see if just to flow with Filter Chain
>>>>>   return null; // or something better
>>>>> 
>>>>>   // or
>>>>>   // a diff message detected, calculate next filter based on some app
>>>>> specific state
>>>>>   return calculateNextFilter(state);
>>>>> }
>>>>> 
>>>>> command is passed back to the chain and it can take care of executing the
>>>>> next filter.
>>>>> 
>>>>> Shall try something similar in sandbox and lets see how it goes :)
>>>> I'm not so sure that filters should be in charge of deciding who should be 
>>>> called next.  I don't think that how the filter stack is assembled should 
>>>> be leaked into the filters themselves.  The filter should be solely 
>>>> concerned with its task and not have to decide who gets called next.
>>> Not sure, Alan. There are some cases where it's mandatory that a filter 
>>> select the next filter to execute : for instance, if your codec produces 
>>> more than one message, and the following processing may depend on the 
>>> message type. Of course, you can use a demux protocol filter (I don't 
>>> exactly remember the name of it, so it's from the top of my head, but we 
>>> use such a mechanism in ADS), but it's just one option.
>> 
>> I'm hearing a state machine that's implicitly defined via what gets returned 
>> by that method.  If this is the case would it not be better to have an 
>> explicitly defined state machine?
> 
> Not necessarily. We can think about a multiple layer decoder which works the 
> very same way.

I'm hearing possibility not necessity.

> But all in all, in this case, the chain of filters will *be* a state machine.

And here is my point.  They all are really state machines.  Having network 
protocols "randomly" choosing chain paths is an anti-pattern.  State machines 
should be known and fixed at the time of protocol initiation.

> I have some ideas (and I even have created some branch years ago: 
> http://svn.apache.org/viewvc/mina/branches/mina-new-chain/ and 
> http://svn.apache.org/viewvc/mina/branches/mina-new-chain2/) to play around 
> this idea.

I'll take a peek at these.  Thanks!


Regards,
Alan

Reply via email to