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 2010/10/20 10:05:46 UTC
svn commit: r1024542 - in /camel/trunk:
camel-core/src/main/java/org/apache/camel/
camel-core/src/main/java/org/apache/camel/impl/
camel-core/src/main/java/org/apache/camel/impl/converter/
camel-core/src/main/java/org/apache/camel/spi/ camel-core/src/t...
Author: davsclaus
Date: Wed Oct 20 08:05:45 2010
New Revision: 1024542
URL: http://svn.apache.org/viewvc?rev=1024542&view=rev
Log:
CAMEL-3255: Type converters can now be lazy loaded. Thanks to Mark Ford for patch which I can leverage pieces from.
Added:
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/BaseTypeConverterRegistry.java (contents, props changed)
- copied, changed from r1024527, camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/DefaultTypeConverter.java
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/DefaultTypeConverter.java
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/LazyLoadingTypeConverter.java
camel/trunk/camel-core/src/test/java/org/apache/camel/impl/DefaultCamelContextLazyLoadTypeConvertersTest.java
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/CamelContextLazyLoadTypeConvertersTest.java
camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/CamelContextLazyLoadTypeConvertersTest.xml
- copied, changed from r1024527, camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/camelContextAwareBean.xml
Modified:
camel/trunk/camel-core/src/main/java/org/apache/camel/CamelContext.java
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
camel/trunk/camel-core/src/main/java/org/apache/camel/spi/TypeConverterAware.java
camel/trunk/camel-core/src/test/java/org/apache/camel/converter/JaxpTest.java
camel/trunk/camel-core/src/test/resources/log4j.properties
camel/trunk/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelContextFactoryBean.java
camel/trunk/components/camel-blueprint/src/test/resources/test.xml
camel/trunk/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelContextFactoryBean.java
camel/trunk/components/camel-spring/src/test/resources/log4j.properties
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/CamelContext.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/CamelContext.java?rev=1024542&r1=1024541&r2=1024542&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/CamelContext.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/CamelContext.java Wed Oct 20 08:05:45 2010
@@ -910,4 +910,19 @@ public interface CamelContext extends Su
* @param uuidGenerator the UUID Generator
*/
void setUuidGenerator(UuidGenerator uuidGenerator);
+
+ /**
+ * Whether or not type converters should be loaded lazy
+ *
+ * @return <tt>true</tt> to load lazy, <tt>false</tt> to load on startup
+ */
+ Boolean isLazyLoadTypeConverters();
+
+ /**
+ * Sets whether type converters should be loaded lazy
+ *
+ * @param lazyLoadTypeConverters <tt>true</tt> to load lazy, <tt>false</tt> to load on startup
+ */
+ void setLazyLoadTypeConverters(Boolean lazyLoadTypeConverters);
+
}
\ No newline at end of file
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java?rev=1024542&r1=1024541&r2=1024542&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java Wed Oct 20 08:05:45 2010
@@ -61,7 +61,9 @@ import org.apache.camel.TypeConverter;
import org.apache.camel.VetoCamelContextStartException;
import org.apache.camel.builder.ErrorHandlerBuilder;
import org.apache.camel.component.properties.PropertiesComponent;
+import org.apache.camel.impl.converter.BaseTypeConverterRegistry;
import org.apache.camel.impl.converter.DefaultTypeConverter;
+import org.apache.camel.impl.converter.LazyLoadingTypeConverter;
import org.apache.camel.management.DefaultManagementAgent;
import org.apache.camel.management.DefaultManagementLifecycleStrategy;
import org.apache.camel.management.DefaultManagementStrategy;
@@ -153,6 +155,7 @@ public class DefaultCamelContext extends
private Boolean streamCache = Boolean.FALSE;
private Boolean handleFault = Boolean.FALSE;
private Boolean disableJMX = Boolean.FALSE;
+ private Boolean lazyLoadTypeConverters = Boolean.FALSE;
private Long delay;
private ErrorHandlerBuilder errorHandlerBuilder;
private Map<String, DataFormatDefinition> dataFormats = new HashMap<String, DataFormatDefinition>();
@@ -1814,7 +1817,12 @@ public class DefaultCamelContext extends
* Lazily create a default implementation
*/
protected TypeConverter createTypeConverter() {
- DefaultTypeConverter answer = new DefaultTypeConverter(packageScanClassResolver, getInjector(), getDefaultFactoryFinder());
+ BaseTypeConverterRegistry answer;
+ if (isLazyLoadTypeConverters()) {
+ answer = new LazyLoadingTypeConverter(packageScanClassResolver, getInjector(), getDefaultFactoryFinder());
+ } else {
+ answer = new DefaultTypeConverter(packageScanClassResolver, getInjector(), getDefaultFactoryFinder());
+ }
setTypeConverterRegistry(answer);
return answer;
}
@@ -2018,6 +2026,14 @@ public class DefaultCamelContext extends
public Boolean isAutoStartup() {
return autoStartup != null && autoStartup;
}
+
+ public Boolean isLazyLoadTypeConverters() {
+ return lazyLoadTypeConverters != null && lazyLoadTypeConverters;
+ }
+
+ public void setLazyLoadTypeConverters(Boolean lazyLoadTypeConverters) {
+ this.lazyLoadTypeConverters = lazyLoadTypeConverters;
+ }
public ClassLoader getApplicationContextClassLoader() {
return applicationContextClassLoader;
Copied: camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/BaseTypeConverterRegistry.java (from r1024527, camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/DefaultTypeConverter.java)
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/BaseTypeConverterRegistry.java?p2=camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/BaseTypeConverterRegistry.java&p1=camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/DefaultTypeConverter.java&r1=1024527&r2=1024542&rev=1024542&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/DefaultTypeConverter.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/BaseTypeConverterRegistry.java Wed Oct 20 08:05:45 2010
@@ -45,22 +45,22 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
- * Default implementation of a type converter registry used for
+ * Base implementation of a type converter registry used for
* <a href="http://camel.apache.org/type-converter.html">type converters</a> in Camel.
*
* @version $Revision$
*/
-public class DefaultTypeConverter extends ServiceSupport implements TypeConverter, TypeConverterRegistry {
- private static final transient Log LOG = LogFactory.getLog(DefaultTypeConverter.class);
- private final Map<TypeMapping, TypeConverter> typeMappings = new ConcurrentHashMap<TypeMapping, TypeConverter>();
- private final Map<TypeMapping, TypeMapping> misses = new ConcurrentHashMap<TypeMapping, TypeMapping>();
- private final List<TypeConverterLoader> typeConverterLoaders = new ArrayList<TypeConverterLoader>();
- private final List<FallbackTypeConverter> fallbackConverters = new ArrayList<FallbackTypeConverter>();
- private Injector injector;
- private final FactoryFinder factoryFinder;
- private final PropertyEditorTypeConverter propertyEditorTypeConverter = new PropertyEditorTypeConverter();
+public abstract class BaseTypeConverterRegistry extends ServiceSupport implements TypeConverter, TypeConverterRegistry {
+ protected final transient Log log = LogFactory.getLog(getClass());
+ protected final Map<TypeMapping, TypeConverter> typeMappings = new ConcurrentHashMap<TypeMapping, TypeConverter>();
+ protected final Map<TypeMapping, TypeMapping> misses = new ConcurrentHashMap<TypeMapping, TypeMapping>();
+ protected final List<TypeConverterLoader> typeConverterLoaders = new ArrayList<TypeConverterLoader>();
+ protected final List<FallbackTypeConverter> fallbackConverters = new ArrayList<FallbackTypeConverter>();
+ protected Injector injector;
+ protected final FactoryFinder factoryFinder;
+ protected final PropertyEditorTypeConverter propertyEditorTypeConverter = new PropertyEditorTypeConverter();
- public DefaultTypeConverter(PackageScanClassResolver resolver, Injector injector, FactoryFinder factoryFinder) {
+ public BaseTypeConverterRegistry(PackageScanClassResolver resolver, Injector injector, FactoryFinder factoryFinder) {
this.injector = injector;
this.factoryFinder = factoryFinder;
this.typeConverterLoaders.add(new AnnotationTypeConverterLoader(resolver));
@@ -107,8 +107,8 @@ public class DefaultTypeConverter extend
}
// we cannot convert so return null
- if (LOG.isDebugEnabled()) {
- LOG.debug(NoTypeConversionAvailableException.createMessage(value, type)
+ if (log.isDebugEnabled()) {
+ log.debug(NoTypeConversionAvailableException.createMessage(value, type)
+ " Caused by: " + e.getMessage() + ". Will ignore this and continue.");
}
return null;
@@ -146,9 +146,9 @@ public class DefaultTypeConverter extend
}
@SuppressWarnings("unchecked")
- public Object doConvertTo(final Class type, final Exchange exchange, final Object value) {
- if (LOG.isTraceEnabled()) {
- LOG.trace("Converting " + (value == null ? "null" : value.getClass().getCanonicalName())
+ protected Object doConvertTo(final Class type, final Exchange exchange, final Object value) {
+ if (log.isTraceEnabled()) {
+ log.trace("Converting " + (value == null ? "null" : value.getClass().getCanonicalName())
+ " -> " + type.getCanonicalName() + " with value: " + value);
}
@@ -175,8 +175,8 @@ public class DefaultTypeConverter extend
// try to find a suitable type converter
TypeConverter converter = getOrFindTypeConverter(type, value);
if (converter != null) {
- if (LOG.isTraceEnabled()) {
- LOG.trace("Using converter: " + converter + " to convert " + key);
+ if (log.isTraceEnabled()) {
+ log.trace("Using converter: " + converter + " to convert " + key);
}
Object rc = converter.convertTo(type, exchange, value);
if (rc != null) {
@@ -197,16 +197,16 @@ public class DefaultTypeConverter extend
// if fallback can promote then let it be promoted to a first class type converter
if (fallback.isCanPromote()) {
// add it as a known type converter since we found a fallback that could do it
- if (LOG.isDebugEnabled()) {
- LOG.debug("Promoting fallback type converter as a known type converter to convert from: "
+ if (log.isDebugEnabled()) {
+ log.debug("Promoting fallback type converter as a known type converter to convert from: "
+ type.getCanonicalName() + " to: " + value.getClass().getCanonicalName()
+ " for the fallback converter: " + fallback.getFallbackTypeConverter());
}
addTypeConverter(type, value.getClass(), fallback.getFallbackTypeConverter());
}
- if (LOG.isTraceEnabled()) {
- LOG.trace("Fallback type converter " + fallback.getFallbackTypeConverter() + " converted type from: "
+ if (log.isTraceEnabled()) {
+ log.trace("Fallback type converter " + fallback.getFallbackTypeConverter() + " converted type from: "
+ type.getCanonicalName() + " to: " + value.getClass().getCanonicalName());
}
@@ -233,8 +233,8 @@ public class DefaultTypeConverter extend
}
public void addTypeConverter(Class<?> toType, Class<?> fromType, TypeConverter typeConverter) {
- if (LOG.isTraceEnabled()) {
- LOG.trace("Adding type converter: " + typeConverter);
+ if (log.isTraceEnabled()) {
+ log.trace("Adding type converter: " + typeConverter);
}
TypeMapping key = new TypeMapping(toType, fromType);
synchronized (typeMappings) {
@@ -243,7 +243,7 @@ public class DefaultTypeConverter extend
// as race conditions can lead to many threads trying to promote the same fallback converter
if (typeConverter != converter) {
if (converter != null) {
- LOG.warn("Overriding type converter from: " + converter + " to: " + typeConverter);
+ log.warn("Overriding type converter from: " + converter + " to: " + typeConverter);
}
typeMappings.put(key, typeConverter);
}
@@ -251,8 +251,8 @@ public class DefaultTypeConverter extend
}
public void addFallbackTypeConverter(TypeConverter typeConverter, boolean canPromote) {
- if (LOG.isTraceEnabled()) {
- LOG.trace("Adding fallback type converter: " + typeConverter + " which can promote: " + canPromote);
+ if (log.isTraceEnabled()) {
+ log.trace("Adding fallback type converter: " + typeConverter + " which can promote: " + canPromote);
}
// add in top of fallback as the toString() fallback will nearly always be able to convert
@@ -326,7 +326,7 @@ public class DefaultTypeConverter extend
return doLookup(toType, fromType, false);
}
- private TypeConverter doLookup(Class<?> toType, Class<?> fromType, boolean isSuper) {
+ protected TypeConverter doLookup(Class<?> toType, Class<?> fromType, boolean isSuper) {
if (fromType != null) {
// lets try if there is a direct match
@@ -389,7 +389,7 @@ public class DefaultTypeConverter extend
protected void loadTypeConverters() throws Exception {
StopWatch watch = new StopWatch();
- LOG.debug("Loading type converters ...");
+ log.debug("Loading type converters ...");
for (TypeConverterLoader typeConverterLoader : getTypeConverterLoaders()) {
typeConverterLoader.load(this);
}
@@ -400,11 +400,11 @@ public class DefaultTypeConverter extend
} catch (NoFactoryAvailableException e) {
// ignore its fine to have none
}
- LOG.debug("Loading type converters done");
+ log.debug("Loading type converters done");
// report how long time it took to load
- if (LOG.isInfoEnabled()) {
- LOG.info("Loaded " + typeMappings.size() + " type converters in " + TimeUtils.printDuration(watch.stop()));
+ if (log.isInfoEnabled()) {
+ log.info("Loaded " + typeMappings.size() + " type converters in " + TimeUtils.printDuration(watch.stop()));
}
}
@@ -418,7 +418,6 @@ public class DefaultTypeConverter extend
@Override
protected void doStart() throws Exception {
ServiceHelper.startService(propertyEditorTypeConverter);
- loadTypeConverters();
}
@Override
Propchange: camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/BaseTypeConverterRegistry.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/BaseTypeConverterRegistry.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Propchange: camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/BaseTypeConverterRegistry.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/DefaultTypeConverter.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/DefaultTypeConverter.java?rev=1024542&view=auto
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/DefaultTypeConverter.java (added)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/DefaultTypeConverter.java Wed Oct 20 08:05:45 2010
@@ -0,0 +1,44 @@
+/**
+ * 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.impl.converter;
+
+import org.apache.camel.spi.FactoryFinder;
+import org.apache.camel.spi.Injector;
+import org.apache.camel.spi.PackageScanClassResolver;
+
+/**
+ * Default implementation of a type converter registry used for
+ * <a href="http://camel.apache.org/type-converter.html">type converters</a> in Camel.
+ * <p/>
+ * This implementation will load type converters up-front on startup.
+ *
+ * @version $Revision$
+ */
+public class DefaultTypeConverter extends BaseTypeConverterRegistry {
+
+ public DefaultTypeConverter(PackageScanClassResolver resolver, Injector injector, FactoryFinder factoryFinder) {
+ super(resolver, injector, factoryFinder);
+ }
+
+ @Override
+ protected void doStart() throws Exception {
+ super.doStart();
+ // load type converters up front
+ loadTypeConverters();
+ }
+
+}
Added: camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/LazyLoadingTypeConverter.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/LazyLoadingTypeConverter.java?rev=1024542&view=auto
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/LazyLoadingTypeConverter.java (added)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/LazyLoadingTypeConverter.java Wed Oct 20 08:05:45 2010
@@ -0,0 +1,91 @@
+/**
+ * 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.impl.converter;
+
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.TypeConverter;
+import org.apache.camel.spi.FactoryFinder;
+import org.apache.camel.spi.Injector;
+import org.apache.camel.spi.PackageScanClassResolver;
+import org.apache.camel.util.ObjectHelper;
+
+/**
+ * Lazy implementation of a type converter registry used for
+ * <a href="http://camel.apache.org/type-converter.html">type converters</a> in Camel.
+ * <p/>
+ * This implementation will lazy load type converters on-demand.
+ *
+ * @version $Revision$
+ */
+public class LazyLoadingTypeConverter extends BaseTypeConverterRegistry {
+ private final AtomicBoolean loaded = new AtomicBoolean();
+
+ public LazyLoadingTypeConverter(PackageScanClassResolver resolver, Injector injector, FactoryFinder factoryFinder) {
+ super(resolver, injector, factoryFinder);
+ }
+
+ @Override
+ protected Object doConvertTo(final Class type, final Exchange exchange, final Object value) {
+ ensureLoaded();
+ return super.doConvertTo(type, exchange, value);
+ }
+
+ @Override
+ public TypeConverter getTypeConverter(Class<?> toType, Class<?> fromType) {
+ ensureLoaded();
+ return super.getTypeConverter(toType, fromType);
+ }
+
+ @Override
+ public Set<Class<?>> getFromClassMappings() {
+ ensureLoaded();
+ return super.getFromClassMappings();
+ }
+
+ @Override
+ public Map<Class<?>, TypeConverter> getToClassMappings(Class<?> fromClass) {
+ ensureLoaded();
+ return super.getToClassMappings(fromClass);
+ }
+
+ @Override
+ public Map<TypeMapping, TypeConverter> getTypeMappings() {
+ ensureLoaded();
+ return super.getTypeMappings();
+ }
+
+ @Override
+ protected TypeConverter doLookup(Class<?> toType, Class<?> fromType, boolean isSuper) {
+ ensureLoaded();
+ return super.doLookup(toType, fromType, isSuper);
+ }
+
+ private synchronized void ensureLoaded() {
+ if (loaded.compareAndSet(false, true)) {
+ try {
+ super.loadTypeConverters();
+ } catch (Exception e) {
+ throw ObjectHelper.wrapRuntimeCamelException(e);
+ }
+ }
+ }
+
+}
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/spi/TypeConverterAware.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/spi/TypeConverterAware.java?rev=1024542&r1=1024541&r2=1024542&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/spi/TypeConverterAware.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/spi/TypeConverterAware.java Wed Oct 20 08:05:45 2010
@@ -22,7 +22,7 @@ import org.apache.camel.TypeConverter;
* An interface for an object which is interested in being injected with the root {@link TypeConverter}
* such as for implementing a fallback type converter
*
- * @see org.apache.camel.impl.converter.DefaultTypeConverter#addFallbackTypeConverter(org.apache.camel.TypeConverter, boolean)
+ * @see TypeConverterRegistry
* @version $Revision$
*/
public interface TypeConverterAware {
Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/converter/JaxpTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/converter/JaxpTest.java?rev=1024542&r1=1024541&r2=1024542&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/converter/JaxpTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/converter/JaxpTest.java Wed Oct 20 08:05:45 2010
@@ -36,7 +36,6 @@ import org.apache.camel.util.ServiceHelp
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-
/**
* @version $Revision$
*/
Added: camel/trunk/camel-core/src/test/java/org/apache/camel/impl/DefaultCamelContextLazyLoadTypeConvertersTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/impl/DefaultCamelContextLazyLoadTypeConvertersTest.java?rev=1024542&view=auto
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/impl/DefaultCamelContextLazyLoadTypeConvertersTest.java (added)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/impl/DefaultCamelContextLazyLoadTypeConvertersTest.java Wed Oct 20 08:05:45 2010
@@ -0,0 +1,63 @@
+/**
+ * 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.impl;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.TestSupport;
+import org.apache.camel.TypeConverter;
+
+/**
+ * Tests the lazy loading property of the camel context. The default behavior is to
+ * load all of the type converters up front. When the lazy load property is enabled
+ * on the context, the loading will be deferred until the converters are accessed.
+ */
+public class DefaultCamelContextLazyLoadTypeConvertersTest extends TestSupport {
+
+ private CamelContext context = new DefaultCamelContext();
+
+ public void testLazyLoadDefault() throws Exception {
+ assertFalse("Default setting should have been true", context.isLazyLoadTypeConverters());
+ }
+
+ public void testConvertLoadUpFront() throws Exception {
+ context.setLazyLoadTypeConverters(false);
+ doConvertTest();
+ }
+
+ public void testConvertLazyLoad() throws Exception {
+ context.setLazyLoadTypeConverters(true);
+ doConvertTest();
+ }
+
+ private void doConvertTest() throws Exception {
+ context.start();
+ convert();
+ context.stop();
+ convert();
+ }
+
+ private void convert() throws Exception {
+ TypeConverter converter = context.getTypeConverter();
+ Integer value = converter.convertTo(Integer.class, "1000");
+ assertNotNull(value);
+ assertEquals("Converted to Integer", new Integer(1000), value);
+
+ String text = converter.convertTo(String.class, value);
+ assertEquals("Converted to String", "1000", text);
+ }
+
+}
Modified: camel/trunk/camel-core/src/test/resources/log4j.properties
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/resources/log4j.properties?rev=1024542&r1=1024541&r2=1024542&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/resources/log4j.properties (original)
+++ camel/trunk/camel-core/src/test/resources/log4j.properties Wed Oct 20 08:05:45 2010
@@ -20,7 +20,7 @@
#
log4j.rootLogger=INFO, file
-log4j.logger.org.apache.camel.impl.converter=WARN
+#log4j.logger.org.apache.camel.impl.converter=WARN
log4j.logger.org.apache.camel.management=WARN
log4j.logger.org.apache.camel.impl.DefaultPackageScanClassResolver=WARN
#log4j.logger.org.apache.camel.impl.converter.DefaultTypeConverter=TRACE
Modified: camel/trunk/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelContextFactoryBean.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelContextFactoryBean.java?rev=1024542&r1=1024541&r2=1024542&view=diff
==============================================================================
--- camel/trunk/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelContextFactoryBean.java (original)
+++ camel/trunk/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelContextFactoryBean.java Wed Oct 20 08:05:45 2010
@@ -83,6 +83,8 @@ public class CamelContextFactoryBean ext
private ShutdownRoute shutdownRoute;
@XmlAttribute(required = false)
private ShutdownRunningTask shutdownRunningTask;
+ @XmlAttribute(required = false)
+ private Boolean lazyLoadTypeConverters = Boolean.FALSE;
@XmlElement(name = "properties", required = false)
private PropertiesDefinition properties;
@XmlElement(name = "propertyPlaceholder", type = CamelPropertyPlaceholderDefinition.class, required = false)
@@ -212,6 +214,14 @@ public class CamelContextFactoryBean ext
this.autoStartup = autoStartup;
}
+ public Boolean getLazyLoadTypeConverters() {
+ return lazyLoadTypeConverters;
+ }
+
+ public void setLazyLoadTypeConverters(Boolean lazyLoadTypeConverters) {
+ this.lazyLoadTypeConverters = lazyLoadTypeConverters;
+ }
+
public ShutdownRoute getShutdownRoute() {
return shutdownRoute;
}
Modified: camel/trunk/components/camel-blueprint/src/test/resources/test.xml
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-blueprint/src/test/resources/test.xml?rev=1024542&r1=1024541&r2=1024542&view=diff
==============================================================================
--- camel/trunk/components/camel-blueprint/src/test/resources/test.xml (original)
+++ camel/trunk/components/camel-blueprint/src/test/resources/test.xml Wed Oct 20 08:05:45 2010
@@ -21,8 +21,8 @@
<camelContext xmlns="http://camel.apache.org/schema/blueprint">
<route>
- <from uri="timer:test" />
- <to uri="log:test" />
+ <from uri="timer:test"/>
+ <to uri="log:test"/>
</route>
</camelContext>
Modified: camel/trunk/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java?rev=1024542&r1=1024541&r2=1024542&view=diff
==============================================================================
--- camel/trunk/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java (original)
+++ camel/trunk/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java Wed Oct 20 08:05:45 2010
@@ -131,7 +131,11 @@ public abstract class AbstractCamelConte
getContext().setProperties(getProperties().asMap());
}
- // set the resolvers first
+ // set the type converter mode first
+ if (getLazyLoadTypeConverters() != null) {
+ getContext().setLazyLoadTypeConverters(getLazyLoadTypeConverters());
+ }
+
PackageScanClassResolver packageResolver = getBeanForType(PackageScanClassResolver.class);
if (packageResolver != null) {
LOG.info("Using custom PackageScanClassResolver: " + packageResolver);
@@ -564,6 +568,8 @@ public abstract class AbstractCamelConte
public abstract String getAutoStartup();
+ public abstract Boolean getLazyLoadTypeConverters();
+
public abstract CamelJMXAgentDefinition getCamelJMXAgent();
public abstract List<RouteBuilderDefinition> getBuilderRefs();
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=1024542&r1=1024541&r2=1024542&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 Wed Oct 20 08:05:45 2010
@@ -100,6 +100,8 @@ public class CamelContextFactoryBean ext
private ShutdownRoute shutdownRoute;
@XmlAttribute(required = false)
private ShutdownRunningTask shutdownRunningTask;
+ @XmlAttribute(required = false)
+ private Boolean lazyLoadTypeConverters = Boolean.FALSE;
@XmlElement(name = "properties", required = false)
private PropertiesDefinition properties;
@XmlElement(name = "propertyPlaceholder", type = CamelPropertyPlaceholderDefinition.class, required = false)
@@ -442,6 +444,14 @@ public class CamelContextFactoryBean ext
this.autoStartup = autoStartup;
}
+ public Boolean getLazyLoadTypeConverters() {
+ return lazyLoadTypeConverters;
+ }
+
+ public void setLazyLoadTypeConverters(Boolean lazyLoadTypeConverters) {
+ this.lazyLoadTypeConverters = lazyLoadTypeConverters;
+ }
+
public CamelJMXAgentDefinition getCamelJMXAgent() {
return camelJMXAgent;
}
Added: camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/CamelContextLazyLoadTypeConvertersTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/CamelContextLazyLoadTypeConvertersTest.java?rev=1024542&view=auto
==============================================================================
--- camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/CamelContextLazyLoadTypeConvertersTest.java (added)
+++ camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/CamelContextLazyLoadTypeConvertersTest.java Wed Oct 20 08:05:45 2010
@@ -0,0 +1,48 @@
+/**
+ * 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.spring;
+
+import org.apache.camel.TypeConverter;
+import org.springframework.context.support.AbstractXmlApplicationContext;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+/**
+ * @version $Revision$
+ */
+public class CamelContextLazyLoadTypeConvertersTest extends SpringTestSupport {
+
+ @Override
+ protected int getExpectedRouteCount() {
+ return 0;
+ }
+
+ @Override
+ protected AbstractXmlApplicationContext createApplicationContext() {
+ return new ClassPathXmlApplicationContext("org/apache/camel/spring/CamelContextLazyLoadTypeConvertersTest.xml");
+ }
+
+ public void testConvert() throws Exception {
+ TypeConverter converter = context.getTypeConverter();
+ Integer value = converter.convertTo(Integer.class, "1000");
+ assertNotNull(value);
+ assertEquals("Converted to Integer", new Integer(1000), value);
+
+ String text = converter.convertTo(String.class, value);
+ assertEquals("Converted to String", "1000", text);
+ }
+
+}
Modified: camel/trunk/components/camel-spring/src/test/resources/log4j.properties
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/resources/log4j.properties?rev=1024542&r1=1024541&r2=1024542&view=diff
==============================================================================
--- camel/trunk/components/camel-spring/src/test/resources/log4j.properties (original)
+++ camel/trunk/components/camel-spring/src/test/resources/log4j.properties Wed Oct 20 08:05:45 2010
@@ -21,7 +21,7 @@
log4j.rootLogger=INFO, file
log4j.logger.org.springframework=WARN
-log4j.logger.org.apache.camel.impl.converter=WARN
+#log4j.logger.org.apache.camel.impl.converter=WARN
log4j.logger.org.apache.camel.management=WARN
log4j.logger.org.apache.camel.impl.DefaultPackageScanClassResolver=WARN
Copied: camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/CamelContextLazyLoadTypeConvertersTest.xml (from r1024527, camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/camelContextAwareBean.xml)
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/CamelContextLazyLoadTypeConvertersTest.xml?p2=camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/CamelContextLazyLoadTypeConvertersTest.xml&p1=camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/camelContextAwareBean.xml&r1=1024527&r2=1024542&rev=1024542&view=diff
==============================================================================
--- camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/camelContextAwareBean.xml (original)
+++ camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/CamelContextLazyLoadTypeConvertersTest.xml Wed Oct 20 08:05:45 2010
@@ -23,20 +23,9 @@
http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
">
- <camelContext id="camel1" xmlns="http://camel.apache.org/schema/spring">
- <properties>
- <property key="org.apache.camel.test" value="this is a test first"/>
- </properties>
- <template id="producer1"/>
- </camelContext>
-
- <camel:camelContext id="camel2">
- <camel:template id="producer2"/>
- <camel:consumerTemplate id="consumer"/>
- </camel:camelContext>
-
- <bean id="bean1" class="org.apache.camel.spring.CamelContextAwareBean">
- <property name="camelContext" ref="camel1" />
- </bean>
+ <!-- lazy load type converters -->
+ <camelContext lazyLoadTypeConverters="true" xmlns="http://camel.apache.org/schema/spring">
+ <!-- noop -->
+ </camelContext>
</beans>