Hello,

I have an application making use of Mina 2.0.0 M5.

I have an executor filter in my filter chain, after everything but the handler.

Based on everything I read and saw in the forums, I'm expecting that it 
would make use of the OrderedThreadPoolExecutor.  Am I correct that the benefit 
of this filter with this thread pool is to provide additional threads for 
handling concurrent sessions, but that for any given session, only one thread 
will be active at a time?

I thought this was how it was supposed to behave, but I'm not seeing that.  It 
seems like multiple threads are getting into the handler methods for a given 
session concurrently.  I added some diagnostics to the messageReceived method 
of my handler:

    Map<IoSession, Integer> counter = new HashMap<IoSession, Integer>();
    public void messageReceived(IoSession session, Object message) throws 
Exception {
        synchronized(counter){
            if(!counter.containsKey(session)){
                counter.put(session, 0);
            }
            counter.put(session, counter.get(session)+1);
            System.out.println("There are " + counter.get(session) + " threads 
in this method");
        }

        //...Application Logic  

        synchronized(counter){
            counter.put(session, counter.get(session)-1);
            System.out.println("Thread done... there are " + 
counter.get(session) + " left");
        }
    }

Particularly when there is a lot of activity and messages I see this print out 
more than one, which leads me to believe that more than one thread is calling 
into my handler for a given thread, for the same session.  

Any thoughts?

Thanks,
Christopher



      

Reply via email to