Author: elecharny Date: Thu Nov 26 09:41:32 2009 New Revision: 884479 URL: http://svn.apache.org/viewvc?rev=884479&view=rev Log: Reverted a modif I committed a few months ago : the CODEC instances should not be stored in the session, otherwise a user can't have more than one codec in the chain
Modified: mina/trunk/core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java Modified: mina/trunk/core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java?rev=884479&r1=884478&r2=884479&view=diff ============================================================================== --- mina/trunk/core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java (original) +++ mina/trunk/core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java Thu Nov 26 09:41:32 2009 @@ -53,10 +53,10 @@ private static final Class<?>[] EMPTY_PARAMS = new Class[0]; private static final IoBuffer EMPTY_BUFFER = IoBuffer.wrap(new byte[0]); - private static final AttributeKey ENCODER = new AttributeKey(ProtocolCodecFilter.class, "encoder"); - private static final AttributeKey DECODER = new AttributeKey(ProtocolCodecFilter.class, "decoder"); - private static final AttributeKey DECODER_OUT = new AttributeKey(ProtocolCodecFilter.class, "decoderOut"); - private static final AttributeKey ENCODER_OUT = new AttributeKey(ProtocolCodecFilter.class, "encoderOut"); + private final AttributeKey ENCODER = new AttributeKey(ProtocolCodecFilter.class, "encoder"); + private final AttributeKey DECODER = new AttributeKey(ProtocolCodecFilter.class, "decoder"); + private final AttributeKey DECODER_OUT = new AttributeKey(ProtocolCodecFilter.class, "decoderOut"); + private final AttributeKey ENCODER_OUT = new AttributeKey(ProtocolCodecFilter.class, "encoderOut"); /** The factory responsible for creating the encoder and decoder */ private final ProtocolCodecFactory factory; @@ -210,7 +210,7 @@ } IoBuffer in = (IoBuffer) message; - ProtocolDecoder decoder = getDecoder(session); + ProtocolDecoder decoder = getDecoder0(session); ProtocolDecoderOutput decoderOut = getDecoderOut(session, nextFilter); // Loop until we don't have anymore byte in the buffer, @@ -288,7 +288,7 @@ } // Get the encoder in the session - ProtocolEncoder encoder = getEncoder(session); + ProtocolEncoder encoder = getEncoder0(session); ProtocolEncoderOutput encoderOut = getEncoderOut(session, nextFilter, writeRequest); @@ -322,7 +322,7 @@ public void sessionClosed(NextFilter nextFilter, IoSession session) throws Exception { // Call finishDecode() first when a connection is closed. - ProtocolDecoder decoder = getDecoder(session); + ProtocolDecoder decoder = getDecoder0(session); ProtocolDecoderOutput decoderOut = getDecoderOut(session, nextFilter); try { @@ -488,16 +488,6 @@ } /** - * Get the decoder instance from a given session. - * - * @param session The associated session we will get the decoder from - * @return The decoder instance - */ - private ProtocolDecoder getDecoder(IoSession session) { - return (ProtocolDecoder) session.getAttribute(DECODER); - } - - /** * Dispose the decoder, removing its instance from the * session's attributes, and calling the associated * dispose method. @@ -534,6 +524,28 @@ return out; } + private ProtocolEncoder getEncoder0(IoSession session) throws Exception { + ProtocolEncoder encoder = (ProtocolEncoder) session + .getAttribute(ENCODER); + if (encoder == null) { + encoder = factory.getEncoder(session); + session.setAttribute(ENCODER, encoder); + } + return encoder; + } + + private ProtocolDecoder getDecoder0(IoSession session) throws Exception { + ProtocolDecoder decoder = (ProtocolDecoder) session + .getAttribute(DECODER); + + if (decoder == null) { + decoder = factory.getDecoder(session); + session.setAttribute(DECODER, decoder); + } + + return decoder; + } + private ProtocolEncoderOutput getEncoderOut(IoSession session, NextFilter nextFilter, WriteRequest writeRequest) { ProtocolEncoderOutput out = (ProtocolEncoderOutput) session.getAttribute(ENCODER_OUT);