mina-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Alan D. Cabrera" <l...@toolazydogs.com>
Subject Re: [MINA 3.0] filter chains
Date Fri, 26 Aug 2011 15:01:46 GMT

On Aug 26, 2011, at 7:54 AM, Emmanuel Lecharny wrote:

> On 8/26/11 4:41 PM, Julien Vermillard wrote:
>> On Fri, Aug 26, 2011 at 4:28 PM, Alan D. Cabrera<list@toolazydogs.com>  wrote:
>>> On Aug 26, 2011, at 7:12 AM, Julien Vermillard wrote:
>>> 
>>>> On Fri, Aug 26, 2011 at 4:07 PM, Emmanuel Lecharny<elecharny@gmail.com>
 wrote:
>>>>> On 8/26/11 3:44 PM, Alan D. Cabrera wrote:
>>>>>> On Aug 26, 2011, at 6:40 AM, Julien Vermillard wrote:
>>>>>> 
>>>>>>> On Fri, Aug 26, 2011 at 3:24 PM, Alan D. Cabrera<list@toolazydogs.com>
>>>>>>> wrote:
>>>>>>>> On Aug 26, 2011, at 4:14 AM, Julien Vermillard wrote:
>>>>>>>> 
>>>>>>>>> I modified the API to remove IoFilterChain. Now you are
supposed to
>>>>>>>>> give a list of filter to the service before starting
it :
>>>>>>>>> 
>>>>>>>>> // create the fitler chain for this service
>>>>>>>>> List<IoFilter>    filters = new ArrayList<IoFilter>();
>>>>>>>>> filters.add(new LoggingFilter("byte log filter"));
>>>>>>>>> filters.add(new MyCodecFilter());
>>>>>>>>> filters.add(new LoggingFilter("pojo log filter"));
>>>>>>>>> filters.add(newMyProtocolLogicFilter());
>>>>>>>>> 
>>>>>>>>> acceptor.setFilters(filters);
>>>>>>>>> 
>>>>>>>>> acceptor.bind(...);
>>>>>>>> How do we make chains where two filters feed into one or
one filter
>>>>>>>> feeds two filters?  If you look in my sandbox we can accommodate
this via:
>>>>>>>> 
>>>>>>>> static import a.m.util.Util. linkParentWithChild; // to be
written
>>>>>>>> 
>>>>>>>> IoFilter foo = new FooFilter();
>>>>>>>> LinkStateFilter link = new LinkStateFilter();
>>>>>>>> IoFilter checksum = new ChecksumFilter();
>>>>>>>> IoFilter log = new LogFilter();
>>>>>>>> 
>>>>>>>> link.addLinkStateListener(foo);
>>>>>>>> linkParentWithChild(foo, checksum);
>>>>>>>> linkParentWithChild(link, checksum);
>>>>>>>> linkParentWithChild(checksum, log);
>>>>>>>> 
>>>>>>>> acceptor.setFilters(foo);
>>>>>>>> 
>>>>>>> About the code in the sandbox :
>>>>>>> 
>>>>>>> http://svn.apache.org/repos/asf/mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/core/IoFilter.java
>>>>>>> I see no IoFilter.addLinkStateListener(..) method, am I looking
at the
>>>>>>> right place ?
>>>>>> Oops, it was meant to just be a sketch.  :)
>>>>>> 
>>>>>>> About the "filters feed into one or one filter feeds two filters",
do
>>>>>>> you have a concrete use case in mind for that ?
>>>>>> The above example does, Foo and the link state filter.  I'm sure
that
>>>>>> we've discussed this before.  Another example is a mux/demux situation.
 How
>>>>>> would all of this fit into the grand scheme of things?
>>>>> Yeah, it really should be a graph of filters, not a list of filters.
>>>>> 
>>>> Well if it's just for demuxing I proposed few mails ago this solution
>>>> : http://s.apache.org/A9W
>>> I think we need to make graphing a 1st class citizen and not buried inside another
filter class.
>>> 
>> I think we need to avoid complex feature like graph. IMHO server in
>> MINA is a codec and an handler 90% of the time. Someone have a use
>> case which could use filter graph with MINA ?
> 
> yes. We use it for LDAP... And we have had some users asking how to manage a decoder
for multiple kind of messages.
> 
> This is not something we want just because it's beautiful.
> 
> Now, what about having a controller hidding the internal structure, so that we can switch
to a graph later ? IMO, we should not expose the inner data structure, be it a list or a graph.
It's the controller's business to deal with that.
> 
> However, we must provide the current state to the controller, it's not enough to provide
the current filter.

Look at how things are set up in my sandbox.  The parents and children can have any cardinality,
even zero.  The controller should be able to automatically handle all of that.


Regards,
Alan



Mime
View raw message