KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > lucane > server > ServiceManager


1 /*
2  * Lucane - a collaborative platform
3  * Copyright (C) 2004 Vincent Fiack <vfiack@mail15.com>
4  *
5  * This library is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Lesser General Public
7  * License as published by the Free Software Foundation; either
8  * version 2.1 of the License, or (at your option) any later version.
9  *
10  * This library is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13  * Lesser General Public License for more details.
14  *
15  * You should have received a copy of the GNU Lesser General Public
16  * License along with this library; if not, write to the Free Software
17  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18  */

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     //-- instance management
31
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     //-- attributes
41
private Store store;
42     private HashMap services;
43     
44     /**
45      * Constructor
46      */

47     private ServiceManager()
48     {
49         this.store = Server.getInstance().getStore();
50         this.services = new HashMap();
51     }
52     
53     /**
54      * Load the services from the jar files
55      */

56     protected void loadAllServices()
57     {
58         String JavaDoc baseURL = Server.getInstance().getWorkingDirectory() + Server.APPLICATIONS_DIRECTORY;
59         //get all services from store
60
Iterator services;
61         try {
62             services = store.getServiceStore().getAllServices();
63         } catch (Exception JavaDoc 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 JavaDoc servicename = service.getName();
73             try
74             {
75                 String JavaDoc jarPath = baseURL + servicename + ".jar";
76                 loader.addUrl("jar:file:///" + jarPath + "!/");
77                 
78                 String JavaDoc 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 JavaDoc e)
91             {
92                 Logging.getLogger().warning("Unable to load service '" + servicename);
93                 e.printStackTrace();
94             }
95         }
96     }
97     
98     /**
99      * Start all services
100      */

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                 // start the service
111
ServiceConcept service = store.getServiceStore().getService(serv.getName());
112                 serv.init(Server.getInstance());
113                 
114                 // install if necessary
115
if (! service.isInstalled())
116                 {
117                     serv.install();
118                     service.setInstalled();
119                     store.getServiceStore().updateService(service);
120                 }
121                 
122                 //add the service connect info
123
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 JavaDoc e)
132             {
133                 Logging.getLogger().warning("Unable to start service : " + serv.getName() + " : " + e);
134                 e.printStackTrace();
135             }
136         }
137     }
138     
139     /**
140      * Shutdown all services
141      */

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             //remove the connectInfo
152
ConnectInfoManager.getInstance().removeConnectInfo(serv.getName());
153             
154             Logging.getLogger().info("Service '" + serv.getName() + "' shutdowned.");
155         }
156     }
157     
158     /**
159      * Get a service by its name
160      *
161      * @param name the service name
162      * @return the service instance
163      */

164     public Service getService(String JavaDoc name)
165     {
166         return (Service)this.services.get(name);
167     }
168 }
169
Popular Tags