You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by gp...@apache.org on 2011/05/25 21:35:20 UTC

svn commit: r1127647 - in /myfaces/extensions/cdi/trunk/core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl: config/PropertyFileResolver.java util/ConfiguredArtifactUtils.java

Author: gpetracek
Date: Wed May 25 19:35:19 2011
New Revision: 1127647

URL: http://svn.apache.org/viewvc?rev=1127647&view=rev
Log:
EXTCDI-185 added cache and cleanup

Modified:
    myfaces/extensions/cdi/trunk/core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/config/PropertyFileResolver.java
    myfaces/extensions/cdi/trunk/core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/util/ConfiguredArtifactUtils.java

Modified: myfaces/extensions/cdi/trunk/core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/config/PropertyFileResolver.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/config/PropertyFileResolver.java?rev=1127647&r1=1127646&r2=1127647&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/config/PropertyFileResolver.java (original)
+++ myfaces/extensions/cdi/trunk/core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/config/PropertyFileResolver.java Wed May 25 19:35:19 2011
@@ -28,9 +28,11 @@ import java.io.InputStream;
 import java.util.Collections;
 import java.util.List;
 import java.util.Locale;
+import java.util.Map;
 import java.util.MissingResourceException;
 import java.util.Properties;
 import java.util.ResourceBundle;
+import java.util.concurrent.ConcurrentHashMap;
 
 /**
  * @author Gerhard Petracek
@@ -43,6 +45,9 @@ public class PropertyFileResolver extend
 
     private static final String FILE_NAME = "myfaces-extcdi";
 
+    private static Map<ClassLoader, Map<String, String>> propertyCache =
+            new ConcurrentHashMap<ClassLoader, Map<String, String>>();
+
     /**
      * {@inheritDoc}
      */
@@ -62,85 +67,117 @@ public class PropertyFileResolver extend
             key = key.substring(0, key.length() - 1);
         }
 
-        String bundleName;
+        String configKey = key.substring(key.indexOf(".") + 1);
+        String configuredValue = null;
 
-        //TODO
-        if (key.contains("@") && key.lastIndexOf("@") < key.indexOf("."))
+        Map<String, String> cache = getPropertyCache();
+
+        configuredValue = cache.get(key);
+
+        if(configuredValue == null)
         {
-            bundleName = key.substring(0, key.indexOf("."));
-            bundleName = bundleName.replace("@", ".");
+            configuredValue = cache.get(configKey);
         }
-        else
+
+        if(configuredValue != null)
         {
-            bundleName = BASE_NAME + key.substring(0, key.indexOf("."));
+            add(configuredValue);
         }
+        else
+        {
 
-        ResourceBundle resourceBundle;
+            String bundleName;
 
-        try
-        {
-            try
+            //TODO
+            if (key.contains("@") && key.lastIndexOf("@") < key.indexOf("."))
             {
-                resourceBundle = ResourceBundle
-                        .getBundle(bundleName, Locale.getDefault(), ClassUtils.getClassLoader(null));
+                bundleName = key.substring(0, key.indexOf("."));
+                bundleName = bundleName.replace("@", ".");
             }
-            catch (MissingResourceException e)
+            else
             {
-                resourceBundle = null;
+                bundleName = BASE_NAME + key.substring(0, key.indexOf("."));
             }
 
-            if (resourceBundle == null)
+            ResourceBundle resourceBundle;
+
+            try
             {
                 try
                 {
-                    resourceBundle = ResourceBundle.getBundle(FILE_NAME);
+                    resourceBundle = ResourceBundle
+                            .getBundle(bundleName, Locale.getDefault(), ClassUtils.getClassLoader(null));
                 }
-                catch (MissingResourceException e2)
+                catch (MissingResourceException e)
                 {
                     resourceBundle = null;
                 }
-            }
 
-            String configKey = key.substring(key.indexOf(".") + 1);
-            String configuredValue = null;
-
-            if (resourceBundle != null)
-            {
-                try
+                if (resourceBundle == null)
                 {
-                    configuredValue = resourceBundle.getString(configKey);
-                    add(configuredValue);
+                    try
+                    {
+                        resourceBundle = ResourceBundle.getBundle(FILE_NAME);
+                    }
+                    catch (MissingResourceException e2)
+                    {
+                        resourceBundle = null;
+                    }
                 }
-                catch (MissingResourceException e)
+
+                if (resourceBundle != null)
                 {
-                    resourceBundle = null;
+                    try
+                    {
+                        configuredValue = resourceBundle.getString(configKey);
+                        add(configuredValue);
+                        cache.put(configKey, configuredValue);
+                    }
+                    catch (MissingResourceException e)
+                    {
+                        resourceBundle = null;
+                    }
                 }
-            }
 
-            if (resourceBundle == null)
-            {
-                Properties properties = getProperties("META-INF/" + FILE_NAME + ".properties");
+                if (resourceBundle == null)
+                {
+                    Properties properties = getProperties("META-INF/" + FILE_NAME + ".properties");
 
-                if (properties != null)
+                    if (properties != null)
+                    {
+                        configuredValue = properties.getProperty(configKey);
+                        add(configuredValue);
+                        cache.put(configKey, configuredValue);
+                    }
+                }
+
+                if (configuredValue == null)
                 {
-                    configuredValue = properties.getProperty(configKey);
-                    add(configuredValue);
+                    return Collections.emptyList();
                 }
             }
-
-            if (configuredValue == null)
+            catch (Exception e)
             {
                 return Collections.emptyList();
             }
         }
-        catch (Exception e)
-        {
-            return Collections.emptyList();
-        }
 
         return getConfiguredValues(descriptor.getTargetType());
     }
 
+    private static Map<String, String> getPropertyCache()
+    {
+        ClassLoader classLoader = ClassUtils.getClassLoader(null);
+        Map<String, String> cache = propertyCache.get(classLoader);
+
+        if(cache == null)
+        {
+            cache = new ConcurrentHashMap<String, String>();
+            propertyCache.put(classLoader, cache);
+        }
+        return cache;
+    }
+
     /**
      * Load properties from a configuration file with the given resourceName.
      *

Modified: myfaces/extensions/cdi/trunk/core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/util/ConfiguredArtifactUtils.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/util/ConfiguredArtifactUtils.java?rev=1127647&r1=1127646&r2=1127647&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/util/ConfiguredArtifactUtils.java (original)
+++ myfaces/extensions/cdi/trunk/core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/util/ConfiguredArtifactUtils.java Wed May 25 19:35:19 2011
@@ -122,34 +122,27 @@ public abstract class ConfiguredArtifact
 
         for(ConfiguredValueResolver configuredValueResolver : resolvers)
         {
-            if(configuredValueResolver.isActivated())
+            resolverResult = configuredValueResolver.resolveInstances(new ConfiguredValueDescriptor<String, T>()
             {
-                resolverResult = configuredValueResolver.resolveInstances(new ConfiguredValueDescriptor<String, T>()
+                /**
+                 * {@inheritDoc}
+                 */
+                public String getKey()
                 {
-                    /**
-                     * {@inheritDoc}
-                     */
-                    public String getKey()
-                    {
-                        return key;
-                    }
+                    return key;
+                }
 
-                    /**
-                     * {@inheritDoc}
-                     */
-                    public Class<T> getTargetType()
-                    {
-                        return targetType;
-                    }
-                });
-            }
-            else
-            {
-                resolverResult = null;
-            }
+                /**
+                 * {@inheritDoc}
+                 */
+                public Class<T> getTargetType()
+                {
+                    return targetType;
+                }
+            });
 
             Field defaultInjectionPoint;
-            if(resolverResult != null && !resolverResult.isEmpty())
+            if(resolverResult != null)
             {
                 for(T currentResult : resolverResult)
                 {
@@ -220,7 +213,10 @@ public abstract class ConfiguredArtifact
         //TODO cache the resolvers
         for(ConfiguredValueResolver currentResolver : configuredValueResolvers)
         {
-            resolvers.add(currentResolver);
+            if(currentResolver.isActivated())
+            {
+                resolvers.add(currentResolver);
+            }
         }
 
         Collections.sort(resolvers, comparator);