Appending ServletContext
Manifests to the Registry
This is how Manifests
utility class finds all MANIFEST.MF
files available in the classpath:
public class Manifests { public static void load() { // ... ClassLoader loader = Thread.currentThread().getContextClassLoader(); Enumeration<URL> resources = loader.getResources("META-INF/MANIFEST.MF"); } }
Context ClassLoader
of a current Thread
is being used to find all available META-INF/MANIFEST.MF
files. This mechanism works just fine in web applications (WAR
packages) as long as the current thread contains the same class loader as is being used in ServletContext
. In some web containers it is not true, and Manifests
simply won't see your MANIFEST.MF
files.
To solve the problem there is a method append(ServletContext)
, which allows you to inform Manifests
about an additional classloader available. You should call this method in one of your ServletContextListener
-s:
public class MyListener implements ServletContextListener { @Override public void contextInitialized(ServletContextEvent event) { Manifests.append(event.getServletContext()); } }
You can call append(ServletContext)
many times, it's harmless for the registry.