Hey,
I am new to mina, and using version 1.x
This is my code.
ByteBuffer.setUseDirectBuffers(false);
ByteBuffer.setAllocator(new SimpleByteBufferAllocator());
IoAcceptor acceptor = new SocketAcceptor(4,
Executors.newCachedThreadPool());
IoServiceConfig acceptorConfig = acceptor.getDefaultConfig();
acceptorConfig.setThreadModel(ThreadModel.MANUAL);
SocketAcceptorConfig cfg = new SocketAcceptorConfig();
acceptor.getFilterChain().addLast("xml", new
ProtocolCodecFilter(new XMLCodecFactory()));
acceptor.getFilterChain().addLast("threadPool", new
ExecutorFilter(Executors.newCachedThreadPool()));
acceptor.bind(new InetSocketAddress(PORT), new
MyConnectionHandler(), cfg);
While debugging I found that there are only 16 threads working on
MyConnectionHandler. Hence I added Executor filter as suggested in the
tutorial. The moment I started using Executor Filter, my xml
CumulativeProtocolDecoder started blowing up.
protected boolean doDecode(IoSession session, ByteBuffer in,
ProtocolDecoderOutput out)
throws Exception {
Object parser = session.getAttribute("parser");
// parser is now null, causing NPE's to be thrown,
session.isConnected() == false
....
}
I am setting the parser parameter in my IoHandler's sessionOpened
method. But why is closed session being passed to decoder? only when
using executor filter.
Can some one explain how the default 16 threads for my IO handler and
this Executor Filter work together, I am very confused.
Should I put code like following in my CumulativeProtocolDecoder
if(!session.isConnected()){
System.out.println("Why is doDecode called with closed
session??");
return false;
}
Thanks.