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 2011/11/14 19:16:26 UTC

svn commit: r1201818 - in /camel/branches/camel-2.8.x: ./ camel-core/src/main/java/org/apache/camel/ camel-core/src/main/java/org/apache/camel/impl/ camel-core/src/test/java/org/apache/camel/impl/

Author: davsclaus
Date: Mon Nov 14 18:16:25 2011
New Revision: 1201818

URL: http://svn.apache.org/viewvc?rev=1201818&view=rev
Log:
CAMEL-4678: Veto starting CamelContext can now suppress rethrowing exception, to ensure valid state in OSGi for the bundle.

Added:
    camel/branches/camel-2.8.x/camel-core/src/test/java/org/apache/camel/impl/VetoCamelContextStartTest.java
      - copied, changed from r1201815, camel/trunk/camel-core/src/test/java/org/apache/camel/impl/VetoCamelContextStartTest.java
Modified:
    camel/branches/camel-2.8.x/   (props changed)
    camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/VetoCamelContextStartException.java
    camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java

Propchange: camel/branches/camel-2.8.x/
------------------------------------------------------------------------------
    svn:mergeinfo = /camel/trunk:1201815

Propchange: camel/branches/camel-2.8.x/
------------------------------------------------------------------------------
Binary property 'svnmerge-integrated' - no diff available.

Modified: camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/VetoCamelContextStartException.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/VetoCamelContextStartException.java?rev=1201818&r1=1201817&r2=1201818&view=diff
==============================================================================
--- camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/VetoCamelContextStartException.java (original)
+++ camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/VetoCamelContextStartException.java Mon Nov 14 18:16:25 2011
@@ -18,24 +18,49 @@ package org.apache.camel;
 
 /**
  * An exception to veto starting {@link CamelContext}.
+ * <p/>
+ * The option rethrowException can be used to control whether to rethrow this exception
+ * when starting CamelContext or not.
  *
- * @version 
+ * @see org.apache.camel.spi.LifecycleStrategy
  */
 public class VetoCamelContextStartException extends Exception {
-    private static final long serialVersionUID = 8046489554418284256L;
+    private static final long serialVersionUID = 8046489554418284257L;
     private final CamelContext context;
+    private final boolean rethrowException;
 
     public VetoCamelContextStartException(String message, CamelContext context) {
+        this(message, context, true);
+    }
+
+    public VetoCamelContextStartException(String message, CamelContext context, boolean rethrowException) {
         super(message);
         this.context = context;
+        this.rethrowException = rethrowException;
     }
 
     public VetoCamelContextStartException(String message, Throwable cause, CamelContext context) {
+        this(message, cause, context, true);
+    }
+
+    public VetoCamelContextStartException(String message, Throwable cause, CamelContext context, boolean rethrowException) {
         super(message, cause);
         this.context = context;
+        this.rethrowException = rethrowException;
     }
 
     public CamelContext getContext() {
         return context;
     }
+
+    /**
+     * Whether to rethrow this exception when starting CamelContext, to cause an exception
+     * to be thrown from the start method.
+     * <p/>
+     * This option is default <tt>true</tt>.
+     */
+    public boolean isRethrowException() {
+        return rethrowException;
+    }
+
 }

Modified: camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java?rev=1201818&r1=1201817&r2=1201818&view=diff
==============================================================================
--- camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java (original)
+++ camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java Mon Nov 14 18:16:25 2011
@@ -1313,7 +1313,18 @@ public class DefaultCamelContext extends
         firstStartDone = true;
 
         // super will invoke doStart which will prepare internal services and start routes etc.
-        super.start();
+        try {
+            super.start();
+        } catch (VetoCamelContextStartException e) {
+            if (e.isRethrowException()) {
+                throw e;
+            } else {
+                log.info("CamelContext ({}) vetoed to not start due {}", getName(), e.getMessage());
+                // swallow exception and change state of this camel context to stopped
+                stop();
+                return;
+            }
+        }
 
         stopWatch.stop();
         if (log.isInfoEnabled()) {
@@ -1401,10 +1412,10 @@ public class DefaultCamelContext extends
                 strategy.onContextStart(this);
             } catch (VetoCamelContextStartException e) {
                 // okay we should not start Camel since it was vetoed
-                log.warn("Lifecycle strategy vetoed starting CamelContext (" + getName() + ")", e);
+                log.warn("Lifecycle strategy vetoed starting CamelContext ({}) due {}", getName(), e.getMessage());
                 throw e;
             } catch (Exception e) {
-                log.warn("Lifecycle strategy " + strategy + " failed starting CamelContext (" + getName() + ")", e);
+                log.warn("Lifecycle strategy " + strategy + " failed starting CamelContext ({}) due {}", getName(), e.getMessage());
                 throw e;
             }
         }

Copied: camel/branches/camel-2.8.x/camel-core/src/test/java/org/apache/camel/impl/VetoCamelContextStartTest.java (from r1201815, camel/trunk/camel-core/src/test/java/org/apache/camel/impl/VetoCamelContextStartTest.java)
URL: http://svn.apache.org/viewvc/camel/branches/camel-2.8.x/camel-core/src/test/java/org/apache/camel/impl/VetoCamelContextStartTest.java?p2=camel/branches/camel-2.8.x/camel-core/src/test/java/org/apache/camel/impl/VetoCamelContextStartTest.java&p1=camel/trunk/camel-core/src/test/java/org/apache/camel/impl/VetoCamelContextStartTest.java&r1=1201815&r2=1201818&rev=1201818&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/impl/VetoCamelContextStartTest.java (original)
+++ camel/branches/camel-2.8.x/camel-core/src/test/java/org/apache/camel/impl/VetoCamelContextStartTest.java Mon Nov 14 18:16:25 2011
@@ -23,11 +23,11 @@ import org.apache.camel.CamelContext;
 import org.apache.camel.Component;
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.Endpoint;
-import org.apache.camel.ErrorHandlerFactory;
 import org.apache.camel.Processor;
 import org.apache.camel.Route;
 import org.apache.camel.Service;
 import org.apache.camel.VetoCamelContextStartException;
+import org.apache.camel.builder.ErrorHandlerBuilder;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.spi.LifecycleStrategy;
 import org.apache.camel.spi.RouteContext;
@@ -112,7 +112,7 @@ public class VetoCamelContextStartTest e
         }
 
         @Override
-        public void onErrorHandlerAdd(RouteContext routeContext, Processor errorHandler, ErrorHandlerFactory errorHandlerBuilder) {
+        public void onErrorHandlerAdd(RouteContext routeContext, Processor errorHandler, ErrorHandlerBuilder errorHandlerBuilder) {
         }
 
         @Override