mina-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Brendan Crowley" <brendan.crow...@tangotelecom.com>
Subject RE: Upgrade considerations between MINA 2.0.0-M3 to 2.0.4
Date Tue, 24 Jul 2012 12:13:05 GMT
I've tried using flip on the decoder on the IoBuffer and it solves my looping issue, so this
now is my currently implementation:

This is my Encoder:

public class ServiceEnvironmentMessageEncoder extends ProtocolEncoderAdapter {
    public void encode(IoSession session, Object message, ProtocolEncoderOutput out) throws
EncoderException {
        ServiceEnvironmentMessage serviceEnvironmentMessage = (ServiceEnvironmentMessage)message;
        ByteBuffer buffer = null;
        buffer = serviceEnvironmentMessage.encode(buffer);
        buffer.rewind();
        IoBuffer ioBuffer = IoBuffer.wrap(buffer);
        out.write(ioBuffer);
    }
}

And my decoder:

public class ServiceEnvironmentMessageDecoder extends CumulativeProtocolDecoder {
    protected boolean doDecode(IoSession session, IoBuffer in, ProtocolDecoderOutput out)
throws DecoderException {
        IoBuffer inFlipped = in.flip(); // MINA 2.0.4 implementation
        byte[]inArray = inFlipped.array(); // MINA 2.0.4 implementation
        /* MINA 2.0.0-M3 Implementation
        byte[]inArray = in.array(); */
        out.write(decode(inArray));
        return true;
    }

    private ServiceEnvironmentMessage decode(byte[] stream) throws DecoderException {
        ByteBuffer bb = ByteBuffer.wrap(stream);
        ServiceEnvironmentMessageContainer container = new ServiceEnvironmentMessageContainer(ServiceEnvironmentMessageGrammar.getInstance());
        decoder.decode(bb, container);
        ServiceEnvironmentMessage message = container.getServiceEnvironmentMessage();
        container.clean();
        return message;
    }
}

So, for my original issue - under high load (4000+ transactions per second) my responses are
timing out on the request side, is there performance tweaking i can do to improve performance?

I see in the FAQs under troubleshooting: "I get OutOfMemoryError or response timeout and connection
reset under heavy load."
There is a recommendation to switch buffer type to heap. How can i tell what type i'm already
using and how to set it to 'heap' type?
It says to do this, but make little sense to me:
ByteBuffer.setUseDirectBuffers(false);
ByteBuffer.setAllocator(new SimpleByteBufferAllocator());


Brendan





-----Original Message-----
From: Emmanuel Lécharny [mailto:elecharny@gmail.com] 
Sent: 23 July 2012 23:03
To: users@mina.apache.org
Subject: Re: Upgrade considerations between MINA 2.0.0-M3 to 2.0.4

Le 7/23/12 7:13 PM, Brendan Crowley a écrit :
> No i don't flip
>
> This is the decode method:
>
> private ServiceEnvironmentMessage decode(byte[] stream) throws DecoderException {
>          ByteBuffer bb = ByteBuffer.wrap(stream);
>
>          ServiceEnvironmentMessageContainer container = new ServiceEnvironmentMessageContainer(ServiceEnvironmentMessageGrammar.getInstance());
>          decoder.decode(bb, container);
>
>          ServiceEnvironmentMessage message = container.getServiceEnvironmentMessage();
>
>          // Clean the container for the next decoding
>          container.clean();
>
>          return message;
>      }
>
> I don't understand how to flip the buffer after decoding? I could invoke bb.flip(); but
this would have no effect.

This is not here that th ebuffer should be flipped. You already have 
extracted the byte[] out of the IoBuffer.

I need to see the whole code in order to provide some help (at least, 
the way you implementd the decoder)


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


Mime
View raw message