1 46 50 package org.mr.kernel.world; 51 52 import java.util.ArrayList ; 53 import java.util.Collection ; 54 import java.util.Iterator ; 55 56 import org.apache.commons.logging.LogFactory; 57 import org.mr.MantaAgent; 58 import org.mr.MantaAgentConstants; 59 import org.mr.core.configuration.ConfigManager; 60 import org.mr.core.configuration.ConfigurationElement; 61 import org.mr.core.log.LoggerLoader; 62 import org.mr.core.log.StartupLogger; 63 import org.mr.core.net.LocalTransport; 64 import org.mr.core.net.TransportInfo; 65 import org.mr.kernel.services.MantaService; 66 import org.mr.plugins.discovery.ADControlSender; 67 import org.mr.core.log.StartupLogger; 68 69 70 78 public class WorldModelerLoader { 79 80 public static final String XML_TAG_TRANSPORT = "transport"; 81 public static final String XML_TAG_WORLD = "world"; 82 public static final String XML_TAG_SERVICE = "service"; 83 public static final String XML_TAG_SERVICE_LINK = "service_link"; 84 public static final String XML_TAG_DOMAIN = "world.domain"; 85 public static final String XML_TAG_PEER = "peer"; 86 public static final String XML_ATTRIB_NAME = "name"; 87 public static final String XML_ATTRIB_DESC = "desc"; 88 public static final String XML_ATTRIB_VER = "ver"; 89 public static final String XML_ATTRIB_PERSISTENT = "persistent"; 90 public static final String XML_ATTRIB_IP = "ip"; 91 public static final String XML_ATTRIB_PORT = "port"; 92 public static final String XML_ATTRIB_TRANSPORT_TYPE = "type"; 93 public static final String XML_ATTRIB_ACTOR_TYPE = "actorType"; 94 public static final String XML_ATTRIB_SERVICE_TYPE = "serviceType"; 95 public static final String XML_MY_TRANSPOT = "network.transports.transport"; 96 98 public static final String XML_CONSUMER_TYPE_ATTRIB_VALUE = "consumer"; 99 public static final String XML_QUEUE_SERVICE_TYPE_ATTRIB_VALUE = "queue"; 100 public static final String XML_TOPIC_SERVICE_TYPE_ATTRIB_VALUE = "topic"; 101 102 public static String WORLD_XML_FILE_LOCATION = null; 103 104 105 public static void init(WorldModeler world){ 106 ConfigManager config =MantaAgent.getInstance().getSingletonRepository().getConfigManager(); 107 108 String myAgentName = config.getStringProperty("my-peer.name", "m%ip%%port%"); 110 myAgentName = generateRealName(myAgentName); 111 String defaultDomain = config.getStringProperty("my-peer.domain", "myDomain"); 112 boolean dynamicServiceCreation = config.getBooleanProperty("jms.dynamic_service_creation",true); 113 world.setDynamicServiceCreation(dynamicServiceCreation); 114 StartupLogger.log.info("Dynamic Service Creation is "+(dynamicServiceCreation?"ENABLED.":"DISABLED."), "WorldModelerLoader"); 116 world.setMyAgentName(myAgentName); 117 String title = "*** MantaRay Layer Name: "+myAgentName+" ***"; 118 System.out.println(title); 120 if(config.hasLog4JConfig()){ 122 LoggerLoader.init(myAgentName); 123 config.initLogger(); 124 } 125 StartupLogger.log.flush(); 126 world.setDefaultDomainName(defaultDomain); 127 MantaAgent.getInstance().getSingletonRepository().getNetworkManager().setMyAgentName(myAgentName); 128 129 } 130 131 private static String generateRealName(String myAgentName) { 132 String result = null; 133 if(myAgentName.indexOf("%")==-1){ 134 result = myAgentName; 135 }else{ 136 Collection transports = MantaAgent.getInstance().getSingletonRepository().getNetworkManager().getLocalTransports(); 137 Iterator i = transports.iterator(); 138 if (i.hasNext()) { 139 LocalTransport lt = (LocalTransport) i.next(); 140 String port = String.valueOf(lt.getInfo().getPort()) ; 141 String ip = lt.getInfo().getIp().getHostAddress(); 142 if(ip.equals("0.0.0.0")){ 143 ip =ADControlSender.getValidLocalAddress(); 144 } 145 myAgentName = myAgentName.replaceAll("%port%",port ); 146 myAgentName = myAgentName.replaceAll("%ip%",ip ); 147 result = myAgentName; 148 } 149 else { 150 StartupLogger.log.fatal("Could not find transport information for this layer.", "WorldModelerLoader"); 152 result = "UNKNOWN"; 153 } 154 155 } 156 157 return result; 158 } 159 160 public static void load(WorldModeler world) { 161 ConfigManager config =MantaAgent.getInstance().getSingletonRepository().getConfigManager(); 162 163 try{ 165 166 String ver = "0"; 167 if(ver != null && ver.length()>0){ 168 world.setVersion(Long.parseLong(ver)); 169 } 170 ArrayList domainNodeList= config.getConfigurationElements(XML_TAG_DOMAIN); 171 int limit = domainNodeList.size(); 172 for (int count =0 ; count<limit ; count++){ 174 ConfigurationElement domainConfigElement = (ConfigurationElement) domainNodeList.get(count); 175 176 String domain = world.getDefaultDomainName(); 178 world.addDomain(domain); 179 String domainDesc = null; 180 181 if(domainConfigElement.getSubConfigurationElementByName(XML_ATTRIB_DESC)!= null){ 182 domainDesc =domainConfigElement.getSubConfigurationElementByName(XML_ATTRIB_DESC).getValue(); 183 } 184 185 if(domainDesc != null){ 186 world.getDomain(domain).setDesc(domainDesc); 187 } 188 ArrayList services = domainConfigElement.getSubConfigurationElementsByName(XML_TAG_SERVICE); 190 if(services!= null){ 191 int serviceNum = services.size(); 192 for (int i = 0; i < serviceNum; i++) { 193 ConfigurationElement serviceConfigElement = 194 (ConfigurationElement)services.get(i) ; 195 createService(serviceConfigElement ,domain , world ); 196 197 } 198 } 199 200 ArrayList peers = domainConfigElement.getSubConfigurationElementsByName(XML_TAG_PEER); 202 if(peers!=null){ 204 int peersNum =peers.size(); 205 for (int peersCount =0 ; peersCount<peersNum ; peersCount++){ 206 ConfigurationElement peer =(ConfigurationElement)peers.get(peersCount) ; 207 parsePeer(peer , domain , world); 208 } } 210 211 212 } 214 }catch(Exception e){ 215 LogFactory.getLog("WorldModelerLoader").fatal("can not load world modeler ", e); 217 218 } 219 220 LogFactory.getLog("WorldModelerLoader").debug("world modeler loaded"+world); 222 223 } 225 226 232 private static MantaService createService(ConfigurationElement serviceConfigElement, String domain, WorldModeler world) { 233 String serviceType = serviceConfigElement.getSubConfigurationElementByName(XML_ATTRIB_SERVICE_TYPE).getValue() ; 234 String serviceName = serviceConfigElement.getSubConfigurationElementByName(XML_ATTRIB_NAME).getValue() ; 235 String persistent = serviceConfigElement.getSubConfigurationElementByName(XML_ATTRIB_PERSISTENT).getValue() ; 236 237 MantaService service; 238 if(serviceType.equalsIgnoreCase(XML_QUEUE_SERVICE_TYPE_ATTRIB_VALUE)){ 239 service = world.createService(domain,serviceName, MantaService.SERVICE_TYPE_QUEUE); }else{ 241 service = world.createService(domain,serviceName, MantaService.SERVICE_TYPE_TOPIC); 242 } 243 244 if(persistent!= null){ 245 if(persistent.equalsIgnoreCase("true")){ 246 service.setPersistentMode(MantaAgentConstants.PERSISTENT); 247 }else{ 248 service.setPersistentMode(MantaAgentConstants.NON_PERSISTENT); 249 } 250 } 251 252 return service; 253 } 254 255 private static void parsePeer(ConfigurationElement peer ,String domain , WorldModeler world){ 256 257 String agentName = peer.getSubConfigurationElementByName(XML_ATTRIB_NAME).getValue() ; 258 ArrayList transports = peer.getSubConfigurationElementsByName(XML_TAG_TRANSPORT); 260 261 int size =transports.size(); 262 for (int i = 0; i < size; i++) { 263 ConfigurationElement TransProp = (ConfigurationElement) transports.get(i); 264 TransportInfo info = getTransportInfo(TransProp); 265 world.addTransportInfoToAgent(domain ,agentName , info ); 266 267 } 268 269 } 271 272 273 274 275 279 private static TransportInfo getTransportInfo(ConfigurationElement agentProp) { 280 TransportInfo info ; 281 282 String ip = agentProp.getSubConfigurationElementByName(XML_ATTRIB_IP).getValue() ; 283 284 String port = agentProp.getSubConfigurationElementByName(XML_ATTRIB_PORT).getValue() ; 285 286 String type = agentProp.getSubConfigurationElementByName(XML_ATTRIB_TRANSPORT_TYPE).getValue() ; 287 288 info = new TransportInfo(ip,Integer.parseInt(port),type); 289 return info; 290 } 291 292 354 404 411 412 413 414 415 416 417 } 418 | Popular Tags |