Extends the AbstratIoFilter class, call teh super.XXX method instead of invoking the controller directly
diff --git a/core/src/main/java/org/apache/mina/filter/logging/LoggingFilter.java b/core/src/main/java/org/apache/mina/filter/logging/LoggingFilter.java
index 1ded779..973b9d8 100644
--- a/core/src/main/java/org/apache/mina/filter/logging/LoggingFilter.java
+++ b/core/src/main/java/org/apache/mina/filter/logging/LoggingFilter.java
@@ -21,8 +21,8 @@
 
 import java.nio.ByteBuffer;
 
+import org.apache.mina.api.AbstractIoFilter;
 import org.apache.mina.api.IdleStatus;
-import org.apache.mina.api.IoFilter;
 import org.apache.mina.api.IoSession;
 import org.apache.mina.filterchain.ReadFilterChainController;
 import org.apache.mina.filterchain.WriteFilterChainController;
@@ -34,11 +34,10 @@
 /**
  * A simple filter logging incoming events.
  * 
- * @author jvermillar
+ * @author <a href="http://mina.apache.org">Apache MINA Project</a>
  * 
  */
-public class LoggingFilter implements IoFilter {
-
+public class LoggingFilter extends AbstractIoFilter {
     /** The logger */
     private final Logger logger;
 
@@ -70,18 +69,21 @@
     /**
      * Create a new LoggingFilter using a class name
      * 
-     * @param clazz the class which name will be used to create the logger
+     * @param clazz
+     *            the class which name will be used to create the logger
      */
-    public LoggingFilter(final Class<?> clazz) {
+    public LoggingFilter(Class<?> clazz) {
         this(clazz.getName());
     }
 
     /**
      * Create a new LoggingFilter using a name
      * 
-     * @param name the name used to create the logger. If null, will default to "LoggingFilter"
+     * @param name
+     *            the name used to create the logger. If null, will default to
+     *            "LoggingFilter"
      */
-    public LoggingFilter(final String name) {
+    public LoggingFilter(String name) {
         if (name == null) {
             logger = LoggerFactory.getLogger(LoggingFilter.class.getName());
         } else {
@@ -90,13 +92,17 @@
     }
 
     /**
-     * Log if the logger and the current event log level are compatible. We log a formated message and its parameters.
+     * Log if the logger and the current event log level are compatible. We log
+     * a formated message and its parameters.
      * 
-     * @param eventLevel the event log level as requested by the user
-     * @param message the formated message to log
-     * @param param the parameter injected into the message
+     * @param eventLevel
+     *            the event log level as requested by the user
+     * @param message
+     *            the formated message to log
+     * @param param
+     *            the parameter injected into the message
      */
-    private void log(final LogLevel eventLevel, final String message, final Object param) {
+    private void log(LogLevel eventLevel, String message, Object param) {
         switch (eventLevel) {
         case TRACE:
             logger.trace(message, param);
@@ -119,12 +125,15 @@
     }
 
     /**
-     * Log if the logger and the current event log level are compatible. We log a simple message.
+     * Log if the logger and the current event log level are compatible. We log
+     * a simple message.
      * 
-     * @param eventLevel the event log level as requested by the user
-     * @param message the message to log
+     * @param eventLevel
+     *            the event log level as requested by the user
+     * @param message
+     *            the message to log
      */
-    private void log(final LogLevel eventLevel, final String message) {
+    private void log(LogLevel eventLevel, String message) {
         switch (eventLevel) {
         case TRACE:
             logger.trace(message);
@@ -150,58 +159,59 @@
      * {@inheritDoc}
      */
     @Override
-    public void sessionOpened(final IoSession session) {
+    public void sessionOpened(IoSession session) {
         log(sessionOpenedLevel, "OPENED");
-
+        super.sessionOpened(session);
     }
 
     /**
      * {@inheritDoc}
      */
     @Override
-    public void sessionClosed(final IoSession session) {
+    public void sessionClosed(IoSession session) {
         log(sessionClosedLevel, "CLOSED");
+        super.sessionClosed(session);
     }
 
     /**
      * {@inheritDoc}
      */
     @Override
-    public void sessionIdle(final IoSession session, final IdleStatus status) {
+    public void sessionIdle(IoSession session, IdleStatus status) {
         log(sessionIdleLevel, "IDLE");
+        super.sessionIdle(session, status);
     }
 
     /**
      * {@inheritDoc}
      */
     @Override
-    public void messageSent(final IoSession session, final Object message) {
+    public void messageSent(IoSession session, Object message) {
         log(messageSentLevel, "SENT");
+        super.messageSent(session, message);
     }
 
     /**
      * {@inheritDoc}
      */
     @Override
-    public void messageReceived(final IoSession session, final Object message,
-            final ReadFilterChainController controller) {
+    public void messageReceived(IoSession session, Object message, ReadFilterChainController controller) {
         if (message instanceof ByteBuffer) {
             log(messageReceivedLevel, "RECEIVED: {}", ByteBufferDumper.dump((ByteBuffer) message));
         } else {
             log(messageReceivedLevel, "RECEIVED: {}", message);
         }
 
-        controller.callReadNextFilter(message);
+        super.messageReceived(session, message, controller);
     }
 
     /**
      * {@inheritDoc}
      */
     @Override
-    public void messageWriting(final IoSession session, final WriteRequest message,
-            final WriteFilterChainController controller) {
+    public void messageWriting(IoSession session, WriteRequest message, WriteFilterChainController controller) {
         log(messageReceivedLevel, "WRITTING: {}", message);
-        controller.callWriteNextFilter(message);
+        super.messageWriting(session, message, controller);
     }
 
     // =========================
@@ -211,9 +221,10 @@
     /**
      * Set the LogLevel for the MessageReceived event.
      * 
-     * @param level The LogLevel to set
+     * @param level
+     *            The LogLevel to set
      */
-    public void setMessageReceivedLogLevel(final LogLevel level) {
+    public void setMessageReceivedLogLevel(LogLevel level) {
         messageReceivedLevel = level;
     }
 
@@ -229,9 +240,10 @@
     /**
      * Set the LogLevel for the MessageWriting event.
      * 
-     * @param level The LogLevel to set
+     * @param level
+     *            The LogLevel to set
      */
-    public void setMessageWritingLogLevel(final LogLevel level) {
+    public void setMessageWritingLogLevel(LogLevel level) {
         messageWritingLevel = level;
     }
 
@@ -247,9 +259,10 @@
     /**
      * Set the LogLevel for the SessionOpened event.
      * 
-     * @param level The LogLevel to set
+     * @param level
+     *            The LogLevel to set
      */
-    public void setSessionOpenedLogLevel(final LogLevel level) {
+    public void setSessionOpenedLogLevel(LogLevel level) {
         sessionOpenedLevel = level;
     }
 
@@ -265,9 +278,10 @@
     /**
      * Set the LogLevel for the SessionIdle event.
      * 
-     * @param level The LogLevel to set
+     * @param level
+     *            The LogLevel to set
      */
-    public void setSessionIdleLogLevel(final LogLevel level) {
+    public void setSessionIdleLogLevel(LogLevel level) {
         sessionIdleLevel = level;
     }
 
@@ -283,9 +297,10 @@
     /**
      * Set the LogLevel for the SessionClosed event.
      * 
-     * @param level The LogLevel to set
+     * @param level
+     *            The LogLevel to set
      */
-    public void setSessionClosedLogLevel(final LogLevel level) {
+    public void setSessionClosedLogLevel(LogLevel level) {
         sessionClosedLevel = level;
     }
 
@@ -310,9 +325,10 @@
     /**
      * Set the LogLevel for the messageSent event.
      * 
-     * @param level The LogLevel to set
+     * @param level
+     *            The LogLevel to set
      */
-    public void setMessageSentLevel(final LogLevel messageSentLevel) {
+    public void setMessageSentLevel(LogLevel messageSentLevel) {
         this.messageSentLevel = messageSentLevel;
     }