You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by tr...@apache.org on 2005/10/17 18:21:20 UTC
svn commit: r325919 - in /directory/network/trunk/src:
examples/org/apache/mina/examples/reverser/
java/org/apache/mina/filter/codec/
Author: trustin
Date: Mon Oct 17 09:21:07 2005
New Revision: 325919
URL: http://svn.apache.org/viewcvs?rev=325919&view=rev
Log:
* Added IoSession parameter to dispose() method
* Removed dispose() method from MessageEncoder and MessageDecoder to avoid performance penalty
* Added DemuxingProtocolCodecFactory.disposeCodecResources() instead
Removed:
directory/network/trunk/src/java/org/apache/mina/filter/codec/MessageDecoderAdapter.java
directory/network/trunk/src/java/org/apache/mina/filter/codec/MessageEncoderAdapter.java
Modified:
directory/network/trunk/src/examples/org/apache/mina/examples/reverser/TextLineDecoder.java
directory/network/trunk/src/examples/org/apache/mina/examples/reverser/TextLineEncoder.java
directory/network/trunk/src/java/org/apache/mina/filter/codec/CumulativeProtocolDecoder.java
directory/network/trunk/src/java/org/apache/mina/filter/codec/DemuxingProtocolCodecFactory.java
directory/network/trunk/src/java/org/apache/mina/filter/codec/MessageDecoder.java
directory/network/trunk/src/java/org/apache/mina/filter/codec/MessageEncoder.java
directory/network/trunk/src/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java
directory/network/trunk/src/java/org/apache/mina/filter/codec/ProtocolDecoder.java
directory/network/trunk/src/java/org/apache/mina/filter/codec/ProtocolDecoderAdapter.java
directory/network/trunk/src/java/org/apache/mina/filter/codec/ProtocolEncoder.java
directory/network/trunk/src/java/org/apache/mina/filter/codec/ProtocolEncoderAdapter.java
Modified: directory/network/trunk/src/examples/org/apache/mina/examples/reverser/TextLineDecoder.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/examples/org/apache/mina/examples/reverser/TextLineDecoder.java?rev=325919&r1=325918&r2=325919&view=diff
==============================================================================
--- directory/network/trunk/src/examples/org/apache/mina/examples/reverser/TextLineDecoder.java (original)
+++ directory/network/trunk/src/examples/org/apache/mina/examples/reverser/TextLineDecoder.java Mon Oct 17 09:21:07 2005
@@ -20,7 +20,7 @@
import org.apache.mina.common.ByteBuffer;
import org.apache.mina.common.IoSession;
-import org.apache.mina.filter.codec.ProtocolDecoder;
+import org.apache.mina.filter.codec.ProtocolDecoderAdapter;
import org.apache.mina.filter.codec.ProtocolDecoderException;
import org.apache.mina.filter.codec.ProtocolDecoderOutput;
@@ -30,7 +30,7 @@
* @author Trustin Lee (trustin@apache.org)
* @version $Rev$, $Date$,
*/
-public class TextLineDecoder implements ProtocolDecoder
+public class TextLineDecoder extends ProtocolDecoderAdapter
{
private StringBuffer decodeBuf = new StringBuffer();
@@ -63,9 +63,5 @@
}
}
while( in.hasRemaining() );
- }
-
- public void dispose() throws Exception
- {
}
}
Modified: directory/network/trunk/src/examples/org/apache/mina/examples/reverser/TextLineEncoder.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/examples/org/apache/mina/examples/reverser/TextLineEncoder.java?rev=325919&r1=325918&r2=325919&view=diff
==============================================================================
--- directory/network/trunk/src/examples/org/apache/mina/examples/reverser/TextLineEncoder.java (original)
+++ directory/network/trunk/src/examples/org/apache/mina/examples/reverser/TextLineEncoder.java Mon Oct 17 09:21:07 2005
@@ -20,7 +20,7 @@
import org.apache.mina.common.ByteBuffer;
import org.apache.mina.common.IoSession;
-import org.apache.mina.filter.codec.ProtocolEncoder;
+import org.apache.mina.filter.codec.ProtocolEncoderAdapter;
import org.apache.mina.filter.codec.ProtocolEncoderOutput;
/**
@@ -29,7 +29,7 @@
* @author Trustin Lee (trustin@apache.org)
* @version $Rev$, $Date$,
*/
-public class TextLineEncoder implements ProtocolEncoder
+public class TextLineEncoder extends ProtocolEncoderAdapter
{
public void encode( IoSession session, Object message,
Modified: directory/network/trunk/src/java/org/apache/mina/filter/codec/CumulativeProtocolDecoder.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/filter/codec/CumulativeProtocolDecoder.java?rev=325919&r1=325918&r2=325919&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/filter/codec/CumulativeProtocolDecoder.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/filter/codec/CumulativeProtocolDecoder.java Mon Oct 17 09:21:07 2005
@@ -55,7 +55,7 @@
* @author Trustin Lee (trustin@apache.org)
* @version $Rev$, $Date$
*/
-public abstract class CumulativeProtocolDecoder implements ProtocolDecoder {
+public abstract class CumulativeProtocolDecoder extends ProtocolDecoderAdapter {
/** Cumulation buffer */
private ByteBuffer buf;
Modified: directory/network/trunk/src/java/org/apache/mina/filter/codec/DemuxingProtocolCodecFactory.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/filter/codec/DemuxingProtocolCodecFactory.java?rev=325919&r1=325918&r2=325919&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/filter/codec/DemuxingProtocolCodecFactory.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/filter/codec/DemuxingProtocolCodecFactory.java Mon Oct 17 09:21:07 2005
@@ -23,7 +23,6 @@
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
-import java.util.logging.Logger;
import org.apache.mina.common.ByteBuffer;
import org.apache.mina.common.IoSession;
@@ -35,6 +34,17 @@
* returns demultiplex incoming messages and buffers to
* appropriate {@link MessageEncoder}s and {@link MessageDecoder}s.
*
+ * <h2>Disposing resources acquired by {@link MessageEncoder} and {@link MessageDecoder}</h2>
+ * <p>
+ * Make your {@link MessageEncoder} and {@link MessageDecoder} to put all
+ * resources that need to be released as a session attribute. {@link #disposeCodecResources(IoSession)}
+ * method will be invoked when a session is closed. Override {@link #disposeCodecResources(IoSession)}
+ * to release the resources you've put as an attribute.
+ * <p>
+ * We didn't provide any <tt>dispose</tt> method for {@link MessageEncoder} and {@link MessageDecoder}
+ * because they can give you a big performance penalty in case you have a lot of
+ * message types to handle.
+ *
* @author The Apache Directory Project (dev@directory.apache.org)
* @author Trustin Lee (trustin@apache.org)
* @version $Rev$, $Date$
@@ -43,8 +53,6 @@
* @see MessageDecoder
*/
public class DemuxingProtocolCodecFactory implements ProtocolCodecFactory {
- private static final Logger log = Logger.getLogger( DemuxingProtocolCodecFactory.class.getName() );
-
private MessageDecoderFactory[] decoderFactories = new MessageDecoderFactory[0];
private MessageEncoderFactory[] encoderFactories = new MessageEncoderFactory[0];
@@ -123,6 +131,18 @@
return new ProtocolDecoderImpl();
}
+ /**
+ * Implement this method to release all resources acquired to perform
+ * encoding and decoding messages for the specified <tt>session</tt>.
+ * By default, this method does nothing.
+ *
+ * @param session the session that requires resource deallocation now
+ */
+ protected void disposeCodecResources( IoSession session )
+ {
+ // Do nothing by default; let users implement it as they want.
+ }
+
private class ProtocolEncoderImpl implements ProtocolEncoder
{
private final Map encoders = new IdentityHashMap();
@@ -195,22 +215,9 @@
return encoder;
}
- public void dispose() throws Exception
+ public void dispose( IoSession session ) throws Exception
{
- for( Iterator i = encoders.values().iterator(); i.hasNext(); )
- {
- MessageEncoder encoder = ( MessageEncoder ) i.next();
- try
- {
- encoder.dispose();
- }
- catch( Throwable t )
- {
- log.warning(
- "Failed to dispose: " + encoder.getClass().getName() +
- " (" + encoder + ')' );
- }
- }
+ DemuxingProtocolCodecFactory.this.disposeCodecResources( session );
}
}
@@ -305,22 +312,9 @@
}
}
- public void dispose() throws Exception
+ public void dispose( IoSession session ) throws Exception
{
- for( int i = decoders.length - 1; i >= 0; i -- )
- {
- MessageDecoder decoder = decoders[ i ];
- try
- {
- decoder.dispose();
- }
- catch( Throwable t )
- {
- log.warning(
- "Failed to dispose: " + decoder.getClass().getName() +
- " (" + decoder + ')' );
- }
- }
+ // ProtocolEncoder.dispose() already called disposeCodec().
}
}
Modified: directory/network/trunk/src/java/org/apache/mina/filter/codec/MessageDecoder.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/filter/codec/MessageDecoder.java?rev=325919&r1=325918&r2=325919&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/filter/codec/MessageDecoder.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/filter/codec/MessageDecoder.java Mon Oct 17 09:21:07 2005
@@ -78,11 +78,4 @@
*/
MessageDecoderResult decode( IoSession session, ByteBuffer in,
ProtocolDecoderOutput out ) throws Exception;
-
- /**
- * Releases all resources related with this decoder.
- *
- * @throws Exception if failed to dispose all resources
- */
- void dispose() throws Exception;
}
Modified: directory/network/trunk/src/java/org/apache/mina/filter/codec/MessageEncoder.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/filter/codec/MessageEncoder.java?rev=325919&r1=325918&r2=325919&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/filter/codec/MessageEncoder.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/filter/codec/MessageEncoder.java Mon Oct 17 09:21:07 2005
@@ -51,12 +51,4 @@
*/
void encode( IoSession session, Object message,
ProtocolEncoderOutput out ) throws Exception;
-
-
- /**
- * Releases all resources related with this encoder.
- *
- * @throws Exception if failed to dispose all resources
- */
- void dispose() throws Exception;
}
Modified: directory/network/trunk/src/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java?rev=325919&r1=325918&r2=325919&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java Mon Oct 17 09:21:07 2005
@@ -200,7 +200,7 @@
try
{
- encoder.dispose();
+ encoder.dispose( session );
}
catch( Throwable t )
{
@@ -220,7 +220,7 @@
try
{
- decoder.dispose();
+ decoder.dispose( session );
}
catch( Throwable t )
{
Modified: directory/network/trunk/src/java/org/apache/mina/filter/codec/ProtocolDecoder.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/filter/codec/ProtocolDecoder.java?rev=325919&r1=325918&r2=325919&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/filter/codec/ProtocolDecoder.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/filter/codec/ProtocolDecoder.java Mon Oct 17 09:21:07 2005
@@ -53,5 +53,5 @@
*
* @throws Exception if failed to dispose all resources
*/
- void dispose() throws Exception;
+ void dispose( IoSession session ) throws Exception;
}
Modified: directory/network/trunk/src/java/org/apache/mina/filter/codec/ProtocolDecoderAdapter.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/filter/codec/ProtocolDecoderAdapter.java?rev=325919&r1=325918&r2=325919&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/filter/codec/ProtocolDecoderAdapter.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/filter/codec/ProtocolDecoderAdapter.java Mon Oct 17 09:21:07 2005
@@ -18,6 +18,8 @@
*/
package org.apache.mina.filter.codec;
+import org.apache.mina.common.IoSession;
+
/**
* An abstract {@link ProtocolDecoder} implementation for those who don't have any
* resources to dispose.
@@ -31,7 +33,7 @@
* Override this method dispose all resources related with this decoder.
* The default implementation does nothing.
*/
- public void dispose() throws Exception
+ public void dispose( IoSession session ) throws Exception
{
}
}
Modified: directory/network/trunk/src/java/org/apache/mina/filter/codec/ProtocolEncoder.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/filter/codec/ProtocolEncoder.java?rev=325919&r1=325918&r2=325919&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/filter/codec/ProtocolEncoder.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/filter/codec/ProtocolEncoder.java Mon Oct 17 09:21:07 2005
@@ -57,5 +57,5 @@
*
* @throws Exception if failed to dispose all resources
*/
- void dispose() throws Exception;
+ void dispose( IoSession session ) throws Exception;
}
Modified: directory/network/trunk/src/java/org/apache/mina/filter/codec/ProtocolEncoderAdapter.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/filter/codec/ProtocolEncoderAdapter.java?rev=325919&r1=325918&r2=325919&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/filter/codec/ProtocolEncoderAdapter.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/filter/codec/ProtocolEncoderAdapter.java Mon Oct 17 09:21:07 2005
@@ -18,6 +18,8 @@
*/
package org.apache.mina.filter.codec;
+import org.apache.mina.common.IoSession;
+
/**
* An abstract {@link ProtocolEncoder} implementation for those who don't have any
* resources to dispose.
@@ -31,7 +33,7 @@
* Override this method dispose all resources related with this encoder.
* The default implementation does nothing.
*/
- public void dispose() throws Exception
+ public void dispose( IoSession session ) throws Exception
{
}
}