Hi all,
during development I don't want to restart the applicaction server just because a message has been added or modified. Since the resource bundles are cached, a method to clear that cache is required.
I've implemented a simple seam component, which can be used to clear the cache. Maybe this helps some other people using SEAM:
public class ClearResourcesAction extends SkilineAction
{
private static final long serialVersionUID = 6353316361885036069L;
public static final String COMPONENT_NAME = "clearResourcesAction";
@In(SeamComponents.RESOURCE_BUNDLE)
private ResourceBundle resourceBundle;
@SuppressWarnings("unchecked")
public void clearResources()
{
try
{
SeamResourceBundle seamResourceBundle = (SeamResourceBundle)resourceBundle;
Field field = seamResourceBundle.getClass().getDeclaredField("bundleCache");
field.setAccessible(true);
Map bundleCache = (Map)field.get(resourceBundle);
bundleCache.clear();
SeamResourceBundle.clearCache(Thread.currentThread().getContextClassLoader());
statusMessages.add("Resourcebundle cache cleared");
}
catch(Exception e)
{
statusMessages.add(Severity.ERROR, "Could not clear resource bundle cache: {0}", e);
}
}
}
The class SeamComponents defines constants for some built in seam components. SeamComponents.RESOURCE_BUNDLE is defined as org.jboss.seam.core.resourceBundle.
The static method java.util.ResourceBundle.clearCache was introduced in Java 6, so this solution doesn't work with Java 5!
regards
Dieter