Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

"Can't find bundle for base name..." auf J2EE Cluster

3 views
Skip to first unread message

Stefan Schwing

unread,
Dec 2, 2008, 4:30:59 AM12/2/08
to
Hallo zusammen,

ich habe folgendes Problem:

Ich habe Klasse AppResourceBundle extends ResourceBundle .

In meiner J2EE Applikation rufe ich

ResourceBundle bundle = AppResourceBundle.getBundle

Das funktioneirt auch bestens. Mein Problem ist dass nach einigen
Tagen/Wochen es zu folgender Meldung kommt:

java.util.MissingResourceException: Can't find bundle for base name ...,
locale de
at
java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:838)
at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:728)
at java.util.ResourceBundle.getBundle(ResourceBundle.java:578)

Die entsprechende .properties Datei ist aber vorhanden. Das einzige was
hilft ist dann den J2EE Server durchzustarten.

Der Source in java.util.ResourceBundle sieht so aus:

// The default locale may influence the lookup result, and
// it may change, so we get it here once.
Locale defaultLocale = Locale.getDefault();

Object lookup = findBundleInCache(loader, bundleName,
defaultLocale);
if (lookup == NOT_FOUND) {
--> throwMissingResourceException(baseName, locale);
} else if (lookup != null) {
return (ResourceBundle)lookup;
}

/**
* Find a bundle in the cache.
* @param loader the class loader that is responsible for loading the
bundle.
* @param bundleName the complete name of the bundle including locale
extension.
* ex. sun.text.resources.LocaleElements_fr_BE
* @param defaultLocale the default locale at the time getBundle was
called
* @return the cached bundle. null if the bundle is not in the cache.
*/
private static Object findBundleInCache(ClassLoader loader, String
bundleName,
Locale defaultLocale) {
//Synchronize access to cacheList, cacheKey, and underConstruction
synchronized (cacheList) {
cacheKey.setKeyValues(loader, bundleName, defaultLocale);
Object result = cacheList.get(cacheKey);
cacheKey.clear();
return result;
}
}

Ich habe den Eindruck zu dem Fehler kommt es nur, wenn meine Applikation auf
einem J2EE Cluster läuft (also 2 Serverprozesse auf 2 physikalischen
Maschinen). Auf nicht geclusterten Systememn habe ich den Fehler noch nei
gesehen.

Wie kann es dazu kommen, dass zur Laufzeit von jetzt auf nachher nichts mehr
gefunden wird, und könnte das wirklich mit J2EE cluster zu tun haben ? Gibt
es Möglichkeiten, auf diese Exception zu reagieren udn dne ResBundle Cache
irgendwie wieder zu initialisieren ?

Danke und Gruß
Stefan


0 new messages