Author: trustin
Date: Sun Mar  9 22:45:59 2008
New Revision: 635436

URL: http://svn.apache.org/viewvc?rev=635436&view=rev
Log:
Resolved issue: DIRMINA-540 (An exception raised by IoServiceListener can lead 
to unexpected behavior of MINA core.)
* Better exception handling when an exception is thrown by a user 
IoServiceListere
* Removed a compiler warning

Modified:
    
mina/branches/1.0/core/src/main/java/org/apache/mina/common/support/IoServiceListenerSupport.java
    
mina/branches/1.1/core/src/main/java/org/apache/mina/common/support/IoServiceListenerSupport.java
    
mina/trunk/core/src/main/java/org/apache/mina/common/IoServiceListenerSupport.java
    mina/trunk/core/src/main/java/org/apache/mina/util/Log4jXmlFormatter.java

Modified: 
mina/branches/1.0/core/src/main/java/org/apache/mina/common/support/IoServiceListenerSupport.java
URL: 
http://svn.apache.org/viewvc/mina/branches/1.0/core/src/main/java/org/apache/mina/common/support/IoServiceListenerSupport.java?rev=635436&r1=635435&r2=635436&view=diff
==============================================================================
--- 
mina/branches/1.0/core/src/main/java/org/apache/mina/common/support/IoServiceListenerSupport.java
 (original)
+++ 
mina/branches/1.0/core/src/main/java/org/apache/mina/common/support/IoServiceListenerSupport.java
 Sun Mar  9 22:45:59 2008
@@ -29,6 +29,7 @@
 import java.util.Map;
 import java.util.Set;
 
+import org.apache.mina.common.ExceptionMonitor;
 import org.apache.mina.common.IoAcceptorConfig;
 import org.apache.mina.common.IoConnector;
 import org.apache.mina.common.IoFuture;
@@ -126,8 +127,12 @@
 
         synchronized (listeners) {
             for (Iterator i = listeners.iterator(); i.hasNext();) {
-                ((IoServiceListener) i.next()).serviceActivated(service,
-                        serviceAddress, handler, config);
+                try {
+                    ((IoServiceListener) i.next()).serviceActivated(service,
+                            serviceAddress, handler, config);
+                } catch (Throwable e) {
+                    ExceptionMonitor.getInstance().exceptionCaught(e);
+                }
             }
         }
     }
@@ -148,8 +153,12 @@
         try {
             synchronized (listeners) {
                 for (Iterator i = listeners.iterator(); i.hasNext();) {
-                    ((IoServiceListener) i.next()).serviceDeactivated(service,
-                            serviceAddress, handler, config);
+                    try {
+                        ((IoServiceListener) 
i.next()).serviceDeactivated(service,
+                                serviceAddress, handler, config);
+                    } catch (Throwable e) {
+                        ExceptionMonitor.getInstance().exceptionCaught(e);
+                    }
                 }
             }
         } finally {
@@ -196,7 +205,11 @@
         // Fire listener events.
         synchronized (listeners) {
             for (Iterator i = listeners.iterator(); i.hasNext();) {
-                ((IoServiceListener) i.next()).sessionCreated(session);
+                try {
+                    ((IoServiceListener) i.next()).sessionCreated(session);
+                } catch (Throwable e) {
+                    ExceptionMonitor.getInstance().exceptionCaught(e);
+                }
             }
         }
     }
@@ -234,7 +247,11 @@
         try {
             synchronized (listeners) {
                 for (Iterator i = listeners.iterator(); i.hasNext();) {
-                    ((IoServiceListener) i.next()).sessionDestroyed(session);
+                    try {
+                        ((IoServiceListener) 
i.next()).sessionDestroyed(session);
+                    } catch (Throwable e) {
+                        ExceptionMonitor.getInstance().exceptionCaught(e);
+                    }
                 }
             }
         } finally {

Modified: 
mina/branches/1.1/core/src/main/java/org/apache/mina/common/support/IoServiceListenerSupport.java
URL: 
http://svn.apache.org/viewvc/mina/branches/1.1/core/src/main/java/org/apache/mina/common/support/IoServiceListenerSupport.java?rev=635436&r1=635435&r2=635436&view=diff
==============================================================================
--- 
mina/branches/1.1/core/src/main/java/org/apache/mina/common/support/IoServiceListenerSupport.java
 (original)
+++ 
mina/branches/1.1/core/src/main/java/org/apache/mina/common/support/IoServiceListenerSupport.java
 Sun Mar  9 22:45:59 2008
@@ -29,6 +29,7 @@
 import java.util.concurrent.CopyOnWriteArraySet;
 import java.util.concurrent.CountDownLatch;
 
+import org.apache.mina.common.ExceptionMonitor;
 import org.apache.mina.common.IoAcceptorConfig;
 import org.apache.mina.common.IoConnector;
 import org.apache.mina.common.IoFuture;
@@ -116,7 +117,11 @@
         }
 
         for (IoServiceListener listener : listeners) {
-            listener.serviceActivated(service, serviceAddress, handler, 
config);
+            try {
+                listener.serviceActivated(service, serviceAddress, handler, 
config);
+            } catch (Throwable e) {
+                ExceptionMonitor.getInstance().exceptionCaught(e);
+            }
         }
     }
 
@@ -133,8 +138,12 @@
 
         try {
             for (IoServiceListener listener : listeners) {
-                listener.serviceDeactivated(service, serviceAddress, handler,
-                        config);
+                try {
+                    listener.serviceDeactivated(service, serviceAddress, 
handler,
+                            config);
+                } catch (Throwable e) {
+                    ExceptionMonitor.getInstance().exceptionCaught(e);
+                }
             }
         } finally {
             disconnectSessions(serviceAddress, config);
@@ -178,7 +187,11 @@
 
         // Fire listener events.
         for (IoServiceListener listener : listeners) {
-            listener.sessionCreated(session);
+            try {
+                listener.sessionCreated(session);
+            } catch (Throwable e) {
+                ExceptionMonitor.getInstance().exceptionCaught(e);
+            }
         }
     }
 
@@ -210,7 +223,11 @@
         // Fire listener events.
         try {
             for (IoServiceListener listener : listeners) {
-                listener.sessionDestroyed(session);
+                try {
+                    listener.sessionDestroyed(session);
+                } catch (Throwable e) {
+                    ExceptionMonitor.getInstance().exceptionCaught(e);
+                }
             }
         } finally {
             // Fire a virtual service deactivation event for the last session 
of the connector.

Modified: 
mina/trunk/core/src/main/java/org/apache/mina/common/IoServiceListenerSupport.java
URL: 
http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/common/IoServiceListenerSupport.java?rev=635436&r1=635435&r2=635436&view=diff
==============================================================================
--- 
mina/trunk/core/src/main/java/org/apache/mina/common/IoServiceListenerSupport.java
 (original)
+++ 
mina/trunk/core/src/main/java/org/apache/mina/common/IoServiceListenerSupport.java
 Sun Mar  9 22:45:59 2008
@@ -120,7 +120,11 @@
         activationTime = System.currentTimeMillis();
 
         for (IoServiceListener l : listeners) {
-            l.serviceActivated(service);
+            try {
+                l.serviceActivated(service);
+            } catch (Throwable e) {
+                ExceptionMonitor.getInstance().exceptionCaught(e);
+            }
         }
     }
     
@@ -134,7 +138,11 @@
         }
 
         for (IoServiceListener l : listeners) {
-            l.serviceIdle(service, status);
+            try {
+                l.serviceIdle(service, status);
+            } catch (Throwable e) {
+                ExceptionMonitor.getInstance().exceptionCaught(e);
+            }
         }
     }
 
@@ -150,7 +158,11 @@
 
         try {
             for (IoServiceListener l : listeners) {
-                l.serviceDeactivated(service);
+                try {
+                    l.serviceDeactivated(service);
+                } catch (Throwable e) {
+                    ExceptionMonitor.getInstance().exceptionCaught(e);
+                }
             }
         } finally {
             disconnectSessions();
@@ -190,7 +202,11 @@
 
         // Fire listener events.
         for (IoServiceListener l : listeners) {
-            l.sessionCreated(session);
+            try {
+                l.sessionCreated(session);
+            } catch (Throwable e) {
+                ExceptionMonitor.getInstance().exceptionCaught(e);
+            }
         }
     }
 
@@ -209,7 +225,11 @@
         // Fire listener events.
         try {
             for (IoServiceListener l : listeners) {
-                l.sessionDestroyed(session);
+                try {
+                    l.sessionDestroyed(session);
+                } catch (Throwable e) {
+                    ExceptionMonitor.getInstance().exceptionCaught(e);
+                }
             }
         } finally {
             // Fire a virtual service deactivation event for the last session 
of the connector.

Modified: 
mina/trunk/core/src/main/java/org/apache/mina/util/Log4jXmlFormatter.java
URL: 
http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/util/Log4jXmlFormatter.java?rev=635436&r1=635435&r2=635436&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/util/Log4jXmlFormatter.java 
(original)
+++ mina/trunk/core/src/main/java/org/apache/mina/util/Log4jXmlFormatter.java 
Sun Mar  9 22:45:59 2008
@@ -72,6 +72,7 @@
         return properties;
     }
 
+    @SuppressWarnings("unchecked")
     public String format(final LogRecord record) {
         // Reset working buffer. If the buffer is too large, then we need a new
         // one in order to avoid the penalty of creating a large array.


Reply via email to