Author: joerg Date: Sat Jan 29 11:58:56 2005 New Revision: 149068 URL: http://svn.apache.org/viewcvs?view=rev&rev=149068 Log: Fixed caching of i18n bundles when using multiple locations. (bug 33097) Modified: cocoon/trunk/src/java/org/apache/cocoon/i18n/XMLResourceBundleFactory.java cocoon/trunk/status.xml
Modified: cocoon/trunk/src/java/org/apache/cocoon/i18n/XMLResourceBundleFactory.java Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/java/org/apache/cocoon/i18n/XMLResourceBundleFactory.java?view=diff&rev=149068&p1=cocoon/trunk/src/java/org/apache/cocoon/i18n/XMLResourceBundleFactory.java&r1=149067&p2=cocoon/trunk/src/java/org/apache/cocoon/i18n/XMLResourceBundleFactory.java&r2=149068 ============================================================================== --- cocoon/trunk/src/java/org/apache/cocoon/i18n/XMLResourceBundleFactory.java (original) +++ cocoon/trunk/src/java/org/apache/cocoon/i18n/XMLResourceBundleFactory.java Sat Jan 29 11:58:56 2005 @@ -248,11 +248,11 @@ getLogger().debug("selecting from: " + name + ", locale: " + locale + ", directory: " + directories[index]); } - String fileName = getFileName(directories[index], name, locale); - XMLResourceBundle bundle = selectCached(fileName); + String cacheKey = getCacheKey(directories, index, name, locale); + XMLResourceBundle bundle = selectCached(cacheKey); if (bundle == null) { synchronized (this) { - bundle = selectCached(fileName); + bundle = selectCached(cacheKey); if (bundle == null) { boolean localeAvailable = (locale != null && !locale.getLanguage().equals("")); index++; @@ -265,9 +265,10 @@ // there are directories left to search for with this locale parentBundle = _select(directories, index, name, locale); } - if (!isNotFoundBundle(fileName)) { + if (!isNotFoundBundle(cacheKey)) { + String fileName = getFileName(directories[index - 1], name, locale); bundle = _loadBundle(name, fileName, locale, parentBundle); - updateCache(fileName, bundle); + updateCache(cacheKey, bundle); } if (bundle == null) { return parentBundle; @@ -339,6 +340,15 @@ newloc = new Locale(locale.getLanguage(), locale.getCountry(), ""); } return newloc; + } + + protected String getCacheKey(String[] directories, int index, String name, Locale locale) { + StringBuffer cacheKey = new StringBuffer(); + for (; index < directories.length; index++) { + cacheKey.append(getFileName(directories[index], name, locale)); + cacheKey.append(":"); + } + return cacheKey.toString(); } /** Modified: cocoon/trunk/status.xml Url: http://svn.apache.org/viewcvs/cocoon/trunk/status.xml?view=diff&rev=149068&p1=cocoon/trunk/status.xml&r1=149067&p2=cocoon/trunk/status.xml&r2=149068 ============================================================================== --- cocoon/trunk/status.xml (original) +++ cocoon/trunk/status.xml Sat Jan 29 11:58:56 2005 @@ -202,6 +202,9 @@ <changes> <release version="@version@" date="@date@"> + <action dev="JH" type="fix" fixes-bug="33097"> + Fixed caching of i18n bundles when using multiple locations. + </action> <action dev="SW" type="add"> Add an experimental lazy loading in the service manager that dramatically speeds up Cocoon init time (approx 4 times faster). To use it, set JAVA_OPTIONS="-Dorg.apache.cocoon.core.LazyMode=true" prior
