Author: mcucchiara
Date: Sat Jun 4 07:05:20 2011
New Revision: 1131338
URL: http://svn.apache.org/viewvc?rev=1131338&view=rev
Log:
WW-3637 - Auto reload of properties slowing down application
Modified:
struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/util/LocalizedTextUtil.java
Modified:
struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/util/LocalizedTextUtil.java
URL:
http://svn.apache.org/viewvc/struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/util/LocalizedTextUtil.java?rev=1131338&r1=1131337&r2=1131338&view=diff
==============================================================================
---
struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/util/LocalizedTextUtil.java
(original)
+++
struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/util/LocalizedTextUtil.java
Sat Jun 4 07:05:20 2011
@@ -22,19 +22,14 @@ import com.opensymphony.xwork2.conversio
import com.opensymphony.xwork2.util.logging.Logger;
import com.opensymphony.xwork2.util.logging.LoggerFactory;
import com.opensymphony.xwork2.util.reflection.ReflectionProviderFactory;
+import org.apache.commons.lang.ObjectUtils;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.text.MessageFormat;
-import java.util.Enumeration;
-import java.util.List;
-import java.util.Locale;
-import java.util.MissingResourceException;
-import java.util.ResourceBundle;
-import java.util.Set;
-import java.util.TreeSet;
+import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.CopyOnWriteArrayList;
@@ -94,6 +89,7 @@ public class LocalizedTextUtil {
private static final ConcurrentMap<MessageFormatKey, MessageFormat>
messageFormats = new ConcurrentHashMap<MessageFormatKey, MessageFormat>();
private static ClassLoader delegatedClassLoader;
+ private static final String RELOADED =
"com.opensymphony.xwork2.util.LocalizedTextUtil.reloaded";
static {
clearDefaultResourceBundles();
@@ -623,7 +619,7 @@ public class LocalizedTextUtil {
public static String findText(ResourceBundle bundle, String aTextName,
Locale locale, String defaultMessage, Object[] args,
ValueStack valueStack) {
try {
- reloadBundles();
+ reloadBundles(valueStack.getContext());
String message =
TextParseUtil.translateVariables(bundle.getString(aTextName), valueStack);
MessageFormat mf = buildMessageFormat(message, locale);
@@ -676,9 +672,7 @@ public class LocalizedTextUtil {
if (bundle == null) {
return null;
}
-
- reloadBundles();
-
+ reloadBundles(valueStack.getContext());
try {
String message =
TextParseUtil.translateVariables(bundle.getString(key), valueStack);
MessageFormat mf = buildMessageFormat(message, locale);
@@ -777,13 +771,30 @@ public class LocalizedTextUtil {
}
private static void reloadBundles() {
+ reloadBundles(ActionContext.getContext().getContextMap());
+ }
+
+ private static void reloadBundles(Map<String, Object> context) {
if (reloadBundles) {
try {
- bundlesMap.clear();
- clearMap(ResourceBundle.class, null, "cacheList");
- // now, for the true and utter hack, if we're running in
tomcat, clear
- // it's class loader resource cache as well.
- clearTomcatCache();
+ Boolean reloaded;
+ if (context != null) {
+ reloaded = (Boolean)
ObjectUtils.defaultIfNull(context.get(RELOADED), Boolean.FALSE);
+ }else {
+ reloaded = Boolean.FALSE;
+ }
+ if (!reloaded) {
+ bundlesMap.clear();
+ clearMap(ResourceBundle.class, null, "cacheList");
+ // now, for the true and utter hack, if we're running in
tomcat, clear
+ // it's class loader resource cache as well.
+ clearTomcatCache();
+ if(context!=null)
+ context.put(RELOADED, true);
+ if (LOG.isInfoEnabled()) {
+ LOG.debug("Resource bundles reloaded");
+ }
+ }
} catch (Exception e) {
LOG.error("Could not reload resource bundles", e);
}