WW-4587 Adds logic to cache missing bundles
Conflicts:
core/src/main/java/com/opensymphony/xwork2/util/LocalizedTextUtil.java
Project: http://git-wip-us.apache.org/repos/asf/struts/repo
Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/6fb870d3
Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/6fb870d3
Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/6fb870d3
Branch: refs/heads/master
Commit: 6fb870d389d9b3c869ee7b2c36d947e944fba3a6
Parents: 5b25645
Author: Lukasz Lenart <[email protected]>
Authored: Tue Jan 26 10:59:47 2016 +0100
Committer: Lukasz Lenart <[email protected]>
Committed: Tue Jan 26 11:08:28 2016 +0100
----------------------------------------------------------------------
.../xwork2/util/LocalizedTextUtil.java | 26 +++++++++++++-------
1 file changed, 17 insertions(+), 9 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/struts/blob/6fb870d3/core/src/main/java/com/opensymphony/xwork2/util/LocalizedTextUtil.java
----------------------------------------------------------------------
diff --git
a/core/src/main/java/com/opensymphony/xwork2/util/LocalizedTextUtil.java
b/core/src/main/java/com/opensymphony/xwork2/util/LocalizedTextUtil.java
index fa5a178..7082736 100644
--- a/core/src/main/java/com/opensymphony/xwork2/util/LocalizedTextUtil.java
+++ b/core/src/main/java/com/opensymphony/xwork2/util/LocalizedTextUtil.java
@@ -98,6 +98,7 @@ public class LocalizedTextUtil {
private static final ConcurrentMap<String, ResourceBundle> bundlesMap =
new ConcurrentHashMap<>();
private static final ConcurrentMap<MessageFormatKey, MessageFormat>
messageFormats = new ConcurrentHashMap<>();
private static final ConcurrentMap<Integer, ClassLoader>
delegatedClassLoaderMap = new ConcurrentHashMap<>();
+ private static final Set<String> missingBundles =
Collections.synchronizedSet(new HashSet<String>());
private static final String RELOADED =
"com.opensymphony.xwork2.util.LocalizedTextUtil.reloaded";
private static final String XWORK_MESSAGES_BUNDLE =
"com/opensymphony/xwork2/xwork-messages";
@@ -261,30 +262,37 @@ public class LocalizedTextUtil {
* @return the bundle, <tt>null</tt> if not found.
*/
public static ResourceBundle findResourceBundle(String aBundleName, Locale
locale) {
-
- ResourceBundle bundle = null;
-
ClassLoader classLoader = getCurrentThreadContextClassLoader();
String key = createMissesKey(String.valueOf(classLoader.hashCode()),
aBundleName, locale);
+
+ if (missingBundles.contains(key)) {
+ return null;
+ }
+
+ ResourceBundle bundle = null;
try {
- if (!bundlesMap.containsKey(key)) {
+ if (bundlesMap.containsKey(key)) {
+ bundle = bundlesMap.get(key);
+ } else {
bundle = ResourceBundle.getBundle(aBundleName, locale,
classLoader);
bundlesMap.putIfAbsent(key, bundle);
- } else {
- bundle = bundlesMap.get(key);
}
} catch (MissingResourceException ex) {
if (delegatedClassLoaderMap.containsKey(classLoader.hashCode())) {
try {
- if (!bundlesMap.containsKey(key)) {
+ if (bundlesMap.containsKey(key)) {
+ bundle = bundlesMap.get(key);
+ } else {
bundle = ResourceBundle.getBundle(aBundleName, locale,
delegatedClassLoaderMap.get(classLoader.hashCode()));
bundlesMap.putIfAbsent(key, bundle);
- } else {
- bundle = bundlesMap.get(key);
}
} catch (MissingResourceException e) {
LOG.debug("Missing resource bundle [{}]!", aBundleName, e);
+ missingBundles.add(key);
}
+ } else {
+ LOG.debug("Missing resource bundle [{}]!", aBundleName);
+ missingBundles.add(key);
}
}
return bundle;