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.1
Committed: Thu Nov 30 00:54:27 2000 UTC (23 years, 5 months ago) by ajm
Branch: MAIN
Log Message:
initial checkin

File Contents

# User Rev Content
1 ajm 1.1 //---PACKAGE DECLARATION---
2     package uk.ac.ukc.iscream.refman;
3    
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     * are CORBA based. It also handles ORB initialisation.
15     *
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     * @author $Author: tdb1 $
22     * @version $Id: TemplateClass.java,v 1.5 2000/11/13 18:20:09 tdb1 Exp $
23     */
24     public class ReferenceManager {
25    
26     //---FINAL ATTRIBUTES---
27    
28     /**
29     * The current CVS revision of this class
30     */
31     public final String REVISION = "$Revision: 1.5 $";
32    
33     //---STATIC METHODS---
34    
35     /**
36     * This essentially formats the toString() source for an
37     * object wanting to make a log entry.
38     *
39     * @param source the source of the call
40     * @param rev the CVS revision number of the caller
41     *
42     * @return the formatted string
43    
44     public static String logString(Object source, String rev) {
45     if (_instance == null) {
46     return "unamed{" + source.getClass().getName() + "}(" + rev.substring(11, rev.length() - 2) + ")";
47     }
48     return getInstance().getName() + "{" + source.getClass().getName() + "}(" + rev.substring(11, rev.length() - 2) + ")";
49     }
50     ` */
51    
52     /**
53     * This creates the single instance of the ReferenceManager by
54     * calling the private constructor. If it is called twice,
55     * it detects an instance already exits and throws an exception.
56     *
57     * @param args the args to be passed to the ORB
58     * @param name the name of the component that will use this singleton
59     *
60     * @return a reference to the ReferenceManager
61     *
62     * @throws AlreadyInitialisedException if this method has already been called
63     */
64     public static ReferenceManager init(String[] args, String name) throws AlreadyInitialisedException {
65     if (_instance != null) {
66     throw new AlreadyInitialisedException("init has already been called");
67     }
68     _instance = new ReferenceManager(args, name);
69     return _instance;
70     }
71    
72     /**
73     * This returns a reference to the single instance of the
74     * ReferenceManager.
75     *
76     * @return a reference to the ReferenceManager
77     *
78     * @throws NotInitialisedException if the reference manager has not been initialised
79     */
80     public static ReferenceManager getInstance() throws NotInitialisedException {
81     if (_instance == null) {
82     throw new NotInitialisedException("attempt to obtain reference when not initialised");
83     }
84     return _instance;
85     }
86    
87     //---CONSTRUCTORS---
88    
89     /**
90     * This is a private constructor
91     * This ensures that the system performs according to a Singleton design pattern
92     *
93     * @param args the args to be passed to the ORB
94     * @param name the name of the component that will use this singleton
95     */
96     private ReferenceManager(String[] args, String name) {
97     _orb = ORB.init(args, null);
98     _name = name;
99     getLogger().write(toString(), Logger.SYSINIT, "created");
100     }
101    
102     //---PUBLIC METHODS---
103    
104     /**
105     * Overrides the {@link java.lang.Object#toString() Object.toString()}
106     * method to provide clean logging (every class should have this).
107     *
108     * @return the name of this class and its CVS revision
109     */
110     public String toString() {
111     return getName() + "{" + getClass().getName() + "}(" + REVISION.substring(11, REVISION.length() - 2) + ")";
112     }
113    
114     //---PRIVATE METHODS---
115    
116     //---ACCESSOR/MUTATOR METHODS---
117    
118     /**
119     * Returns a reference to the ORB
120     *
121     * @return the reference this class holds
122     */
123     public ORB getORB() {
124     return _orb;
125     }
126    
127     /**
128     * Returns a reference to the Root POA
129     * This will throw a RuntimeException if there is an error
130     *
131     * @return the reference this class holds
132     */
133     public POA getRootPOA() {
134     if (_rootPOA == null) {
135     org.omg.CORBA.Object objRef = null;
136     try {
137     objRef = getORB().resolve_initial_references("RootPOA");
138     } catch (org.omg.CORBA.ORBPackage.InvalidName e) {
139     throw new RuntimeException("CRITICAL:Unable to resolve reference to the RootPOA!\n" +
140     " This indicates an error with your ORB.");
141     }
142     _rootPOA = POAHelper.narrow(objRef);
143     }
144     return _rootPOA;
145     }
146    
147     /**
148     * Returns a reference to the Naming Service
149     * This will throw a RuntimeException if there is an error
150     *
151     * @return the reference this class holds
152     */
153     public NamingContextExt getNS() {
154     if (_ns == null) {
155     org.omg.CORBA.Object objRef = null;
156     try {
157     objRef = getORB().resolve_initial_references("NameService");
158     } catch (org.omg.CORBA.ORBPackage.InvalidName e) {
159     throw new RuntimeException("CRITICAL:Unable to resolve reference to the Naming Service!\n" +
160     " Please check with your CORBA naming service provider.");
161     }
162     _ns = NamingContextExtHelper.narrow(objRef);
163     }
164     return _ns;
165     }
166    
167     /**
168     * Returns a reference to the configuration manager
169     * This will throw a RuntimeException if there is an error
170     *
171     * @return the reference this class holds
172     */
173     public ConfigurationManager getCM() {
174     if (_cm == null) {
175     org.omg.CORBA.Object objRef = null;
176     try {
177     objRef = getNS().resolve(getNS().to_name("iscream.ConfigurationManager"));
178     } catch (org.omg.CosNaming.NamingContextPackage.CannotProceed e) {
179     throw new RuntimeException("CRITICAL:Cannot Proceed - when resolving reference to iscream.ConfigurationManager!\n" +
180     " This indicates an error with your ORB.");
181     } catch (org.omg.CosNaming.NamingContextPackage.InvalidName e) {
182     throw new RuntimeException("CRITICAL:Invalid Name - when resolving reference to iscream.ConfigurationManager!\n" +
183     " This indicates an error with your ORB.");
184     } catch (org.omg.CosNaming.NamingContextPackage.NotFound e) {
185     throw new RuntimeException("CRITICAL:Not Found - when resolving reference to iscream.ConfigurationManager!\n" +
186     " Please check that this component is running.");
187     }
188     _cm = ConfigurationManagerHelper.narrow(objRef);
189     }
190     return _cm;
191     }
192    
193     /**
194     * Returns a reference to the logger
195     * This will throw a RuntimeException if there is an error
196     *
197     * @return the reference this class holds
198     */
199     public Logger getLogger() {
200     if (_logger == null) {
201     org.omg.CORBA.Object objRef = null;
202     try {
203     objRef = getNS().resolve(getNS().to_name("iscream.Logger"));
204     } catch (org.omg.CosNaming.NamingContextPackage.CannotProceed e) {
205     throw new RuntimeException("CRITICAL:Cannot Proceed - when resolving reference to iscream.Logger!\n" +
206     " This indicates an error with your ORB.");
207     } catch (org.omg.CosNaming.NamingContextPackage.InvalidName e) {
208     throw new RuntimeException("CRITICAL:Invalid Name - when resolving reference to iscream.Logger!\n" +
209     " This indicates an error with your ORB.");
210     } catch (org.omg.CosNaming.NamingContextPackage.NotFound e) {
211     throw new RuntimeException("CRITICAL:Not Found - when resolving reference to iscream.Logger!\n" +
212     " Please check that this component is running.");
213     }
214     _logger = LoggerHelper.narrow(objRef);
215     }
216     return _logger;
217     }
218    
219     /**
220     * Returns a reference to the name
221     *
222     * @return the reference this class holds
223     */
224     public String getName() {
225     return _name;
226     }
227    
228     //---ATTRIBUTES---
229    
230     /**
231     * The ORB
232     */
233     private ORB _orb;
234    
235     /**
236     * The Naming Service
237     */
238     private NamingContextExt _ns;
239    
240     /**
241     * The Root POA
242     */
243     private POA _rootPOA;
244    
245     /**
246     * The configuration manager
247     */
248     private ConfigurationManager _cm;
249    
250     /**
251     * The logger
252     */
253     private Logger _logger;
254    
255     /**
256     * The name
257     */
258     private String _name;
259    
260     //---STATIC ATTRIBUTES---
261    
262     /**
263     * A reference to the single instance of this class
264     */
265     private static ReferenceManager _instance;
266     }