Class CmsResourceBundleLoader


  • public final class CmsResourceBundleLoader
    extends java.lang.Object
    Resource bundle loader for property based resource bundles from OpenCms that has a flushable cache.

    The main reason for implementing this is that the Java default resource bundle loading mechanism provided by ResourceBundle.getBundle(java.lang.String, java.util.Locale) uses a cache that can NOT be flushed by any standard means. This means for every simple change in a resource bundle, the Java VM (and the webapp container that runs OpenCms) must be restarted. This non-standard resource bundle loader avoids this by providing a flushable cache.

    In case the requested bundle can not be found, a fallback mechanism to ResourceBundle.getBundle(java.lang.String, java.util.Locale) is used to look up the resource bundle with the Java default resource bundle loading mechanism.

    Since:
    6.2.0
    See Also:
    ResourceBundle, PropertyResourceBundle, CmsPropertyResourceBundle
    • Method Summary

      All Methods Static Methods Concrete Methods 
      Modifier and Type Method Description
      static void addBundleToCache​(java.lang.String baseName, java.util.Locale locale, I_CmsResourceBundle bundle)
      Adds the specified resource bundle to the permanent cache.
      static void flushBundleCache()
      Flushes the complete resource bundle cache.
      static void flushBundleCache​(java.lang.String baseName, boolean flushPermanent)
      Flushes all variations for the provided bundle from the cache.
      static void flushPermanentCache​(java.lang.String baseName)
      Removes bundles with the given base name from the permanent cache.
      static java.util.ResourceBundle getBundle​(java.lang.String baseName, java.util.Locale locale)
      Get the appropriate ResourceBundle for the given locale.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Method Detail

      • addBundleToCache

        public static void addBundleToCache​(java.lang.String baseName,
                                            java.util.Locale locale,
                                            I_CmsResourceBundle bundle)
        Adds the specified resource bundle to the permanent cache.

        Parameters:
        baseName - the raw bundle name, without locale qualifiers
        locale - the locale
        bundle - the bundle to cache
      • flushBundleCache

        public static void flushBundleCache()
        Flushes the complete resource bundle cache.

      • flushBundleCache

        public static void flushBundleCache​(java.lang.String baseName,
                                            boolean flushPermanent)
        Flushes all variations for the provided bundle from the cache.

        Parameters:
        baseName - the bundle base name to flush the variations for
        flushPermanent - if true, the cache for additional message bundles will be flushed, too
      • flushPermanentCache

        public static void flushPermanentCache​(java.lang.String baseName)
        Removes bundles with the given base name from the permanent cache.

        Parameters:
        baseName - the bundle base name
      • getBundle

        public static java.util.ResourceBundle getBundle​(java.lang.String baseName,
                                                         java.util.Locale locale)
        Get the appropriate ResourceBundle for the given locale. The following strategy is used:

        A sequence of candidate bundle names are generated, and tested in this order, where the suffix 1 means the string from the specified locale, and the suffix 2 means the string from the default locale:

        • baseName + "_" + language1 + "_" + country1 + "_" + variant1
        • baseName + "_" + language1 + "_" + country1
        • baseName + "_" + language1
        • baseName + "_" + language2 + "_" + country2 + "_" + variant2
        • baseName + "_" + language2 + "_" + country2
        • baseName + "_" + language2
        • baseName

        In the sequence, entries with an empty string are ignored. Next, getBundle tries to instantiate the resource bundle:

        • This implementation only resolves property based resource bundles. Class based resource bundles are nor found.
        • A search is made for a property resource file, by replacing '.' with '/' and appending ".properties", and using ClassLoader.getResource(). If a file is found, then a PropertyResourceBundle is created from the file's contents.

        If no resource bundle was found, the default resource bundle loader is used to look for the resource bundle. Class based resource bundles will be found now.

        Parameters:
        baseName - the name of the ResourceBundle
        locale - A locale
        Returns:
        the desired resource bundle