[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