ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/i-scream/projects/cms/source/util/uk/org/iscream/cms/util/ReferenceManager.java
Revision: 1.5
Committed: Mon Dec 11 16:38:09 2000 UTC (23 years, 4 months ago) by ajm
Branch: MAIN
Changes since 1.4: +43 -34 lines
Log Message:
Changed the Runtimes to Errors...as these are what they are!
Still stack traces though, which I don't like.

File Contents

# User Rev Content
1 ajm 1.1 //---PACKAGE DECLARATION---
2 ajm 1.3 package uk.ac.ukc.iscream.util;
3 ajm 1.1
4     //---IMPORTS---
5     import org.omg.CORBA.ORB;
6     import org.omg.CosNaming.*;
7     import org.omg.PortableServer.*;
8     import uk.ac.ukc.iscream.core.*;
9    
10     /**
11     * This class returns references for global system objects.
12     * This class is used to create and return references to objects
13     * that are required throughout the system. Most of which
14 ajm 1.2 * are CORBA based. It also manages the ORB for the component.
15 ajm 1.1 *
16     * It is a singleton object with a static method to obtain a
17     * reference to it. This removes the need for passing
18     * references to all the objects it contains throughout
19     * a component.
20     *
21 ajm 1.2 * @author $Author: ajm4 $
22 ajm 1.5 * @version $Id: ReferenceManager.java,v 1.4 2000/11/30 03:07:25 ajm4 Exp $
23 ajm 1.1 */
24     public class ReferenceManager {
25    
26     //---FINAL ATTRIBUTES---
27    
28     /**
29     * The current CVS revision of this class
30     */
31 ajm 1.5 public final String REVISION = "$Revision: 1.4 $";
32 ajm 1.1
33     //---STATIC METHODS---
34    
35     /**
36     * This creates the single instance of the ReferenceManager by
37     * calling the private constructor. If it is called twice,
38     * it detects an instance already exits and throws an exception.
39     *
40     * @param args the args to be passed to the ORB
41     * @param name the name of the component that will use this singleton
42     *
43     * @return a reference to the ReferenceManager
44     *
45     * @throws AlreadyInitialisedException if this method has already been called
46     */
47     public static ReferenceManager init(String[] args, String name) throws AlreadyInitialisedException {
48     if (_instance != null) {
49     throw new AlreadyInitialisedException("init has already been called");
50     }
51     _instance = new ReferenceManager(args, name);
52     return _instance;
53     }
54    
55     /**
56     * This returns a reference to the single instance of the
57     * ReferenceManager.
58     *
59     * @return a reference to the ReferenceManager
60     *
61     * @throws NotInitialisedException if the reference manager has not been initialised
62     */
63     public static ReferenceManager getInstance() throws NotInitialisedException {
64     if (_instance == null) {
65     throw new NotInitialisedException("attempt to obtain reference when not initialised");
66     }
67     return _instance;
68     }
69    
70     //---CONSTRUCTORS---
71    
72     /**
73     * This is a private constructor
74     * This ensures that the system performs according to a Singleton design pattern
75     *
76     * @param args the args to be passed to the ORB
77     * @param name the name of the component that will use this singleton
78     */
79     private ReferenceManager(String[] args, String name) {
80     _orb = ORB.init(args, null);
81     _name = name;
82     }
83    
84     //---PUBLIC METHODS---
85    
86     /**
87 ajm 1.2 * Obtains a CORBA reference through the naming service
88     * for the named object.
89 ajm 1.5 * This will throw a Error if there is an error
90 ajm 1.2 *
91     * @param name the name of the CORBA object to resolve
92     *
93     * @return a reference to the object
94     */
95     public org.omg.CORBA.Object getCORBARef(String name) {
96     org.omg.CORBA.Object objRef = null;
97     try {
98     objRef = getNS().resolve(getNS().to_name(name));
99     } catch (org.omg.CosNaming.NamingContextPackage.CannotProceed e) {
100 ajm 1.5 throw new Error("\nCRITICAL:Naming Service Cannot Proceed - when resolving reference to " + name + "!\n" +
101     " Please check with your CORBA naming service provider.");
102 ajm 1.2 } catch (org.omg.CosNaming.NamingContextPackage.InvalidName e) {
103 ajm 1.5 throw new Error("\nCRITICAL:Invalid Name - when resolving reference to " + name + "!\n" +
104     " Please check with your CORBA naming service provider.");
105 ajm 1.2 } catch (org.omg.CosNaming.NamingContextPackage.NotFound e) {
106 ajm 1.5 throw new Error("\nCRITICAL:Not Found - when resolving reference to " + name + "!\n" +
107     " Please check that this component is running.");
108 ajm 1.2 }
109     return objRef;
110     }
111    
112     /**
113     * Binds a given servant with the given name
114     * to the naming service.
115 ajm 1.5 * This will throw a Error if there is an error
116 ajm 1.2 *
117     * @param objRef a reverence to the servant object
118     * @param name the name to bind to the naming service with
119     */
120     public void bindToOrb(org.omg.PortableServer.Servant objRef, String name) {
121     try {
122     getNS().bind(getNS().to_name(name), getRootPOA().servant_to_reference(objRef));
123     } catch (org.omg.PortableServer.POAPackage.WrongPolicy e) {
124 ajm 1.5 throw new Error("\nCRITICAL:Wrong POA Policy - when binding " + name + "!\n" +
125     " This indicates an error with your ORB.");
126 ajm 1.2 } catch (org.omg.PortableServer.POAPackage.ServantNotActive e) {
127 ajm 1.5 throw new Error("\nCRITICAL:ServantNotActive - when binding " + name + "!\n" +
128     " This indicates an error with your ORB.");
129 ajm 1.2 } catch (org.omg.CosNaming.NamingContextPackage.InvalidName e) {
130 ajm 1.5 throw new Error("\nCRITICAL:Invalid Name - when binding " + name + "!\n" +
131     " Please check with your CORBA naming service provider.");
132 ajm 1.2 } catch (org.omg.CosNaming.NamingContextPackage.CannotProceed e) {
133 ajm 1.5 throw new Error("\nCRITICAL:Naming Service Cannot Proceed - when binding " + name + "!\n" +
134     " Please check with your CORBA naming service provider.");
135 ajm 1.2 } catch (org.omg.CosNaming.NamingContextPackage.NotFound e) {
136 ajm 1.5 throw new Error("\nCRITICAL:Naming Service Not Found - when binding " + name + "!\n" +
137     " Please check with your CORBA naming service provider.");
138 ajm 1.2 } catch (org.omg.CosNaming.NamingContextPackage.AlreadyBound e) {
139 ajm 1.5 throw new Error("\nCRITICAL:Already Bound - when binding " + name + "!\n" +
140     " Another component with this name is already running.");
141 ajm 1.2 }
142     }
143    
144     /**
145     * Activates the POA
146 ajm 1.5 * This will throw a Error if there is an error
147 ajm 1.2 */
148     public void activatePOA() {
149     try {
150     getRootPOA().the_POAManager().activate();
151     } catch (org.omg.PortableServer.POAManagerPackage.AdapterInactive e) {
152 ajm 1.5 throw new Error("\nCRITICAL:POA Set Inactive - when trying to activate POA!\n" +
153     " This indicates an error with your ORB.");
154 ajm 1.2 }
155     }
156    
157     /**
158 ajm 1.1 * Overrides the {@link java.lang.Object#toString() Object.toString()}
159     * method to provide clean logging (every class should have this).
160     *
161     * @return the name of this class and its CVS revision
162     */
163     public String toString() {
164     return getName() + "{" + getClass().getName() + "}(" + REVISION.substring(11, REVISION.length() - 2) + ")";
165     }
166    
167     //---PRIVATE METHODS---
168    
169     //---ACCESSOR/MUTATOR METHODS---
170    
171     /**
172     * Returns a reference to the ORB
173     *
174     * @return the reference this class holds
175     */
176     public ORB getORB() {
177     return _orb;
178     }
179    
180     /**
181     * Returns a reference to the Root POA
182 ajm 1.5 * This will throw a Error if there is an error
183 ajm 1.1 *
184     * @return the reference this class holds
185     */
186     public POA getRootPOA() {
187     if (_rootPOA == null) {
188     org.omg.CORBA.Object objRef = null;
189     try {
190     objRef = getORB().resolve_initial_references("RootPOA");
191     } catch (org.omg.CORBA.ORBPackage.InvalidName e) {
192 ajm 1.5 throw new Error("\nCRITICAL:Unable to resolve reference to the RootPOA!\n" +
193     " This indicates an error with your ORB.");
194 ajm 1.1 }
195     _rootPOA = POAHelper.narrow(objRef);
196     }
197     return _rootPOA;
198     }
199    
200     /**
201     * Returns a reference to the Naming Service
202 ajm 1.5 * This will throw a Error if there is an error
203 ajm 1.1 *
204     * @return the reference this class holds
205     */
206     public NamingContextExt getNS() {
207     if (_ns == null) {
208     org.omg.CORBA.Object objRef = null;
209     try {
210     objRef = getORB().resolve_initial_references("NameService");
211     } catch (org.omg.CORBA.ORBPackage.InvalidName e) {
212 ajm 1.5 throw new Error("\nCRITICAL:Unable to resolve reference to the Naming Service!\n" +
213     " Please check with your CORBA naming service provider.");
214 ajm 1.1 }
215     _ns = NamingContextExtHelper.narrow(objRef);
216     }
217 ajm 1.5 // check we managed to talk to the naming service
218     if (_ns == null) {
219     throw new Error("\nCRITICAL:Unable to resolve reference to the Naming Service!\n" +
220     " Please check with your CORBA naming service provider.");
221     }
222 ajm 1.1 return _ns;
223     }
224    
225     /**
226     * Returns a reference to the configuration manager
227 ajm 1.5 * This will throw a Error if there is an error
228 ajm 1.1 *
229     * @return the reference this class holds
230     */
231     public ConfigurationManager getCM() {
232     if (_cm == null) {
233 ajm 1.2 _cm = ConfigurationManagerHelper.narrow(getCORBARef("iscream.ConfigurationManager"));
234 ajm 1.1 }
235 ajm 1.5 // check we managed to talk to the configuration manager
236     if (_cm == null) {
237     throw new Error("\nCRITICAL:Unable to resolve reference to the Configuration Manager!\n" +
238     " Please check with your CORBA naming service provider.");
239     }
240 ajm 1.1 return _cm;
241     }
242    
243     /**
244     * Returns a reference to the logger
245 ajm 1.5 * This will throw a Error if there is an error
246 ajm 1.1 *
247     * @return the reference this class holds
248     */
249     public Logger getLogger() {
250     if (_logger == null) {
251 ajm 1.2 _logger = LoggerHelper.narrow(getCORBARef("iscream.Logger"));
252 ajm 1.1 }
253     return _logger;
254 ajm 1.4 }
255    
256     /**
257     * Sets the reference to the name
258     *
259     * @param the new name
260     */
261     public void setName(String name) {
262     _name = name;
263 ajm 1.1 }
264    
265     /**
266     * Returns a reference to the name
267     *
268     * @return the reference this class holds
269     */
270     public String getName() {
271     return _name;
272     }
273    
274     //---ATTRIBUTES---
275    
276     /**
277     * The ORB
278     */
279     private ORB _orb;
280    
281     /**
282     * The Naming Service
283     */
284     private NamingContextExt _ns;
285    
286     /**
287     * The Root POA
288     */
289     private POA _rootPOA;
290    
291     /**
292     * The configuration manager
293     */
294     private ConfigurationManager _cm;
295    
296     /**
297     * The logger
298     */
299     private Logger _logger;
300    
301     /**
302     * The name
303     */
304     private String _name;
305    
306     //---STATIC ATTRIBUTES---
307    
308     /**
309     * A reference to the single instance of this class
310     */
311     private static ReferenceManager _instance;
312     }