On Tue, Dec 13, 2011 at 5:58 PM, Emmanuel Lecharny <elecha...@gmail.com> wrote: > Hi, > > the current implementation of filter's chain is associating this chain to a > service. In MINA 2, each session had a copy of this chain. > > IMO, even if the default chain should be associated to the service, it would > be a better idea to create a copy of this chain for each created session. > > the rational behind this choice is that we then be able to add or remove a > filter from the chain dynamically for one specific session. One obvious > usage could be to add a logger when one would want to get some traces for > one session, and not for the whole service. We can also imagine some other > usages. > > But it also has another direct advantage : currently, we compute the next > filter to process in the DefaultIoFilterController, where an instance of the > filter chain is stored. This DefaultIoFilterController is associated with a > service, and can then be used by more than one selector, thus by more than > one thread. That means we have to protect the current chain position for a > given selector by storing it into a ThreadLocal. Access to the ThreadLocal > values are way more expensive than accessing a session's current position if > it's a simple integer. > > It would be easier if the controller was totally stateless, which would be > possible if the session was holding the filter's chain. Now, that means we > have to think about the way we should modify a chain for an existing > session. Obviously, if we store the current position in the chain for a > given session, we can't modify this position unless it's not 0, otherwise we > might have some bad errors (ArrayOutOfBoundException, for instance). > > I still have to think a bit more about this, but I definitively think that > it's a better approach. > > Thoughts ?
Ok let's store de state (current chain position) in the session. that whould simplify the code (I'm not really happy with the thread local stuff)