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 2009/02/23 22:31:59 UTC
svn commit: r747141 - in /incubator/etch/branches/dynamo: ./
binding-java/compiler/src/main/resources/org/apache/etch/bindings/java/compiler/
binding-java/runtime/src/main/java/org/apache/etch/bindings/java/support/
binding-java/runtime/src/main/java/o...
Author: sccomer
Date: Mon Feb 23 21:31:35 2009
New Revision: 747141
URL: http://svn.apache.org/viewvc?rev=747141&view=rev
Log:
this is a version of 1.1 stream (trunk) which allows for dynamic mixin. it include a ComboValueFactory and a ComboStub which allow adding on more services handled by a single connection at runtime.
it isn't really meant to be mainlined in this form, this is more of a prototype for demonstration purposes.
Added:
incubator/etch/branches/dynamo/ (props changed)
- copied from r744148, incubator/etch/trunk/
Modified:
incubator/etch/branches/dynamo/.classpath
incubator/etch/branches/dynamo/binding-java/compiler/src/main/resources/org/apache/etch/bindings/java/compiler/helper.vm
incubator/etch/branches/dynamo/binding-java/compiler/src/main/resources/org/apache/etch/bindings/java/compiler/stub.vm
incubator/etch/branches/dynamo/binding-java/runtime/src/main/java/org/apache/etch/bindings/java/support/StubBase.java
incubator/etch/branches/dynamo/binding-java/runtime/src/main/java/org/apache/etch/bindings/java/transport/DefaultDeliveryService.java
incubator/etch/branches/dynamo/binding-java/runtime/src/main/java/org/apache/etch/bindings/java/transport/Messagizer.java
incubator/etch/branches/dynamo/binding-java/runtime/src/test/java/org/apache/etch/bindings/java/support/TestStubBase.java
incubator/etch/branches/dynamo/examples/example/src/main/java/org/apache/etch/examples/example/ImplExampleServer.java
incubator/etch/branches/dynamo/examples/example/src/main/java/org/apache/etch/examples/example/MainExampleClient.java
incubator/etch/branches/dynamo/examples/example/src/main/java/org/apache/etch/examples/example/MainExampleListener.java
incubator/etch/branches/dynamo/tests/src/main/java/org/apache/etch/tests/MyCuaeServerStub.java
incubator/etch/branches/dynamo/tests/src/test/java/org/apache/etch/tests/TestStubTest1DotJava.java
Propchange: incubator/etch/branches/dynamo/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Mon Feb 23 21:31:35 2009
@@ -0,0 +1,32 @@
+build-output
+doc
+snot
+xbuild
+barClient.java
+barHelper.java
+barServer.java
+ImplbarClient.java
+ImplbarServer.java
+MainbarClient.java
+MainbarListener.java
+RemotebarClient.java
+RemotebarServer.java
+StubbarClient.java
+StubbarServer.java
+ValueFactorybar.java
+bar.java
+Remotebar.java
+Stubbar.java
+BasebarClient.java
+BasebarServer.java
+bin
+readme-etch-java-files.txt
+build
+keys
+x.bat
+target
+CSharp.suo
+CSharp.4.0.resharper
+CSharp.4.0.resharper.user
+_ReSharper.CSharp
+CSharp.4.1.resharper.user
Propchange: incubator/etch/branches/dynamo/
------------------------------------------------------------------------------
svn:mergeinfo = incubator/etch/branches/sccomer-compiler-1:712739-712771
Modified: incubator/etch/branches/dynamo/.classpath
URL: http://svn.apache.org/viewvc/incubator/etch/branches/dynamo/.classpath?rev=747141&r1=744148&r2=747141&view=diff
==============================================================================
--- incubator/etch/branches/dynamo/.classpath (original)
+++ incubator/etch/branches/dynamo/.classpath Mon Feb 23 21:31:35 2009
@@ -29,8 +29,8 @@
<classpathentry kind="src" path="examples/distmap/src/main/java"/>
<classpathentry kind="src" path="examples/distmap/target/generated-sources/main/etch/java"/>
<classpathentry kind="src" path="examples/distmap/src/test/java"/>
- <classpathentry kind="src" path="examples/example/src/main/java"/>
- <classpathentry kind="src" path="examples/example/target/generated-sources/main/etch/java"/>
+ <classpathentry excluding="org/apache/etch/examples/example/old/" kind="src" path="examples/example/src/main/java"/>
+ <classpathentry excluding="org/apache/etch/examples/example/old/" kind="src" path="examples/example/target/generated-sources/main/etch/java"/>
<classpathentry kind="src" path="examples/example/src/test/java"/>
<classpathentry kind="src" path="examples/perf/src/main/java"/>
<classpathentry kind="src" path="examples/perf/target/generated-sources/main/etch/java"/>
Modified: incubator/etch/branches/dynamo/binding-java/compiler/src/main/resources/org/apache/etch/bindings/java/compiler/helper.vm
URL: http://svn.apache.org/viewvc/incubator/etch/branches/dynamo/binding-java/compiler/src/main/resources/org/apache/etch/bindings/java/compiler/helper.vm?rev=747141&r1=744148&r2=747141&view=diff
==============================================================================
--- incubator/etch/branches/dynamo/binding-java/compiler/src/main/resources/org/apache/etch/bindings/java/compiler/helper.vm (original)
+++ incubator/etch/branches/dynamo/binding-java/compiler/src/main/resources/org/apache/etch/bindings/java/compiler/helper.vm Mon Feb 23 21:31:35 2009
@@ -77,13 +77,15 @@
TransportMessage transport ) throws Exception
{
ValueFactory vf = (ValueFactory) resources.get( Transport.VALUE_FACTORY );
+
MailboxManager x = new PlainMailboxManager( transport, u, res );
DeliveryService d = new DefaultDeliveryService( x, u, res );
Remote${i}Client client = new Remote${i}Client( d, vf );
${i}Server server = implFactory.new${i}Server( client );
Pool qp = (Pool) res.get( QUEUED_POOL );
Pool fp = (Pool) res.get( FREE_POOL );
- new Stub${i}Server( d, server, qp, fp );
+ d.setSession( new Stub${i}Server( d, server, qp, fp, vf ) );
+
client._start();
}
@@ -160,7 +162,7 @@
${i}Client client = implFactory.new${i}Client( server );
Pool qp = (Pool) res.get( QUEUED_POOL );
Pool fp = (Pool) res.get( FREE_POOL );
- new Stub${i}Client( d, client, qp, fp );
+ d.setSession( new Stub${i}Client( d, client, qp, fp, vf ) );
return server;
}
Modified: incubator/etch/branches/dynamo/binding-java/compiler/src/main/resources/org/apache/etch/bindings/java/compiler/stub.vm
URL: http://svn.apache.org/viewvc/incubator/etch/branches/dynamo/binding-java/compiler/src/main/resources/org/apache/etch/bindings/java/compiler/stub.vm?rev=747141&r1=744148&r2=747141&view=diff
==============================================================================
--- incubator/etch/branches/dynamo/binding-java/compiler/src/main/resources/org/apache/etch/bindings/java/compiler/stub.vm (original)
+++ incubator/etch/branches/dynamo/binding-java/compiler/src/main/resources/org/apache/etch/bindings/java/compiler/stub.vm Mon Feb 23 21:31:35 2009
@@ -21,6 +21,7 @@
import org.apache.etch.util.core.Who;
import org.apache.etch.bindings.java.msg.Message;
+import org.apache.etch.bindings.java.msg.ValueFactory;
import org.apache.etch.bindings.java.support.DeliveryService;
import org.apache.etch.bindings.java.support.Pool;
import org.apache.etch.bindings.java.support.StubHelper;
@@ -60,10 +61,12 @@
* @param obj the implementation of $i$suffix responsive to requests.
* @param queued thread pool used to run AsyncMode.QUEUED methods.
* @param free thread pool used to run AsyncMode.FREE methods.
+ * @param vf the ValueFactory associated with this stub's service.
*/
- public Stub$i$suffix( DeliveryService svc, $T obj, Pool queued, Pool free )
+ public Stub$i$suffix( DeliveryService svc, $T obj, Pool queued, Pool free,
+ ValueFactory vf )
{
- super( svc, obj, queued, free );
+ super( svc, obj, queued, free, vf );
}
static
Modified: incubator/etch/branches/dynamo/binding-java/runtime/src/main/java/org/apache/etch/bindings/java/support/StubBase.java
URL: http://svn.apache.org/viewvc/incubator/etch/branches/dynamo/binding-java/runtime/src/main/java/org/apache/etch/bindings/java/support/StubBase.java?rev=747141&r1=744148&r2=747141&view=diff
==============================================================================
--- incubator/etch/branches/dynamo/binding-java/runtime/src/main/java/org/apache/etch/bindings/java/support/StubBase.java (original)
+++ incubator/etch/branches/dynamo/binding-java/runtime/src/main/java/org/apache/etch/bindings/java/support/StubBase.java Mon Feb 23 21:31:35 2009
@@ -22,6 +22,7 @@
import org.apache.etch.bindings.java.msg.Message;
import org.apache.etch.bindings.java.msg.Type;
+import org.apache.etch.bindings.java.msg.ValueFactory;
import org.apache.etch.bindings.java.support.Pool.PoolRunnable;
import org.apache.etch.bindings.java.transport.SessionMessage;
import org.apache.etch.util.core.Who;
@@ -39,8 +40,10 @@
* @param obj the target of decoded messages.
* @param queued thread pool used to run AsyncMode.QUEUED methods.
* @param free thread pool used to run AsyncMode.FREE methods.
+ * @param vf the ValueFactory associated with this stub's service.
*/
- public StubBase( DeliveryService svc, T obj, Pool queued, Pool free )
+ protected StubBase( DeliveryService svc, T obj, Pool queued, Pool free,
+ ValueFactory vf )
{
if (svc == null)
throw new NullPointerException( "svc == null" );
@@ -53,7 +56,8 @@
this._queued = queued;
this._free = free;
- svc.setSession( this );
+// svc.setSession( this );
+ this._vf = vf;
}
/**
@@ -75,12 +79,17 @@
* The thread pool used to run AsyncMode.FREE methods.
*/
protected final Pool _free;
+
+ private final ValueFactory _vf;
@SuppressWarnings("unchecked")
public final boolean sessionMessage( Who sender, Message msg ) throws Exception
{
Type type = msg.type();
+ if (_vf != null && _vf.getType( type.getId() ) == null)
+ return false;
+
StubHelper<T> helper = (StubHelper<T>) type.getStubHelper();
if (helper == null)
return false;
Modified: incubator/etch/branches/dynamo/binding-java/runtime/src/main/java/org/apache/etch/bindings/java/transport/DefaultDeliveryService.java
URL: http://svn.apache.org/viewvc/incubator/etch/branches/dynamo/binding-java/runtime/src/main/java/org/apache/etch/bindings/java/transport/DefaultDeliveryService.java?rev=747141&r1=744148&r2=747141&view=diff
==============================================================================
--- incubator/etch/branches/dynamo/binding-java/runtime/src/main/java/org/apache/etch/bindings/java/transport/DefaultDeliveryService.java (original)
+++ incubator/etch/branches/dynamo/binding-java/runtime/src/main/java/org/apache/etch/bindings/java/transport/DefaultDeliveryService.java Mon Feb 23 21:31:35 2009
@@ -65,12 +65,19 @@
Resources resources )
{
this.transport = transport;
+ this.uri = uri.toString();
+ this.resources = resources;
+
transport.setSession( this );
disableTimeout = uri.getBooleanTerm( DISABLE_TIMEOUT , false );
}
private final MailboxManager transport;
+ private final String uri;
+
+ private final Resources resources;
+
/**
* @return the transport.
*/
@@ -86,8 +93,8 @@
public void setSession( SessionMessage session )
{
- if (this.session != null)
- throw new UnsupportedOperationException( "only one stub for now" );
+// if (this.session != null)
+// throw new UnsupportedOperationException( "only one stub for now" );
this.session = session;
}
@@ -153,6 +160,12 @@
waitDown( ((WaitDown) query).maxDelay );
return null;
}
+ else if (query.equals( "ds" ))
+ return this;
+ else if (query.equals( "uri" ))
+ return uri;
+ else if (query.equals( "res" ))
+ return resources;
else
{
return transport.transportQuery( query );
Modified: incubator/etch/branches/dynamo/binding-java/runtime/src/main/java/org/apache/etch/bindings/java/transport/Messagizer.java
URL: http://svn.apache.org/viewvc/incubator/etch/branches/dynamo/binding-java/runtime/src/main/java/org/apache/etch/bindings/java/transport/Messagizer.java?rev=747141&r1=744148&r2=747141&view=diff
==============================================================================
--- incubator/etch/branches/dynamo/binding-java/runtime/src/main/java/org/apache/etch/bindings/java/transport/Messagizer.java (original)
+++ incubator/etch/branches/dynamo/binding-java/runtime/src/main/java/org/apache/etch/bindings/java/transport/Messagizer.java Mon Feb 23 21:31:35 2009
@@ -22,6 +22,7 @@
import org.apache.etch.bindings.java.msg.Message;
import org.apache.etch.bindings.java.msg.ValueFactory;
+import org.apache.etch.bindings.java.support.RetryMessageException;
import org.apache.etch.util.FlexBuffer;
import org.apache.etch.util.Resources;
import org.apache.etch.util.URL;
@@ -120,12 +121,25 @@
{
// messagize the packet.
+ int i = buf.index();
+ try
+ {
+ doMessage( sender, buf );
+ }
+ catch ( RetryMessageException e )
+ {
+ buf.setIndex( i );
+ doMessage( sender, buf );
+ }
+ }
+
+ private void doMessage( Who sender, FlexBuffer buf ) throws Exception
+ {
Message msg = tdi.readMessage( buf );
-// Log.report( "Messagizer.packet", "who", this, "recv", msg );
boolean handled = session.sessionMessage( sender, msg );
if (!handled)
session.sessionNotify( new UnwantedMessage( sender, msg ) );
- }
+ }
////////////////////
// Message Source //
Modified: incubator/etch/branches/dynamo/binding-java/runtime/src/test/java/org/apache/etch/bindings/java/support/TestStubBase.java
URL: http://svn.apache.org/viewvc/incubator/etch/branches/dynamo/binding-java/runtime/src/test/java/org/apache/etch/bindings/java/support/TestStubBase.java?rev=747141&r1=744148&r2=747141&view=diff
==============================================================================
--- incubator/etch/branches/dynamo/binding-java/runtime/src/test/java/org/apache/etch/bindings/java/support/TestStubBase.java (original)
+++ incubator/etch/branches/dynamo/binding-java/runtime/src/test/java/org/apache/etch/bindings/java/support/TestStubBase.java Mon Feb 23 21:31:35 2009
@@ -44,6 +44,9 @@
private final MyPool queued = new MyPool();
private final MyPool free = new MyPool();
private final MyStub stub = new MyStub( transport, session, queued, free );
+ {
+ transport.setSession( stub );
+ }
private final Who who = new Who() { /* */ };
private final Type howdy = new Type( "howdy" );
private final Type nogood = new Type( "nogood" );
@@ -210,7 +213,6 @@
/**
* MyDeliveryService (fake for testing).
*/
- @SuppressWarnings("hiding")
static class MyDeliveryService implements DeliveryService
{
/** */ public What what;
@@ -309,14 +311,13 @@
*/
public MyStub( DeliveryService svc, MyObject obj, Pool queued, Pool free )
{
- super( svc, obj, queued, free );
+ super( svc, obj, queued, free, null );
}
}
/**
* MyObject (fake for testing).
*/
- @SuppressWarnings("hiding")
static class MyObject implements ObjSession
{
/** */ public What what;
Modified: incubator/etch/branches/dynamo/examples/example/src/main/java/org/apache/etch/examples/example/ImplExampleServer.java
URL: http://svn.apache.org/viewvc/incubator/etch/branches/dynamo/examples/example/src/main/java/org/apache/etch/examples/example/ImplExampleServer.java?rev=747141&r1=744148&r2=747141&view=diff
==============================================================================
--- incubator/etch/branches/dynamo/examples/example/src/main/java/org/apache/etch/examples/example/ImplExampleServer.java (original)
+++ incubator/etch/branches/dynamo/examples/example/src/main/java/org/apache/etch/examples/example/ImplExampleServer.java Mon Feb 23 21:31:35 2009
@@ -20,6 +20,23 @@
package org.apache.etch.examples.example;
+import java.util.Date;
+
+import org.apache.etch.bindings.java.msg.Message;
+import org.apache.etch.bindings.java.msg.Type;
+import org.apache.etch.bindings.java.msg.ValueFactory;
+import org.apache.etch.bindings.java.support.ComboStub;
+import org.apache.etch.bindings.java.support.ComboValueFactory;
+import org.apache.etch.bindings.java.support.DeliveryService;
+import org.apache.etch.bindings.java.support.Pool;
+import org.apache.etch.bindings.java.support.RemoteBase;
+import org.apache.etch.bindings.java.support.RetryMessageException;
+import org.apache.etch.bindings.java.support.TransportHelper;
+import org.apache.etch.bindings.java.transport.UnwantedMessage;
+import org.apache.etch.examples.example.FooHelper.FooServerFactory;
+import org.apache.etch.util.Resources;
+import org.apache.etch.util.core.io.Transport;
+
/**
* Your custom implementation of BaseExampleServer. Add methods here to provide
@@ -45,6 +62,54 @@
@SuppressWarnings( "unused" )
private final RemoteExampleClient client;
- // TODO insert methods here to provide implementations of ExampleServer
- // messages from the client.
+ @Override
+ public Integer helloServer( String msg, Date d )
+ {
+ return msg.hashCode();
+ }
+
+ @Override
+ public void _sessionNotify( Object event ) throws Exception
+ {
+ if (event instanceof UnwantedMessage)
+ {
+ Message msg = ((UnwantedMessage) event).msg;
+ System.out.println( "unwanted msg "+msg );
+
+ Type type = msg.type();
+ String uri = (String) client._transportQuery( "uri" );
+
+ // try to load Foo
+
+ ValueFactory nvf = new ValueFactoryFoo( uri );
+ if (nvf.getType( type.getId() ) != null)
+ {
+ addService( nvf, client );
+ throw new RetryMessageException();
+ }
+ }
+
+ if (event instanceof Throwable)
+ ((Throwable) event).printStackTrace();
+ else
+ System.out.println( "event = "+event );
+ }
+
+ private static void addService( ValueFactory nvf, RemoteBase client ) throws Exception
+ {
+ Resources res = (Resources) client._transportQuery( "res" );
+ DeliveryService d = (DeliveryService) client._transportQuery( "ds" );
+
+ ComboValueFactory vf = (ComboValueFactory) res.get( Transport.VALUE_FACTORY );
+ FooServerFactory implFactory = (FooServerFactory) res.get( FooServerFactory.class.getName() );
+
+ vf.addVf( nvf );
+
+ FooServer server = implFactory.newFooServer( new RemoteFooClient( d, vf ) );
+ Pool qp = (Pool) res.get( TransportHelper.QUEUED_POOL );
+ Pool fp = (Pool) res.get( TransportHelper.FREE_POOL );
+
+ ComboStub cs = (ComboStub) d.getSession();
+ cs.addStub( new StubFooServer( d, server, qp, fp, nvf ) );
+ }
}
\ No newline at end of file
Modified: incubator/etch/branches/dynamo/examples/example/src/main/java/org/apache/etch/examples/example/MainExampleClient.java
URL: http://svn.apache.org/viewvc/incubator/etch/branches/dynamo/examples/example/src/main/java/org/apache/etch/examples/example/MainExampleClient.java?rev=747141&r1=744148&r2=747141&view=diff
==============================================================================
--- incubator/etch/branches/dynamo/examples/example/src/main/java/org/apache/etch/examples/example/MainExampleClient.java (original)
+++ incubator/etch/branches/dynamo/examples/example/src/main/java/org/apache/etch/examples/example/MainExampleClient.java Mon Feb 23 21:31:35 2009
@@ -44,7 +44,7 @@
// Connect to the service
server._startAndWaitUp( 4000 );
- // TODO Insert Your Code Here
+ System.out.println( "helloServer = "+server.helloServer( "helloServer blah", null ) );
// Disconnect from the service
server._stopAndWaitDown( 4000 );
Modified: incubator/etch/branches/dynamo/examples/example/src/main/java/org/apache/etch/examples/example/MainExampleListener.java
URL: http://svn.apache.org/viewvc/incubator/etch/branches/dynamo/examples/example/src/main/java/org/apache/etch/examples/example/MainExampleListener.java?rev=747141&r1=744148&r2=747141&view=diff
==============================================================================
--- incubator/etch/branches/dynamo/examples/example/src/main/java/org/apache/etch/examples/example/MainExampleListener.java (original)
+++ incubator/etch/branches/dynamo/examples/example/src/main/java/org/apache/etch/examples/example/MainExampleListener.java Mon Feb 23 21:31:35 2009
@@ -21,6 +21,9 @@
package org.apache.etch.examples.example;
import org.apache.etch.bindings.java.support.ServerFactory;
+import org.apache.etch.examples.example.FooHelper.FooServerFactory;
+import org.apache.etch.util.Resources;
+import org.apache.etch.util.core.io.Session;
import org.apache.etch.util.core.io.Transport;
@@ -29,7 +32,7 @@
* Main program for ExampleServer. This program makes a listener to accept
* connections from MainExampleClient.
*/
-public class MainExampleListener implements ExampleHelper.ExampleServerFactory
+public class MainExampleListener implements ExampleHelper.ExampleServerFactory, FooHelper.FooServerFactory, Session
{
/**
* Main program for ExampleServer.
@@ -42,8 +45,13 @@
// TODO Change to correct URI
String uri = "tcp://0.0.0.0:4002";
- ServerFactory listener = ExampleHelper.newListener( uri, null,
- new MainExampleListener() );
+ MainExampleListener factory = new MainExampleListener();
+
+ Resources res = new Resources();
+ res.put( FooServerFactory.class.getName(), factory );
+
+ ServerFactory listener = ExampleHelper.newListener( uri, res,
+ factory );
// Start the Listener
listener.transportControl( Transport.START_AND_WAIT_UP, 4000 );
@@ -53,4 +61,27 @@
{
return new ImplExampleServer( client );
}
+
+ public FooServer newFooServer( RemoteFooClient client ) throws Exception
+ {
+ return new ImplFooServer( client );
+ }
+
+ public void sessionControl( Object control, Object value ) throws Exception
+ {
+ throw new UnsupportedOperationException( "unknown control "+control );
+ }
+
+ public void sessionNotify( Object event ) throws Exception
+ {
+ if (event instanceof Throwable)
+ ((Throwable) event).printStackTrace();
+ else
+ System.out.println( "event = "+event );
+ }
+
+ public Object sessionQuery( Object query ) throws Exception
+ {
+ throw new UnsupportedOperationException( "unknown query "+query );
+ }
}
Modified: incubator/etch/branches/dynamo/tests/src/main/java/org/apache/etch/tests/MyCuaeServerStub.java
URL: http://svn.apache.org/viewvc/incubator/etch/branches/dynamo/tests/src/main/java/org/apache/etch/tests/MyCuaeServerStub.java?rev=747141&r1=744148&r2=747141&view=diff
==============================================================================
--- incubator/etch/branches/dynamo/tests/src/main/java/org/apache/etch/tests/MyCuaeServerStub.java (original)
+++ incubator/etch/branches/dynamo/tests/src/main/java/org/apache/etch/tests/MyCuaeServerStub.java Mon Feb 23 21:31:35 2009
@@ -75,7 +75,7 @@
public MyCuaeServerStub( DeliveryService svc, Pool queued, Pool free,
MyValueFactoryCuae vf )
{
- super( svc, new MyCuaeServerImpl( svc, vf ), queued, free );
+ super( svc, new MyCuaeServerImpl( svc, vf ), queued, free, null );
}
/**
Modified: incubator/etch/branches/dynamo/tests/src/test/java/org/apache/etch/tests/TestStubTest1DotJava.java
URL: http://svn.apache.org/viewvc/incubator/etch/branches/dynamo/tests/src/test/java/org/apache/etch/tests/TestStubTest1DotJava.java?rev=747141&r1=744148&r2=747141&view=diff
==============================================================================
--- incubator/etch/branches/dynamo/tests/src/test/java/org/apache/etch/tests/TestStubTest1DotJava.java (original)
+++ incubator/etch/branches/dynamo/tests/src/test/java/org/apache/etch/tests/TestStubTest1DotJava.java Mon Feb 23 21:31:35 2009
@@ -506,7 +506,7 @@
};
private final MyMessageSource src = new MyMessageSource();
- private final StubTest1<Test1> stub = new StubTest1<Test1>( src, test, pool, pool );
+ private final StubTest1<Test1> stub = new StubTest1<Test1>( src, test, pool, pool, vf );
/** a fake MessageSource for testing */
public static class MyMessageSource implements DeliveryService