[jboss-svn-commits] JBL Code SVN: r23291 - in labs/jbossesb/workspace/skeagh: runtime/src/main/java/org/jboss/esb/dispatch and 1 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Oct 3 06:55:13 EDT 2008


Author: tfennelly
Date: 2008-10-03 06:55:12 -0400 (Fri, 03 Oct 2008)
New Revision: 23291

Modified:
   labs/jbossesb/workspace/skeagh/api/routing/src/main/java/org/jboss/esb/routing/InboundRouter.java
   labs/jbossesb/workspace/skeagh/api/routing/src/main/java/org/jboss/esb/routing/OutboundRouter.java
   labs/jbossesb/workspace/skeagh/runtime/src/main/java/org/jboss/esb/dispatch/AbstractDispatcher.java
   labs/jbossesb/workspace/skeagh/runtime/src/main/java/org/jboss/esb/failure/DeadLetterPersistanceService.java
Log:
Added code to control outrouter cloning - only if there are outrouters with processors defined.

Modified: labs/jbossesb/workspace/skeagh/api/routing/src/main/java/org/jboss/esb/routing/InboundRouter.java
===================================================================
--- labs/jbossesb/workspace/skeagh/api/routing/src/main/java/org/jboss/esb/routing/InboundRouter.java	2008-10-03 10:51:29 UTC (rev 23290)
+++ labs/jbossesb/workspace/skeagh/api/routing/src/main/java/org/jboss/esb/routing/InboundRouter.java	2008-10-03 10:55:12 UTC (rev 23291)
@@ -53,6 +53,8 @@
  */
 public interface InboundRouter
 {
+    // TODO: Add support for filtering inbound messages, allowing sharing/reuse of inbound endpoints across 1+ services
+
     /**
      * Set the {@link MessageDispatcher} for the router.
      * <p/>

Modified: labs/jbossesb/workspace/skeagh/api/routing/src/main/java/org/jboss/esb/routing/OutboundRouter.java
===================================================================
--- labs/jbossesb/workspace/skeagh/api/routing/src/main/java/org/jboss/esb/routing/OutboundRouter.java	2008-10-03 10:51:29 UTC (rev 23290)
+++ labs/jbossesb/workspace/skeagh/api/routing/src/main/java/org/jboss/esb/routing/OutboundRouter.java	2008-10-03 10:55:12 UTC (rev 23291)
@@ -55,6 +55,8 @@
  */
 public interface OutboundRouter
 {
+    // TODO: Add support for filtering outbound messages.  Content based routing??
+
     /**
      * Route the message.
      *

Modified: labs/jbossesb/workspace/skeagh/runtime/src/main/java/org/jboss/esb/dispatch/AbstractDispatcher.java
===================================================================
--- labs/jbossesb/workspace/skeagh/runtime/src/main/java/org/jboss/esb/dispatch/AbstractDispatcher.java	2008-10-03 10:51:29 UTC (rev 23290)
+++ labs/jbossesb/workspace/skeagh/runtime/src/main/java/org/jboss/esb/dispatch/AbstractDispatcher.java	2008-10-03 10:55:12 UTC (rev 23291)
@@ -89,6 +89,15 @@
      * Active message list.
      */
     private List<Message> activeMessageList = Collections.synchronizedList(new ArrayList<Message>());
+    /**
+     * Clone messages before applying outbound routers.
+     * <p/>
+     * If there are any processors on any of the outbound routers, we need to clone
+     * the message before applying each router.  This is to protect against a situation
+     * where an error has occured after the original message has been modified.  In this
+     * case we would have lost the original message if we had not cloned.
+     */
+    private boolean cloneOutboundMessages = false;
 
     /**
      * Public constructor.
@@ -259,11 +268,11 @@
     /**
      * Apply the outbound routers to the message.
      *
-     * @param outMessage The message.
+     * @param message The message.
      * @throws org.jboss.esb.routing.RoutingException
      *          Error routing message.
      */
-    protected final void applyOutboundRouters(final Message outMessage)
+    protected final void applyOutboundRouters(final Message message)
     {
         if (outboundRouters != null && !outboundRouters.isEmpty())
         {
@@ -288,12 +297,12 @@
                             {
                                 try
                                 {
-                                    outRouter.route(outMessage);
+                                    outRouter.route(message);
                                 }
                                 catch (Throwable t)
                                 {
                                     logger.debug("Exception routing message to Service '" + addressContext.getTo() + "' via OutboundRouter.  Router Configuration '" + outboundRouterConfig.getName() + "'.  Routing to Dead Letter Service '" + DeadLetterPersistanceService.SERVICE_NAME + "'.", t);
-                                    routeToDeadLetterService(outMessage, t);
+                                    routeToDeadLetterService(message, t);
                                 }
                                 // In this case, we don't pass the message to the outrouters (below).
                                 // We leave it to the other deployment to manage sending the message
@@ -304,50 +313,49 @@
                     }
                 }
 
+
                 for (OutboundRouterConfig outboundRouterConfig : outboundRouters)
                 {
                     OutboundRouter outRouter = outboundRouterConfig.getRouter();
 
-                    // Create a clone of the message in case there's an error or
-                    // there are multiple outrouters with processors on them...
-                    Message clone = cloneMessage(outMessage);
-
                     if (outRouter instanceof BusOutboundRouter)
                     {
                         if (!((BusOutboundRouter) outRouter).hasService(serviceName))
                         {
                             try
                             {
-                                outRouter.route(clone);
+                                outRouter.route(message);
                             }
                             catch (Throwable t)
                             {
                                 logger.debug("Exception routing message to remote OutboundRouter for Service '" + addressContext.getTo() + "' via OutboundRouter.  Router Configuration '" + outboundRouterConfig.getName() + "'.  Routing to Dead Letter Service '" + DeadLetterPersistanceService.SERVICE_NAME + "'.", t);
-                                // Copy the original message again in case there were any mods 
-                                // made to it in the router...
-                                clone = cloneMessage(outMessage);
-                                routeToDeadLetterService(clone, t);
+                                routeToDeadLetterService(message, t);
                             }
                         }
                     }
                     else
                     {
+                        Message outMessage = message;
+
+                        if(cloneOutboundMessages)
+                        {
+                            outMessage = cloneMessage(message);
+                        }
+
                         try
                         {
-                            applyOutboundProcessors(clone, outboundRouterConfig.getProcessors());
+                            applyOutboundProcessors(outMessage, outboundRouterConfig.getProcessors());
                         }
                         catch (Throwable t)
                         {
                             logger.debug("Exception applying message processors on OutboundRouter for Service '" + addressContext.getTo() + "' via OutboundRouter.  Router Configuration '" + outboundRouterConfig.getName() + "'.  Routing to Dead Letter Service '" + DeadLetterPersistanceService.SERVICE_NAME + "'.", t);
-                            // Copy the original message again in case there were any mods
-                            // made to it in the processors...
-                            clone = cloneMessage(outMessage);
-                            routeToDeadLetterService(clone, t);
+                            // Route the original message to the DLS...
+                            routeToDeadLetterService(message, t);
                             continue;
                         }
                         try
                         {
-                            outRouter.route(clone);
+                            outRouter.route(outMessage);
 
                             // Log this processing event...
                             ProcessingEventLog.getEventLog().logEvent(new OutboundRouterProcessingEvent(outboundRouterConfig.getName()));
@@ -355,10 +363,8 @@
                         catch (Throwable t)
                         {
                             logger.debug("Exception routing message to OutboundRouter for Service '" + addressContext.getTo() + "' via OutboundRouter.  Router Configuration '" + outboundRouterConfig.getName() + "'.  Routing to Dead Letter Service '" + DeadLetterPersistanceService.SERVICE_NAME + "'.", t);
-                            // Copy the original message again in case there were any mods
-                            // made to it in the router...
-                            clone = cloneMessage(outMessage);
-                            routeToDeadLetterService(clone, t);
+                            // Route the original message to the DLS...
+                            routeToDeadLetterService(message, t);
                         }
                     }
                 }
@@ -487,6 +493,17 @@
     public final void setOutboundRouters(final List<OutboundRouterConfig> outboundRouters)
     {
         this.outboundRouters = outboundRouters;
+
+        // If there are any processors on any of the outbound routers, we need to clone
+        // the message before applying each router.
+        for (OutboundRouterConfig outboundRouter : outboundRouters)
+        {
+            if(outboundRouter.getProcessors() != null && !outboundRouter.getProcessors().isEmpty())
+            {
+                this.cloneOutboundMessages = true;
+                break;
+            }
+        }
     }
 
     /**

Modified: labs/jbossesb/workspace/skeagh/runtime/src/main/java/org/jboss/esb/failure/DeadLetterPersistanceService.java
===================================================================
--- labs/jbossesb/workspace/skeagh/runtime/src/main/java/org/jboss/esb/failure/DeadLetterPersistanceService.java	2008-10-03 10:51:29 UTC (rev 23290)
+++ labs/jbossesb/workspace/skeagh/runtime/src/main/java/org/jboss/esb/failure/DeadLetterPersistanceService.java	2008-10-03 10:55:12 UTC (rev 23291)
@@ -43,6 +43,7 @@
      */
     public final Message process(final Message message) throws ServiceException
     {
+        // TODO
         return message;
     }
 }




More information about the jboss-svn-commits mailing list