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 );