You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by lu...@apache.org on 2014/08/21 09:45:23 UTC

[03/12] git commit: Removed unused code, comments and variables. Also, added delegatedClassLoaderMap to handle delegatedClassLoader as per Tomcat.

Removed unused code, comments and variables. Also, added delegatedClassLoaderMap to handle delegatedClassLoader as per Tomcat.


Project: http://git-wip-us.apache.org/repos/asf/struts/repo
Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/c826d97c
Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/c826d97c
Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/c826d97c

Branch: refs/heads/develop
Commit: c826d97cafafc9ce54e15745b23cd211e233c2fa
Parents: 4586d1f
Author: Luigi Fugaro <l....@gmail.com>
Authored: Tue Jul 29 18:44:50 2014 +0200
Committer: Luigi Fugaro <l....@gmail.com>
Committed: Tue Jul 29 18:44:50 2014 +0200

----------------------------------------------------------------------
 .../xwork2/util/LocalizedTextUtil.java          | 45 +++++++++-----------
 1 file changed, 21 insertions(+), 24 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/struts/blob/c826d97c/xwork-core/src/main/java/com/opensymphony/xwork2/util/LocalizedTextUtil.java
----------------------------------------------------------------------
diff --git a/xwork-core/src/main/java/com/opensymphony/xwork2/util/LocalizedTextUtil.java b/xwork-core/src/main/java/com/opensymphony/xwork2/util/LocalizedTextUtil.java
index dae9925..dbaef27 100644
--- a/xwork-core/src/main/java/com/opensymphony/xwork2/util/LocalizedTextUtil.java
+++ b/xwork-core/src/main/java/com/opensymphony/xwork2/util/LocalizedTextUtil.java
@@ -87,14 +87,12 @@ import java.util.concurrent.ConcurrentMap;
 public class LocalizedTextUtil {
 
     private static final ConcurrentMap<Integer, List<String>> classLoaderMap = new ConcurrentHashMap<Integer, List<String>>();
-//    private static final List<String> DEFAULT_RESOURCE_BUNDLES = new CopyOnWriteArrayList<String>();
     private static final Logger LOG = LoggerFactory.getLogger(LocalizedTextUtil.class);
     private static boolean reloadBundles = false;
-    private static final ResourceBundle EMPTY_BUNDLE = new EmptyResourceBundle();
     private static final ConcurrentMap<String, ResourceBundle> bundlesMap = new ConcurrentHashMap<String, ResourceBundle>();
     private static final ConcurrentMap<MessageFormatKey, MessageFormat> messageFormats = new ConcurrentHashMap<MessageFormatKey, MessageFormat>();
+    private static final ConcurrentMap<Integer, ClassLoader> delegatedClassLoaderMap = new ConcurrentHashMap<Integer, ClassLoader>();
 
-    private static ClassLoader delegatedClassLoader;
     private static final String RELOADED = "com.opensymphony.xwork2.util.LocalizedTextUtil.reloaded";
     private static final String XWORK_MESSAGES_BUNDLE = "com/opensymphony/xwork2/xwork-messages";
 
@@ -107,9 +105,7 @@ public class LocalizedTextUtil {
      * Clears the internal list of resource bundles.
      */
     public static void clearDefaultResourceBundles() {
-//        DEFAULT_RESOURCE_BUNDLES.clear();
-//        DEFAULT_RESOURCE_BUNDLES.add(XWORK_MESSAGES_BUNDLE);
-        ClassLoader ccl = Thread.currentThread().getContextClassLoader();
+        ClassLoader ccl = getThreadCurrentThreadGetContextClassLoader();
         List<String> bundles = new ArrayList<String>();
         classLoaderMap.put(ccl.hashCode(), bundles);
         bundles.add(0, XWORK_MESSAGES_BUNDLE);
@@ -133,8 +129,9 @@ public class LocalizedTextUtil {
      */
     public static void addDefaultResourceBundle(String resourceBundleName) {
         //make sure this doesn't get added more than once
+        ClassLoader ccl = null;
         synchronized (classLoaderMap) {
-            ClassLoader ccl = Thread.currentThread().getContextClassLoader();
+            ccl = getThreadCurrentThreadGetContextClassLoader();
             List<String> bundles = classLoaderMap.get(ccl.hashCode());
             if (bundles == null) {
                 bundles = new ArrayList<String>();
@@ -146,7 +143,7 @@ public class LocalizedTextUtil {
         }
 
         if (LOG.isDebugEnabled()) {
-            //LOG.debug("Added default resource bundle '" + resourceBundleName + "' to default resource bundles = " + DEFAULT_RESOURCE_BUNDLES);
+            LOG.debug("Added default resource bundle '" + resourceBundleName + "' to default resource bundles for the following classloader " + ccl.toString());
         }
     }
 
@@ -201,7 +198,7 @@ public class LocalizedTextUtil {
      * @return a localized message based on the specified key, or null if no localized message can be found for it
      */
     public static String findDefaultText(String aTextName, Locale locale) {
-        List<String> localList = classLoaderMap.get(Thread.currentThread().getContextClassLoader().hashCode());
+        List<String> localList = classLoaderMap.get(getThreadCurrentThreadGetContextClassLoader().hashCode());
 
         for (String bundleName : localList) {
             ResourceBundle bundle = findResourceBundle(bundleName, locale);
@@ -240,8 +237,6 @@ public class LocalizedTextUtil {
      * Finds the given resorce bundle by it's name.
      * <p/>
      * Will use <code>Thread.currentThread().getContextClassLoader()</code> as the classloader.
-     * If {@link #delegatedClassLoader} is defined and the bundle cannot be found the current
-     * classloader it will delegate to that.
      *
      * @param aBundleName the name of the bundle (usually it's FQN classname).
      * @param locale      the locale.
@@ -250,34 +245,32 @@ public class LocalizedTextUtil {
     public static ResourceBundle findResourceBundle(String aBundleName, Locale locale) {
         String key = createMissesKey(aBundleName, locale);
 
-        ResourceBundle bundle;
+        ResourceBundle bundle = null;
 
+        ClassLoader classLoader = getThreadCurrentThreadGetContextClassLoader();
         try {
+            key = classLoader.hashCode()+key;
+
             if (!bundlesMap.containsKey(key)) {
-                bundle = ResourceBundle.getBundle(aBundleName, locale, Thread.currentThread().getContextClassLoader());
+                bundle = ResourceBundle.getBundle(aBundleName, locale, classLoader);
                 bundlesMap.putIfAbsent(key, bundle);
             } else {
                 bundle = bundlesMap.get(key);
             }
         } catch (MissingResourceException ex) {
-            if (delegatedClassLoader != null) {
+            if (delegatedClassLoaderMap.containsKey(classLoader.hashCode())) {
                 try {
                     if (!bundlesMap.containsKey(key)) {
-                        bundle = ResourceBundle.getBundle(aBundleName, locale, delegatedClassLoader);
+                        bundle = ResourceBundle.getBundle(aBundleName, locale, delegatedClassLoaderMap.get(classLoader.hashCode()));
                         bundlesMap.putIfAbsent(key, bundle);
                     } else {
                         bundle = bundlesMap.get(key);
                     }
                 } catch (MissingResourceException e) {
-                    bundle = EMPTY_BUNDLE;
-//                    bundlesMap.putIfAbsent(key, bundle);
                 }
-            } else {
-                bundle = EMPTY_BUNDLE;
-//                bundlesMap.putIfAbsent(key, bundle);
             }
         }
-        return (bundle == EMPTY_BUNDLE) ? null : bundle;
+        return bundle;
     }
 
     /**
@@ -287,7 +280,7 @@ public class LocalizedTextUtil {
      */
     public static void setDelegatedClassLoader(final ClassLoader classLoader) {
         synchronized (bundlesMap) {
-            delegatedClassLoader = classLoader;
+            delegatedClassLoaderMap.put(getThreadCurrentThreadGetContextClassLoader().hashCode(), classLoader);
         }
     }
 
@@ -297,7 +290,7 @@ public class LocalizedTextUtil {
      * @param bundleName
      */
     public static void clearBundle(final String bundleName) {
-        bundlesMap.remove(bundleName);
+        bundlesMap.remove(getThreadCurrentThreadGetContextClassLoader().hashCode() + bundleName);
     }
 
 
@@ -819,7 +812,7 @@ public class LocalizedTextUtil {
 
 
     private static void clearTomcatCache() {
-        ClassLoader loader = Thread.currentThread().getContextClassLoader();
+        ClassLoader loader = getThreadCurrentThreadGetContextClassLoader();
         // no need for compilation here.
         Class cl = loader.getClass();
 
@@ -896,6 +889,10 @@ public class LocalizedTextUtil {
         }
     }
 
+    private static ClassLoader getThreadCurrentThreadGetContextClassLoader() {
+        return Thread.currentThread().getContextClassLoader();
+    }
+
     static class GetDefaultMessageReturnArg {
         String message;
         boolean foundInBundle;