public ResourceBundle getResourceBundle(String basename, Locale locale) {
		Map<Locale, ResourceBundle> localeMap = (Map<Locale, ResourceBundle>) this.cachedResourceBundles
				.get(basename);
		if (localeMap != null) {
			ResourceBundle bundle = (ResourceBundle) localeMap.get(locale);
			if (bundle != null) {
				return bundle;
			}
		}
		try {
			ResourceBundle bundle = doGetBundle(basename, locale);
			if (localeMap == null) {
				localeMap = new HashMap<Locale, ResourceBundle>();
				this.cachedResourceBundles.put(basename, localeMap);
			}
			localeMap.put(locale, bundle);
			return bundle;
		} catch (MissingResourceException ex) {
			logger.warn("ResourceBundle [" + basename
					+ "] not found for MessageSource: " + ex.getMessage());
			// Assume bundle not found
			// -> do NOT throw the exception to allow for checking parent
			// message source.
			return null;
		}
	}