1 24 25 package com.rift.coad.lib.deployment.webservice; 27 28 import java.util.Map ; 30 import java.util.HashMap ; 31 import java.util.Set ; 32 import java.util.Iterator ; 33 34 import org.apache.log4j.Logger; 36 37 import com.rift.coad.lib.deployment.DeploymentLoader; 39 40 41 47 public class WebServiceManager { 48 49 53 public class WebServiceList { 54 private Map services = null; 56 57 60 public WebServiceList() { 61 services = new HashMap (); 62 } 63 64 65 71 public synchronized Set getServices() { 72 return services.keySet(); 73 } 74 75 76 82 public synchronized void addService(String path, Object obj) { 83 services.put(path,obj); 84 } 85 86 87 93 public synchronized Object getService(String path) { 94 return services.get(path); 95 } 96 97 98 103 public synchronized void removeService(String path) { 104 services.remove(path); 105 } 106 107 108 113 public synchronized boolean contains(String path) { 114 return services.containsKey(path); 115 } 116 } 117 118 protected Logger log = 120 Logger.getLogger(WebServiceManager.class.getName()); 121 122 private Map loaders = null; 124 private WebServiceList serviceList = null; 125 126 127 130 public WebServiceManager() { 131 loaders = new HashMap (); 132 serviceList = new WebServiceList(); 133 } 134 135 136 143 public void load(DeploymentLoader loader) throws WebServiceException { 144 if (loaders.containsKey(loader)) { 145 throw new WebServiceException( 146 "This entries has been loaded before."); 147 } 148 WebServiceLoader serviceLoader = new WebServiceLoader(loader); 150 Map services = serviceLoader.getServices(); 151 serviceClash(services); 152 153 for (Iterator iter = services.keySet().iterator(); iter.hasNext();) { 155 String path = (String )iter.next(); 156 log.info("Load the web service [" + path + "]"); 157 serviceList.addService(path, services.get(path)); 158 } 159 160 loaders.put(loader,serviceLoader); 162 163 } 164 165 166 173 public void unLoad(DeploymentLoader loader) throws WebServiceException { 174 if (false == loaders.containsKey(loader)) { 175 return; 177 } 178 179 WebServiceLoader serviceLoader = (WebServiceLoader)loaders.get(loader); 181 182 Map services = serviceLoader.getServices(); 184 for (Iterator iter = services.keySet().iterator(); iter.hasNext();) { 185 String path = (String )iter.next(); 186 log.info("Un-load the web service [" + path + "]"); 187 serviceList.removeService(path); 188 } 189 190 loaders.remove(loader); 192 } 193 194 199 public Set getServices() { 200 return serviceList.getServices(); 201 } 202 203 204 210 public Object getService(String path) { 211 return serviceList.getService(path); 212 } 213 214 215 222 private void serviceClash(Map services) throws WebServiceException { 223 Set keySet = services.keySet(); 224 for (Iterator iter = keySet.iterator(); iter.hasNext();) { 225 String path = (String )iter.next(); 226 if (serviceList.contains(path)) { 227 throw new WebServiceException("The service with the path [" + 228 path + "] is already bound"); 229 } 230 } 231 } 232 233 } 234 | Popular Tags |