Updated Branches: refs/heads/camel-2.12.x c4b133165 -> ddabc95e6 refs/heads/master ed07738ac -> 30842e35c
CAMEL-7161: camel-dozer - Can cause dead-lock in init when using spring Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/30842e35 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/30842e35 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/30842e35 Branch: refs/heads/master Commit: 30842e35c6086ec860674f31ca7148502fb0defa Parents: ed07738 Author: Claus Ibsen <davscl...@apache.org> Authored: Mon Feb 3 10:39:44 2014 +0100 Committer: Claus Ibsen <davscl...@apache.org> Committed: Mon Feb 3 10:39:44 2014 +0100 ---------------------------------------------------------------------- .../dozer/DozerTypeConverterLoader.java | 47 +++++++++++++++++--- 1 file changed, 42 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/30842e35/components/camel-dozer/src/main/java/org/apache/camel/converter/dozer/DozerTypeConverterLoader.java ---------------------------------------------------------------------- diff --git a/components/camel-dozer/src/main/java/org/apache/camel/converter/dozer/DozerTypeConverterLoader.java b/components/camel-dozer/src/main/java/org/apache/camel/converter/dozer/DozerTypeConverterLoader.java index 317dfa8..edad108 100644 --- a/components/camel-dozer/src/main/java/org/apache/camel/converter/dozer/DozerTypeConverterLoader.java +++ b/components/camel-dozer/src/main/java/org/apache/camel/converter/dozer/DozerTypeConverterLoader.java @@ -30,6 +30,8 @@ import org.apache.camel.CamelContextAware; import org.apache.camel.TypeConverter; import org.apache.camel.spi.ClassResolver; import org.apache.camel.spi.TypeConverterRegistry; +import org.apache.camel.support.ServiceSupport; +import org.apache.camel.util.ObjectHelper; import org.apache.camel.util.ReflectionHelper; import org.apache.camel.util.ResourceHelper; import org.dozer.DozerBeanMapper; @@ -58,7 +60,7 @@ import static org.dozer.classmap.MappingDirection.ONE_WAY; * The queried types are used to register the {@link TypeConverter} with the * context via its {@link TypeConverterRegistry}. */ -public class DozerTypeConverterLoader implements CamelContextAware { +public class DozerTypeConverterLoader extends ServiceSupport implements CamelContextAware { private final Logger log = LoggerFactory.getLogger(getClass()); private CamelContext camelContext; @@ -82,7 +84,12 @@ public class DozerTypeConverterLoader implements CamelContextAware { * {@link DozerTypeConverter} in */ public DozerTypeConverterLoader(CamelContext camelContext) { - init(camelContext, null); + this.camelContext = camelContext; + try { + camelContext.addService(this); + } catch (Exception e) { + throw ObjectHelper.wrapRuntimeCamelException(e); + } } /** @@ -111,7 +118,14 @@ public class DozerTypeConverterLoader implements CamelContextAware { log.info("Using DozerBeanMapperConfiguration: {}", configuration); DozerBeanMapper mapper = createDozerBeanMapper(configuration); - init(camelContext, mapper); + this.camelContext = camelContext; + this.mapper = mapper; + + try { + camelContext.addService(this); + } catch (Exception e) { + throw ObjectHelper.wrapRuntimeCamelException(e); + } } /** @@ -125,7 +139,14 @@ public class DozerTypeConverterLoader implements CamelContextAware { */ @Deprecated public DozerTypeConverterLoader(CamelContext camelContext, DozerBeanMapper mapper) { - init(camelContext, mapper); + this.camelContext = camelContext; + this.mapper = mapper; + + try { + camelContext.addService(this); + } catch (Exception e) { + throw ObjectHelper.wrapRuntimeCamelException(e); + } } /** @@ -307,7 +328,14 @@ public class DozerTypeConverterLoader implements CamelContextAware { * @param camelContext the CamelContext */ public void setCamelContext(CamelContext camelContext) { - init(camelContext, null); + if (this.camelContext == null) { + this.camelContext = camelContext; + try { + camelContext.addService(this); + } catch (Exception e) { + throw ObjectHelper.wrapRuntimeCamelException(e); + } + } } public DozerBeanMapper getMapper() { @@ -332,4 +360,13 @@ public class DozerTypeConverterLoader implements CamelContextAware { return url; } + @Override + protected void doStart() throws Exception { + init(camelContext, mapper); + } + + @Override + protected void doStop() throws Exception { + // noop + } }