You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@etch.apache.org by sc...@apache.org on 2008/12/01 22:31:41 UTC

svn commit: r722242 - in /incubator/etch/trunk: binding-csharp/runtime/src/main/csharp/Etch/Support/StubBase.cs binding-java/runtime/src/main/java/etch/bindings/java/support/StubBase.java

Author: sccomer
Date: Mon Dec  1 13:31:41 2008
New Revision: 722242

URL: http://svn.apache.org/viewvc?rev=722242&view=rev
Log:
fix ETCH-6: if free pool exceeds maximum number of threads the exception thrown will kill the connection.

also rearrange code in StubBase sessionMessage to enable optimization of NONE case.

Modified:
    incubator/etch/trunk/binding-csharp/runtime/src/main/csharp/Etch/Support/StubBase.cs
    incubator/etch/trunk/binding-java/runtime/src/main/java/etch/bindings/java/support/StubBase.java

Modified: incubator/etch/trunk/binding-csharp/runtime/src/main/csharp/Etch/Support/StubBase.cs
URL: http://svn.apache.org/viewvc/incubator/etch/trunk/binding-csharp/runtime/src/main/csharp/Etch/Support/StubBase.cs?rev=722242&r1=722241&r2=722242&view=diff
==============================================================================
--- incubator/etch/trunk/binding-csharp/runtime/src/main/csharp/Etch/Support/StubBase.cs (original)
+++ incubator/etch/trunk/binding-csharp/runtime/src/main/csharp/Etch/Support/StubBase.cs Mon Dec  1 13:31:41 2008
@@ -28,7 +28,8 @@
     public class StubBase : SessionMessage
     {
         /// <summary>Constructs the StubBase.</summary>
-        /// <param name="obj">obj</param>
+        /// <param name="src">the message source</param>
+        /// <param name="obj">the target of decoded messages</param>
         /// <param name="queued">thread pool used to run AsyncReceiverMode.QUEUED methods.</param>
         /// <param name="free">thread pool used to run AsyncReceiverMode.FREE methods.</param>
         public StubBase(DeliveryService src, object obj, Pool queued, Pool free)
@@ -41,21 +42,24 @@
         }
 
         /// <summary>
-        /// The object used to implement stub
+        /// The message source.
         /// </summary>
-        private readonly object _obj;
+        protected readonly DeliveryService _src;
 
         /// <summary>
-        /// The thread pool used to run AsyncReceiverMode.QUEUED methods.
+        /// The target of decoded messages.
         /// </summary>
-        public readonly Pool _queued;
+        protected readonly object _obj;
 
         /// <summary>
-        /// The thread pool used to run AsyncReceiverMode.FREE methods.
+        /// Thread pool used to run AsyncReceiverMode.QUEUED methods.
         /// </summary>
-        public readonly Pool _free;
+        protected readonly Pool _queued;
 
-        protected readonly DeliveryService _src;
+        /// <summary>
+        /// Thread pool used to run AsyncReceiverMode.FREE methods.
+        /// </summary>
+        protected readonly Pool _free;
 
         
 
@@ -76,8 +80,15 @@
 
         public void SessionNotify(Object eventObj)
         {
-            if (_obj is ObjSession)
-                ((ObjSession)_obj)._SessionNotify(eventObj);
+            SessionNotify(_obj, eventObj);
+        }
+
+        public static void SessionNotify( object obj, object eventObj )
+        {
+            if (obj is ObjSession)
+                ((ObjSession)obj)._SessionNotify(eventObj);
+            else if (eventObj is Exception)
+                Console.WriteLine(eventObj);
         }
 
         /// <summary>
@@ -96,41 +107,49 @@
         {
             XType type = msg.GetXType;
 
-            //StubHelper<StubBase<Object>> helper = ( StubHelper<StubBase<Object>> ) type.GetStubHelper();
-            //if ( helper == null )
-            //    return false;
-            StubHelperRun helper = (StubHelperRun)type.GetStubHelper();
-            /*      StubHelper stubHelper = (StubHelper)type.GetStubHelper();
-                  StubHelperRun helper = (StubHelperRun) stubHelper.GetDelegate(); */
+            StubHelperRun helper = (StubHelperRun) type.GetStubHelper();
             if (helper == null)
                 return false;
-            if (type.GetAsyncMode() == AsyncMode.QUEUED)
-                _queued.Run(delegate() { helper(_src, _obj, sender, msg); }, delegate(Exception e)
-                {
-                    try { SessionNotify(e); }
-                    catch (Exception e1)
-                    {
-                        Console.WriteLine(e1);
-                    }
-                });
-            else if (type.GetAsyncMode() == AsyncMode.FREE)
-                _free.Run(delegate()
-                              {
-                                  helper(_src, _obj, sender, msg);
-                              },
-                              delegate(Exception e)
-                              {
-                                  try
-                                  {
-                                      SessionNotify(e);
-                                  }
-                                  catch (Exception e1)
-                                  {
-                                      Console.WriteLine(e1);
-                                  }
-                              });
-            else
-                helper(_src, _obj, sender, msg);
+
+            switch (type.GetAsyncMode())
+            {
+                case AsyncMode.QUEUED:
+                    try
+                    {
+                        _queued.Run(
+                            delegate { helper(_src, _obj, sender, msg); },
+                            delegate(Exception e) { SessionNotify(_obj, e); });
+                    }
+                    catch (Exception e)
+                    {
+                        SessionNotify(_obj, e);
+                    }
+                    break;
+                case AsyncMode.FREE:
+                    try
+                    {
+                        _free.Run(
+                            delegate { helper(_src, _obj, sender, msg); },
+                            delegate(Exception e) { SessionNotify(_obj, e); });
+                    }
+                    catch (Exception e)
+                    {
+                        SessionNotify(_obj, e);
+                    }
+                    break;
+                case AsyncMode.NONE:
+                    try
+                    {
+                        helper(_src, _obj, sender, msg);
+                    }
+                    catch (Exception e)
+                    {
+                        SessionNotify(_obj, e);
+                    }
+                    break;
+                default:
+                    throw new ArgumentException("unknown async mode "+type.GetAsyncMode());
+            }
 
             return true;
         }

Modified: incubator/etch/trunk/binding-java/runtime/src/main/java/etch/bindings/java/support/StubBase.java
URL: http://svn.apache.org/viewvc/incubator/etch/trunk/binding-java/runtime/src/main/java/etch/bindings/java/support/StubBase.java?rev=722242&r1=722241&r2=722242&view=diff
==============================================================================
--- incubator/etch/trunk/binding-java/runtime/src/main/java/etch/bindings/java/support/StubBase.java (original)
+++ incubator/etch/trunk/binding-java/runtime/src/main/java/etch/bindings/java/support/StubBase.java Mon Dec  1 13:31:41 2008
@@ -77,28 +77,47 @@
 	public final boolean sessionMessage( Who sender, Message msg ) throws Exception
 	{
 		Type type = msg.type();
+		
 		StubHelper<T> helper = (StubHelper<T>) type.getStubHelper();
 		if (helper == null)
 			return false;
-		if (type.getAsyncMode() == AsyncMode.QUEUED)
-		{
-			_queued.run( new StubPoolRunnable( sender, msg, helper ) );
-		}
-		else if (type.getAsyncMode() == AsyncMode.FREE)
+		
+		switch (type.getAsyncMode())
 		{
-			_free.run( new StubPoolRunnable( sender, msg, helper ) );
-		}
-		else
-		{
-			try
-			{
-				helper.run( _svc, _obj, sender, msg );
-			}
-			catch ( Exception e )
-			{
-				sessionNotify( _obj, e );
-			}
+			case QUEUED:
+				try
+				{
+					_queued.run( new StubPoolRunnable( sender, msg, helper ) );
+				}
+				catch ( Exception e )
+				{
+					sessionNotify( _obj, e );
+				}
+				break;
+			case FREE:
+				try
+				{
+					_free.run( new StubPoolRunnable( sender, msg, helper ) );
+				}
+				catch ( Exception e )
+				{
+					sessionNotify( _obj, e );
+				}
+				break;
+			case NONE:
+				try
+				{
+					helper.run( _svc, _obj, sender, msg );
+				}
+				catch ( Exception e )
+				{
+					sessionNotify( _obj, e );
+				}
+				break;
+            default:
+                throw new IllegalArgumentException("unknown async mode "+type.getAsyncMode());
 		}
+		
 		return true;
 	}
 
@@ -175,7 +194,6 @@
 			}
 		}
 
-		@SuppressWarnings("unchecked")
 		public void run() throws Exception
 		{
 			helper.run( _svc, _obj, sender, msg );