[jboss-svn-commits] JBL Code SVN: r22308 - in labs/jbossesb/workspace/skeagh: commons/src/main/java/org/jboss/esb/classpath and 4 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Tue Sep 2 06:49:52 EDT 2008


Author: tfennelly
Date: 2008-09-02 06:49:51 -0400 (Tue, 02 Sep 2008)
New Revision: 22308

Modified:
   labs/jbossesb/workspace/skeagh/api/service/src/main/java/org/jboss/esb/context/AddressingContext.java
   labs/jbossesb/workspace/skeagh/api/service/src/main/java/org/jboss/esb/context/DeploymentContext.java
   labs/jbossesb/workspace/skeagh/api/service/src/main/java/org/jboss/esb/context/InvocationContext.java
   labs/jbossesb/workspace/skeagh/commons/src/main/java/org/jboss/esb/classpath/ClassUtil.java
   labs/jbossesb/workspace/skeagh/runtime/src/main/java/org/jboss/esb/deploy/DeploymentRuntime.java
   labs/jbossesb/workspace/skeagh/runtime/src/main/java/org/jboss/esb/dispatch/LocalDispatcher.java
   labs/jbossesb/workspace/skeagh/runtime/src/test/java/org/jboss/esb/deploy/config/MyInRouter.java
   labs/jbossesb/workspace/skeagh/runtime/src/test/java/org/jboss/esb/deploy/config/MyResource.java
   labs/jbossesb/workspace/skeagh/runtime/src/test/java/org/jboss/esb/dispatch/HelloInboundRouter.java
   labs/jbossesb/workspace/skeagh/runtime/src/test/java/org/jboss/esb/dispatch/HelloOutboundRouter.java
   labs/jbossesb/workspace/skeagh/runtime/src/test/java/org/jboss/esb/dispatch/HelloWorldService.java
   labs/jbossesb/workspace/skeagh/runtime/src/test/java/org/jboss/esb/dispatch/LocalDispatcherTest.java
   labs/jbossesb/workspace/skeagh/runtime/src/test/java/org/jboss/esb/dispatch/RestStringTransformer.java
Log:
Scoped contexts.

Modified: labs/jbossesb/workspace/skeagh/api/service/src/main/java/org/jboss/esb/context/AddressingContext.java
===================================================================
--- labs/jbossesb/workspace/skeagh/api/service/src/main/java/org/jboss/esb/context/AddressingContext.java	2008-09-02 10:49:25 UTC (rev 22307)
+++ labs/jbossesb/workspace/skeagh/api/service/src/main/java/org/jboss/esb/context/AddressingContext.java	2008-09-02 10:49:51 UTC (rev 22308)
@@ -47,16 +47,33 @@
      * "FaultTo" ServiceName for the message associated with the current context.
      */
     private ServiceName faultTo;
+    /**
+     * Context ThreadLocal.
+     */
+    private static ThreadLocal<AddressingContext> contextTL = new ThreadLocal<AddressingContext>();
 
     /**
+     * Set the {@link AddressingContext} associated with the current thread.
+     * @param context The {@link AddressingContext} associated with the current thread.
+     */
+    public static void setContext(final AddressingContext context)
+    {
+        if(context != null) {
+            contextTL.set(context);
+        } else {
+            contextTL.remove();
+        }
+    }
+
+    /**
      * Get the {@link AddressingContext} associated with the message currently
      * being processed.
      * @return The {@link AddressingContext} associated with the message currently
      * being processed.
      */
-    public static AddressingContext getAddressingContext()
+    public static AddressingContext getContext()
     {
-        return null;
+        return contextTL.get();
     }
 
     /**

Modified: labs/jbossesb/workspace/skeagh/api/service/src/main/java/org/jboss/esb/context/DeploymentContext.java
===================================================================
--- labs/jbossesb/workspace/skeagh/api/service/src/main/java/org/jboss/esb/context/DeploymentContext.java	2008-09-02 10:49:25 UTC (rev 22307)
+++ labs/jbossesb/workspace/skeagh/api/service/src/main/java/org/jboss/esb/context/DeploymentContext.java	2008-09-02 10:49:51 UTC (rev 22308)
@@ -57,16 +57,20 @@
      * Set the {@link DeploymentContext} associated with the current thread.
      * @param context The {@link DeploymentContext} associated with the current thread.
      */
-    public static void setDeploymentContext(final DeploymentContext context)
+    public static void setContext(final DeploymentContext context)
     {
-        contextTL.set(context);
+        if(context != null) {
+            contextTL.set(context);
+        } else {
+            contextTL.remove();
+        }
     }
 
     /**
      * Get the {@link DeploymentContext} associated with the current thread.
      * @return The {@link DeploymentContext} associated with the current thread.
      */
-    public static DeploymentContext getDeploymentContext()
+    public static DeploymentContext getContext()
     {
         return contextTL.get();
     }

Modified: labs/jbossesb/workspace/skeagh/api/service/src/main/java/org/jboss/esb/context/InvocationContext.java
===================================================================
--- labs/jbossesb/workspace/skeagh/api/service/src/main/java/org/jboss/esb/context/InvocationContext.java	2008-09-02 10:49:25 UTC (rev 22307)
+++ labs/jbossesb/workspace/skeagh/api/service/src/main/java/org/jboss/esb/context/InvocationContext.java	2008-09-02 10:49:51 UTC (rev 22308)
@@ -36,21 +36,37 @@
  */
 public class InvocationContext implements ESBContext
 {
-
     /**
      * Context Data Map.
      */
     private Map<Object, Object> contextMap = new LinkedHashMap<Object, Object>();
+    /**
+     * Context ThreadLocal.
+     */
+    private static ThreadLocal<InvocationContext> contextTL = new ThreadLocal<InvocationContext>();
 
     /**
+     * Set the {@link InvocationContext} associated with the current thread.
+     * @param context The {@link InvocationContext} associated with the current thread.
+     */
+    public static void setContext(final InvocationContext context)
+    {
+        if(context != null) {
+            contextTL.set(context);
+        } else {
+            contextTL.remove();
+        }
+    }
+
+    /**
      * Get the {@link InvocationContext} associated with the message currently
      * being processed.
      * @return The {@link InvocationContext} associated with the message currently
      * being processed.
      */
-    public static InvocationContext getInvocationContext()
+    public static InvocationContext getContext()
     {
-        return null;
+        return contextTL.get();
     }
 
     /**

Modified: labs/jbossesb/workspace/skeagh/commons/src/main/java/org/jboss/esb/classpath/ClassUtil.java
===================================================================
--- labs/jbossesb/workspace/skeagh/commons/src/main/java/org/jboss/esb/classpath/ClassUtil.java	2008-09-02 10:49:25 UTC (rev 22307)
+++ labs/jbossesb/workspace/skeagh/commons/src/main/java/org/jboss/esb/classpath/ClassUtil.java	2008-09-02 10:49:51 UTC (rev 22308)
@@ -330,12 +330,12 @@
     /**
      * Set the field value on the specified object instance.
      *
-     * @param field    The field to set.
-     * @param instance The object instance on which to set.
-     * @param value    The object value.
+     * @param field        The field to set.
+     * @param targetObject The object instance on which to set.
+     * @param value        The object value.
      * @throws IllegalAccessException cannot access field.
      */
-    public static void setFieldValue(final Field field, final Object instance, final Object value) throws IllegalAccessException
+    public static void setFieldValue(final Field field, final Object targetObject, final Object value) throws IllegalAccessException
     {
         boolean isAccessible = field.isAccessible();
 
@@ -346,10 +346,52 @@
 
         try
         {
-            field.set(instance, value);
+            field.set(targetObject, value);
         } finally
         {
             field.setAccessible(isAccessible);
         }
     }
+
+    /**
+     * Set the target object {@link java.lang.reflect.Field} anywhere it's declared.
+     *
+     * @param targetObject The object on which to set the value.
+     * @param value        The value to be set on the field.
+     * @param fieldName    The field name.
+     * @throws IllegalAccessException Unable to access the object field.
+     */
+    public static void setFieldValue(final Object targetObject, final String fieldName, final Object value) throws IllegalAccessException
+    {
+        setFieldValue(targetObject, fieldName, value, value.getClass());
+    }
+
+    /**
+     * Set the target object {@link java.lang.reflect.Field} anywhere it's declared.
+     *
+     * @param targetObject   The object on which to set the value.
+     * @param value          The value to be set on the field.
+     * @param fieldName      The field name.
+     * @param hierarchyClass The class hierarchy on which to check for fields.
+     * @throws IllegalAccessException Unable to access the object field.
+     */
+    private static void setFieldValue(final Object targetObject, final String fieldName, final Object value, final Class hierarchyClass) throws IllegalAccessException
+    {
+        // Check all the fields in this class...
+        Field[] fields = targetObject.getClass().getDeclaredFields();
+        for (Field field : fields)
+        {
+            if (field.getType() == value.getClass() && field.getName().equals(fieldName))
+            {
+                setFieldValue(field, targetObject, value);
+            }
+        }
+
+        // Iterate up the inheritance hierarchy...
+        Class superClass = hierarchyClass.getSuperclass();
+        if (superClass != null)
+        {
+            setFieldValue(targetObject, fieldName, value, superClass);
+        }
+    }
 }

Modified: labs/jbossesb/workspace/skeagh/runtime/src/main/java/org/jboss/esb/deploy/DeploymentRuntime.java
===================================================================
--- labs/jbossesb/workspace/skeagh/runtime/src/main/java/org/jboss/esb/deploy/DeploymentRuntime.java	2008-09-02 10:49:25 UTC (rev 22307)
+++ labs/jbossesb/workspace/skeagh/runtime/src/main/java/org/jboss/esb/deploy/DeploymentRuntime.java	2008-09-02 10:49:51 UTC (rev 22308)
@@ -34,7 +34,6 @@
 import org.jboss.esb.service.ServiceName;
 import org.jboss.esb.util.AssertArgument;
 
-import java.lang.reflect.Field;
 import java.lang.reflect.InvocationTargetException;
 import java.util.*;
 
@@ -222,9 +221,12 @@
                     {
                         ClassUtil.execAnnotatedMethod(object, Uninitialize.class);
                         undeployedObjects.add(object);
+                    } catch (InvocationTargetException e)
+                    {
+                        logger.error("Error while undeploying '" + deploymentSet[i].getKey() + "' (" + deploymentSet[i].getValue().getClass().getName() + ").", e.getCause());
                     } catch (Throwable t)
                     {
-                        logger.debug("Error while undeploying '" + deploymentSet[i].getKey() + "' (" + deploymentSet[i].getValue().getClass().getName() + ").");
+                        logger.error("Error while undeploying '" + deploymentSet[i].getKey() + "' (" + deploymentSet[i].getValue().getClass().getName() + ").", t);
                     }
                 }
             }
@@ -249,7 +251,7 @@
             {
                 try
                 {
-                    deployObject(resource.getValue());
+                    deployObject(resource.getValue(), null);
                     logger.debug("Deployed resource '" + resource.getKey() + "' (" + resource.getValue().getClass().getName() + ").");
                     deployedObjects.put(resource.getKey(), resource.getValue());
                     deployedResources.put(resource.getKey(), resource.getValue());
@@ -283,7 +285,7 @@
             {
                 try
                 {
-                    deployObject(service.getValue().getService());
+                    deployObject(service.getValue().getService(), service.getKey());
                     logger.debug("Deployed service '" + service.getKey() + "' (" + service.getValue().getClass().getName() + ").");
                     deployedObjects.put(service.getKey(), service.getValue().getService());
                 } catch (InvocationTargetException e)
@@ -319,10 +321,10 @@
                     try
                     {
                         // Deploy the transformers first...
-                        deployTransformers(routerConfig.getTransformers(), routerConfig.getName());
+                        deployTransformers(serviceName, routerConfig.getTransformers(), routerConfig.getName());
 
                         // Create a dispatcher and hook it into the inRouter...
-                        LocalDispatcher dispatcher = new LocalDispatcher();
+                        LocalDispatcher dispatcher = new LocalDispatcher(context);
                         dispatcher.setServiceName(serviceName);
                         dispatcher.setService(getService(configurationUnit, serviceName));
                         dispatcher.setTransformers(routerConfig.getTransformers());
@@ -331,7 +333,7 @@
                         routerConfig.getRouter().setDispatcher(dispatcher);
 
                         // Now deploy the router...
-                        deployObject(routerConfig.getRouter());
+                        deployObject(routerConfig.getRouter(), serviceName);
                         logger.debug("Deployed InboundRouter '" + routerConfig.getName() + "' (" + routerConfig.getRouter().getClass().getName() + ").");
                         deployedObjects.put(routerConfig.getName(), routerConfig.getRouter());
                     } catch (InvocationTargetException e)
@@ -383,10 +385,10 @@
                     try
                     {
                         // Deploy the transformers first...
-                        deployTransformers(routerConfig.getTransformers(), routerConfig.getName());
+                        deployTransformers(routerConfigMap.getKey(), routerConfig.getTransformers(), routerConfig.getName());
 
                         // Now deploy the router...
-                        deployObject(routerConfig.getRouter());
+                        deployObject(routerConfig.getRouter(), routerConfigMap.getKey());
                         logger.debug("Deployed OutboundRouter '" + routerConfig.getName() + "' (" + routerConfig.getRouter().getClass().getName() + ").");
                         deployedObjects.put(routerConfig.getName(), routerConfig.getRouter());
                     } catch (InvocationTargetException e)
@@ -404,11 +406,11 @@
     /**
      * Deploy the transformers.
      *
+     * @param serviceName      The service with which the transformer set is associated.
      * @param transformers     The transformer list.
-     * @param routerConfigName The name of the owning router.
-     * @throws DeploymentException Error deploying transformers.
+     * @param routerConfigName The name of the owning router. @throws DeploymentException Error deploying transformers.
      */
-    private void deployTransformers(final List<MessageTransformer> transformers, final String routerConfigName) throws DeploymentException
+    private void deployTransformers(ServiceName serviceName, final List<MessageTransformer> transformers, final String routerConfigName) throws DeploymentException
     {
         if (transformers != null)
         {
@@ -416,7 +418,7 @@
             {
                 try
                 {
-                    deployObject(transformer);
+                    deployObject(transformer, serviceName);
                     logger.debug("Deployed transformer for router '" + routerConfigName + "' (" + transformer.getClass().getName() + ").");
                     deployedObjects.put(transformer, transformer);
                 } catch (InvocationTargetException e)
@@ -437,38 +439,16 @@
      * @throws InvocationTargetException Exception during object deployment.
      * @throws IllegalAccessException    Unable to invoke initialize method on object.
      */
-    private void deployObject(final Object object) throws InvocationTargetException, IllegalAccessException
+    private void deployObject(final Object object, final ServiceName serviceName) throws InvocationTargetException, IllegalAccessException
     {
         // Set the deployment context on the object, if specified...
-        setContext(object, object.getClass());
-        ClassUtil.execAnnotatedMethod(object, Initialize.class);
-    }
-
-    /**
-     * Set the DeploymentContext anywhere it's declared.
-     *
-     * @param object         The object on which to set the context.
-     * @param hierarchyClass The class hierarchy on which to check for fields.
-     * @throws IllegalAccessException Unable to access the object field.
-     */
-    private void setContext(final Object object, final Class hierarchyClass) throws IllegalAccessException
-    {
-        // Check all the fields in this class...
-        Field[] fields = object.getClass().getDeclaredFields();
-        for (Field field : fields)
+        ClassUtil.setFieldValue(object, "deploymentContext", context);
+        if (serviceName != null)
         {
-            if (field.getType() == DeploymentContext.class)
-            {
-                ClassUtil.setFieldValue(field, object, context);
-            }
+            // If supplied, set the ServiceName on the object...
+            ClassUtil.setFieldValue(object, "serviceName", serviceName);
         }
-
-        // Iterate up the inheritance hierarchy...
-        Class superClass = hierarchyClass.getSuperclass();
-        if (superClass != null)
-        {
-            setContext(object, superClass);
-        }
+        ClassUtil.execAnnotatedMethod(object, Initialize.class);
     }
 
     /**

Modified: labs/jbossesb/workspace/skeagh/runtime/src/main/java/org/jboss/esb/dispatch/LocalDispatcher.java
===================================================================
--- labs/jbossesb/workspace/skeagh/runtime/src/main/java/org/jboss/esb/dispatch/LocalDispatcher.java	2008-09-02 10:49:25 UTC (rev 22307)
+++ labs/jbossesb/workspace/skeagh/runtime/src/main/java/org/jboss/esb/dispatch/LocalDispatcher.java	2008-09-02 10:49:51 UTC (rev 22308)
@@ -19,6 +19,9 @@
  */
 package org.jboss.esb.dispatch;
 
+import org.jboss.esb.context.DeploymentContext;
+import org.jboss.esb.context.InvocationContext;
+import org.jboss.esb.context.AddressingContext;
 import org.jboss.esb.deploy.config.OutboundRouterConfig;
 import org.jboss.esb.message.Message;
 import org.jboss.esb.message.MessageTransformationException;
@@ -39,6 +42,10 @@
 public class LocalDispatcher implements MessageDispatcher
 {
     /**
+     * The associated deployment context.
+     */
+    private DeploymentContext deploymentContext;
+    /**
      * Inbound transformers to be applied before invoking
      * the service (can be null).
      */
@@ -62,6 +69,17 @@
     private boolean cloneOnOutboundTransforms = false;
 
     /**
+     * Public constructor.
+     *
+     * @param deploymentContext The deployment context with which this
+     *                          dispatcher is associated.
+     */
+    public LocalDispatcher(final DeploymentContext deploymentContext)
+    {
+        this.deploymentContext = deploymentContext;
+    }
+
+    /**
      * Initialize the dispatcher.
      */
     public final void initialize()
@@ -78,7 +96,8 @@
             }
             // If we have multiple outbound routers performing transforms
             // on the message before routing, we need to clone the message,
-            // otherwise the message will be corrupted...
+            // otherwise the message will be corrupted between routing
+            // operations...
             cloneOnOutboundTransforms = (numTransformationSets > 1);
         }
     }
@@ -97,9 +116,34 @@
     {
         Message outMessage;
 
-        applyInboundTransforms(message);
-        outMessage = dispatchToService(message);
-        applyOutboundRouters(outMessage);
+        DeploymentContext.setContext(deploymentContext);
+        try
+        {
+            AddressingContext addressingContext = new AddressingContext();
+
+            addressingContext.setTo(serviceName);
+            AddressingContext.setContext(addressingContext);
+            try
+            {
+                // TODO: The inbound router should have access to the InvocationContext
+                InvocationContext.setContext(new InvocationContext());
+                try
+                {
+                    applyInboundTransforms(message);
+                    outMessage = dispatchToService(message);
+                    applyOutboundRouters(outMessage);
+                } finally
+                {
+                    InvocationContext.setContext(null);
+                }
+            } finally
+            {
+                AddressingContext.setContext(null);
+            }
+        } finally
+        {
+            DeploymentContext.setContext(null);
+        }
     }
 
     /**
@@ -161,7 +205,7 @@
         {
             for (OutboundRouterConfig outboundRouter : outboundRouters)
             {
-                // TODO: Use the cloneOnOutboundTransforms
+                // TODO: cloneOnOutboundTransforms
                 applyOutboundTransformers(outMessage, outboundRouter.getTransformers());
                 outboundRouter.getRouter().route(outMessage);
             }
@@ -171,7 +215,7 @@
     /**
      * Apply the supplied set of transformers on the supplied message.
      *
-     * @param outMessage   The message.
+     * @param outMessage           The message.
      * @param outboundTransformers The transformers to be applied.
      * @throws RoutingException Error applying transformer.
      */

Modified: labs/jbossesb/workspace/skeagh/runtime/src/test/java/org/jboss/esb/deploy/config/MyInRouter.java
===================================================================
--- labs/jbossesb/workspace/skeagh/runtime/src/test/java/org/jboss/esb/deploy/config/MyInRouter.java	2008-09-02 10:49:25 UTC (rev 22307)
+++ labs/jbossesb/workspace/skeagh/runtime/src/test/java/org/jboss/esb/deploy/config/MyInRouter.java	2008-09-02 10:49:51 UTC (rev 22308)
@@ -23,12 +23,16 @@
 import org.jboss.esb.routing.MessageDispatcher;
 import org.jboss.esb.annotations.Initialize;
 import org.jboss.esb.annotations.Uninitialize;
+import org.jboss.esb.service.ServiceName;
+import junit.framework.TestCase;
 
 /**
  * @author <a href="mailto:tom.fennelly at jboss.com">tom.fennelly at jboss.com</a>
  */
 public class MyInRouter implements InboundRouter
 {
+    private ServiceName serviceName;
+
     private String myparam;
     private int myOtherParam;
     public static Exception exception;
@@ -41,6 +45,7 @@
     @Initialize
     public void initialise() throws Exception
     {
+        TestCase.assertNotNull("'serviceName' should have been initialised on router.", serviceName);
         if(exception != null) {
             throw exception;
         }

Modified: labs/jbossesb/workspace/skeagh/runtime/src/test/java/org/jboss/esb/deploy/config/MyResource.java
===================================================================
--- labs/jbossesb/workspace/skeagh/runtime/src/test/java/org/jboss/esb/deploy/config/MyResource.java	2008-09-02 10:49:25 UTC (rev 22307)
+++ labs/jbossesb/workspace/skeagh/runtime/src/test/java/org/jboss/esb/deploy/config/MyResource.java	2008-09-02 10:49:51 UTC (rev 22308)
@@ -29,12 +29,12 @@
  */
 public class MyResource
 {
-    private DeploymentContext context;
+    private DeploymentContext deploymentContext;
     public static boolean initialised = false;
 
     @Initialize
     public void initialise() {
-        TestCase.assertNotNull("Deployment context should have been initialised in resource.", context);
+        TestCase.assertNotNull("Deployment context should have been initialised in resource.", deploymentContext);
         initialised = true;
     }
 

Modified: labs/jbossesb/workspace/skeagh/runtime/src/test/java/org/jboss/esb/dispatch/HelloInboundRouter.java
===================================================================
--- labs/jbossesb/workspace/skeagh/runtime/src/test/java/org/jboss/esb/dispatch/HelloInboundRouter.java	2008-09-02 10:49:25 UTC (rev 22307)
+++ labs/jbossesb/workspace/skeagh/runtime/src/test/java/org/jboss/esb/dispatch/HelloInboundRouter.java	2008-09-02 10:49:51 UTC (rev 22308)
@@ -23,6 +23,9 @@
 import org.jboss.esb.routing.MessageDispatcher;
 import org.jboss.esb.routing.RoutingException;
 import org.jboss.esb.message.Message;
+import org.jboss.esb.context.InvocationContext;
+import org.jboss.esb.context.AddressingContext;
+import org.jboss.esb.context.DeploymentContext;
 
 /**
  * @author <a href="mailto:tom.fennelly at jboss.com">tom.fennelly at jboss.com</a>

Modified: labs/jbossesb/workspace/skeagh/runtime/src/test/java/org/jboss/esb/dispatch/HelloOutboundRouter.java
===================================================================
--- labs/jbossesb/workspace/skeagh/runtime/src/test/java/org/jboss/esb/dispatch/HelloOutboundRouter.java	2008-09-02 10:49:25 UTC (rev 22307)
+++ labs/jbossesb/workspace/skeagh/runtime/src/test/java/org/jboss/esb/dispatch/HelloOutboundRouter.java	2008-09-02 10:49:51 UTC (rev 22308)
@@ -24,6 +24,9 @@
 import org.jboss.esb.routing.RoutingException;
 import org.jboss.esb.routing.OutboundRouter;
 import org.jboss.esb.message.Message;
+import org.jboss.esb.context.InvocationContext;
+import org.jboss.esb.context.AddressingContext;
+import org.jboss.esb.context.DeploymentContext;
 
 /**
  * @author <a href="mailto:tom.fennelly at jboss.com">tom.fennelly at jboss.com</a>
@@ -31,10 +34,16 @@
 public class HelloOutboundRouter implements OutboundRouter
 {
     private String helloMessage;
+    public static InvocationContext invocationContext;
+    public static AddressingContext addressingContext;
+    public static DeploymentContext deploymentContext;
 
     public void route(Message message) throws RoutingException
     {
         helloMessage = (String) message.getPayload();
+        invocationContext = InvocationContext.getContext();
+        addressingContext = AddressingContext.getContext();
+        deploymentContext = DeploymentContext.getContext();
     }
 
     public String getHelloMessage()

Modified: labs/jbossesb/workspace/skeagh/runtime/src/test/java/org/jboss/esb/dispatch/HelloWorldService.java
===================================================================
--- labs/jbossesb/workspace/skeagh/runtime/src/test/java/org/jboss/esb/dispatch/HelloWorldService.java	2008-09-02 10:49:25 UTC (rev 22307)
+++ labs/jbossesb/workspace/skeagh/runtime/src/test/java/org/jboss/esb/dispatch/HelloWorldService.java	2008-09-02 10:49:51 UTC (rev 22308)
@@ -22,6 +22,9 @@
 import org.jboss.esb.service.Service;
 import org.jboss.esb.service.ServiceException;
 import org.jboss.esb.message.Message;
+import org.jboss.esb.context.InvocationContext;
+import org.jboss.esb.context.AddressingContext;
+import org.jboss.esb.context.DeploymentContext;
 
 /**
  * @author <a href="mailto:tom.fennelly at jboss.com">tom.fennelly at jboss.com</a>
@@ -29,10 +32,16 @@
 public class HelloWorldService implements Service
 {
     private String helloMessage;
+    public static InvocationContext invocationContext;
+    public static AddressingContext addressingContext;
+    public static DeploymentContext deploymentContext;
 
     public Message process(Message message) throws ServiceException
     {
         helloMessage = (String) message.getPayload();
+        invocationContext = InvocationContext.getContext();
+        addressingContext = AddressingContext.getContext();
+        deploymentContext = DeploymentContext.getContext();
         return message;
     }
 

Modified: labs/jbossesb/workspace/skeagh/runtime/src/test/java/org/jboss/esb/dispatch/LocalDispatcherTest.java
===================================================================
--- labs/jbossesb/workspace/skeagh/runtime/src/test/java/org/jboss/esb/dispatch/LocalDispatcherTest.java	2008-09-02 10:49:25 UTC (rev 22307)
+++ labs/jbossesb/workspace/skeagh/runtime/src/test/java/org/jboss/esb/dispatch/LocalDispatcherTest.java	2008-09-02 10:49:51 UTC (rev 22308)
@@ -28,6 +28,8 @@
 import org.jboss.esb.routing.RoutingException;
 
 import java.io.IOException;
+import java.util.Set;
+import java.util.HashSet;
 
 /**
  * @author <a href="mailto:tom.fennelly at jboss.com">tom.fennelly at jboss.com</a>
@@ -107,6 +109,24 @@
             assertEquals("Goodbye World!", helloService.getHelloMessage());
             // Passed thru to the outrouter untransformed......
             assertEquals("Goodbye World!", outRouter.getHelloMessage());
+
+            // Make sure the contexts get set on the invocation thread
+            // and make sure it's consistent across all components on the
+            // call stack...
+            Set conetxtSet = new HashSet();
+            conetxtSet.add(RestStringTransformer.invocationContext);
+            conetxtSet.add(RestStringTransformer.deploymentContext);
+            conetxtSet.add(RestStringTransformer.addressingContext);
+            conetxtSet.add(HelloWorldService.invocationContext);
+            conetxtSet.add(HelloWorldService.deploymentContext);
+            conetxtSet.add(HelloWorldService.addressingContext);
+            conetxtSet.add(HelloOutboundRouter.invocationContext);
+            conetxtSet.add(HelloOutboundRouter.deploymentContext);
+            conetxtSet.add(HelloOutboundRouter.addressingContext);
+            assertEquals(3, conetxtSet.size());
+            assertTrue(conetxtSet.contains(RestStringTransformer.invocationContext));
+            assertTrue(conetxtSet.contains(RestStringTransformer.deploymentContext));
+            assertTrue(conetxtSet.contains(RestStringTransformer.addressingContext));
         } finally {
             runtime.undeploy();
         }

Modified: labs/jbossesb/workspace/skeagh/runtime/src/test/java/org/jboss/esb/dispatch/RestStringTransformer.java
===================================================================
--- labs/jbossesb/workspace/skeagh/runtime/src/test/java/org/jboss/esb/dispatch/RestStringTransformer.java	2008-09-02 10:49:25 UTC (rev 22307)
+++ labs/jbossesb/workspace/skeagh/runtime/src/test/java/org/jboss/esb/dispatch/RestStringTransformer.java	2008-09-02 10:49:51 UTC (rev 22308)
@@ -22,6 +22,10 @@
 import org.jboss.esb.message.MessageTransformer;
 import org.jboss.esb.message.Message;
 import org.jboss.esb.message.MessageTransformationException;
+import org.jboss.esb.context.InvocationContext;
+import org.jboss.esb.context.AddressingContext;
+import org.jboss.esb.context.DeploymentContext;
+import junit.framework.TestCase;
 
 /**
  * @author <a href="mailto:tom.fennelly at jboss.com">tom.fennelly at jboss.com</a>
@@ -29,9 +33,15 @@
 public class RestStringTransformer implements MessageTransformer
 {
     private String newString;
+    public static InvocationContext invocationContext;
+    public static AddressingContext addressingContext;
+    public static DeploymentContext deploymentContext;
 
     public void transform(Message message) throws MessageTransformationException
     {
+        invocationContext = InvocationContext.getContext();
+        addressingContext = AddressingContext.getContext();
+        deploymentContext = DeploymentContext.getContext();
         message.setPayload(newString);
     }
 }




More information about the jboss-svn-commits mailing list