1 10 package org.mmbase.clustering; 11 12 import org.mmbase.core.event.EventManager; 13 import org.mmbase.module.WatchedReloadableModule; 14 import org.mmbase.util.logging.Logger; 15 import org.mmbase.util.logging.Logging; 16 import org.mmbase.util.functions.*; 17 18 19 25 public class ClusteringModule extends WatchedReloadableModule { 26 27 private ClusterManager clusterManager = null; 28 private static final Logger log = Logging.getLoggerInstance(ClusteringModule.class); 29 30 33 public void init() { 34 org.mmbase.module.core.MMBase.getMMBase(); 36 String clusterManagerClassName = getInitParameter("ClusterManagerImplementation"); 38 if(clusterManagerClassName != null){ 39 clusterManager = findInstance(clusterManagerClassName); 40 EventManager.getInstance().addEventListener(clusterManager); 41 }else{ 42 log.error("Parameter 'ClusterManagerImplementation' is missing from config file. can not load clustering"); 43 } 44 45 if(clusterManager == null){ 46 log.error("ClusterManager loading failed."); 47 }else{ 48 log.service("ClusterManager loaded successful"); 49 String compat17 = getInitParameter("mmbase17.compatible"); 50 clusterManager.compatible17 = "true".equals(compat17); 51 if (clusterManager.compatible17) { 52 log.info("Sending MMBase 1.7 compatible messages."); 53 } 54 } 55 } 56 57 private static ClusterManager findInstance(String className) { 58 if (className == null || "".equals(className)) return null; 59 try { 60 Class aClass = Class.forName(className); 61 ClusterManager newInstance = (ClusterManager) aClass.newInstance(); 62 return newInstance; 63 } catch (ClassNotFoundException e) { 64 log.error("could not find class with name " + className, e); 65 } catch (InstantiationException e) { 66 log.error("could not instantiate class with name" + className, e); 67 } catch (IllegalAccessException e) { 68 log.error("the constructor of " + className + " is not accessible", e); 69 } catch (ClassCastException e) { 70 log.error("Instance of Class with name " + className + "could not be successfully cast to type ClusterManager.", e); 71 } 72 return null; 73 } 74 75 78 protected void shutdown() { 79 if(clusterManager != null) { 80 clusterManager.shutdown(); 81 EventManager.getInstance().removeEventListener(clusterManager); 82 clusterManager = null; 83 } 84 } 85 86 87 public void reload() { 88 try { 89 shutdown(); 90 } catch (Exception e) { 91 log.error(e); 92 } 93 init(); 94 } 95 96 99 { 100 addFunction(new AbstractFunction("send", Parameter.EMPTY, new ReturnType(Statistics.class, "Stat-structure")) { 101 public Object getFunctionValue(Parameters arguments) { 102 return clusterManager == null ? new Statistics() : clusterManager.send; 103 } 104 }); 105 } 106 109 { 110 addFunction(new AbstractFunction("receive", Parameter.EMPTY, new ReturnType(Statistics.class, "Stat-structure")) { 111 public Object getFunctionValue(Parameters arguments) { 112 return clusterManager == null ? new Statistics() : clusterManager.receive; 113 } 114 }); 115 } 116 117 120 { 121 addFunction(new AbstractFunction("numbertosend", Parameter.EMPTY, ReturnType.INTEGER) { 122 public Object getFunctionValue(Parameters arguments) { 123 return new Integer (clusterManager == null ? -1 : clusterManager.nodesToSend.count()); 124 } 125 }); 126 } 127 130 { 131 addFunction(new AbstractFunction("numbertoreceive", Parameter.EMPTY, ReturnType.INTEGER) { 132 public Object getFunctionValue(Parameters arguments) { 133 return new Integer (clusterManager == null ? -1 : clusterManager.nodesToSpawn.count()); 134 } 135 }); 136 } 137 138 141 { 142 addFunction(new AbstractFunction("shutdown", Parameter.EMPTY, ReturnType.VOID) { 143 public Object getFunctionValue(Parameters arguments) { 144 shutdown(); 145 return ""; 146 } 147 }); 148 } 149 152 { 153 addFunction(new AbstractFunction("start", Parameter.EMPTY, ReturnType.VOID) { 154 public Object getFunctionValue(Parameters arguments) { 155 init(); 156 return ""; 157 } 158 }); 159 } 160 163 { 164 addFunction(new AbstractFunction("active", Parameter.EMPTY, ReturnType.BOOLEAN) { 165 public Object getFunctionValue(Parameters arguments) { 166 return Boolean.valueOf(clusterManager != null && clusterManager.kicker != null); 167 } 168 }); 169 } 170 { 171 addFunction(new AbstractFunction("clusterManager", Parameter.EMPTY, new ReturnType(ClusterManager.class, "cluster manager")) { 172 public Object getFunctionValue(Parameters arguments) { 173 return clusterManager; 174 } 175 }); 176 } 177 178 179 } 180 | Popular Tags |