diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/AbstractDatasetDownloadServlet.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/AbstractDatasetDownloadServlet.java index 71f6d81d01bed9d9c2610f46a55250cef9b4c8b7..cde1ec1e40504448cf204ded3cfbdc8927f10d08 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/AbstractDatasetDownloadServlet.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/AbstractDatasetDownloadServlet.java @@ -23,6 +23,7 @@ import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; +import java.util.Enumeration; import java.util.HashMap; import java.util.Map; @@ -101,6 +102,7 @@ abstract public class AbstractDatasetDownloadServlet extends HttpServlet this.applicationContext = applicationContext; } + @SuppressWarnings("unchecked") @Override public final void init(final ServletConfig servletConfig) throws ServletException { @@ -111,6 +113,12 @@ abstract public class AbstractDatasetDownloadServlet extends HttpServlet applicationContext = (ApplicationContext) context .getAttribute(DataStoreServer.APPLICATION_CONTEXT_KEY); + + // Look for the additional configuration parameters and initialize the servlet using + // them + Enumeration<String> e = servletConfig.getInitParameterNames(); + if (e.hasMoreElements()) + doSpecificInitialization(e, servletConfig); } catch (Exception ex) { notificationLog.fatal("Failure during '" + servletConfig.getServletName() @@ -119,6 +127,16 @@ abstract public class AbstractDatasetDownloadServlet extends HttpServlet } } + /** + * Do any additional initialization using information from the properties passed in. Subclasses + * may override. + */ + protected synchronized void doSpecificInitialization(Enumeration<String> parameterNames, + ServletConfig servletConfig) + { + return; + } + protected final HttpSession tryGetOrCreateSession(final HttpServletRequest request, String sessionIdOrNull) { diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/ConfigParameters.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/ConfigParameters.java index aeb989f7d0ffcecc574279a8ebe1e50ca0e75899..0dfae8b47be94d6109c68e84688d638d7429046c 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/ConfigParameters.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/ConfigParameters.java @@ -91,10 +91,13 @@ final class ConfigParameters private final String servletPath; - public PluginServlet(String servletClass, String servletPath) + private final Properties servletProperties; + + public PluginServlet(String servletClass, String servletPath, Properties servletProperties) { this.servletClass = servletClass; this.servletPath = servletPath; + this.servletProperties = servletProperties; } public String getServletClass() @@ -108,6 +111,12 @@ final class ConfigParameters return servletPath; } + /** Any additional properties specified in the properties file */ + public Properties getServletProperties() + { + return servletProperties; + } + @Override public String toString() { @@ -155,7 +164,7 @@ final class ConfigParameters PropertyUtils.getMandatoryProperty(servletProps, PLUGIN_SERVICE_CLASS_KEY); String servletPath = PropertyUtils.getMandatoryProperty(servletProps, PLUGIN_SERVICE_PATH_KEY); - servlets.add(new PluginServlet(servletClass, servletPath)); + servlets.add(new PluginServlet(servletClass, servletPath, servletProps)); } return servlets; } diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DataStoreServer.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DataStoreServer.java index f8e16e9a16acb8fab709f5be555702b6a6ebe6ff..47cc3cca3d9e77ad63093aac8d23dc096aa98c7a 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DataStoreServer.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DataStoreServer.java @@ -175,19 +175,22 @@ public class DataStoreServer private static void registerPluginServlets(Context context, List<PluginServlet> pluginServlets) { - for (PluginServlet servlet : pluginServlets) + for (PluginServlet pluginServlet : pluginServlets) { Class<?> classInstance; try { - classInstance = Class.forName(servlet.getServletClass()); + classInstance = Class.forName(pluginServlet.getServletClass()); } catch (ClassNotFoundException ex) { throw EnvironmentFailureException.fromTemplate( - "Error while loading servlet plugin class '%s': %s", servlet.getClass(), ex - .getMessage()); + "Error while loading servlet plugin class '%s': %s", pluginServlet + .getClass(), ex.getMessage()); } - context.addServlet(classInstance, servlet.getServletPath()); + ServletHolder holder = + context.addServlet(classInstance, pluginServlet.getServletPath()); + // Add any additional parameters to the init parameters + holder.setInitParameters(pluginServlet.getServletProperties()); } }