You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@mina.apache.org by Emmanuel Lecharny <el...@gmail.com> on 2008/11/04 20:28:07 UTC

Q about the SessionCreated event

Hi,

I have a question regarding the way this event is handled in MINA. When 
you connect to a remote server, the client will call the 
NioSocketConnector, which will create a connection, then a Processor 
will be spawn, its add() method will be called, the session will be 
initialized (the chain is injected into it), and at the end, we will 
fire the CreateSessionEvent :

            // DefaultIoFilterChain.CONNECT_FUTURE is cleared inside here
            // in AbstractIoFilterChain.fireSessionOpened().
            ((AbstractIoService) 
session.getService()).getListeners().fireSessionCreated(session);

This will in return notify the waiting ConnectFuture object which is 
used by the client, when the event has been processed by the Tail filter.

So far, so good. Now, my question : why do we notify the future in the 
tail filter, instead of doing so when we come back from the filter ? I 
understand that we have to traverse the full chain in order to be sure 
that no exception is thrown, but I don't get why we can't simply wait 
for the return to notify.

What we have is :
fireEvent -> filter1.handle() -> filter2.handle() -> ... -> 
TailFilter.handle() -> notify(future)

why not :
try {
  fireEvent -> filter1.handle() -> filter2.handle() -> ... -> 
TailFilter.handle() (do nothing)
  notify(future)
} catch( error ) {
  handle exception
}

The problem I have with the first approach is that you _have_ to deal 
with this TailFilter, even if you don't need it, which means that the 
Handler must be distinct from a filter, _or_ that the last filter (if we 
consider that an handler should be a filter) _have to_ call the 
TailFilter handler for this event ?

Seems to me pretty complicated, by maybe it's just me...
wdyt ?

-- 
--
cordialement, regards,
Emmanuel Lécharny
www.iktek.com
directory.apache.org