I guess I was right when I said there was something wrong in your
codec (my third mail), before I started divagating on the Thread
Model. This is the First Rule for User Mailing List : first blame the
user, then try to escape from the question by throwing some clueless
informations about how the general code works (or is supposed to work
;)

Never mind. It allowed me to get back into MINA code !

I'm happy that your problem has been solved :)

On Tue, Feb 24, 2009 at 10:06 AM, Patrizio Munzi
<[email protected]> wrote:
> 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>
>
>



-- 
Regards,
Cordialement,
Emmanuel Lécharny
www.iktek.com

Reply via email to