Hi,
thanks for you're answer.
I've solved my problem which was simply related to a my own error in
doDecode() method.
Thanks again.
Julien Vermillard wrote:
Hi
Can we see your ProtocolCodec factory code ?
Julien
Le Wed, 18 Feb 2009 14:02:06 +0100,
Patrizio Munzi <[email protected]> a écrit :
Hi again,
first of all thanks to you all for your quick reply.
I tried to use the OrderedThreadPool, I still have the following
exception server side:
java.nio.BufferUnderflowException
at java.nio.HeapByteBuffer.get(HeapByteBuffer.java:127)
at
org.apache.mina.core.buffer.AbstractIoBuffer.get(AbstractIoBuffer.java:421)
at
org.apache.mina.core.buffer.AbstractIoBuffer.get(AbstractIoBuffer.java:833)
at
com.eris4.diameter.types.OctetString.decode(OctetString.java:18) at
com.eris4.diameter.types.Address.decode(Address.java:17) at
com.eris4.creditcontrol.commands.CapabilitiesExchangeRequest.decode(CapabilitiesExchangeRequest.java:238)
at
com.eris4.creditcontrol.mina.CreditControlServerDecoder.doDecode(CreditControlServerDecoder.java:45)
at
org.apache.mina.filter.codec.CumulativeProtocolDecoder.decode(CumulativeProtocolDecoder.java:173)
at
org.apache.mina.filter.codec.ProtocolCodecFilter.messageReceived(ProtocolCodecFilter.java:224)
at
org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:434)
at
org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1200(DefaultIoFilterChain.java:48)
at
org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:802)
at
org.apache.mina.core.filterchain.IoFilterEvent.fire(IoFilterEvent.java:59)
at org.apache.mina.core.session.IoEvent.run(IoEvent.java:64)
at
org.apache.mina.filter.executor.OrderedThreadPoolExecutor$Worker.runTask(OrderedThreadPoolExecutor.java:552)
at
org.apache.mina.filter.executor.OrderedThreadPoolExecutor$Worker.runTasks(OrderedThreadPoolExecutor.java:544)
at
org.apache.mina.filter.executor.OrderedThreadPoolExecutor$Worker.run(OrderedThreadPoolExecutor.java:488)
at java.lang.Thread.run(Thread.java:595)
Here are my client and server configurations:
------------------------ SERVER -----------------------------
SocketAcceptor socketAcceptor = new
NioSocketAcceptor(Runtime.getRuntime().availableProcessors()*2);
socketAcceptor.setReuseAddress(true);
filterChainWorkerPool = new
OrderedThreadPoolExecutor(Runtime.getRuntime().availableProcessors()*2);
socketAcceptor.getFilterChain().addLast("executor", new
ExecutorFilter(filterChainWorkerPool));
socketAcceptor.getFilterChain().addLast("codec", new
ProtocolCodecFilter( getServerCodecFactory()));
SocketAddress address = new InetSocketAddress(port);
socketAcceptor.setHandler(this);
acceptor = socketAcceptor;
acceptor.bind(address);
--------------------------------------------------------------------
------------------------- CLIENT -----------------------------
int nbThread = Runtime.getRuntime().availableProcessors()
* 2; SocketConnector connector = new NioSocketConnector(nbThread);
filterChainWorkerPool = new
OrderedThreadPoolExecutor(nbThread);
connector.getFilterChain().addLast("executor", new
ExecutorFilter(filterChainWorkerPool));
connector.getFilterChain().addLast("codec", new
ProtocolCodecFilter(getClientCodec()));
connector.getSessionConfig().setTcpNoDelay(true);
Handler handler= new Handler(exchangesMap);
connector.setHandler(handler);
--------------------------------------------------------------------
Am I doing something wrong???
Thanks,
Patrizio
Alexander Christian wrote:
Hi Patrizio,
I'm not sure if this is helpful for you, but I'm using this in
front of my PtorocolCodecFactory:
----
// add an executor service to handle the message reading in a
threadpool ExecutorService filterchainWorkerPool = new
OrderedThreadPoolExecutor(); filterChain.addLast("executor", new
ExecutorFilter(filterchainWorkerPool)); ----
If I'm using an ordinary executor, I'm getting the same problems
like you. Since I'm using this special type of executor, the system
runs fine.
You have to save the "filterchainWorkerPool " somewhere to shut it
down later if your application is going to terminate. Otherwise you
have still some threads alive and your application would not
terminate.
br,
Alex
On Wed, 18 Feb 2009 11:49:16 +0100, Patrizio Munzi
<[email protected]> wrote:
Hi,
A few months ago I've implemented a TCP client/server application
using MINA 1.x.
My application was multi-thread using Multi-Thread model and it
used to work.
These days I was trying to move it from MINA 1.x to MINA 2.0.0-M4
in order to understand if there was any performance improvement.
However, after all changes for backward incompatibility, I'm
having a lot of troubles with multi-thread execution.
I mean if I run it with a single thread it work well, instead in
case of multi-threads execution I have the following exception:
org.apache.mina.filter.codec.ProtocolDecoderException:
java.nio.BufferUnderflowException
I think it's something related to multi-threads codec interaction,
but I couldn't work it out.
I wonder if there is something to take care when implementing a
protocol codec in multi-threads.
Actually there's not a lot of documentation and guidelines in
multi-threads usage of mina framework and codec implementation.
I don't know, I'm talking about some step by step examples.
Any help and further discussion would be really appreciated..
Thanks,
Patrizio
--
*Patrizio Munzi*
Product Specialist
Viale Bruno Buozzi, 19 - 00197 Roma (Italy)
tel: +39 06 4543 3540
fax: +39 06 4543 3587
mobile: +39 393 7195 164
mail: [email protected] <mailto:[email protected]>
web: http://www.eris4.com <http://www.eris4.com/>
skype: eris4_munzi <skype:eris4_munzi?add>