ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/i-scream/projects/cms/source/server/uk/org/iscream/cms/server/client/ClientMain.java
Revision: 1.12
Committed: Wed Mar 14 01:34:21 2001 UTC (23 years, 2 months ago) by tdb
Branch: MAIN
Changes since 1.11: +32 -4 lines
Log Message:
New dependency checking. The old method was to attempt to start a Component, and
if it failed, it probably had a depdency problem. The approach now is to ask the
Component to perform a dependency check first, then if this suceeds, have a go
at actually starting it up.
The actual dependency check is a bit neater and more precise than before, and
should be much more fool proof. The order the components are specified in the
default.properties file is now irrelevant, although the "correct" order would
certainly increase booting time.

File Contents

# User Rev Content
1 tdb 1.5 //---PACKAGE DECLARATION---
2 tdb 1.1 package uk.ac.ukc.iscream.client;
3    
4 tdb 1.5 //---IMPORTS---
5 tdb 1.1 import uk.ac.ukc.iscream.clientinterface.*;
6     import uk.ac.ukc.iscream.componentmanager.*;
7 tdb 1.5 import uk.ac.ukc.iscream.core.*;
8     import uk.ac.ukc.iscream.util.*;
9    
10     /**
11     * A startup component for the Local Clients.
12     *
13 tdb 1.12 * @author $Author: ajm4 $
14     * @version $Id: ClientMain.java,v 1.11 2001/03/02 05:42:39 ajm4 Exp $
15 tdb 1.5 */
16     public class ClientMain implements Component {
17    
18     //---FINAL ATTRIBUTES---
19    
20     /**
21     * The current CVS revision of this class
22     */
23 tdb 1.12 public static final String REVISION = "$Revision: 1.11 $";
24 tdb 1.5
25     /**
26     * The friendly name for this component, used by
27     * all related classes.
28     */
29     public static final String NAME = "LocalClient";
30    
31     //---STATIC METHODS---
32    
33     //---CONSTRUCTORS---
34    
35     //---PUBLIC METHODS---
36    
37     /**
38     * This starts the Local Client component
39     */
40     public void start() throws ComponentStartException {
41 tdb 1.6 // get references to key objects
42     _refman = ReferenceManager.getInstance();
43     _logger = ReferenceManager.getInstance().getLogger();
44 tdb 1.5
45     _logger.write(toString(), Logger.SYSINIT, "coming up");
46    
47     // configuration variables we require
48     int queueMonitorInterval = 0;
49    
50     Configuration config = _refman.getCM().getConfiguration("LocalClient");
51     if (config == null) {
52     throw new ComponentStartException("Unable to obtain configuration for component");
53     }
54     else {
55     try {
56     // get the configuration properties we need
57     queueMonitorInterval = Integer.parseInt(config.getProperty("Queue.MonitorInterval"));
58     } catch (org.omg.CORBA.MARSHAL e) {
59     throw new ComponentStartException("Unable to obtain requried configuration property for component");
60     }
61     }
62    
63     _logger.write(toString(), Logger.SYSINIT, "configured");
64    
65 ajm 1.9 // setup the queues, this must be done before both managers are setup
66     String queueName;
67 tdb 1.7 // setup a Queue for the servant -> monitor manager
68 ajm 1.9 _monitorQueue = new Queue();
69    
70 tdb 1.10 // setup a Queue for the monitors -> alert manager
71 ajm 1.9 _alerterQueue = new Queue();
72    
73    
74 tdb 1.5
75 tdb 1.7 // setup the servant and connect
76     _logger.write(toString(), Logger.SYSINIT, "starting servant and connecting");
77 tdb 1.1 try {
78 ajm 1.9 ClientServant ref = new ClientServant(_monitorQueue);
79 tdb 1.5 org.omg.CORBA.Object objRef = _refman.getRootPOA().servant_to_reference(ref);
80 tdb 1.7 Client client = ClientHelper.narrow(objRef);
81 tdb 1.5
82     // this name maybe shouldn't be static
83     objRef = _refman.getCORBARef("iscream.ClientInterface.CorbaListener");
84     CorbaClientListener listener = CorbaClientListenerHelper.narrow(objRef);
85    
86     _logger.write(toString(), Logger.SYSINIT, "connecting");
87 tdb 1.8 CorbaControlHandler handler = listener.connect(client, NAME);
88 tdb 1.5 handler.startData();
89 tdb 1.1 }
90 tdb 1.5 catch(Exception e) {
91     // not sure what to do here
92     // so we just log the error
93     _logger.write(toString(), Logger.ERROR, "ERROR - " + e.getMessage());
94 tdb 1.1 }
95 tdb 1.7
96     // setup the MonitorManager
97 ajm 1.9 MonitorManager monMan = MonitorManager.getInstance();
98     monMan.start();
99    
100     // setup the AlerterManager
101     AlerterManager alertMan = AlerterManager.getInstance();
102     alertMan.start();
103    
104 tdb 1.5 _logger.write(toString(), Logger.SYSINIT, "started");
105    
106     }
107 tdb 1.12
108     /**
109     * Does a dependency check. Used mainly at startup to
110     * see if the required dependencies (components) are up
111     * and running.
112     *
113     * @return a boolean value, true if the depdencies are satisfied
114     */
115     public boolean depCheck() {
116     try {
117     org.omg.CORBA.Object obj;
118     // first check the ConfigurationManager is alive
119     obj = _refman.getCORBARef("iscream.ConfigurationManager");
120     // then get some info on the CLI
121     ConfigurationProxy cp = ConfigurationProxy.getInstance();
122     String cli = cp.getProperty("RootFilter", "RootFilter.realtimeInterfaceName");
123     // finally check the CLI is alive
124     obj = _refman.getCORBARef("iscream.ClientInterface." + cli);
125     } catch(ComponentCORBAException e) {
126     _logger.write(toString(), Logger.WARNING, "Dependency Failure: "+e);
127     return false;
128     } catch(PropertyNotFoundException e) {
129     _logger.write(toString(), Logger.WARNING, "Unable to obtain configuration: "+e);
130     return false;
131     }
132     // dependency check suceeded
133     return true;
134     }
135    
136 tdb 1.5 /**
137     * Overrides the {@link java.lang.Object#toString() Object.toString()}
138     * method to provide clean logging (every class should have this).
139     *
140     * This uses the uk.ac.ukc.iscream.util.FormatName class
141     * to format the toString()
142     *
143     * @return the name of this class and its CVS revision
144     */
145     public String toString() {
146     return FormatName.getName(
147     NAME,
148     getClass().getName(),
149     REVISION);
150 tdb 1.1 }
151 tdb 1.5
152     //---PRIVATE METHODS---
153    
154     //---ACCESSOR/MUTATOR METHODS---
155    
156     //---ATTRIBUTES---
157    
158     /**
159     * This holds a reference to the
160     * system logger that is being used.
161     */
162 tdb 1.6 private Logger _logger;
163 tdb 1.5
164     /**
165     * A reference to the reference manager in use
166     */
167 tdb 1.6 private ReferenceManager _refman;
168 tdb 1.5
169     //---STATIC ATTRIBUTES---
170 ajm 1.9
171     /**
172     * A queue for the alerter manager
173     */
174     public static Queue _alerterQueue;
175    
176     /**
177     * A queue for the monitor manager
178     */
179     public static Queue _monitorQueue;
180 tdb 1.1
181     }