You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by tr...@apache.org on 2007/10/26 11:21:04 UTC

svn commit: r588579 - in /mina/trunk: core/src/main/java/org/apache/mina/common/ core/src/main/java/org/apache/mina/filter/ssl/ core/src/main/java/org/apache/mina/filter/stream/ core/src/main/java/org/apache/mina/transport/vmpipe/ core/src/test/java/or...

Author: trustin
Date: Fri Oct 26 02:21:01 2007
New Revision: 588579

URL: http://svn.apache.org/viewvc?rev=588579&view=rev
Log:
* Generified IoFutureListener - no need to down cast IoFuture anymore!
* Fixed some compiler warnings
* Resolved issue: DIRMINA-432 (IoService method for writing Object to all the managed IoSession)
** Added CompositeIoFuture
** Added MessageBroadcaster
** NOTE: I found returning Map<IoSession, WriteFuture> is not necessary because the caller already knows which session is associated with which WriteFuture.


Added:
    mina/trunk/core/src/main/java/org/apache/mina/common/CompositeIoFuture.java   (with props)
    mina/trunk/core/src/main/java/org/apache/mina/common/MessageBroadcaster.java   (with props)
Modified:
    mina/trunk/core/src/main/java/org/apache/mina/common/AbstractIoConnector.java
    mina/trunk/core/src/main/java/org/apache/mina/common/AbstractIoService.java
    mina/trunk/core/src/main/java/org/apache/mina/common/AbstractIoSession.java
    mina/trunk/core/src/main/java/org/apache/mina/common/CloseFuture.java
    mina/trunk/core/src/main/java/org/apache/mina/common/ConnectFuture.java
    mina/trunk/core/src/main/java/org/apache/mina/common/DefaultCloseFuture.java
    mina/trunk/core/src/main/java/org/apache/mina/common/DefaultConnectFuture.java
    mina/trunk/core/src/main/java/org/apache/mina/common/DefaultIoFuture.java
    mina/trunk/core/src/main/java/org/apache/mina/common/DefaultWriteFuture.java
    mina/trunk/core/src/main/java/org/apache/mina/common/DefaultWriteRequest.java
    mina/trunk/core/src/main/java/org/apache/mina/common/IoFuture.java
    mina/trunk/core/src/main/java/org/apache/mina/common/IoFutureListener.java
    mina/trunk/core/src/main/java/org/apache/mina/common/IoService.java
    mina/trunk/core/src/main/java/org/apache/mina/common/IoServiceListenerSupport.java
    mina/trunk/core/src/main/java/org/apache/mina/common/WriteFuture.java
    mina/trunk/core/src/main/java/org/apache/mina/filter/ssl/SslFilter.java
    mina/trunk/core/src/main/java/org/apache/mina/filter/stream/StreamWriteFilter.java
    mina/trunk/core/src/main/java/org/apache/mina/transport/vmpipe/VmPipeConnector.java
    mina/trunk/core/src/test/java/org/apache/mina/common/FutureTest.java
    mina/trunk/core/src/test/java/org/apache/mina/filter/stream/StreamWriteFilterTest.java
    mina/trunk/example/src/main/java/org/apache/mina/example/proxy/ClientToProxyIoHandler.java
    mina/trunk/example/src/main/java/org/apache/mina/example/tapedeck/CommandSyntaxException.java
    mina/trunk/example/src/main/java/org/apache/mina/example/tapedeck/TapeDeckServer.java
    mina/trunk/example/src/main/java/org/apache/mina/example/udp/client/MemMonClient.java
    mina/trunk/integration-spring/src/test/java/org/apache/mina/integration/spring/DefaultIoFilterChainBuilderFactoryBeanTest.java
    mina/trunk/integration-spring/src/test/java/org/apache/mina/integration/spring/IoFilterMappingTest.java
    mina/trunk/statemachine/src/main/java/org/apache/mina/statemachine/BreakAndCallException.java
    mina/trunk/statemachine/src/main/java/org/apache/mina/statemachine/BreakAndContinueException.java
    mina/trunk/statemachine/src/main/java/org/apache/mina/statemachine/BreakAndGotoException.java
    mina/trunk/statemachine/src/main/java/org/apache/mina/statemachine/BreakAndReturnException.java
    mina/trunk/statemachine/src/main/java/org/apache/mina/statemachine/BreakException.java
    mina/trunk/statemachine/src/main/java/org/apache/mina/statemachine/NoSuchStateException.java
    mina/trunk/statemachine/src/main/java/org/apache/mina/statemachine/StateMachine.java
    mina/trunk/statemachine/src/main/java/org/apache/mina/statemachine/StateMachineCreationException.java
    mina/trunk/statemachine/src/main/java/org/apache/mina/statemachine/event/UnhandledEventException.java
    mina/trunk/statemachine/src/main/java/org/apache/mina/statemachine/transition/AmbiguousMethodException.java
    mina/trunk/statemachine/src/main/java/org/apache/mina/statemachine/transition/MethodInvocationException.java
    mina/trunk/statemachine/src/main/java/org/apache/mina/statemachine/transition/NoSuchMethodException.java

Modified: mina/trunk/core/src/main/java/org/apache/mina/common/AbstractIoConnector.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/common/AbstractIoConnector.java?rev=588579&r1=588578&r2=588579&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/common/AbstractIoConnector.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/common/AbstractIoConnector.java Fri Oct 26 02:21:01 2007
@@ -105,10 +105,9 @@
         // In case that ConnectFuture.cancel() is invoked before
         // setSession() is invoked, add a listener that closes the
         // connection immediately on cancellation.
-        future.addListener(new IoFutureListener() {
-            public void operationComplete(IoFuture future) {
-                ConnectFuture f = (ConnectFuture) future;
-                if (f.isCanceled()) {
+        future.addListener(new IoFutureListener<ConnectFuture>() {
+            public void operationComplete(ConnectFuture future) {
+                if (future.isCanceled()) {
                     session.close();
                 }
             }

Modified: mina/trunk/core/src/main/java/org/apache/mina/common/AbstractIoService.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/common/AbstractIoService.java?rev=588579&r1=588578&r2=588579&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/common/AbstractIoService.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/common/AbstractIoService.java Fri Oct 26 02:21:01 2007
@@ -19,6 +19,9 @@
  */
 package org.apache.mina.common;
 
+import java.util.AbstractSet;
+import java.util.Iterator;
+import java.util.List;
 import java.util.Set;
 import java.util.concurrent.atomic.AtomicLong;
 
@@ -190,6 +193,25 @@
     protected void increaseWrittenMessages() {
         writtenMessages.incrementAndGet();
         scheduledWriteMessages.decrementAndGet();
+    }
+
+    public Set<WriteFuture> broadcast(Object message) {
+        // Convert to Set.  We do not return a List here because only the 
+        // direct caller of MessageBroadcaster knows the order of write
+        // operations.
+        final List<WriteFuture> futures = MessageBroadcaster.broadcast(
+                message, getManagedSessions());
+        return new AbstractSet<WriteFuture>() {
+            @Override
+            public Iterator<WriteFuture> iterator() {
+                return futures.iterator();
+            }
+
+            @Override
+            public int size() {
+                return futures.size();
+            }
+        };
     }
 
     protected static class ServiceOperationFuture extends DefaultIoFuture {

Modified: mina/trunk/core/src/main/java/org/apache/mina/common/AbstractIoSession.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/common/AbstractIoSession.java?rev=588579&r1=588578&r2=588579&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/common/AbstractIoSession.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/common/AbstractIoSession.java Fri Oct 26 02:21:01 2007
@@ -44,9 +44,9 @@
  */
 public abstract class AbstractIoSession implements IoSession {
 
-    private static final IoFutureListener SCHEDULED_COUNTER_RESETTER =
-        new IoFutureListener() {
-            public void operationComplete(IoFuture future) {
+    private static final IoFutureListener<CloseFuture> SCHEDULED_COUNTER_RESETTER =
+        new IoFutureListener<CloseFuture>() {
+            public void operationComplete(CloseFuture future) {
                 AbstractIoSession s = (AbstractIoSession) future.getSession();
                 s.scheduledWriteBytes.set(0);
                 s.scheduledWriteMessages.set(0);
@@ -245,8 +245,8 @@
 
         if (message instanceof File) {
             final FileChannel finalChannel = channel;
-            future.addListener(new IoFutureListener() {
-                public void operationComplete(IoFuture future) {
+            future.addListener(new IoFutureListener<WriteFuture>() {
+                public void operationComplete(WriteFuture future) {
                     try {
                         finalChannel.close();
                     } catch (IOException e) {

Modified: mina/trunk/core/src/main/java/org/apache/mina/common/CloseFuture.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/common/CloseFuture.java?rev=588579&r1=588578&r2=588579&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/common/CloseFuture.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/common/CloseFuture.java Fri Oct 26 02:21:01 2007
@@ -52,7 +52,7 @@
 
     CloseFuture awaitUninterruptibly();
 
-    CloseFuture addListener(IoFutureListener listener);
+    CloseFuture addListener(IoFutureListener<?> listener);
 
-    CloseFuture removeListener(IoFutureListener listener);
+    CloseFuture removeListener(IoFutureListener<?> listener);
 }

Added: mina/trunk/core/src/main/java/org/apache/mina/common/CompositeIoFuture.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/common/CompositeIoFuture.java?rev=588579&view=auto
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/common/CompositeIoFuture.java (added)
+++ mina/trunk/core/src/main/java/org/apache/mina/common/CompositeIoFuture.java Fri Oct 26 02:21:01 2007
@@ -0,0 +1,41 @@
+package org.apache.mina.common;
+
+import java.util.concurrent.atomic.AtomicInteger;
+
+/**
+ * An {@link IoFuture} of {@link IoFuture}s.  It is useful when you want to
+ * get notified when all {@link IoFuture}s are complete.
+ * 
+ * @author The Apache MINA Project (dev@mina.apache.org)
+ * @version $Rev$, $Date$
+ *
+ * @param <E> the type of the child futures.
+ */
+public class CompositeIoFuture<E extends IoFuture> extends DefaultIoFuture {
+    
+    private final NotifyingListener listener = new NotifyingListener();
+    private final AtomicInteger unnotified = new AtomicInteger();
+    private volatile boolean constructionFinished;
+    
+    public CompositeIoFuture(Iterable<E> children) {
+        super(null);
+        
+        for (E f: children) {
+            f.addListener(listener);
+            unnotified.incrementAndGet();
+        }
+        
+        constructionFinished = true;
+        if (unnotified.get() == 0) {
+            setValue(true);
+        }
+    }
+    
+    private class NotifyingListener implements IoFutureListener<IoFuture> {
+        public void operationComplete(IoFuture future) {
+            if (unnotified.decrementAndGet() == 0 && constructionFinished) {
+                setValue(true);
+            }
+        }
+    }
+}

Propchange: mina/trunk/core/src/main/java/org/apache/mina/common/CompositeIoFuture.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: mina/trunk/core/src/main/java/org/apache/mina/common/CompositeIoFuture.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: mina/trunk/core/src/main/java/org/apache/mina/common/ConnectFuture.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/common/ConnectFuture.java?rev=588579&r1=588578&r2=588579&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/common/ConnectFuture.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/common/ConnectFuture.java Fri Oct 26 02:21:01 2007
@@ -86,7 +86,7 @@
 
     ConnectFuture awaitUninterruptibly();
 
-    ConnectFuture addListener(IoFutureListener listener);
+    ConnectFuture addListener(IoFutureListener<?> listener);
 
-    ConnectFuture removeListener(IoFutureListener listener);
+    ConnectFuture removeListener(IoFutureListener<?> listener);
 }

Modified: mina/trunk/core/src/main/java/org/apache/mina/common/DefaultCloseFuture.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/common/DefaultCloseFuture.java?rev=588579&r1=588578&r2=588579&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/common/DefaultCloseFuture.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/common/DefaultCloseFuture.java Fri Oct 26 02:21:01 2007
@@ -57,12 +57,12 @@
     }
 
     @Override
-    public CloseFuture addListener(IoFutureListener listener) {
+    public CloseFuture addListener(IoFutureListener<?> listener) {
         return (CloseFuture) super.addListener(listener);
     }
 
     @Override
-    public CloseFuture removeListener(IoFutureListener listener) {
+    public CloseFuture removeListener(IoFutureListener<?> listener) {
         return (CloseFuture) super.removeListener(listener);
     }
 }

Modified: mina/trunk/core/src/main/java/org/apache/mina/common/DefaultConnectFuture.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/common/DefaultConnectFuture.java?rev=588579&r1=588578&r2=588579&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/common/DefaultConnectFuture.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/common/DefaultConnectFuture.java Fri Oct 26 02:21:01 2007
@@ -102,12 +102,12 @@
     }
 
     @Override
-    public ConnectFuture addListener(IoFutureListener listener) {
+    public ConnectFuture addListener(IoFutureListener<?> listener) {
         return (ConnectFuture) super.addListener(listener);
     }
 
     @Override
-    public ConnectFuture removeListener(IoFutureListener listener) {
+    public ConnectFuture removeListener(IoFutureListener<?> listener) {
         return (ConnectFuture) super.removeListener(listener);
     }
 }

Modified: mina/trunk/core/src/main/java/org/apache/mina/common/DefaultIoFuture.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/common/DefaultIoFuture.java?rev=588579&r1=588578&r2=588579&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/common/DefaultIoFuture.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/common/DefaultIoFuture.java Fri Oct 26 02:21:01 2007
@@ -36,8 +36,8 @@
 
     private final IoSession session;
     private final Object lock;
-    private IoFutureListener firstListener;
-    private List<IoFutureListener> otherListeners;
+    private IoFutureListener<?> firstListener;
+    private List<IoFutureListener<?>> otherListeners;
     private Object result;
     private boolean ready;
     private int waiters;
@@ -224,7 +224,7 @@
         }
     }
 
-    public IoFuture addListener(IoFutureListener listener) {
+    public IoFuture addListener(IoFutureListener<?> listener) {
         if (listener == null) {
             throw new NullPointerException("listener");
         }
@@ -238,7 +238,7 @@
                     firstListener = listener;
                 } else {
                     if (otherListeners == null) {
-                        otherListeners = new ArrayList<IoFutureListener>(1);
+                        otherListeners = new ArrayList<IoFutureListener<?>>(1);
                     }
                     otherListeners.add(listener);
                 }
@@ -251,7 +251,7 @@
         return this;
     }
 
-    public IoFuture removeListener(IoFutureListener listener) {
+    public IoFuture removeListener(IoFutureListener<?> listener) {
         if (listener == null) {
             throw new NullPointerException("listener");
         }
@@ -282,7 +282,7 @@
             firstListener = null;
 
             if (otherListeners != null) {
-                for (IoFutureListener l : otherListeners) {
+                for (IoFutureListener<?> l : otherListeners) {
                     notifyListener(l);
                 }
                 otherListeners = null;
@@ -290,6 +290,7 @@
         }
     }
 
+    @SuppressWarnings("unchecked")
     private void notifyListener(IoFutureListener l) {
         try {
             l.operationComplete(this);

Modified: mina/trunk/core/src/main/java/org/apache/mina/common/DefaultWriteFuture.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/common/DefaultWriteFuture.java?rev=588579&r1=588578&r2=588579&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/common/DefaultWriteFuture.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/common/DefaultWriteFuture.java Fri Oct 26 02:21:01 2007
@@ -74,12 +74,12 @@
     }
 
     @Override
-    public WriteFuture addListener(IoFutureListener listener) {
+    public WriteFuture addListener(IoFutureListener<?> listener) {
         return (WriteFuture) super.addListener(listener);
     }
 
     @Override
-    public WriteFuture removeListener(IoFutureListener listener) {
+    public WriteFuture removeListener(IoFutureListener<?> listener) {
         return (WriteFuture) super.removeListener(listener);
     }
 }

Modified: mina/trunk/core/src/main/java/org/apache/mina/common/DefaultWriteRequest.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/common/DefaultWriteRequest.java?rev=588579&r1=588578&r2=588579&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/common/DefaultWriteRequest.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/common/DefaultWriteRequest.java Fri Oct 26 02:21:01 2007
@@ -52,12 +52,12 @@
             return true;
         }
 
-        public WriteFuture addListener(IoFutureListener listener) {
+        public WriteFuture addListener(IoFutureListener<?> listener) {
             throw new IllegalStateException(
                     "You can't add a listener to a dummy future.");
         }
 
-        public WriteFuture removeListener(IoFutureListener listener) {
+        public WriteFuture removeListener(IoFutureListener<?> listener) {
             throw new IllegalStateException(
                     "You can't add a listener to a dummy future.");
         }

Modified: mina/trunk/core/src/main/java/org/apache/mina/common/IoFuture.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/common/IoFuture.java?rev=588579&r1=588578&r2=588579&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/common/IoFuture.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/common/IoFuture.java Fri Oct 26 02:21:01 2007
@@ -94,11 +94,11 @@
      * Adds an event <tt>listener</tt> which is notified when
      * the state of this future changes.
      */
-    IoFuture addListener(IoFutureListener listener);
+    IoFuture addListener(IoFutureListener<?> listener);
 
     /**
      * Removes an existing event <tt>listener</tt> which is notified when
      * the state of this future changes.
      */
-    IoFuture removeListener(IoFutureListener listener);
+    IoFuture removeListener(IoFutureListener<?> listener);
 }

Modified: mina/trunk/core/src/main/java/org/apache/mina/common/IoFutureListener.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/common/IoFutureListener.java?rev=588579&r1=588578&r2=588579&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/common/IoFutureListener.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/common/IoFutureListener.java Fri Oct 26 02:21:01 2007
@@ -28,12 +28,12 @@
  * @author The Apache MINA Project (dev@mina.apache.org)
  * @version $Rev$, $Date$
  */
-public interface IoFutureListener extends EventListener {
+public interface IoFutureListener<F extends IoFuture> extends EventListener {
     /**
      * An {@link IoFutureListener} that closes the {@link IoSession} which is
      * associated with the specified {@link IoFuture}.
      */
-    static IoFutureListener CLOSE = new IoFutureListener() {
+    static IoFutureListener<IoFuture> CLOSE = new IoFutureListener<IoFuture>() {
         public void operationComplete(IoFuture future) {
             future.getSession().close();
         }
@@ -46,5 +46,5 @@
      * @param future  The source {@link IoFuture} which called this
      *                callback.
      */
-    void operationComplete(IoFuture future);
+    void operationComplete(F future);
 }

Modified: mina/trunk/core/src/main/java/org/apache/mina/common/IoService.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/common/IoService.java?rev=588579&r1=588578&r2=588579&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/common/IoService.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/common/IoService.java Fri Oct 26 02:21:01 2007
@@ -167,4 +167,10 @@
      */
     long getScheduledWriteMessages();
 
+    /**
+     * Writes the specified {@code message} to all the {@link IoSession}s
+     * managed by this service.  This method is a convenience shortcut for
+     * {@link IoSessions#broadcast(Object, java.util.Collection)}.
+     */
+    Set<WriteFuture> broadcast(Object message);
 }

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=588579&r1=588578&r2=588579&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 Fri Oct 26 02:21:01 2007
@@ -200,7 +200,7 @@
         }
 
         Object lock = new Object();
-        IoFutureListener listener = new LockNotifyingListener(lock);
+        IoFutureListener<IoFuture> listener = new LockNotifyingListener(lock);
 
         for (IoSession s : managedSessions) {
             s.close().addListener(listener);
@@ -217,7 +217,7 @@
         }
     }
 
-    private static class LockNotifyingListener implements IoFutureListener {
+    private static class LockNotifyingListener implements IoFutureListener<IoFuture> {
         private final Object lock;
 
         public LockNotifyingListener(Object lock) {

Added: mina/trunk/core/src/main/java/org/apache/mina/common/MessageBroadcaster.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/common/MessageBroadcaster.java?rev=588579&view=auto
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/common/MessageBroadcaster.java (added)
+++ mina/trunk/core/src/main/java/org/apache/mina/common/MessageBroadcaster.java Fri Oct 26 02:21:01 2007
@@ -0,0 +1,110 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ *
+ */
+package org.apache.mina.common;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * A utility class that provides various convenience methods related with
+ * {@link IoSession} and {@link IoFuture}.
+ * 
+ * @author The Apache MINA Project (dev@mina.apache.org)
+ * @version $Rev$, $Date$
+ */
+public class MessageBroadcaster {
+    
+    private static final IoSession[] EMPTY_SESSIONS = new IoSession[0];
+
+    /**
+     * Writes the specified {@code message} to the specified {@code sessions}.
+     * If the specified {@code message} is an {@link IoBuffer}, the buffer is
+     * automatically duplicated using {@link IoBuffer#duplicate()}.
+     */
+    public static List<WriteFuture> broadcast(Object message, Collection<IoSession> sessions) {
+        List<WriteFuture> answer = new ArrayList<WriteFuture>(sessions.size());
+        broadcast(message, sessions.iterator(), answer);
+        return answer;
+    }
+
+    /**
+     * Writes the specified {@code message} to the specified {@code sessions}.
+     * If the specified {@code message} is an {@link IoBuffer}, the buffer is
+     * automatically duplicated using {@link IoBuffer#duplicate()}.
+     */
+    public static List<WriteFuture> broadcast(Object message, Iterable<IoSession> sessions) {
+        List<WriteFuture> answer = new ArrayList<WriteFuture>();
+        broadcast(message, sessions.iterator(), answer);
+        return answer;
+    }
+    
+    /**
+     * Writes the specified {@code message} to the specified {@code sessions}.
+     * If the specified {@code message} is an {@link IoBuffer}, the buffer is
+     * automatically duplicated using {@link IoBuffer#duplicate()}.
+     */
+    public static List<WriteFuture> broadcast(Object message, Iterator<IoSession> sessions) {
+        List<WriteFuture> answer = new ArrayList<WriteFuture>();
+        broadcast(message, sessions, answer);
+        return answer;
+    }
+    
+    /**
+     * Writes the specified {@code message} to the specified {@code sessions}.
+     * If the specified {@code message} is an {@link IoBuffer}, the buffer is
+     * automatically duplicated using {@link IoBuffer#duplicate()}.
+     */
+    public static List<WriteFuture> broadcast(Object message, IoSession... sessions) {
+        if (sessions == null) {
+            sessions = EMPTY_SESSIONS;
+        }
+        
+        List<WriteFuture> answer = new ArrayList<WriteFuture>(sessions.length);
+        if (message instanceof IoBuffer) {
+            for (IoSession s: sessions) {
+                answer.add(s.write(((IoBuffer) message).duplicate()));
+            }
+        } else {
+            for (IoSession s: sessions) {
+                answer.add(s.write(message));
+            }
+        }
+        return answer;
+    }
+    
+    private static void broadcast(Object message, Iterator<IoSession> sessions, Collection<WriteFuture> answer) {
+        if (message instanceof IoBuffer) {
+            while (sessions.hasNext()) {
+                IoSession s = sessions.next();
+                answer.add(s.write(((IoBuffer) message).duplicate()));
+            }
+        } else {
+            while (sessions.hasNext()) {
+                IoSession s = sessions.next();
+                answer.add(s.write(message));
+            }
+        }
+    }
+    
+    private MessageBroadcaster() {
+    }
+}

Propchange: mina/trunk/core/src/main/java/org/apache/mina/common/MessageBroadcaster.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: mina/trunk/core/src/main/java/org/apache/mina/common/MessageBroadcaster.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: mina/trunk/core/src/main/java/org/apache/mina/common/WriteFuture.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/common/WriteFuture.java?rev=588579&r1=588578&r2=588579&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/common/WriteFuture.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/common/WriteFuture.java Fri Oct 26 02:21:01 2007
@@ -59,7 +59,7 @@
 
     WriteFuture awaitUninterruptibly();
 
-    WriteFuture addListener(IoFutureListener listener);
+    WriteFuture addListener(IoFutureListener<?> listener);
 
-    WriteFuture removeListener(IoFutureListener listener);
+    WriteFuture removeListener(IoFutureListener<?> listener);
 }

Modified: mina/trunk/core/src/main/java/org/apache/mina/filter/ssl/SslFilter.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/filter/ssl/SslFilter.java?rev=588579&r1=588578&r2=588579&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/filter/ssl/SslFilter.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/filter/ssl/SslFilter.java Fri Oct 26 02:21:01 2007
@@ -552,7 +552,7 @@
             synchronized (handler) {
                 if (isSslStarted(session)) {
                     future = initiateClosure(nextFilter, session);
-                    future.addListener(new IoFutureListener() {
+                    future.addListener(new IoFutureListener<IoFuture>() {
                         public void operationComplete(IoFuture future) {
                             nextFilter.filterClose(session);
                         }

Modified: mina/trunk/core/src/main/java/org/apache/mina/filter/stream/StreamWriteFilter.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/filter/stream/StreamWriteFilter.java?rev=588579&r1=588578&r2=588579&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/filter/stream/StreamWriteFilter.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/filter/stream/StreamWriteFilter.java Fri Oct 26 02:21:01 2007
@@ -31,7 +31,6 @@
 import org.apache.mina.common.IoFilterChain;
 import org.apache.mina.common.IoSession;
 import org.apache.mina.common.WriteRequest;
-import org.apache.mina.common.IoFilter.NextFilter;
 
 /**
  * Filter implementation which makes it possible to write {@link InputStream}

Modified: mina/trunk/core/src/main/java/org/apache/mina/transport/vmpipe/VmPipeConnector.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/transport/vmpipe/VmPipeConnector.java?rev=588579&r1=588578&r2=588579&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/transport/vmpipe/VmPipeConnector.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/transport/vmpipe/VmPipeConnector.java Fri Oct 26 02:21:01 2007
@@ -127,7 +127,7 @@
 
     private static int nextLocalPort = -1;
 
-    private static final IoFutureListener LOCAL_ADDRESS_RECLAIMER = new LocalAddressReclaimer();
+    private static final IoFutureListener<IoFuture> LOCAL_ADDRESS_RECLAIMER = new LocalAddressReclaimer();
 
     private static VmPipeAddress nextLocalAddress() throws IOException {
         synchronized (TAKEN_LOCAL_ADDRESSES) {
@@ -146,7 +146,7 @@
         throw new IOException("Can't assign a local VM pipe port.");
     }
 
-    private static class LocalAddressReclaimer implements IoFutureListener {
+    private static class LocalAddressReclaimer implements IoFutureListener<IoFuture> {
         public void operationComplete(IoFuture future) {
             synchronized (TAKEN_LOCAL_ADDRESSES) {
                 TAKEN_LOCAL_ADDRESSES.remove(future.getSession()

Modified: mina/trunk/core/src/test/java/org/apache/mina/common/FutureTest.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/test/java/org/apache/mina/common/FutureTest.java?rev=588579&r1=588578&r2=588579&view=diff
==============================================================================
--- mina/trunk/core/src/test/java/org/apache/mina/common/FutureTest.java (original)
+++ mina/trunk/core/src/test/java/org/apache/mina/common/FutureTest.java Fri Oct 26 02:21:01 2007
@@ -222,7 +222,7 @@
         }
     }
 
-    private static class TestListener implements IoFutureListener {
+    private static class TestListener implements IoFutureListener<IoFuture> {
         private IoFuture notifiedFuture;
 
         public void operationComplete(IoFuture future) {

Modified: mina/trunk/core/src/test/java/org/apache/mina/filter/stream/StreamWriteFilterTest.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/test/java/org/apache/mina/filter/stream/StreamWriteFilterTest.java?rev=588579&r1=588578&r2=588579&view=diff
==============================================================================
--- mina/trunk/core/src/test/java/org/apache/mina/filter/stream/StreamWriteFilterTest.java (original)
+++ mina/trunk/core/src/test/java/org/apache/mina/filter/stream/StreamWriteFilterTest.java Fri Oct 26 02:21:01 2007
@@ -558,11 +558,11 @@
             return true;
         }
 
-        public WriteFuture addListener(IoFutureListener listener) {
+        public WriteFuture addListener(IoFutureListener<?> listener) {
             return this;
         }
 
-        public WriteFuture removeListener(IoFutureListener listener) {
+        public WriteFuture removeListener(IoFutureListener<?> listener) {
             return this;
         }
 

Modified: mina/trunk/example/src/main/java/org/apache/mina/example/proxy/ClientToProxyIoHandler.java
URL: http://svn.apache.org/viewvc/mina/trunk/example/src/main/java/org/apache/mina/example/proxy/ClientToProxyIoHandler.java?rev=588579&r1=588578&r2=588579&view=diff
==============================================================================
--- mina/trunk/example/src/main/java/org/apache/mina/example/proxy/ClientToProxyIoHandler.java (original)
+++ mina/trunk/example/src/main/java/org/apache/mina/example/proxy/ClientToProxyIoHandler.java Fri Oct 26 02:21:01 2007
@@ -23,7 +23,6 @@
 
 import org.apache.mina.common.ConnectFuture;
 import org.apache.mina.common.IoConnector;
-import org.apache.mina.common.IoFuture;
 import org.apache.mina.common.IoFutureListener;
 import org.apache.mina.common.IoSession;
 import org.apache.mina.common.RuntimeIoException;
@@ -53,9 +52,8 @@
     @Override
     public void sessionOpened(final IoSession session) throws Exception {
 
-        connector.connect(remoteAddress).addListener(new IoFutureListener() {
-            public void operationComplete(IoFuture f) {
-                ConnectFuture future = (ConnectFuture) f;
+        connector.connect(remoteAddress).addListener(new IoFutureListener<ConnectFuture>() {
+            public void operationComplete(ConnectFuture future) {
                 try {
                     future.getSession().setAttachment(session);
                     session.setAttachment(future.getSession());

Modified: mina/trunk/example/src/main/java/org/apache/mina/example/tapedeck/CommandSyntaxException.java
URL: http://svn.apache.org/viewvc/mina/trunk/example/src/main/java/org/apache/mina/example/tapedeck/CommandSyntaxException.java?rev=588579&r1=588578&r2=588579&view=diff
==============================================================================
--- mina/trunk/example/src/main/java/org/apache/mina/example/tapedeck/CommandSyntaxException.java (original)
+++ mina/trunk/example/src/main/java/org/apache/mina/example/tapedeck/CommandSyntaxException.java Fri Oct 26 02:21:01 2007
@@ -29,6 +29,8 @@
  * @version $Rev$, $Date$
  */
 public class CommandSyntaxException extends ProtocolDecoderException {
+    private static final long serialVersionUID = 4903547501059093765L;
+
     private final String message;
     
     public CommandSyntaxException(String message) {

Modified: mina/trunk/example/src/main/java/org/apache/mina/example/tapedeck/TapeDeckServer.java
URL: http://svn.apache.org/viewvc/mina/trunk/example/src/main/java/org/apache/mina/example/tapedeck/TapeDeckServer.java?rev=588579&r1=588578&r2=588579&view=diff
==============================================================================
--- mina/trunk/example/src/main/java/org/apache/mina/example/tapedeck/TapeDeckServer.java (original)
+++ mina/trunk/example/src/main/java/org/apache/mina/example/tapedeck/TapeDeckServer.java Fri Oct 26 02:21:01 2007
@@ -21,7 +21,6 @@
 
 import static org.apache.mina.statemachine.mina.Events.*;
 
-import org.apache.mina.common.IoFuture;
 import org.apache.mina.common.IoFutureListener;
 import org.apache.mina.common.IoSession;
 import org.apache.mina.statemachine.StateControl;
@@ -121,11 +120,7 @@
     
     @Handler(on = MESSAGE_RECEIVED, in = ROOT)
     public void quit(TapeDeckContext context, IoSession session, QuitCommand cmd) {
-        session.write("+ Bye! Please come back!").addListener(new IoFutureListener() {
-            public void operationComplete(IoFuture future) {
-                future.getSession().close();
-            }
-        });
+        session.write("+ Bye! Please come back!").addListener(IoFutureListener.CLOSE);
     }
     
     @Handler(on = MESSAGE_RECEIVED, in = ROOT, weight = 10)

Modified: mina/trunk/example/src/main/java/org/apache/mina/example/udp/client/MemMonClient.java
URL: http://svn.apache.org/viewvc/mina/trunk/example/src/main/java/org/apache/mina/example/udp/client/MemMonClient.java?rev=588579&r1=588578&r2=588579&view=diff
==============================================================================
--- mina/trunk/example/src/main/java/org/apache/mina/example/udp/client/MemMonClient.java (original)
+++ mina/trunk/example/src/main/java/org/apache/mina/example/udp/client/MemMonClient.java Fri Oct 26 02:21:01 2007
@@ -21,11 +21,10 @@
 
 import java.net.InetSocketAddress;
 
-import org.apache.mina.common.IoBuffer;
 import org.apache.mina.common.ConnectFuture;
 import org.apache.mina.common.IdleStatus;
+import org.apache.mina.common.IoBuffer;
 import org.apache.mina.common.IoConnector;
-import org.apache.mina.common.IoFuture;
 import org.apache.mina.common.IoFutureListener;
 import org.apache.mina.common.IoHandlerAdapter;
 import org.apache.mina.common.IoSession;
@@ -68,10 +67,9 @@
         connFuture.awaitUninterruptibly();
 
         log.debug("Adding a future listener.");
-        connFuture.addListener(new IoFutureListener() {
-            public void operationComplete(IoFuture future) {
-                ConnectFuture connFuture = (ConnectFuture) future;
-                if (connFuture.isConnected()) {
+        connFuture.addListener(new IoFutureListener<ConnectFuture>() {
+            public void operationComplete(ConnectFuture future) {
+                if (future.isConnected()) {
                     log.debug("...connected");
                     session = future.getSession();
                     try {

Modified: mina/trunk/integration-spring/src/test/java/org/apache/mina/integration/spring/DefaultIoFilterChainBuilderFactoryBeanTest.java
URL: http://svn.apache.org/viewvc/mina/trunk/integration-spring/src/test/java/org/apache/mina/integration/spring/DefaultIoFilterChainBuilderFactoryBeanTest.java?rev=588579&r1=588578&r2=588579&view=diff
==============================================================================
--- mina/trunk/integration-spring/src/test/java/org/apache/mina/integration/spring/DefaultIoFilterChainBuilderFactoryBeanTest.java (original)
+++ mina/trunk/integration-spring/src/test/java/org/apache/mina/integration/spring/DefaultIoFilterChainBuilderFactoryBeanTest.java Fri Oct 26 02:21:01 2007
@@ -49,9 +49,9 @@
         mockChain = MockControl.createControl(IoFilterChain.class);
         chain = (IoFilterChain) mockChain.getMock();
         filters = new IoFilter[] {
-                (IoFilter) MockControl.createControl(IoFilter.class).getMock(),
-                (IoFilter) MockControl.createControl(IoFilter.class).getMock(),
-                (IoFilter) MockControl.createControl(IoFilter.class).getMock() };
+                MockControl.createControl(IoFilter.class).getMock(),
+                MockControl.createControl(IoFilter.class).getMock(),
+                MockControl.createControl(IoFilter.class).getMock() };
     }
 
     public void testUnnamedFilters() throws Exception {

Modified: mina/trunk/integration-spring/src/test/java/org/apache/mina/integration/spring/IoFilterMappingTest.java
URL: http://svn.apache.org/viewvc/mina/trunk/integration-spring/src/test/java/org/apache/mina/integration/spring/IoFilterMappingTest.java?rev=588579&r1=588578&r2=588579&view=diff
==============================================================================
--- mina/trunk/integration-spring/src/test/java/org/apache/mina/integration/spring/IoFilterMappingTest.java (original)
+++ mina/trunk/integration-spring/src/test/java/org/apache/mina/integration/spring/IoFilterMappingTest.java Fri Oct 26 02:21:01 2007
@@ -32,8 +32,7 @@
  */
 public class IoFilterMappingTest extends TestCase {
     public void testConstructor() throws Exception {
-        IoFilter filter = (IoFilter) MockControl.createControl(IoFilter.class)
-                .getMock();
+        IoFilter filter = MockControl.createControl(IoFilter.class).getMock();
 
         try {
             new IoFilterMapping(null, filter);

Modified: mina/trunk/statemachine/src/main/java/org/apache/mina/statemachine/BreakAndCallException.java
URL: http://svn.apache.org/viewvc/mina/trunk/statemachine/src/main/java/org/apache/mina/statemachine/BreakAndCallException.java?rev=588579&r1=588578&r2=588579&view=diff
==============================================================================
--- mina/trunk/statemachine/src/main/java/org/apache/mina/statemachine/BreakAndCallException.java (original)
+++ mina/trunk/statemachine/src/main/java/org/apache/mina/statemachine/BreakAndCallException.java Fri Oct 26 02:21:01 2007
@@ -26,6 +26,8 @@
  * @version $Rev$, $Date$
  */
 class BreakAndCallException extends BreakException {
+    private static final long serialVersionUID = -5973306926764652458L;
+
     private final String stateId;
     private final String returnToStateId;
     private final boolean now;

Modified: mina/trunk/statemachine/src/main/java/org/apache/mina/statemachine/BreakAndContinueException.java
URL: http://svn.apache.org/viewvc/mina/trunk/statemachine/src/main/java/org/apache/mina/statemachine/BreakAndContinueException.java?rev=588579&r1=588578&r2=588579&view=diff
==============================================================================
--- mina/trunk/statemachine/src/main/java/org/apache/mina/statemachine/BreakAndContinueException.java (original)
+++ mina/trunk/statemachine/src/main/java/org/apache/mina/statemachine/BreakAndContinueException.java Fri Oct 26 02:21:01 2007
@@ -26,4 +26,5 @@
  * @version $Rev$, $Date$
  */
 class BreakAndContinueException extends BreakException {
+    private static final long serialVersionUID = -6166471981111377775L;
 }

Modified: mina/trunk/statemachine/src/main/java/org/apache/mina/statemachine/BreakAndGotoException.java
URL: http://svn.apache.org/viewvc/mina/trunk/statemachine/src/main/java/org/apache/mina/statemachine/BreakAndGotoException.java?rev=588579&r1=588578&r2=588579&view=diff
==============================================================================
--- mina/trunk/statemachine/src/main/java/org/apache/mina/statemachine/BreakAndGotoException.java (original)
+++ mina/trunk/statemachine/src/main/java/org/apache/mina/statemachine/BreakAndGotoException.java Fri Oct 26 02:21:01 2007
@@ -26,6 +26,8 @@
  * @version $Rev$, $Date$
  */
 class BreakAndGotoException extends BreakException {
+    private static final long serialVersionUID = 711671882187950113L;
+    
     private final String stateId;
     private final boolean now;
 

Modified: mina/trunk/statemachine/src/main/java/org/apache/mina/statemachine/BreakAndReturnException.java
URL: http://svn.apache.org/viewvc/mina/trunk/statemachine/src/main/java/org/apache/mina/statemachine/BreakAndReturnException.java?rev=588579&r1=588578&r2=588579&view=diff
==============================================================================
--- mina/trunk/statemachine/src/main/java/org/apache/mina/statemachine/BreakAndReturnException.java (original)
+++ mina/trunk/statemachine/src/main/java/org/apache/mina/statemachine/BreakAndReturnException.java Fri Oct 26 02:21:01 2007
@@ -26,6 +26,8 @@
  * @version $Rev$, $Date$
  */
 class BreakAndReturnException extends BreakException {
+    private static final long serialVersionUID = -2662100444922292796L;
+
     private final boolean now;
 
     public BreakAndReturnException(boolean now) {

Modified: mina/trunk/statemachine/src/main/java/org/apache/mina/statemachine/BreakException.java
URL: http://svn.apache.org/viewvc/mina/trunk/statemachine/src/main/java/org/apache/mina/statemachine/BreakException.java?rev=588579&r1=588578&r2=588579&view=diff
==============================================================================
--- mina/trunk/statemachine/src/main/java/org/apache/mina/statemachine/BreakException.java (original)
+++ mina/trunk/statemachine/src/main/java/org/apache/mina/statemachine/BreakException.java Fri Oct 26 02:21:01 2007
@@ -29,6 +29,8 @@
  * @version $Rev$, $Date$
  */
 public class BreakException extends RuntimeException {
+    private static final long serialVersionUID = -1898782004087949199L;
+
     protected BreakException() {
     }
 }

Modified: mina/trunk/statemachine/src/main/java/org/apache/mina/statemachine/NoSuchStateException.java
URL: http://svn.apache.org/viewvc/mina/trunk/statemachine/src/main/java/org/apache/mina/statemachine/NoSuchStateException.java?rev=588579&r1=588578&r2=588579&view=diff
==============================================================================
--- mina/trunk/statemachine/src/main/java/org/apache/mina/statemachine/NoSuchStateException.java (original)
+++ mina/trunk/statemachine/src/main/java/org/apache/mina/statemachine/NoSuchStateException.java Fri Oct 26 02:21:01 2007
@@ -27,6 +27,7 @@
  * @version $Rev$, $Date$
  */
 public class NoSuchStateException extends RuntimeException {
+    private static final long serialVersionUID = -886869696039996478L;
 
     /**
      * Creates a new instance.

Modified: mina/trunk/statemachine/src/main/java/org/apache/mina/statemachine/StateMachine.java
URL: http://svn.apache.org/viewvc/mina/trunk/statemachine/src/main/java/org/apache/mina/statemachine/StateMachine.java?rev=588579&r1=588578&r2=588579&view=diff
==============================================================================
--- mina/trunk/statemachine/src/main/java/org/apache/mina/statemachine/StateMachine.java (original)
+++ mina/trunk/statemachine/src/main/java/org/apache/mina/statemachine/StateMachine.java Fri Oct 26 02:21:01 2007
@@ -156,7 +156,7 @@
 
     private void processEvents(LinkedList<Event> eventQueue) {
         while (!eventQueue.isEmpty()) {
-            Event event = (Event) eventQueue.removeFirst();
+            Event event = eventQueue.removeFirst();
             StateContext context = event.getContext();
             handle(context.getCurrentState(), event);
         }

Modified: mina/trunk/statemachine/src/main/java/org/apache/mina/statemachine/StateMachineCreationException.java
URL: http://svn.apache.org/viewvc/mina/trunk/statemachine/src/main/java/org/apache/mina/statemachine/StateMachineCreationException.java?rev=588579&r1=588578&r2=588579&view=diff
==============================================================================
--- mina/trunk/statemachine/src/main/java/org/apache/mina/statemachine/StateMachineCreationException.java (original)
+++ mina/trunk/statemachine/src/main/java/org/apache/mina/statemachine/StateMachineCreationException.java Fri Oct 26 02:21:01 2007
@@ -28,6 +28,7 @@
  */
 
 public class StateMachineCreationException extends RuntimeException {
+    private static final long serialVersionUID = 4103502727376992746L;
 
     /**
      * Creates a new instance.

Modified: mina/trunk/statemachine/src/main/java/org/apache/mina/statemachine/event/UnhandledEventException.java
URL: http://svn.apache.org/viewvc/mina/trunk/statemachine/src/main/java/org/apache/mina/statemachine/event/UnhandledEventException.java?rev=588579&r1=588578&r2=588579&view=diff
==============================================================================
--- mina/trunk/statemachine/src/main/java/org/apache/mina/statemachine/event/UnhandledEventException.java (original)
+++ mina/trunk/statemachine/src/main/java/org/apache/mina/statemachine/event/UnhandledEventException.java Fri Oct 26 02:21:01 2007
@@ -26,6 +26,8 @@
  * @version $Rev$, $Date$
  */
 public class UnhandledEventException extends RuntimeException {
+    private static final long serialVersionUID = -717373229954175430L;
+    
     private final Event event;
 
     public UnhandledEventException(Event event) {

Modified: mina/trunk/statemachine/src/main/java/org/apache/mina/statemachine/transition/AmbiguousMethodException.java
URL: http://svn.apache.org/viewvc/mina/trunk/statemachine/src/main/java/org/apache/mina/statemachine/transition/AmbiguousMethodException.java?rev=588579&r1=588578&r2=588579&view=diff
==============================================================================
--- mina/trunk/statemachine/src/main/java/org/apache/mina/statemachine/transition/AmbiguousMethodException.java (original)
+++ mina/trunk/statemachine/src/main/java/org/apache/mina/statemachine/transition/AmbiguousMethodException.java Fri Oct 26 02:21:01 2007
@@ -28,6 +28,8 @@
  */
 public class AmbiguousMethodException extends RuntimeException {
 
+    private static final long serialVersionUID = -3926582218186692464L;
+
     /**
      * Creates a new instance using the specified method name as message.
      * 

Modified: mina/trunk/statemachine/src/main/java/org/apache/mina/statemachine/transition/MethodInvocationException.java
URL: http://svn.apache.org/viewvc/mina/trunk/statemachine/src/main/java/org/apache/mina/statemachine/transition/MethodInvocationException.java?rev=588579&r1=588578&r2=588579&view=diff
==============================================================================
--- mina/trunk/statemachine/src/main/java/org/apache/mina/statemachine/transition/MethodInvocationException.java (original)
+++ mina/trunk/statemachine/src/main/java/org/apache/mina/statemachine/transition/MethodInvocationException.java Fri Oct 26 02:21:01 2007
@@ -29,6 +29,7 @@
  * @version $Rev$, $Date$
  */
 public class MethodInvocationException extends RuntimeException {
+    private static final long serialVersionUID = 4288548621384649704L;
 
     /**
      * Creates a new instance for the specified {@link Method} and 

Modified: mina/trunk/statemachine/src/main/java/org/apache/mina/statemachine/transition/NoSuchMethodException.java
URL: http://svn.apache.org/viewvc/mina/trunk/statemachine/src/main/java/org/apache/mina/statemachine/transition/NoSuchMethodException.java?rev=588579&r1=588578&r2=588579&view=diff
==============================================================================
--- mina/trunk/statemachine/src/main/java/org/apache/mina/statemachine/transition/NoSuchMethodException.java (original)
+++ mina/trunk/statemachine/src/main/java/org/apache/mina/statemachine/transition/NoSuchMethodException.java Fri Oct 26 02:21:01 2007
@@ -28,6 +28,7 @@
  * @version $Rev$, $Date$
  */
 public class NoSuchMethodException extends RuntimeException {
+    private static final long serialVersionUID = -8877979996892420479L;
 
     /**
      * Creates a new instance using the specified method name as message.