ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/i-scream/projects/cms/source/server/uk/org/iscream/cms/server/componentmanager/ComponentManager.java
Revision: 1.13
Committed: Fri Feb 23 16:26:14 2001 UTC (23 years, 3 months ago) by ajm
Branch: MAIN
Changes since 1.12: +33 -6 lines
Log Message:
initial support for CORBA retries

File Contents

# User Rev Content
1 ajm 1.1 //---PACKAGE DECLARATION---
2     package uk.ac.ukc.iscream.componentmanager;
3    
4     //---IMPORTS---
5     import java.util.*;
6     import java.io.*;
7 tdb 1.10 import uk.ac.ukc.iscream.util.*;
8 ajm 1.1
9     /**
10 ajm 1.2 * The component manager is the starting point for all
11     * server side components of the iscream system.
12     * It loads its initial system configuration from the
13     * default properties file, it then starts all the iscream
14     * components as specified in the default.properties under
15     * uk.ac.ukc.iscream.ComponentList
16 ajm 1.1 *
17 tdb 1.9 * @author $Author: tdb1 $
18 ajm 1.13 * @version $Id: ComponentManager.java,v 1.12 2001/01/28 05:49:18 tdb1 Exp $
19 ajm 1.1 */
20     public class ComponentManager {
21    
22     //---FINAL ATTRIBUTES---
23    
24     /**
25     * The current CVS revision of this class
26     */
27 ajm 1.13 public static final String REVISION = "$Revision: 1.12 $";
28 ajm 1.1
29     /**
30     * The toString() of this class
31     * As it won't be instatiated, this is needed.
32 ajm 1.2 * Not also that we pass a null as the class name (as we are static)
33 ajm 1.1 */
34 ajm 1.2 public static final String toString = FormatName.getName("ComponentManager", null, REVISION);
35 ajm 1.1
36     /**
37     * The default location of the properties file for the system
38     */
39 ajm 1.2 public static final String DEFAULTPROPERTIES = "./etc/default.properties";
40 ajm 1.1
41     //---STATIC METHODS---
42    
43     /**
44 ajm 1.2 * The main method which starts the components as
45     * listed in the default.properties file.
46 ajm 1.1 *
47     * @param args the command line arguments
48     */
49     public static void main(String[] args) {
50 tdb 1.11 System.out.println("--- i-scream Server Component Manager ---");
51 ajm 1.2 System.out.println("--- Starting System ---");
52    
53 ajm 1.1 // get the command line args
54     String defaultProperties = DEFAULTPROPERTIES;
55     String filterName = null;
56 tdb 1.11 for(int i=0; i < args.length; i++) {
57 tdb 1.12 if(args[i].equals("-h")) {
58 ajm 1.1 usage();
59 tdb 1.11 }
60 tdb 1.12 else if(args[i].equals("-f")) {
61 tdb 1.11 i++; filterName = args[i];
62     }
63 tdb 1.12 else if(args[i].equals("-l")) {
64 tdb 1.11 i++; defaultProperties = args[i];
65     }
66     else {
67     usage();
68     }
69 ajm 1.1 }
70    
71     // load the default properties file into the system properties
72     System.out.println(toString + ": initialising - using " + defaultProperties);
73     try {
74     Properties initProperties = new Properties(System.getProperties());
75     initProperties.load(new FileInputStream(new File(defaultProperties)));
76     System.setProperties(initProperties);
77     } catch (Exception e) {
78     System.err.println(toString + ": ERROR " + e.getMessage());
79     usage();
80     }
81    
82     // continue to bring the system up
83     System.out.println(toString + ": coming up");
84    
85     // start the ORB by initialising the ReferenceManager
86 ajm 1.2 ReferenceManager refman = ReferenceManager.getInstance();
87 ajm 1.1
88 ajm 1.2 // now the ORB is running, we need to activate our RootPOA
89     // so that we can start serving requests once servants start up
90 ajm 1.1 refman.activatePOA();
91    
92 ajm 1.2 // get the list of components
93 ajm 1.1 String componentList = System.getProperty("uk.ac.ukc.iscream.ComponentList");
94     StringTokenizer st = new StringTokenizer(componentList, ";");
95    
96 ajm 1.13
97     ArrayList componentsToStart = new ArrayList();
98    
99 ajm 1.1 // this could be done using reflection
100     // but..well..we don't ;-p
101     while (st.hasMoreTokens()){
102     String componentName = st.nextToken();
103     Component component = null;
104 ajm 1.13
105 ajm 1.2
106     // ### This is where the list of supported components is checked! ###
107     if (componentName.equalsIgnoreCase("core")) {
108 ajm 1.1 component = new uk.ac.ukc.iscream.core.Core();
109 ajm 1.3 } else if (componentName.equalsIgnoreCase("filtermanager")) {
110     component = new uk.ac.ukc.iscream.filtermanager.FilterManager();
111 ajm 1.4 } else if (componentName.equalsIgnoreCase("rootfilter")) {
112     component = new uk.ac.ukc.iscream.rootfilter.RootFilter();
113 ajm 1.5 } else if (componentName.equalsIgnoreCase("dbinterface")) {
114     component = new uk.ac.ukc.iscream.dbinterface.DBInterface();
115 ajm 1.6 } else if (componentName.equalsIgnoreCase("clientinterface")) {
116     component = new uk.ac.ukc.iscream.clientinterface.ClientInterfaceMain();
117 ajm 1.7 // note the passing of the Filter's name in its constructor
118     } else if (componentName.equalsIgnoreCase("filter")) {
119     component = new uk.ac.ukc.iscream.filter.FilterMain(filterName);
120 ajm 1.1 }
121 ajm 1.2 // ### Add new component constructors in the above section! ###
122 ajm 1.3
123 ajm 1.1 if (component != null) {
124 ajm 1.13 componentsToStart.add(component);
125     } else {
126     System.err.println(toString + ": WARNING unsupported component not started");
127     }
128     }
129    
130     boolean tryAgain = true;
131    
132     while(tryAgain) {
133     Iterator i = componentsToStart.iterator();
134     while(i.hasNext()) {
135     try {
136     component = (Component) i.next();
137     System.out.println(toString + ": starting component - " + component.toString());
138 ajm 1.2 component.start();
139 ajm 1.13 componentsToStart.remove(componentsToStart.indexOf(component));
140 ajm 1.2 } catch (ComponentStartException e) {
141 ajm 1.1 System.err.println(toString + ": ERROR starting component - " + componentName);
142 ajm 1.2 System.err.println(toString + ": component reports - " + e.getMessage());
143 ajm 1.1 System.exit(1);
144 ajm 1.13 } catch(ComponentCORBAExcetpion e2) {
145     System.err.println(toString() + ": WARNING Component reported CORBA communications failure");
146     System.err.println(toString() + ": This could be because it can't communicate with components it needs.");
147     System.err.println(toString + ": component reports - " + e2.getMessage());
148 ajm 1.1 }
149 ajm 1.13 }
150     if (componentsToStart.size() > 0) {
151     System.err.println(toString() + ": WARNING One or more components failed to start correctly.");
152     System.err.println(toString() + ": Will try again in 5 seconds");
153     Thread.sleep(5000);
154 ajm 1.1 } else {
155 ajm 1.13 tryAgain = false;
156 ajm 1.1 }
157     }
158 ajm 1.13
159 ajm 1.3 System.out.println(toString + ": running");
160 ajm 1.13
161 ajm 1.2 // block on the ORB...in time, management functionality can be placed here.
162 ajm 1.1 refman.getORB().run();
163     }
164 ajm 1.3
165     /**
166 ajm 1.1 * A simple method to print the usage of this class.
167     * It never returns, but instead exits to the system
168     * with a value 1, to indicate the system did not start
169     * properly.
170     */
171     public static void usage() {
172     System.out.println("USAGE: java uk.ac.ukc.iscream.componentmanager.ComponentManager <option>");
173 tdb 1.8 System.out.println(" or: java -jar iscream.jar <option>");
174 ajm 1.1 System.out.println("WHERE <option>:");
175     System.out.println(" -l <filename> - the location of initial system properties");
176 ajm 1.2 System.out.println(" the default is ./etc/default.properties");
177 ajm 1.1 System.out.println(" -f <name> - the name of the filter (if there is one configured");
178     System.out.println(" -h - this help screen");
179     System.exit(1);
180     }
181    
182     //---CONSTRUCTORS---
183    
184     //---PUBLIC METHODS---
185    
186     //---PRIVATE METHODS---
187    
188     //---ACCESSOR/MUTATOR METHODS---
189    
190     //---ATTRIBUTES---
191    
192     //---STATIC ATTRIBUTES---
193    
194     }