Skip to content
Snippets Groups Projects
Commit f1c56a8d authored by anttil's avatar anttil
Browse files

BIS-139 / SP-229: Hot deploy java dropboxes

SVN: 28324
parent d6f8994f
No related branches found
No related tags found
No related merge requests found
...@@ -88,5 +88,6 @@ ...@@ -88,5 +88,6 @@
<classpathentry kind="lib" path="/libraries/jetty8/lib/server/jetty-servlet.jar" sourcepath="/libraries/jetty8/src/jetty_src.zip"/> <classpathentry kind="lib" path="/libraries/jetty8/lib/server/jetty-servlet.jar" sourcepath="/libraries/jetty8/src/jetty_src.zip"/>
<classpathentry kind="lib" path="/libraries/jetty8/lib/server/servlet-api-3.0.jar" sourcepath="/libraries/jetty8/src/jetty_src.zip"/> <classpathentry kind="lib" path="/libraries/jetty8/lib/server/servlet-api-3.0.jar" sourcepath="/libraries/jetty8/src/jetty_src.zip"/>
<classpathentry kind="lib" path="/libraries/jetty8/lib/server/jetty-continuation.jar"/> <classpathentry kind="lib" path="/libraries/jetty8/lib/server/jetty-continuation.jar"/>
<classpathentry kind="lib" path="/libraries/cisd-hotdeploy/cisd-hotdeploy.jar" sourcepath="/libraries/cisd-hotdeploy/cisd-hotdeploy-src.zip"/>
<classpathentry kind="output" path="targets/classes"/> <classpathentry kind="output" path="targets/classes"/>
</classpath> </classpath>
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
package ch.systemsx.cisd.etlserver.registrator.api.v2; package ch.systemsx.cisd.etlserver.registrator.api.v2;
import ch.ethz.cisd.hotdeploy.Plugin;
import ch.systemsx.cisd.common.exceptions.NotImplementedException; import ch.systemsx.cisd.common.exceptions.NotImplementedException;
import ch.systemsx.cisd.etlserver.registrator.DataSetRegistrationContext; import ch.systemsx.cisd.etlserver.registrator.DataSetRegistrationContext;
...@@ -26,7 +27,7 @@ import ch.systemsx.cisd.etlserver.registrator.DataSetRegistrationContext; ...@@ -26,7 +27,7 @@ import ch.systemsx.cisd.etlserver.registrator.DataSetRegistrationContext;
* *
* @author Pawel Glyzewski * @author Pawel Glyzewski
*/ */
public interface IJavaDataSetRegistrationDropboxV2 public interface IJavaDataSetRegistrationDropboxV2 extends Plugin
{ {
/** /**
......
...@@ -18,6 +18,7 @@ package ch.systemsx.cisd.etlserver.registrator.api.v2; ...@@ -18,6 +18,7 @@ package ch.systemsx.cisd.etlserver.registrator.api.v2;
import java.io.File; import java.io.File;
import ch.ethz.cisd.hotdeploy.PluginContainer;
import ch.systemsx.cisd.base.exceptions.CheckedExceptionTunnel; import ch.systemsx.cisd.base.exceptions.CheckedExceptionTunnel;
import ch.systemsx.cisd.common.action.IDelegatedActionWithResult; import ch.systemsx.cisd.common.action.IDelegatedActionWithResult;
import ch.systemsx.cisd.common.exceptions.ConfigurationFailureException; import ch.systemsx.cisd.common.exceptions.ConfigurationFailureException;
...@@ -52,14 +53,28 @@ public class JavaTopLevelDataSetHandlerV2<T extends DataSetInformation> extends ...@@ -52,14 +53,28 @@ public class JavaTopLevelDataSetHandlerV2<T extends DataSetInformation> extends
String className = String className =
PropertyUtils.getMandatoryProperty(globalState.getThreadParameters() PropertyUtils.getMandatoryProperty(globalState.getThreadParameters()
.getThreadProperties(), PROGRAM_CLASS_KEY); .getThreadProperties(), PROGRAM_CLASS_KEY);
try
PluginContainer container =
PluginContainer.tryGetInstance(globalState.getThreadParameters().getThreadName());
if (container != null)
{ {
programClass = programClass = (Class<? extends IJavaDataSetRegistrationDropboxV2>) container
(Class<? extends IJavaDataSetRegistrationDropboxV2>) Class.forName(className); .tryGetPluginClassByClassname(className);
} catch (ClassNotFoundException ex) }
if (programClass == null)
{ {
throw ConfigurationFailureException.fromTemplate("Class '%s' does not exist!", try
className); {
programClass =
(Class<? extends IJavaDataSetRegistrationDropboxV2>) Class
.forName(className);
} catch (ClassNotFoundException ex)
{
throw ConfigurationFailureException.fromTemplate("Class '%s' does not exist!",
className);
}
} }
DssRegistrationHealthMonitor.getInstance(globalState.getOpenBisService(), DssRegistrationHealthMonitor.getInstance(globalState.getOpenBisService(),
......
...@@ -17,10 +17,12 @@ ...@@ -17,10 +17,12 @@
package ch.systemsx.cisd.openbis.dss.generic.shared.utils; package ch.systemsx.cisd.openbis.dss.generic.shared.utils;
import java.io.File; import java.io.File;
import java.util.Map;
import java.util.Map.Entry; import java.util.Map.Entry;
import java.util.Properties; import java.util.Properties;
import java.util.Set; import java.util.Set;
import ch.ethz.cisd.hotdeploy.PluginContainer;
import ch.rinn.restrictions.Private; import ch.rinn.restrictions.Private;
import ch.systemsx.cisd.common.exceptions.ConfigurationFailureException; import ch.systemsx.cisd.common.exceptions.ConfigurationFailureException;
import ch.systemsx.cisd.common.filesystem.FileOperations; import ch.systemsx.cisd.common.filesystem.FileOperations;
...@@ -97,7 +99,21 @@ public class DssPropertyParametersUtil ...@@ -97,7 +99,21 @@ public class DssPropertyParametersUtil
ExtendedProperties serviceProperties = extendProperties(properties); ExtendedProperties serviceProperties = extendProperties(properties);
CorePluginsInjector injector = CorePluginsInjector injector =
new CorePluginsInjector(ScannerType.DSS, DssPluginType.values()); new CorePluginsInjector(ScannerType.DSS, DssPluginType.values());
injector.injectCorePlugins(serviceProperties); Map<String, File> pluginFolders =
injector.injectCorePlugins(serviceProperties);
if (PluginContainer.tryGetInstance() == null)
{
PluginContainer.initHotDeployment();
for (String name : pluginFolders.keySet())
{
PluginContainer pluginContainer = PluginContainer.initHotDeployment(name);
pluginContainer.addPluginDirectory(pluginFolders.get(name));
pluginContainer.refresh(true);
}
}
return serviceProperties; return serviceProperties;
} }
......
...@@ -21,6 +21,7 @@ import java.io.FileInputStream; ...@@ -21,6 +21,7 @@ import java.io.FileInputStream;
import java.io.FilenameFilter; import java.io.FilenameFilter;
import java.io.IOException; import java.io.IOException;
import java.util.Arrays; import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.List; import java.util.List;
...@@ -94,14 +95,15 @@ public class CorePluginsInjector ...@@ -94,14 +95,15 @@ public class CorePluginsInjector
} }
} }
public void injectCorePlugins(Properties properties) public Map<String, File> injectCorePlugins(Properties properties)
{ {
String corePluginsFolderPath = String corePluginsFolderPath =
CorePluginsUtils.getCorePluginsFolder(properties, scannerType); CorePluginsUtils.getCorePluginsFolder(properties, scannerType);
injectCorePlugins(properties, corePluginsFolderPath); return injectCorePlugins(properties, corePluginsFolderPath);
} }
public void injectCorePlugins(Properties properties, String corePluginsFolderPath) public Map<String, File> injectCorePlugins(Properties properties,
String corePluginsFolderPath)
{ {
ModuleEnabledChecker moduleEnabledChecker = new ModuleEnabledChecker(properties); ModuleEnabledChecker moduleEnabledChecker = new ModuleEnabledChecker(properties);
List<String> disabledPlugins = PropertyUtils.getList(properties, DISABLED_CORE_PLUGINS_KEY); List<String> disabledPlugins = PropertyUtils.getList(properties, DISABLED_CORE_PLUGINS_KEY);
...@@ -155,6 +157,17 @@ public class CorePluginsInjector ...@@ -155,6 +157,17 @@ public class CorePluginsInjector
} }
} }
pluginKeyBundles.addOrReplaceKeyBundleIn(properties); pluginKeyBundles.addOrReplaceKeyBundleIn(properties);
Map<String, File> pluginFolders = new HashMap<String, File>();
for (Map<String, NamedCorePluginFolder> map : plugins.values())
{
for (String name : map.keySet())
{
pluginFolders.put(name, map.get(name).getDefiningFolder());
}
}
return pluginFolders;
} }
private void injectProperty(Properties properties, String key, String value) private void injectProperty(Properties properties, String key, String value)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment