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
> >>     
> >
> >   

Attachment: signature.asc
Description: PGP signature

Reply via email to