1 19 20 package org.lucane.server; 21 22 import java.util.*; 23 24 import org.lucane.common.*; 25 import org.lucane.common.concepts.ServiceConcept; 26 import org.lucane.server.store.Store; 27 28 public class ServiceManager 29 { 30 private static ServiceManager instance = null; 32 public static ServiceManager getInstance() 33 { 34 if(instance == null) 35 instance = new ServiceManager(); 36 37 return instance; 38 } 39 40 private Store store; 42 private HashMap services; 43 44 47 private ServiceManager() 48 { 49 this.store = Server.getInstance().getStore(); 50 this.services = new HashMap(); 51 } 52 53 56 protected void loadAllServices() 57 { 58 String baseURL = Server.getInstance().getWorkingDirectory() + Server.APPLICATIONS_DIRECTORY; 59 Iterator services; 61 try { 62 services = store.getServiceStore().getAllServices(); 63 } catch (Exception e) { 64 Logging.getLogger().severe("Unable get service list : " + e); 65 services = new ArrayList().iterator(); 66 } 67 68 LucaneClassLoader loader = LucaneClassLoader.getInstance(); 69 while (services.hasNext()) 70 { 71 ServiceConcept service = (ServiceConcept)services.next(); 72 String servicename = service.getName(); 73 try 74 { 75 String jarPath = baseURL + servicename + ".jar"; 76 loader.addUrl("jar:file:///" + jarPath + "!/"); 77 78 String className = JarUtils.getServiceClass(jarPath); 79 if (className == null) 80 { 81 Logging.getLogger().warning("Ignoring service " + servicename 82 + ": no Service-Class attribute."); 83 continue; 84 } 85 86 Service serv = (Service)Class.forName(className, true, loader).newInstance(); 87 this.services.put(serv.getName(), serv); 88 Logging.getLogger().info("Service '" + servicename + "' loaded."); 89 } 90 catch (Exception e) 91 { 92 Logging.getLogger().warning("Unable to load service '" + servicename); 93 e.printStackTrace(); 94 } 95 } 96 } 97 98 101 protected void startAllServices() 102 { 103 104 Iterator services = this.services.values().iterator(); 105 while(services.hasNext()) 106 { 107 Service serv = (Service)services.next(); 108 try 109 { 110 ServiceConcept service = store.getServiceStore().getService(serv.getName()); 112 serv.init(Server.getInstance()); 113 114 if (! service.isInstalled()) 116 { 117 serv.install(); 118 service.setInstalled(); 119 store.getServiceStore().updateService(service); 120 } 121 122 ConnectInfo serverInfo = ConnectInfoManager.getInstance().getServerInfo(); 124 ConnectInfo serviceInfo = new ConnectInfo(serv.getName(), 125 serverInfo.getHostName(),serverInfo.getPort(), serverInfo.getPublicKey(), 126 "service"); 127 ConnectInfoManager.getInstance().addConnectInfo(serviceInfo); 128 129 Logging.getLogger().info("Service '" + serv.getName() + "' started."); 130 } 131 catch (Exception e) 132 { 133 Logging.getLogger().warning("Unable to start service : " + serv.getName() + " : " + e); 134 e.printStackTrace(); 135 } 136 } 137 } 138 139 142 protected void shutdownAllServices() 143 { 144 145 Iterator services = this.services.values().iterator(); 146 while(services.hasNext()) 147 { 148 Service serv = (Service)services.next(); 149 serv.shutdown(); 150 151 ConnectInfoManager.getInstance().removeConnectInfo(serv.getName()); 153 154 Logging.getLogger().info("Service '" + serv.getName() + "' shutdowned."); 155 } 156 } 157 158 164 public Service getService(String name) 165 { 166 return (Service)this.services.get(name); 167 } 168 } 169 | Popular Tags |