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