Mercurial > dive4elements > framework
diff artifact-database/src/main/java/de/intevation/artifactdatabase/FactoryBootstrap.java @ 311:1d517e051e95
Made backend listeners loadable at boot time.
artifacts/trunk@2436 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Mon, 01 Aug 2011 14:17:09 +0000 |
parents | d96bcb40dbf9 |
children | f2277458823e |
line wrap: on
line diff
--- a/artifact-database/src/main/java/de/intevation/artifactdatabase/FactoryBootstrap.java Mon Aug 01 09:41:40 2011 +0000 +++ b/artifact-database/src/main/java/de/intevation/artifactdatabase/FactoryBootstrap.java Mon Aug 01 14:17:09 2011 +0000 @@ -123,6 +123,9 @@ public static final String LIFETIME_LISTENERS = "/artifact-database/lifetime-listeners/listener"; + public static final String BACKEND_LISTENERS = + "/artifact-database/backend-listeners/listener"; + /** * Default export signing secret. * <strong>PLEASE CHANGE THE SECRET VIA THE XPATH EXPORT_SECRET @@ -169,6 +172,8 @@ protected List<LifetimeListener> lifetimeListeners; + protected List<BackendListener> backendListeners; + /** * byte array holding the export signing secret. */ @@ -491,6 +496,49 @@ lifetimeListeners = ltls; } + protected void loadBackendListeners() { + logger.info("loading backend listeners"); + + NodeList nodes = Config.getNodeSetXPath(BACKEND_LISTENERS); + + if (nodes == null) { + logger.debug("no backend listeners configure"); + return; + } + + List<BackendListener> bls = new ArrayList<BackendListener>(); + + for (int i = 0, N = nodes.getLength(); i < N; ++i) { + Node node = nodes.item(i); + String className = node.getTextContent(); + if (className == null + || (className = className.trim()).length() == 0) { + continue; + } + try { + Class clazz = Class.forName(className); + BackendListener listener = + (BackendListener)clazz.newInstance(); + + bls.add(listener); + } + catch (ClassNotFoundException cnfe) { + logger.error(cnfe.getLocalizedMessage(), cnfe); + } + catch (InstantiationException ie) { + logger.error(ie.getLocalizedMessage(), ie); + } + catch (ClassCastException cce) { + logger.error(cce.getLocalizedMessage(), cce); + } + catch (IllegalAccessException iae) { + logger.error(iae.getLocalizedMessage(), iae); + } + } + + backendListeners = bls; + } + protected void loadHooks() { logger.info("loading hooks"); @@ -584,6 +632,7 @@ loadHTTPServer(); loadHooks(); loadLifetimeListeners(); + loadBackendListeners(); } /** @@ -661,5 +710,9 @@ public List<LifetimeListener> getLifetimeListeners() { return lifetimeListeners; } + + public List<BackendListener> getBackendListeners() { + return backendListeners; + } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :