You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2009/09/08 11:24:31 UTC

svn commit: r812410 - in /camel/trunk: camel-core/src/main/java/org/apache/camel/builder/ camel-core/src/main/java/org/apache/camel/management/ camel-core/src/main/java/org/apache/camel/management/mbean/ camel-core/src/main/java/org/apache/camel/model/...

Author: davsclaus
Date: Tue Sep  8 09:24:26 2009
New Revision: 812410

URL: http://svn.apache.org/viewvc?rev=812410&view=rev
Log:
CAMEL-1996: First work of managed error handler (work in progress). Fixed CS.

Added:
    camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedErrorHandler.java   (with props)
    camel/trunk/camel-core/src/test/java/org/apache/camel/management/ManagedErrorHandlerTest.java   (with props)
    camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/config/DefaultErrorHandlerConfigTest.java
      - copied, changed from r812050, camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/config/ErrorHandlerConfigTest.java
    camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/management/SpringManagedErrorHandlerTest.java
      - copied, changed from r812347, camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/management/SpringManagedStatisticsLevelOffTest.java
    camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/config/DefaultErrorHandlerConfigTest-context.xml
      - copied, changed from r812050, camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/config/ErrorHandlerConfigTest-context.xml
    camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/management/SpringManagedErrorHandlerTest.xml
      - copied, changed from r812347, camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/management/ManagedStatisticsLevelRoutesOnlyTest.xml
Modified:
    camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ErrorHandlerBuilderRef.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/management/DefaultManagementLifecycleStrategy.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/management/DefaultManagementNamingStrategy.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/management/DefaultManagementStrategy.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/management/ManagedManagementStrategy.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedProcessor.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinition.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/processor/RedeliveryErrorHandler.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/spi/LifecycleStrategy.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/spi/ManagementNamingStrategy.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/spi/ManagementStrategy.java
    camel/trunk/camel-core/src/test/java/org/apache/camel/impl/DummyLifecycleStrategy.java
    camel/trunk/camel-core/src/test/java/org/apache/camel/management/ManagedStatisticsLevelOffTest.java
    camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelContextFactoryBean.java
    camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/spi/SpringTransactionPolicy.java
    camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/DummyLifecycleStrategy.java
    camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/config/DummyErrorHandlerBuilder.java
    camel/trunk/examples/camel-example-management/src/main/resources/META-INF/spring/camel-context.xml

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ErrorHandlerBuilderRef.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ErrorHandlerBuilderRef.java?rev=812410&r1=812409&r2=812410&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ErrorHandlerBuilderRef.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ErrorHandlerBuilderRef.java Tue Sep  8 09:24:26 2009
@@ -48,75 +48,92 @@
 
     public Processor createErrorHandler(RouteContext routeContext, Processor processor) throws Exception {
         if (handler == null) {
-            handler = lookupErrorHandlerBuilder(routeContext);
+            handler = createErrorHandler(routeContext);
         }
         return handler.createErrorHandler(routeContext, processor);
     }
 
-    /**
-     * Returns whether a specific error handler builder has been configured or not.
-     * <p/>
-     * Can be used to test if none has been configured and then install a custom error handler builder
-     * replacing the default error handler (that would have been used as fallback otherwise).
-     * <br/>
-     * This is for instance used by the transacted policy to setup a TransactedErrorHandlerBuilder
-     * in camel-spring.
-     */
-    public boolean isErrorHandlerBuilderConfigued() {
-        return !DEFAULT_ERROR_HANDLER_BUILDER.equals(getRef());
-    }
-
     public boolean supportTransacted() {
         return supportTransacted;
     }
 
-    public ErrorHandlerBuilder lookupErrorHandlerBuilder(RouteContext routeContext) {
-        if (handler == null) {
-            // if the ref is the default then the we do not have any explicit error handler configured
-            // if that is the case then use error handlers configured on the route, as for instance
-            // the transacted error handler could have been configured on the route so we should use that one
-            if (!isErrorHandlerBuilderConfigued()) {
-                // see if there has been configured a route builder on the route
-                handler = routeContext.getRoute().getErrorHandlerBuilder();
-                if (handler == null) {
-                    handler = routeContext.lookup(routeContext.getRoute().getErrorHandlerRef(), ErrorHandlerBuilder.class);
-                }
-                if (handler == null) {
-                    // fallback to the default error handler if none configured on the route
-                    handler = new DefaultErrorHandlerBuilder();
-                }
-                // check if its also a ref with no error handler configuration like me
-                if (handler instanceof ErrorHandlerBuilderRef) {
-                    ErrorHandlerBuilderRef other = (ErrorHandlerBuilderRef) handler;
-                    if (!other.isErrorHandlerBuilderConfigued()) {
-                        // the other has also no explict error handler configured then fallback to the default error handler
-                        // otherwise we could recursive loop forever (triggered by createErrorHandler method)
-                        handler = new DefaultErrorHandlerBuilder();
-                        // inherit the error handlers from the other as they are to be shared
-                        // this is needed by camel-spring when none error handler has been explicit configured
-                        handler.setErrorHandlers(other.getErrorHandlers());
-                    }
+    /**
+     * Lookup the error handler by the given ref
+     *
+     * @param routeContext the route context
+     * @param ref          reference id for the error handler
+     * @return the error handler
+     */
+    public static ErrorHandlerBuilder lookupErrorHandlerBuilder(RouteContext routeContext, String ref) {
+        ErrorHandlerBuilder answer;
+
+        // if the ref is the default then we do not have any explicit error handler configured
+        // if that is the case then use error handlers configured on the route, as for instance
+        // the transacted error handler could have been configured on the route so we should use that one
+        if (!isErrorHandlerBuilderConfigured(ref)) {
+            // see if there has been configured a route builder on the route
+            answer = routeContext.getRoute().getErrorHandlerBuilder();
+            if (answer == null) {
+                answer = routeContext.lookup(routeContext.getRoute().getErrorHandlerRef(), ErrorHandlerBuilder.class);
+            }
+            if (answer == null) {
+                // fallback to the default error handler if none configured on the route
+                answer = new DefaultErrorHandlerBuilder();
+            }
+            // check if its also a ref with no error handler configuration like me
+            if (answer instanceof ErrorHandlerBuilderRef) {
+                ErrorHandlerBuilderRef other = (ErrorHandlerBuilderRef) answer;
+                String otherRef = other.getRef();
+                if (!isErrorHandlerBuilderConfigured(otherRef)) {
+                    // the other has also no explicit error handler configured then fallback to the default error handler
+                    // otherwise we could recursive loop forever (triggered by createErrorHandler method)
+                    answer = new DefaultErrorHandlerBuilder();
+                    // inherit the error handlers from the other as they are to be shared
+                    // this is needed by camel-spring when none error handler has been explicit configured
+                    answer.setErrorHandlers(other.getErrorHandlers());
                 }
-            } else {
-                // use specific configured error handler
-                handler = routeContext.lookup(ref, ErrorHandlerBuilder.class);
             }
+        } else {
+            // use specific configured error handler
+            answer = routeContext.lookup(ref, ErrorHandlerBuilder.class);
+        }
 
-            ObjectHelper.notNull(handler, "error handler '" + ref + "'");
+        return answer;
+    }
 
-            // configure if the handler support transacted
-            supportTransacted = handler.supportTransacted();
+    public String getRef() {
+        return ref;
+    }
 
-            List<OnExceptionDefinition> list = getErrorHandlers();
-            for (OnExceptionDefinition exceptionType : list) {
-                handler.addErrorHandlers(exceptionType);
-            }
+    public ErrorHandlerBuilder getHandler() {
+        return handler;
+    }
+
+    private ErrorHandlerBuilder createErrorHandler(RouteContext routeContext) {
+        handler = lookupErrorHandlerBuilder(routeContext, getRef());
+        ObjectHelper.notNull(handler, "error handler '" + ref + "'");
+
+        // configure if the handler support transacted
+        supportTransacted = handler.supportTransacted();
+
+        List<OnExceptionDefinition> list = getErrorHandlers();
+        for (OnExceptionDefinition exceptionType : list) {
+            handler.addErrorHandlers(exceptionType);
         }
         return handler;
     }
 
-    public String getRef() {
-        return ref;
+    /**
+     * Returns whether a specific error handler builder has been configured or not.
+     * <p/>
+     * Can be used to test if none has been configured and then install a custom error handler builder
+     * replacing the default error handler (that would have been used as fallback otherwise).
+     * <br/>
+     * This is for instance used by the transacted policy to setup a TransactedErrorHandlerBuilder
+     * in camel-spring.
+     */
+    private static boolean isErrorHandlerBuilderConfigured(String ref) {
+        return !DEFAULT_ERROR_HANDLER_BUILDER.equals(ref);
     }
 
     @Override

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/management/DefaultManagementLifecycleStrategy.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/management/DefaultManagementLifecycleStrategy.java?rev=812410&r1=812409&r2=812410&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/management/DefaultManagementLifecycleStrategy.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/management/DefaultManagementLifecycleStrategy.java Tue Sep  8 09:24:26 2009
@@ -26,10 +26,12 @@
 import org.apache.camel.Component;
 import org.apache.camel.Consumer;
 import org.apache.camel.Endpoint;
+import org.apache.camel.ManagementStatisticsLevel;
 import org.apache.camel.Processor;
 import org.apache.camel.Producer;
 import org.apache.camel.Route;
 import org.apache.camel.Service;
+import org.apache.camel.builder.ErrorHandlerBuilder;
 import org.apache.camel.impl.EventDrivenConsumerRoute;
 import org.apache.camel.impl.ScheduledPollConsumer;
 import org.apache.camel.management.mbean.ManagedBrowsableEndpoint;
@@ -38,6 +40,7 @@
 import org.apache.camel.management.mbean.ManagedConsumer;
 import org.apache.camel.management.mbean.ManagedDelayer;
 import org.apache.camel.management.mbean.ManagedEndpoint;
+import org.apache.camel.management.mbean.ManagedErrorHandler;
 import org.apache.camel.management.mbean.ManagedPerformanceCounter;
 import org.apache.camel.management.mbean.ManagedProcessor;
 import org.apache.camel.management.mbean.ManagedProducer;
@@ -60,7 +63,6 @@
 import org.apache.camel.spi.BrowsableEndpoint;
 import org.apache.camel.spi.LifecycleStrategy;
 import org.apache.camel.spi.ManagementAware;
-import org.apache.camel.ManagementStatisticsLevel;
 import org.apache.camel.spi.ManagementStrategy;
 import org.apache.camel.spi.RouteContext;
 import org.apache.camel.util.KeyValueHolder;
@@ -368,6 +370,29 @@
         // when camel itself is shutting down
     }
 
+    public void onErrorHandlerAdd(RouteContext routeContext, Processor errorHandler, ErrorHandlerBuilder errorHandlerBuilder) {
+        // the agent hasn't been started
+        if (!initialized) {
+            return;
+        }
+
+        Object managedObject = new ManagedErrorHandler(routeContext, errorHandler, errorHandlerBuilder);
+
+        // skip already managed services, for example if a route has been restarted
+        if (getStrategy().isManaged(managedObject, null)) {
+            if (LOG.isTraceEnabled()) {
+                LOG.trace("The error handler builder is already managed: " + errorHandlerBuilder);
+            }
+            return;
+        }
+
+        try {
+            getStrategy().manageObject(managedObject);
+        } catch (Exception e) {
+            LOG.warn("Could not register error handler builder: " + errorHandlerBuilder + " as ErrorHandlerMBean.", e);
+        }
+    }
+
     public void onRouteContextCreate(RouteContext routeContext) {
         // the agent hasn't been started
         if (!initialized) {

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/management/DefaultManagementNamingStrategy.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/management/DefaultManagementNamingStrategy.java?rev=812410&r1=812409&r2=812410&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/management/DefaultManagementNamingStrategy.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/management/DefaultManagementNamingStrategy.java Tue Sep  8 09:24:26 2009
@@ -28,9 +28,12 @@
 import org.apache.camel.Processor;
 import org.apache.camel.Producer;
 import org.apache.camel.Route;
+import org.apache.camel.builder.ErrorHandlerBuilder;
+import org.apache.camel.builder.ErrorHandlerBuilderRef;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.spi.InterceptStrategy;
 import org.apache.camel.spi.ManagementNamingStrategy;
+import org.apache.camel.spi.RouteContext;
 import org.apache.camel.util.ObjectHelper;
 
 /**
@@ -49,6 +52,7 @@
     public static final String TYPE_ROUTE = "routes";
     public static final String TYPE_COMPONENT = "components";
     public static final String TYPE_TRACER = "tracer";
+    public static final String TYPE_ERRORHANDLER = "errorhandlers";
 
     protected String domainName;
     protected String hostName = "localhost";
@@ -114,6 +118,48 @@
         return createObjectName(buffer);
     }
 
+    public ObjectName getObjectNameForErrorHandler(RouteContext routeContext, Processor errorHandler, ErrorHandlerBuilder builder) throws MalformedObjectNameException {
+        StringBuffer buffer = new StringBuffer();
+        buffer.append(domainName).append(":");
+        buffer.append(KEY_CONTEXT + "=").append(getContextId(routeContext.getCamelContext())).append(",");
+        buffer.append(KEY_TYPE + "=").append(TYPE_ERRORHANDLER).append(",");
+
+        // we want to only register one instance of the various error handler types and thus do some lookup
+        // if its a ErrorHandlerBuildRef. We need a bit of work to do that as there are potential indirection.
+        String ref = null;
+        if (builder instanceof ErrorHandlerBuilderRef) {
+            ErrorHandlerBuilderRef builderRef = (ErrorHandlerBuilderRef) builder;
+
+            // it has not then its an indirection and we should do some work to lookup the real builder
+            ref = builderRef.getRef();
+            builder = builderRef.lookupErrorHandlerBuilder(routeContext, builderRef.getRef());
+
+            // must do a 2nd lookup in case this is also a reference
+            // (this happens with spring DSL using errorHandlerRef on <route> as it gets a bit
+            // complex with indirections for error handler references
+            if (builder instanceof ErrorHandlerBuilderRef) {
+                builderRef = (ErrorHandlerBuilderRef) builder;
+                // does it refer to a non default error handler then do a 2nd lookup
+                if (!builderRef.getRef().equals(ErrorHandlerBuilderRef.DEFAULT_ERROR_HANDLER_BUILDER)) {
+                    builder = builderRef.lookupErrorHandlerBuilder(routeContext, builderRef.getRef());
+                    ref = builderRef.getRef();
+                }
+            }
+        }
+
+        if (ref != null) {
+            String name = builder.getClass().getSimpleName() + "(ref:" + ref + ")";
+            buffer.append(KEY_NAME + "=").append(ObjectName.quote(name));
+        } else {
+            // create a name based on its instance
+            buffer.append(KEY_NAME + "=")
+                .append(builder.getClass().getSimpleName())
+                .append("(").append(getIdentityHashCode(builder)).append(")");
+        }
+
+        return createObjectName(buffer);
+    }
+
     public ObjectName getObjectNameForConsumer(CamelContext context, Consumer consumer) throws MalformedObjectNameException {
         StringBuffer buffer = new StringBuffer();
         buffer.append(domainName).append(":");

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/management/DefaultManagementStrategy.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/management/DefaultManagementStrategy.java?rev=812410&r1=812409&r2=812410&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/management/DefaultManagementStrategy.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/management/DefaultManagementStrategy.java Tue Sep  8 09:24:26 2009
@@ -18,12 +18,12 @@
 
 import java.util.EventObject;
 
+import org.apache.camel.ManagementStatisticsLevel;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.spi.EventFactory;
 import org.apache.camel.spi.EventNotifier;
 import org.apache.camel.spi.ManagementAgent;
 import org.apache.camel.spi.ManagementNamingStrategy;
-import org.apache.camel.ManagementStatisticsLevel;
 import org.apache.camel.spi.ManagementStrategy;
 import org.fusesource.commons.management.Statistic;
 

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/management/ManagedManagementStrategy.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/management/ManagedManagementStrategy.java?rev=812410&r1=812409&r2=812410&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/management/ManagedManagementStrategy.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/management/ManagedManagementStrategy.java Tue Sep  8 09:24:26 2009
@@ -23,6 +23,7 @@
 import org.apache.camel.management.mbean.ManagedComponent;
 import org.apache.camel.management.mbean.ManagedConsumer;
 import org.apache.camel.management.mbean.ManagedEndpoint;
+import org.apache.camel.management.mbean.ManagedErrorHandler;
 import org.apache.camel.management.mbean.ManagedProcessor;
 import org.apache.camel.management.mbean.ManagedProducer;
 import org.apache.camel.management.mbean.ManagedRoute;
@@ -93,6 +94,11 @@
             objectName = getManagementNamingStrategy().getObjectNameForRoute(mr.getRoute());
         }
 
+        if (managedObject instanceof ManagedErrorHandler) {
+            ManagedErrorHandler meh = (ManagedErrorHandler) managedObject;
+            objectName = getManagementNamingStrategy().getObjectNameForErrorHandler(meh.getRouteContext(), meh.getErrorHandler(), meh.getErrorHandlerBuilder());
+        }
+
         if (managedObject instanceof ManagedProcessor) {
             ManagedProcessor mp = (ManagedProcessor) managedObject;
             objectName = getManagementNamingStrategy().getObjectNameForProcessor(mp.getContext(), mp.getProcessor(), mp.getDefinition());

Added: camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedErrorHandler.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedErrorHandler.java?rev=812410&view=auto
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedErrorHandler.java (added)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedErrorHandler.java Tue Sep  8 09:24:26 2009
@@ -0,0 +1,77 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.management.mbean;
+
+import org.apache.camel.Processor;
+import org.apache.camel.builder.ErrorHandlerBuilder;
+import org.apache.camel.builder.ErrorHandlerBuilderRef;
+import org.apache.camel.processor.RedeliveryErrorHandler;
+import org.apache.camel.spi.RouteContext;
+import org.springframework.jmx.export.annotation.ManagedAttribute;
+import org.springframework.jmx.export.annotation.ManagedResource;
+
+/**
+ * @version $Revision$
+ */
+@ManagedResource(description = "Managed ErrorHandler")
+public class ManagedErrorHandler {
+
+    private RouteContext routeContext;
+    private Processor errorHandler;
+    private ErrorHandlerBuilder errorHandlerBuilder;
+
+    public ManagedErrorHandler(RouteContext routeContext, Processor errorHandler, ErrorHandlerBuilder builder) {
+        this.routeContext = routeContext;
+        this.errorHandler = errorHandler;
+        this.errorHandlerBuilder = builder;
+    }
+
+    public RouteContext getRouteContext() {
+        return routeContext;
+    }
+
+    public Processor getErrorHandler() {
+        return errorHandler;
+    }
+
+    public ErrorHandlerBuilder getErrorHandlerBuilder() {
+        return errorHandlerBuilder;
+    }
+
+    @ManagedAttribute(description = "Camel id")
+    public String getCamelId() {
+        return routeContext.getCamelContext().getName();
+    }
+
+    @ManagedAttribute(description = "Does the error handler support redelivery")
+    public boolean isSupportRedelivery() {
+        return errorHandler instanceof RedeliveryErrorHandler;
+    }
+
+    @ManagedAttribute(description = "RedeliveryPolicy for maximum redeliveries")
+    public Integer getMaximumRedeliveries() {
+        if (errorHandler instanceof RedeliveryErrorHandler) {
+            RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
+            return redelivery.getRedeliveryPolicy().getMaximumRedeliveries();
+        }
+        // not supported
+        return null;
+    }
+
+    // TODO: work in progress
+
+}

Propchange: camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedErrorHandler.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedErrorHandler.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedProcessor.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedProcessor.java?rev=812410&r1=812409&r2=812410&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedProcessor.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedProcessor.java Tue Sep  8 09:24:26 2009
@@ -17,12 +17,12 @@
 package org.apache.camel.management.mbean;
 
 import org.apache.camel.CamelContext;
+import org.apache.camel.ManagementStatisticsLevel;
 import org.apache.camel.Processor;
 import org.apache.camel.Route;
 import org.apache.camel.ServiceStatus;
 import org.apache.camel.impl.ServiceSupport;
 import org.apache.camel.model.ProcessorDefinition;
-import org.apache.camel.ManagementStatisticsLevel;
 import org.springframework.jmx.export.annotation.ManagedAttribute;
 import org.springframework.jmx.export.annotation.ManagedResource;
 

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java?rev=812410&r1=812409&r2=812410&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java Tue Sep  8 09:24:26 2009
@@ -18,9 +18,9 @@
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
+import org.apache.camel.ManagementStatisticsLevel;
 import org.apache.camel.Route;
 import org.apache.camel.ServiceStatus;
-import org.apache.camel.ManagementStatisticsLevel;
 import org.apache.camel.spi.ManagementStrategy;
 import org.springframework.jmx.export.annotation.ManagedAttribute;
 import org.springframework.jmx.export.annotation.ManagedOperation;

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinition.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinition.java?rev=812410&r1=812409&r2=812410&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinition.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinition.java Tue Sep  8 09:24:26 2009
@@ -54,11 +54,11 @@
 import org.apache.camel.processor.interceptor.Delayer;
 import org.apache.camel.processor.interceptor.HandleFault;
 import org.apache.camel.processor.interceptor.StreamCaching;
-import org.apache.camel.processor.interceptor.Tracer;
 import org.apache.camel.processor.loadbalancer.LoadBalancer;
 import org.apache.camel.spi.DataFormat;
 import org.apache.camel.spi.IdempotentRepository;
 import org.apache.camel.spi.InterceptStrategy;
+import org.apache.camel.spi.LifecycleStrategy;
 import org.apache.camel.spi.Policy;
 import org.apache.camel.spi.RouteContext;
 import org.apache.camel.spi.TransactedPolicy;
@@ -159,7 +159,7 @@
     }
 
     protected Processor wrapChannel(RouteContext routeContext, Processor processor) throws Exception {
-        // put a channel inbetween this and each output to control the route flow logic
+        // put a channel in between this and each output to control the route flow logic
         Channel channel = createChannel(routeContext);
         channel.setNextProcessor(processor);
 
@@ -181,8 +181,17 @@
         } else {
             // regular definition so add the error handler
             Processor output = channel.getOutput();
-            Processor errorHandler = getErrorHandlerBuilder().createErrorHandler(routeContext, output);
+            // create error handler
+            ErrorHandlerBuilder builder = getErrorHandlerBuilder();
+            Processor errorHandler = builder.createErrorHandler(routeContext, output);
+            // set error handler on channel
             channel.setErrorHandler(errorHandler);
+
+            // invoke lifecycles so we can manage this error handler builder
+            for (LifecycleStrategy strategy : routeContext.getCamelContext().getLifecycleStrategies()) {
+                strategy.onErrorHandlerAdd(routeContext, errorHandler, builder);
+            }
+
             return channel;
         }
     }
@@ -2168,6 +2177,8 @@
     @XmlAttribute(required = false)
     public void setErrorHandlerRef(String errorHandlerRef) {
         this.errorHandlerRef = errorHandlerRef;
+        // we use an specific error handler ref (from Spring DSL) then wrap that
+        // with a error handler build ref so Camel knows its not just the default one
         setErrorHandlerBuilder(new ErrorHandlerBuilderRef(errorHandlerRef));
     }
 

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/processor/RedeliveryErrorHandler.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/RedeliveryErrorHandler.java?rev=812410&r1=812409&r2=812410&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/processor/RedeliveryErrorHandler.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/processor/RedeliveryErrorHandler.java Tue Sep  8 09:24:26 2009
@@ -342,6 +342,7 @@
     }
 
     protected void prepareExchangeAfterFailure(final Exchange exchange, final RedeliveryData data) {
+        // TODO: setting failure handled should only be if we used a failure processor
         // we could not process the exchange so we let the failure processor handled it
         ExchangeHelper.setFailureHandled(exchange);
 

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/spi/LifecycleStrategy.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/spi/LifecycleStrategy.java?rev=812410&r1=812409&r2=812410&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/spi/LifecycleStrategy.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/spi/LifecycleStrategy.java Tue Sep  8 09:24:26 2009
@@ -21,8 +21,10 @@
 import org.apache.camel.CamelContext;
 import org.apache.camel.Component;
 import org.apache.camel.Endpoint;
+import org.apache.camel.Processor;
 import org.apache.camel.Route;
 import org.apache.camel.Service;
+import org.apache.camel.builder.ErrorHandlerBuilder;
 
 /**
  * Strategy for lifecycle notifications.
@@ -112,4 +114,14 @@
      */
     void onRouteContextCreate(RouteContext routeContext);
 
+
+    /**
+     * Notification on adding error handler.
+     *
+     * @param routeContext        the added route context
+     * @param errorHandler        the error handler
+     * @param errorHandlerBuilder the error handler builder
+     */
+    void onErrorHandlerAdd(RouteContext routeContext, Processor errorHandler, ErrorHandlerBuilder errorHandlerBuilder);
+
 }

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/spi/ManagementNamingStrategy.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/spi/ManagementNamingStrategy.java?rev=812410&r1=812409&r2=812410&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/spi/ManagementNamingStrategy.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/spi/ManagementNamingStrategy.java Tue Sep  8 09:24:26 2009
@@ -26,6 +26,7 @@
 import org.apache.camel.Processor;
 import org.apache.camel.Producer;
 import org.apache.camel.Route;
+import org.apache.camel.builder.ErrorHandlerBuilder;
 import org.apache.camel.model.ProcessorDefinition;
 
 /**
@@ -41,6 +42,8 @@
 
     ObjectName getObjectNameForEndpoint(Endpoint endpoint) throws MalformedObjectNameException;
 
+    ObjectName getObjectNameForErrorHandler(RouteContext routeContext, Processor errorHandler, ErrorHandlerBuilder builder) throws MalformedObjectNameException;
+
     ObjectName getObjectNameForProcessor(CamelContext context, Processor processor, ProcessorDefinition definition) throws MalformedObjectNameException;
 
     ObjectName getObjectNameForRoute(Route route) throws MalformedObjectNameException;

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/spi/ManagementStrategy.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/spi/ManagementStrategy.java?rev=812410&r1=812409&r2=812410&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/spi/ManagementStrategy.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/spi/ManagementStrategy.java Tue Sep  8 09:24:26 2009
@@ -16,8 +16,8 @@
  */
 package org.apache.camel.spi;
 
-import org.apache.camel.Service;
 import org.apache.camel.ManagementStatisticsLevel;
+import org.apache.camel.Service;
 import org.apache.camel.model.ProcessorDefinition;
 
 /**

Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/impl/DummyLifecycleStrategy.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/impl/DummyLifecycleStrategy.java?rev=812410&r1=812409&r2=812410&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/impl/DummyLifecycleStrategy.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/impl/DummyLifecycleStrategy.java Tue Sep  8 09:24:26 2009
@@ -22,10 +22,11 @@
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.Component;
-import org.apache.camel.Consumer;
 import org.apache.camel.Endpoint;
+import org.apache.camel.Processor;
 import org.apache.camel.Route;
 import org.apache.camel.Service;
+import org.apache.camel.builder.ErrorHandlerBuilder;
 import org.apache.camel.spi.LifecycleStrategy;
 import org.apache.camel.spi.RouteContext;
 
@@ -80,6 +81,10 @@
         events.add("onRouteContextCreate");
     }
 
+    public void onErrorHandlerAdd(RouteContext routeContext, Processor errorHandler, ErrorHandlerBuilder errorHandlerBuilder) {
+        events.add("onErrorHandlerAdd");
+    }
+
     public List<String> getEvents() {
         return events;
     }

Added: camel/trunk/camel-core/src/test/java/org/apache/camel/management/ManagedErrorHandlerTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/management/ManagedErrorHandlerTest.java?rev=812410&view=auto
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/management/ManagedErrorHandlerTest.java (added)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/management/ManagedErrorHandlerTest.java Tue Sep  8 09:24:26 2009
@@ -0,0 +1,73 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.management;
+
+import java.util.Iterator;
+import java.util.Set;
+import javax.management.MBeanServer;
+import javax.management.ObjectName;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.ContextTestSupport;
+import org.apache.camel.builder.RouteBuilder;
+
+/**
+ * @version $Revision$
+ */
+public class ManagedErrorHandlerTest extends ContextTestSupport {
+
+    @Override
+    protected CamelContext createCamelContext() throws Exception {
+        CamelContext context = super.createCamelContext();
+        DefaultManagementNamingStrategy naming = (DefaultManagementNamingStrategy) context.getManagementStrategy().getManagementNamingStrategy();
+        naming.setHostName("localhost");
+        naming.setDomainName("org.apache.camel");
+        return context;
+    }
+
+    public void testManagedErrorHandler() throws Exception {
+        MBeanServer mbeanServer = context.getManagementStrategy().getManagementAgent().getMBeanServer();
+
+        Set<ObjectName> set = mbeanServer.queryNames(new ObjectName("*:type=errorhandlers,*"), null);
+        // there should only be 2 error handler types as route 1 and route 3 uses the same default error handler
+        assertEquals(2, set.size());
+
+        Iterator<ObjectName> it = set.iterator();
+        ObjectName on1 = it.next();
+        ObjectName on2 = it.next();
+
+        String name1 = on1.getCanonicalName();
+        String name2 = on2.getCanonicalName();
+
+        assertTrue("Should be a default error handler", name1.contains("CamelDefaultErrorHandlerBuilder") || name2.contains("CamelDefaultErrorHandlerBuilder"));
+        assertTrue("Should be a dead letter error handler", name1.contains("DeadLetterChannelBuilder") || name2.contains("DeadLetterChannelBuilder"));
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("direct:foo").to("mock:foo");
+
+                from("direct:bar").errorHandler(deadLetterChannel("mock:dead")).to("mock:bar");
+
+                from("direct:baz").to("mock:baz");
+            }
+        };
+    }
+}

Propchange: camel/trunk/camel-core/src/test/java/org/apache/camel/management/ManagedErrorHandlerTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: camel/trunk/camel-core/src/test/java/org/apache/camel/management/ManagedErrorHandlerTest.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/management/ManagedStatisticsLevelOffTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/management/ManagedStatisticsLevelOffTest.java?rev=812410&r1=812409&r2=812410&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/management/ManagedStatisticsLevelOffTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/management/ManagedStatisticsLevelOffTest.java Tue Sep  8 09:24:26 2009
@@ -23,8 +23,8 @@
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.ContextTestSupport;
-import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.ManagementStatisticsLevel;
+import org.apache.camel.builder.RouteBuilder;
 
 /**
  * @version $Revision$

Modified: camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelContextFactoryBean.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelContextFactoryBean.java?rev=812410&r1=812409&r2=812410&view=diff
==============================================================================
--- camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelContextFactoryBean.java (original)
+++ camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelContextFactoryBean.java Tue Sep  8 09:24:26 2009
@@ -31,7 +31,7 @@
 
 import org.apache.camel.CamelException;
 import org.apache.camel.RoutesBuilder;
-import org.apache.camel.builder.ErrorHandlerBuilder;
+import org.apache.camel.builder.ErrorHandlerBuilderRef;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.impl.scan.PatternBasedPackageScanFilter;
 import org.apache.camel.management.DefaultManagementAgent;
@@ -755,11 +755,7 @@
             ctx.setHandleFault(handleFault);
         }
         if (errorHandlerRef != null) {
-            ErrorHandlerBuilder errorHandlerBuilder = (ErrorHandlerBuilder) getApplicationContext().getBean(errorHandlerRef, ErrorHandlerBuilder.class);
-            if (errorHandlerBuilder == null) {
-                throw new IllegalArgumentException("Cannot find ErrorHandlerBuilder bean with id: " + errorHandlerRef);
-            }
-            ctx.setErrorHandlerBuilder(errorHandlerBuilder);
+            ctx.setErrorHandlerBuilder(new ErrorHandlerBuilderRef(errorHandlerRef));
         }
 
         if (shouldStartContext != null) {

Modified: camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/spi/SpringTransactionPolicy.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/spi/SpringTransactionPolicy.java?rev=812410&r1=812409&r2=812410&view=diff
==============================================================================
--- camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/spi/SpringTransactionPolicy.java (original)
+++ camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/spi/SpringTransactionPolicy.java Tue Sep  8 09:24:26 2009
@@ -19,7 +19,6 @@
 import org.apache.camel.Processor;
 import org.apache.camel.builder.ErrorHandlerBuilder;
 import org.apache.camel.builder.ErrorHandlerBuilderRef;
-import org.apache.camel.builder.ErrorHandlerBuilderSupport;
 import org.apache.camel.spi.RouteContext;
 import org.apache.camel.spi.TransactedPolicy;
 import org.apache.camel.util.ObjectHelper;
@@ -68,15 +67,16 @@
         // check if its a ref if so then do a lookup
         if (builder instanceof ErrorHandlerBuilderRef) {
             // its a reference to a error handler so lookup the reference
-            ErrorHandlerBuilderRef ref = (ErrorHandlerBuilderRef) builder;
+            ErrorHandlerBuilderRef builderRef = (ErrorHandlerBuilderRef) builder;
+            String ref = builderRef.getRef();
             // only lookup if there was explicit an error handler builder configured
             // otherwise its just the "default" that has not explicit been configured
             // and if so then we can safely replace that with our transacted error handler
-            if (ref.isErrorHandlerBuilderConfigued()) {
+            if (ErrorHandlerBuilderRef.isErrorHandlerBuilderConfigued(ref)) {
                 if (LOG.isDebugEnabled()) {
-                    LOG.debug("Looking up ErrorHandlerBuilder with ref: " + ref.getRef());
+                    LOG.debug("Looking up ErrorHandlerBuilder with ref: " + ref);
                 }
-                builder = ref.lookupErrorHandlerBuilder(routeContext);
+                builder = ErrorHandlerBuilderRef.lookupErrorHandlerBuilder(routeContext, ref);
             }
         }
 

Modified: camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/DummyLifecycleStrategy.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/DummyLifecycleStrategy.java?rev=812410&r1=812409&r2=812410&view=diff
==============================================================================
--- camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/DummyLifecycleStrategy.java (original)
+++ camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/DummyLifecycleStrategy.java Tue Sep  8 09:24:26 2009
@@ -21,8 +21,10 @@
 import org.apache.camel.CamelContext;
 import org.apache.camel.Component;
 import org.apache.camel.Endpoint;
+import org.apache.camel.Processor;
 import org.apache.camel.Route;
 import org.apache.camel.Service;
+import org.apache.camel.builder.ErrorHandlerBuilder;
 import org.apache.camel.spi.LifecycleStrategy;
 import org.apache.camel.spi.RouteContext;
 
@@ -60,6 +62,9 @@
     public void onRouteContextCreate(RouteContext routeContext) {
     }
 
+    public void onErrorHandlerAdd(RouteContext routeContext, Processor errorHandler, ErrorHandlerBuilder errorHandlerBuilder) {
+    }
+
     public void onRoutesRemove(Collection<Route> routes) {
     }
 

Copied: camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/config/DefaultErrorHandlerConfigTest.java (from r812050, camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/config/ErrorHandlerConfigTest.java)
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/config/DefaultErrorHandlerConfigTest.java?p2=camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/config/DefaultErrorHandlerConfigTest.java&p1=camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/config/ErrorHandlerConfigTest.java&r1=812050&r2=812410&rev=812410&view=diff
==============================================================================
--- camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/config/ErrorHandlerConfigTest.java (original)
+++ camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/config/DefaultErrorHandlerConfigTest.java Tue Sep  8 09:24:26 2009
@@ -27,7 +27,7 @@
  * @version $Revision$
  */
 @ContextConfiguration
-public class ErrorHandlerConfigTest extends AbstractJUnit38SpringContextTests {
+public class DefaultErrorHandlerConfigTest extends AbstractJUnit38SpringContextTests {
 
     @Autowired
     protected ProducerTemplate template;
@@ -38,19 +38,19 @@
     protected Object expectedBody = "<hello>world!</hello>";
 
     public void testRouteInheritsConfiguredErrorHandler() throws Exception {
-        assertReceivedMessageWithErrorHandlerValue("defaultErrorHandler", "defaultErrorHandler");
+        assertReceivedMessageWithErrorHandlerValue("foo", null);
     }
 
     public void testRouteConfiguredErrorHandler() throws Exception {
-        assertReceivedMessageWithErrorHandlerValue("customErrorHandler", "customErrorHandler");
+        assertReceivedMessageWithErrorHandlerValue("bar", null);
     }
 
-    protected void assertReceivedMessageWithErrorHandlerValue(String name, String value) throws InterruptedException {
+    protected void assertReceivedMessageWithErrorHandlerValue(String name, String value) throws Exception {
         template.sendBody("direct:" + name, expectedBody);
 
         MockEndpoint endpoint = MockEndpoint.resolve(context, "mock:" + name);
         endpoint.expectedMessageCount(1);
-        endpoint.message(0).header(DummyErrorHandlerBuilder.PROPERTY_NAME).isEqualTo(value);
         endpoint.assertIsSatisfied();
     }
+
 }
\ No newline at end of file

Modified: camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/config/DummyErrorHandlerBuilder.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/config/DummyErrorHandlerBuilder.java?rev=812410&r1=812409&r2=812410&view=diff
==============================================================================
--- camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/config/DummyErrorHandlerBuilder.java (original)
+++ camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/config/DummyErrorHandlerBuilder.java Tue Sep  8 09:24:26 2009
@@ -18,7 +18,6 @@
 
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
-import org.apache.camel.builder.ErrorHandlerBuilder;
 import org.apache.camel.builder.ErrorHandlerBuilderSupport;
 import org.apache.camel.processor.DelegateProcessor;
 import org.apache.camel.spi.RouteContext;

Copied: camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/management/SpringManagedErrorHandlerTest.java (from r812347, camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/management/SpringManagedStatisticsLevelOffTest.java)
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/management/SpringManagedErrorHandlerTest.java?p2=camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/management/SpringManagedErrorHandlerTest.java&p1=camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/management/SpringManagedStatisticsLevelOffTest.java&r1=812347&r2=812410&rev=812410&view=diff
==============================================================================
--- camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/management/SpringManagedStatisticsLevelOffTest.java (original)
+++ camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/management/SpringManagedErrorHandlerTest.java Tue Sep  8 09:24:26 2009
@@ -17,16 +17,16 @@
 package org.apache.camel.spring.management;
 
 import org.apache.camel.CamelContext;
-import org.apache.camel.management.ManagedStatisticsLevelOffTest;
+import org.apache.camel.management.ManagedErrorHandlerTest;
 import static org.apache.camel.spring.processor.SpringTestHelper.createSpringCamelContext;
 
 /**
  * @version $Revision$
  */
-public class SpringManagedStatisticsLevelOffTest extends ManagedStatisticsLevelOffTest {
+public class SpringManagedErrorHandlerTest extends ManagedErrorHandlerTest {
 
     protected CamelContext createCamelContext() throws Exception {
-        return createSpringCamelContext(this, "org/apache/camel/spring/management/SpringManagedStatisticsLevelOffTest.xml");
+        return createSpringCamelContext(this, "org/apache/camel/spring/management/SpringManagedErrorHandlerTest.xml");
     }
 
-}
+}
\ No newline at end of file

Copied: camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/config/DefaultErrorHandlerConfigTest-context.xml (from r812050, camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/config/ErrorHandlerConfigTest-context.xml)
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/config/DefaultErrorHandlerConfigTest-context.xml?p2=camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/config/DefaultErrorHandlerConfigTest-context.xml&p1=camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/config/ErrorHandlerConfigTest-context.xml&r1=812050&r2=812410&rev=812410&view=diff
==============================================================================
--- camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/config/ErrorHandlerConfigTest-context.xml (original)
+++ camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/config/DefaultErrorHandlerConfigTest-context.xml Tue Sep  8 09:24:26 2009
@@ -22,19 +22,21 @@
        http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
     ">
 
-  <camelContext xmlns="http://camel.apache.org/schema/spring" errorHandlerRef="defaultErrorHandler">
-    <template id="myTemplate"/>
+    <camelContext xmlns="http://camel.apache.org/schema/spring">
+        <template id="myTemplate"/>
 
-    <route>
-      <from uri="direct:defaultErrorHandler"/>
-      <to uri="mock:defaultErrorHandler"/>
-    </route>
-    <route errorHandlerRef="customErrorHandler">
-      <from uri="direct:customErrorHandler"/>
-      <to uri="mock:customErrorHandler"/>
-    </route>
-  </camelContext>
+        <route>
+            <from uri="direct:foo"/>
+            <to uri="mock:foo"/>
+        </route>
+        <route errorHandlerRef="dlc">
+            <from uri="direct:bar"/>
+            <to uri="mock:bar"/>
+        </route>
+    </camelContext>
+
+    <bean id="dlc" class="org.apache.camel.builder.DeadLetterChannelBuilder">
+        <property name="deadLetterUri" value="mock:dead"/>
+    </bean>
 
-  <bean id="defaultErrorHandler" class="org.apache.camel.spring.config.DummyErrorHandlerBuilder"/>
-  <bean id="customErrorHandler" class="org.apache.camel.spring.config.DummyErrorHandlerBuilder"/>
 </beans>

Copied: camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/management/SpringManagedErrorHandlerTest.xml (from r812347, camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/management/ManagedStatisticsLevelRoutesOnlyTest.xml)
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/management/SpringManagedErrorHandlerTest.xml?p2=camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/management/SpringManagedErrorHandlerTest.xml&p1=camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/management/ManagedStatisticsLevelRoutesOnlyTest.xml&r1=812347&r2=812410&rev=812410&view=diff
==============================================================================
--- camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/management/ManagedStatisticsLevelRoutesOnlyTest.xml (original)
+++ camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/management/SpringManagedErrorHandlerTest.xml Tue Sep  8 09:24:26 2009
@@ -22,15 +22,25 @@
        http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
     ">
 
-    <!-- START SNIPPET: example -->
+    <bean id="dlc" class="org.apache.camel.builder.DeadLetterChannelBuilder">
+        <property name="deadLetterUri" value="mock:read"/>
+    </bean>
+
     <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
-        <jmxAgent id="agent" statisticsLevel="RoutesOnly"/>
+        <route>
+            <from uri="direct:foo"/>
+            <to uri="mock:foo"/>
+        </route>
+
+        <route errorHandlerRef="dlc">
+            <from uri="direct:bar"/>
+            <to uri="mock:bar"/>
+        </route>
 
         <route>
-            <from uri="direct:start"/>
-            <to uri="mock:result"/>
+            <from uri="direct:baz"/>
+            <to uri="mock:baz"/>
         </route>
     </camelContext>
-    <!-- END SNIPPET: example -->
 
 </beans>

Modified: camel/trunk/examples/camel-example-management/src/main/resources/META-INF/spring/camel-context.xml
URL: http://svn.apache.org/viewvc/camel/trunk/examples/camel-example-management/src/main/resources/META-INF/spring/camel-context.xml?rev=812410&r1=812409&r2=812410&view=diff
==============================================================================
--- camel/trunk/examples/camel-example-management/src/main/resources/META-INF/spring/camel-context.xml (original)
+++ camel/trunk/examples/camel-example-management/src/main/resources/META-INF/spring/camel-context.xml Tue Sep  8 09:24:26 2009
@@ -38,6 +38,18 @@
         <value>JAVA</value>
     </u:list>
 
+    <bean id="dlc" class="org.apache.camel.builder.DeadLetterChannelBuilder">
+        <property name="deadLetterUri" value="activemq:queue:dead"/>
+        <property name="redeliveryPolicy" ref="redeliveyPolicy"/>
+    </bean>
+
+    <bean id="redeliveyPolicy" class="org.apache.camel.processor.RedeliveryPolicy">
+        <property name="maximumRedeliveries" value="5"/>
+        <property name="backOffMultiplier" value="2.0"/>
+        <property name="useExponentialBackOff" value="true"/>
+        <property name="maximumRedeliveryDelay" value="30000"/>
+    </bean>
+
     <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
         <!-- Default JMX connector url: "service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi/camel" -->
         <jmxAgent id="agent" createConnector="true"/>
@@ -57,7 +69,7 @@
             </split>
         </route>
 
-        <route>
+        <route errorHandlerRef="dlc">
             <from uri="activemq:queue:stock"/>
             <delay><constant>100</constant></delay>
             <bean ref="stock" method="transform"/>