ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/i-scream/projects/cms/source/server/uk/org/iscream/cms/server/clientinterface/CorbaControlHandlerServant.java
Revision: 1.12
Committed: Fri Mar 16 02:14:40 2001 UTC (23 years, 2 months ago) by tdb
Branch: MAIN
Changes since 1.11: +11 -2 lines
Log Message:
Added finalizers to the debugging. This could be very useful to know.

File Contents

# Content
1 //---PACKAGE DECLARATION---
2 package uk.org.iscream.clientinterface;
3
4 //---IMPORTS---
5 import uk.org.iscream.util.*;
6 import uk.org.iscream.componentmanager.*;
7 import uk.org.iscream.core.*;
8 import uk.org.iscream.client.*;
9
10
11 /**
12 * Acts as a Control Handler to a CORBA based client.
13 *
14 * !!! FUNDAMENTAL DESIGN PROBLEM !!!
15 * !!! Need a way to "shutdown" this class !!!
16 *
17 * @author $Author: tdb1 $
18 * @version $Id: CorbaControlHandlerServant.java,v 1.11 2001/03/16 01:50:36 tdb1 Exp $
19 */
20 class CorbaControlHandlerServant extends CorbaControlHandlerPOA {
21
22 //---FINAL ATTRIBUTES---
23
24 /**
25 * The current CVS revision of this class
26 */
27 public final String REVISION = "$Revision: 1.11 $";
28
29 //---STATIC METHODS---
30
31 //---CONSTRUCTORS---
32
33 /**
34 * Construct a new CorbaControlHandlerServant.
35 *
36 * @param packetSorter A reference to the PacketSorter in the component
37 * @param client A reference to the "servant" part of the connecting client.
38 * @param queueMonitorInterval The interval at which to monitor our Queue.
39 * @param clientname A name to identify the client.
40 */
41 public CorbaControlHandlerServant(PacketSorter packetSorter, Client client, String clientname) {
42 _packetSorter = packetSorter;
43 _hostList = "";
44 _client = client;
45 _clientname = clientname;
46 _dataHandler = null;
47 _logger.write(toString(), Logger.SYSINIT, "created");
48 }
49
50 //---PUBLIC METHODS---
51
52 /**
53 * Start sending data to the client.
54 *
55 * @return a boolean stating whether the attempt to start succeeded
56 */
57 public boolean startData() {
58 if(_dataHandler == null) {
59 // create a new DataHandler
60 CorbaDataHandler dh = new CorbaDataHandler(_client, this);
61 // register the Queue
62 _packetSorter.register(dh.getQueue(), _hostList);
63 try {
64 // startup a monitor on the DataHandler's queue
65 ConfigurationProxy cp = ConfigurationProxy.getInstance();
66 int queueMonitorInterval = Integer.parseInt(cp.getProperty("ClientInterface", "Queue.MonitorInterval"));
67 String queueName = _name + " CorbaHandler:"+_clientname;
68 dh.getQueue().startMonitor(queueMonitorInterval*1000, _packetSorter.getQueue(), queueName);
69 } catch (PropertyNotFoundException e) {
70 _logger.write(toString(), Logger.WARNING, "failed to find queue monitor config, disabling. " + e);
71 }
72 // start the DataHandler running
73 dh.start();
74 // keep a reference
75 _dataHandler = dh;
76 return true;
77 }
78 else {
79 return false;
80 }
81 }
82
83 /**
84 * Stop sending data to the client.
85 *
86 * @return a boolean stating whether the attempt to stop succeeded
87 */
88 public boolean stopData() {
89 if(_dataHandler != null) {
90 // deregister the Queue
91 _packetSorter.deregister(_dataHandler.getQueue(), _hostList);
92 // stop the DataHandler
93 _dataHandler.shutdown();
94 // destroy the reference
95 _dataHandler = null;
96 return true;
97 }
98 else {
99 return false;
100 }
101 }
102
103 /**
104 * Sets the host list for the Client to the requested semi-colon separated
105 * list of hostnames. This will only succeed if we are not sending data.
106 *
107 * @param hostList A semi-colon separated list of hostnames to use.
108 * @return Whether the request succeeded.
109 */
110 public boolean setHostList(String hostList) {
111 if(_dataHandler == null) {
112 _hostList = hostList;
113 return true;
114 }
115 else {
116 return false;
117 }
118 }
119
120 /**
121 * Disconnect, this will shutdown the data and unhook from
122 * the CORBA ORB.
123 */
124 public void disconnect() {
125 // close the data handler
126 stopData();
127 // disconnect from the ORB
128 try {
129 byte[] oid = _refman.getRootPOA().servant_to_id(this);
130 _refman.getRootPOA().deactivate_object(oid);
131 } catch(Exception e) {
132 _logger.write(this.toString(), Logger.ERROR, "disconnect failed: "+e);
133 }
134 }
135
136 /**
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.org.iscream.util.NameFormat 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 }
151
152 //---PRIVATE METHODS---
153
154 /**
155 * Overridden for debugging purposes
156 * to see when an instance of this class
157 * is destroyed
158 */
159 protected void finalize() throws Throwable {
160 _logger.write(this.toString(), Logger.DEBUG, "finalized by GC");
161 }
162
163 //---ACCESSOR/MUTATOR METHODS---
164
165 //---ATTRIBUTES---
166
167 /**
168 * This is the friendly identifier of the
169 * component this class is running in.
170 * eg, a Filter may be called "filter1",
171 * If this class does not have an owning
172 * component, a name from the configuration
173 * can be placed here. This name could also
174 * be changed to null for utility classes.
175 */
176 private String _name = ClientInterfaceMain.NAME;
177
178 /**
179 * This holds a reference to the
180 * system logger that is being used.
181 */
182 private Logger _logger = ReferenceManager.getInstance().getLogger();
183
184 /**
185 * A reference to the reference manager in use
186 */
187 private ReferenceManager _refman = ReferenceManager.getInstance();
188
189 /**
190 * A reference to the PacketSorter.
191 */
192 private PacketSorter _packetSorter;
193
194 /**
195 * The host list the Client has requested
196 */
197 private String _hostList;
198
199 /**
200 * The "servant" part of the client we're connected to.
201 */
202 private Client _client;
203
204 /**
205 * A reference to our DataHandler, if we have one
206 */
207 private CorbaDataHandler _dataHandler;
208
209 /**
210 * A name to identify the client
211 */
212 private String _clientname;
213
214 //---STATIC ATTRIBUTES---
215
216 }