You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by js...@apache.org on 2007/03/29 18:25:43 UTC

svn commit: r523758 - in /activemq/camel/trunk/camel-core/src: main/java/org/apache/camel/impl/ main/java/org/apache/camel/impl/converter/ main/java/org/apache/camel/spi/ main/java/org/apache/camel/util/ test/ide-resources/

Author: jstrachan
Date: Thu Mar 29 09:25:35 2007
New Revision: 523758

URL: http://svn.apache.org/viewvc?view=rev&rev=523758
Log:
reuse a converter instance across the different conversion methods. Also tidied up the logging

Added:
    activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/CachingInjector.java   (with props)
    activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/spi/
    activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/spi/Provider.java   (with props)
Modified:
    activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/AnnotationTypeConverterLoader.java
    activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/InstanceMethodTypeConverter.java
    activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/ResolverUtil.java
    activemq/camel/trunk/camel-core/src/test/ide-resources/log4j.properties

Added: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/CachingInjector.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/CachingInjector.java?view=auto&rev=523758
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/CachingInjector.java (added)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/CachingInjector.java Thu Mar 29 09:25:35 2007
@@ -0,0 +1,47 @@
+/**
+ *
+ * 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.impl.converter.Injector;
+import org.apache.camel.impl.converter.TypeConverterRegistry;
+
+/**
+ * A caching proxy so that a single 
+ * @version $Revision$
+ */
+public class CachingInjector<T> {
+    private final TypeConverterRegistry repository;
+    private final Class<T> type;
+    private T instance;
+
+    public CachingInjector(TypeConverterRegistry repository, Class<T> type) {
+        this.repository = repository;
+        this.type = type;
+    }
+
+    public synchronized T newInstance() {
+        if (instance == null) {
+            instance = createInstance(type);
+        }
+        return instance;
+    }
+
+    protected T createInstance(Class<T> type) {
+        return (T) repository.getInjector().newInstance(type);
+    }
+}

Propchange: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/CachingInjector.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/CachingInjector.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/CachingInjector.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/AnnotationTypeConverterLoader.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/AnnotationTypeConverterLoader.java?view=diff&rev=523758&r1=523757&r2=523758
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/AnnotationTypeConverterLoader.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/AnnotationTypeConverterLoader.java Thu Mar 29 09:25:35 2007
@@ -18,6 +18,7 @@
 package org.apache.camel.impl.converter;
 
 import org.apache.camel.Converter;
+import org.apache.camel.impl.CachingInjector;
 import org.apache.camel.util.ResolverUtil;
 import org.apache.camel.util.ObjectHelper;
 import org.apache.commons.logging.Log;
@@ -121,6 +122,8 @@
         }
         visitedClasses.add(type);
         Method[] methods = type.getDeclaredMethods();
+        CachingInjector injector = null;
+
         for (Method method : methods) {
             Converter annotation = method.getAnnotation(Converter.class);
             if (annotation != null) {
@@ -147,7 +150,10 @@
                                 registry.addTypeConverter(fromType, toType, new StaticMethodTypeConverter(method));
                             }
                             else {
-                                registry.addTypeConverter(fromType, toType, new InstanceMethodTypeConverter(registry, type, method));
+                                if (injector == null) {
+                                    injector = new CachingInjector(registry, type);
+                                }
+                                registry.addTypeConverter(fromType, toType, new InstanceMethodTypeConverter(injector, method));
                             }
                         }
                     }

Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/InstanceMethodTypeConverter.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/InstanceMethodTypeConverter.java?view=diff&rev=523758&r1=523757&r2=523758
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/InstanceMethodTypeConverter.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/InstanceMethodTypeConverter.java Thu Mar 29 09:25:35 2007
@@ -17,11 +17,12 @@
  */
 package org.apache.camel.impl.converter;
 
-import org.apache.camel.TypeConverter;
 import org.apache.camel.RuntimeCamelException;
+import org.apache.camel.TypeConverter;
+import org.apache.camel.impl.CachingInjector;
 
-import java.lang.reflect.Method;
 import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
 
 /**
  * A {@link TypeConverter} implementation which instantiates an object
@@ -30,30 +31,23 @@
  * @version $Revision$
  */
 public class InstanceMethodTypeConverter implements TypeConverter {
-    private Object instance;
-    private final TypeConverterRegistry repository;
-    private final Class type;
+    private final CachingInjector injector;
     private final Method method;
 
-    public InstanceMethodTypeConverter(TypeConverterRegistry repository, Class type, Method method) {
-        this.repository = repository;
-        this.type = type;
+    public InstanceMethodTypeConverter(CachingInjector injector, Method method) {
+        this.injector = injector;
         this.method = method;
     }
 
-
     @Override
     public String toString() {
         return "InstanceMethodTypeConverter: " + method;
     }
 
-
     public synchronized <T> T convertTo(Class<T> type, Object value) {
+        Object instance = injector.newInstance();
         if (instance == null) {
-            instance = createInstance();
-            if (instance == null) {
-                throw new RuntimeCamelException("Could not instantiate aninstance of: " + type.getName());
-            }
+            throw new RuntimeCamelException("Could not instantiate aninstance of: " + type.getName());
         }
         try {
             return (T) method.invoke(instance, value);
@@ -64,9 +58,5 @@
         catch (InvocationTargetException e) {
             throw new RuntimeCamelException(e.getCause());
         }
-    }
-
-    protected Object createInstance() {
-        return repository.getInjector().newInstance(type);
     }
 }

Added: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/spi/Provider.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/spi/Provider.java?view=auto&rev=523758
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/spi/Provider.java (added)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/spi/Provider.java Thu Mar 29 09:25:35 2007
@@ -0,0 +1,25 @@
+/**
+ *
+ * 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.spi;
+
+/**
+ * Represents a factory or po
+ * @version $Revision$
+ */
+public interface Provider<T> {
+}

Propchange: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/spi/Provider.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/spi/Provider.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/spi/Provider.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/ResolverUtil.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/ResolverUtil.java?view=diff&rev=523758&r1=523757&r2=523758
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/ResolverUtil.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/ResolverUtil.java Thu Mar 29 09:25:35 2007
@@ -209,7 +209,7 @@
             urls = loader.getResources(packageName);
         }
         catch (IOException ioe) {
-            ResolverUtil.log.warn("Could not read package: " + packageName, ioe);
+            log.warn("Could not read package: " + packageName, ioe);
             return;
         }
 
@@ -228,7 +228,7 @@
                     urlPath = urlPath.substring(0, urlPath.indexOf('!'));
                 }
 
-                ResolverUtil.log.info("Scanning for classes in [" + urlPath + "] matching criteria: " + test);
+                log.debug("Scanning for classes in [" + urlPath + "] matching criteria: " + test);
                 File file = new File(urlPath);
                 if ( file.isDirectory() ) {
                     loadImplementationsInDirectory(test, packageName, file);
@@ -238,7 +238,7 @@
                 }
             }
             catch (IOException ioe) {
-                ResolverUtil.log.warn("could not read entries", ioe);
+                log.warn("could not read entries", ioe);
             }
         }
     }
@@ -297,7 +297,7 @@
             }
         }
         catch (IOException ioe) {
-            ResolverUtil.log.error("Could not search jar file '" + jarfile + "' for classes matching criteria: " +
+            log.error("Could not search jar file '" + jarfile + "' for classes matching criteria: " +
                       test + "due to an IOException: " + ioe.getMessage());
         }
     }
@@ -313,7 +313,7 @@
         try {
             String externalName = fqn.substring(0, fqn.indexOf('.')).replace('/', '.');
             ClassLoader loader = getClassLoader();
-            ResolverUtil.log.trace("Checking to see if class " + externalName + " matches criteria [" + test+ "]");
+            log.trace("Checking to see if class " + externalName + " matches criteria [" + test+ "]");
 
             Class type = loader.loadClass(externalName);
             if (test.matches(type) ) {
@@ -321,7 +321,7 @@
             }
         }
         catch (Throwable t) {
-            ResolverUtil.log.warn("Could not examine class '"+ fqn + "' due to a " +
+            log.warn("Could not examine class '"+ fqn + "' due to a " +
                      t.getClass().getName()+ " with message: " + t.getMessage());
         }
     }

Modified: activemq/camel/trunk/camel-core/src/test/ide-resources/log4j.properties
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/test/ide-resources/log4j.properties?view=diff&rev=523758&r1=523757&r2=523758
==============================================================================
--- activemq/camel/trunk/camel-core/src/test/ide-resources/log4j.properties (original)
+++ activemq/camel/trunk/camel-core/src/test/ide-resources/log4j.properties Thu Mar 29 09:25:35 2007
@@ -20,8 +20,11 @@
 #
 log4j.rootLogger=DEBUG, out
 
-#log4j.logger.org.apache.activemq=DEBUG
 log4j.logger.org.apache.camel=DEBUG
+log4j.logger.org.apache.camel.impl.converter=INFO
+
+#log4j.logger.org.apache.activemq=DEBUG
+
 
 # CONSOLE appender not used by default
 log4j.appender.out=org.apache.log4j.ConsoleAppender