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 2012/04/16 09:53:23 UTC
svn commit: r1326526 -
/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/BaseTypeConverterRegistry.java
Author: davsclaus
Date: Mon Apr 16 07:53:22 2012
New Revision: 1326526
URL: http://svn.apache.org/viewvc?rev=1326526&view=rev
Log:
CAMEL-5175: Added utilization stats to type converter registry which is also accessible from JMX.
Modified:
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/BaseTypeConverterRegistry.java
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/BaseTypeConverterRegistry.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/BaseTypeConverterRegistry.java?rev=1326526&r1=1326525&r2=1326526&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/BaseTypeConverterRegistry.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/BaseTypeConverterRegistry.java Mon Apr 16 07:53:22 2012
@@ -41,6 +41,7 @@ import org.apache.camel.spi.TypeConverte
import org.apache.camel.spi.TypeConverterLoader;
import org.apache.camel.spi.TypeConverterRegistry;
import org.apache.camel.support.ServiceSupport;
+import org.apache.camel.util.LRUSoftCache;
import org.apache.camel.util.ObjectHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -54,7 +55,8 @@ import org.slf4j.LoggerFactory;
public abstract class BaseTypeConverterRegistry extends ServiceSupport implements TypeConverter, TypeConverterRegistry {
protected final transient Logger log = LoggerFactory.getLogger(getClass());
protected final ConcurrentMap<TypeMapping, TypeConverter> typeMappings = new ConcurrentHashMap<TypeMapping, TypeConverter>();
- protected final ConcurrentMap<TypeMapping, TypeMapping> misses = new ConcurrentHashMap<TypeMapping, TypeMapping>();
+ // for misses use a soft reference cache map, as the classes may be un-deployed at runtime
+ protected final LRUSoftCache<TypeMapping, TypeMapping> misses = new LRUSoftCache<TypeMapping, TypeMapping>(1000);
protected final List<TypeConverterLoader> typeConverterLoaders = new ArrayList<TypeConverterLoader>();
protected final List<FallbackTypeConverter> fallbackConverters = new ArrayList<FallbackTypeConverter>();
protected final PackageScanClassResolver resolver;
@@ -178,14 +180,18 @@ public abstract class BaseTypeConverterR
Object answer;
try {
+ attemptCounter.incrementAndGet();
answer = doConvertTo(type, exchange, value, true);
} catch (Exception e) {
+ failedCounter.incrementAndGet();
return null;
}
if (answer == Void.TYPE) {
+ missCounter.incrementAndGet();
// Could not find suitable conversion
return null;
} else {
+ hitCounter.incrementAndGet();
return (T) answer;
}
}
@@ -533,10 +539,10 @@ public abstract class BaseTypeConverterR
* Represents a mapping from one type (which can be null) to another
*/
protected static class TypeMapping {
- Class<?> toType;
- Class<?> fromType;
+ private final Class<?> toType;
+ private final Class<?> fromType;
- public TypeMapping(Class<?> toType, Class<?> fromType) {
+ TypeMapping(Class<?> toType, Class<?> fromType) {
this.toType = toType;
this.fromType = fromType;
}
@@ -582,8 +588,8 @@ public abstract class BaseTypeConverterR
* Represents a fallback type converter
*/
protected static class FallbackTypeConverter {
- private boolean canPromote;
- private TypeConverter fallbackTypeConverter;
+ private final boolean canPromote;
+ private final TypeConverter fallbackTypeConverter;
FallbackTypeConverter(TypeConverter fallbackTypeConverter, boolean canPromote) {
this.canPromote = canPromote;