summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Branson <andrew.branson@cern.ch>2012-11-26 15:05:17 +0100
committerAndrew Branson <andrew.branson@cern.ch>2012-11-26 15:05:17 +0100
commit9416ea6b6802678830d004f261bf15b96d1581dd (patch)
treeefb3af1874a999c8cc160f781378e6c2c5466994
parent27c50f1b1dfa688bc8a3f31d1f97843598136d1e (diff)
Clean up module exception.
Merge circular module dependency check with unmet check, earlier in the process.
-rw-r--r--pom.xml2
-rw-r--r--src/main/java/com/c2kernel/process/module/Module.java6
-rw-r--r--src/main/java/com/c2kernel/process/module/ModuleManager.java84
3 files changed, 49 insertions, 43 deletions
diff --git a/pom.xml b/pom.xml
index d34f2f2..fafd186 100644
--- a/pom.xml
+++ b/pom.xml
@@ -43,7 +43,7 @@
<dependency>
<groupId>xerces</groupId>
<artifactId>xercesImpl</artifactId>
- <version>2.10.0</version>
+ <version>2.9.1</version>
</dependency>
<dependency>
<groupId>org.codehaus.castor</groupId>
diff --git a/src/main/java/com/c2kernel/process/module/Module.java b/src/main/java/com/c2kernel/process/module/Module.java
index 19cc41a..ee6d71c 100644
--- a/src/main/java/com/c2kernel/process/module/Module.java
+++ b/src/main/java/com/c2kernel/process/module/Module.java
@@ -1,12 +1,8 @@
package com.c2kernel.process.module;
-import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.Properties;
-import com.c2kernel.common.CannotManageException;
-import com.c2kernel.common.ObjectAlreadyExistsException;
-import com.c2kernel.common.ObjectCannotBeUpdated;
import com.c2kernel.common.ObjectNotFoundException;
import com.c2kernel.entity.proxy.ItemProxy;
import com.c2kernel.lifecycle.instance.predefined.entitycreation.Dependency;
@@ -75,7 +71,7 @@ public class Module {
imports.list.add(moduleItem);
}
- public void importAll(ItemProxy serverEntity, String moduleXML) throws ObjectCannotBeUpdated, ObjectNotFoundException, CannotManageException, ObjectAlreadyExistsException, NoSuchAlgorithmException {
+ public void importAll(ItemProxy serverEntity, String moduleXML) throws Exception {
addModuleItem(moduleXML);
for (ModuleImport thisImp : imports.list) {
Logger.msg(5, "Importing "+thisImp.name+" "+thisImp.getClass().getSimpleName());
diff --git a/src/main/java/com/c2kernel/process/module/ModuleManager.java b/src/main/java/com/c2kernel/process/module/ModuleManager.java
index 049558e..c495cbe 100644
--- a/src/main/java/com/c2kernel/process/module/ModuleManager.java
+++ b/src/main/java/com/c2kernel/process/module/ModuleManager.java
@@ -2,16 +2,12 @@ package com.c2kernel.process.module;
import java.io.IOException;
import java.net.URL;
-import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Properties;
-import com.c2kernel.common.CannotManageException;
import com.c2kernel.common.InvalidDataException;
-import com.c2kernel.common.ObjectAlreadyExistsException;
-import com.c2kernel.common.ObjectCannotBeUpdated;
import com.c2kernel.common.ObjectNotFoundException;
import com.c2kernel.entity.proxy.ItemProxy;
import com.c2kernel.lookup.DomainPath;
@@ -74,17 +70,40 @@ public class ModuleManager {
}
Logger.debug(5, "Checking dependencies");
- boolean depFailed = false;
- for (Module thisMod : modules) {
- ArrayList<String> deps = thisMod.getDependencies();
- for (String dep : deps) {
- if (!loadedModules.contains(dep)) {
- Logger.error("UNMET MODULE DEPENDENCY: "+thisMod.getName()+" requires "+dep);
- depFailed = true;
+ boolean allDepsPresent = false;
+
+ ArrayList<String> prevModules = new ArrayList<String>();
+ for (int i=0; i<modules.size();i++) {
+ boolean depClean = false;
+ int skipped = 0;
+ Module thisMod = modules.get(i);
+ while (!depClean) {
+ ArrayList<String> deps = thisMod.getDependencies();
+ depClean = true;
+ for (String dep : deps) {
+ if (!loadedModules.contains(dep)) {
+ Logger.error("UNMET MODULE DEPENDENCY: "+thisMod.getName()+" requires "+dep);
+ allDepsPresent = true;
+ }
+ else if (!prevModules.contains(dep)) {
+ modules.remove(i);
+ modules.add(thisMod);
+ thisMod = modules.get(i);
+ skipped++;
+ depClean = false;
+ }
+ }
+ if (skipped > modules.size()-i) {
+ StringBuffer badMod = new StringBuffer();
+ for (Module mod : modules.subList(i, modules.size())) {
+ badMod.append(mod.getName()).append(" ");
+ }
+ Logger.die("Circular module dependencies involving: "+badMod);
}
}
+ prevModules.add(thisMod.getName());
}
- if (depFailed) Logger.die("Unmet module dependencies. Cannot continue");
+ if (allDepsPresent) Logger.die("Unmet module dependencies. Cannot continue");
}
public String getModuleVersions() {
@@ -112,35 +131,26 @@ public class ModuleManager {
}
}
- public void registerModules() throws ObjectNotFoundException, ObjectCannotBeUpdated, CannotManageException, ObjectAlreadyExistsException, NoSuchAlgorithmException {
- ItemProxy serverEntity = (ItemProxy)Gateway.getProxyManager().getProxy(new DomainPath("/servers/"+Gateway.getProperty("ItemServer.name")));
+ public void registerModules() throws ModuleException {
+ ItemProxy serverEntity;
+ try {
+ serverEntity = (ItemProxy)Gateway.getProxyManager().getProxy(new DomainPath("/servers/"+Gateway.getProperty("ItemServer.name")));
+ } catch (ObjectNotFoundException e) {
+ throw new ModuleException("Cannot find local server name.");
+ }
Logger.debug(3, "Registering modules");
- ArrayList<String> importedModules = new ArrayList<String>();
- for (int i=0; i<modules.size();i++) {
- boolean depClean = false;
- int skipped = 0;
- Module thisMod = modules.get(i);
- while (!depClean) {
- ArrayList<String> deps = thisMod.getDependencies();
- depClean = true;
- for (String dep : deps) {
- if (!importedModules.contains(dep)) {
- Logger.debug(3, "Modules "+thisMod.getName()+" depends on "+dep+" which hasn't been imported yet. Deferring.");
- modules.remove(i);
- modules.add(thisMod);
- thisMod = modules.get(i);
- skipped++;
- depClean = false;
- }
- }
- if (skipped > modules.size()-i)
- throw new CannotManageException("Too many modules deferred. There might be circular dependencies", "");
- }
+
+ for (Module thisMod : modules) {
Logger.msg("Registering module "+thisMod.getName());
- thisMod.importAll(serverEntity, modulesXML.get(thisMod.ns));
+ try {
+ thisMod.importAll(serverEntity, modulesXML.get(thisMod.ns));
+ } catch (Exception e) {
+ Logger.error(e);
+ throw new ModuleException("Error importing Module items");
+ }
Logger.msg("Module "+thisMod.getName()+" registered");
- importedModules.add(thisMod.getName());
+
}
}