ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/i-scream/projects/cms/source/server/uk/org/iscream/cms/server/filter/FilterMain.java
Revision: 1.40
Committed: Sun Aug 1 10:40:58 2004 UTC (19 years, 9 months ago) by tdb
Branch: MAIN
CVS Tags: HEAD
Changes since 1.39: +3 -3 lines
Log Message:
Catch a lot of old URL's and update them. Also remove a couple of old files
that aren't used.

File Contents

# Content
1 /*
2 * i-scream central monitoring system
3 * http://www.i-scream.org
4 * Copyright (C) 2000-2002 i-scream
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License
8 * as published by the Free Software Foundation; either version 2
9 * of the License, or (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
19 */
20
21 //---PACKAGE DECLARATION---
22 package uk.org.iscream.cms.server.filter;
23
24 //---IMPORTS---
25 import uk.org.iscream.cms.util.*;
26 import uk.org.iscream.cms.server.core.*;
27 import uk.org.iscream.cms.server.componentmanager.*;
28 import uk.org.iscream.cms.server.filter.*;
29
30 /**
31 * A Filter Startup Class
32 * A filter is an iscream component.
33 *
34 * @author $Author: tdb $
35 * @version $Id: FilterMain.java,v 1.39 2003/02/24 20:18:49 tdb Exp $
36 */
37 public class FilterMain implements Component {
38
39 //---FINAL ATTRIBUTES---
40
41 /**
42 * The current CVS revision of this class
43 */
44 public static final String REVISION = "$Revision: 1.39 $";
45
46 //---STATIC METHODS---
47
48 //---CONSTRUCTORS---
49
50 /**
51 * Constructs a Filter with the name given
52 *
53 * @param givenName the name
54 */
55 public FilterMain(String givenName) {
56 NAME = givenName;
57 }
58
59 //---PUBLIC METHODS---
60
61 /**
62 * Starts the Filter component
63 */
64 public void start() throws ComponentStartException {
65 // get references to key objects
66 _logger = _refman.getLogger();
67
68 _logger.write(toString(), Logger.SYSINIT, "coming up");
69
70 ConfigurationProxy cp = ConfigurationProxy.getInstance();
71
72 // which input methods do we need to activate?
73 // default to activating them
74 boolean activateUDPReader = true;
75 boolean activateCORBAReader = true;
76
77 // check for UDP Reader
78 try {
79 int udp = Integer.parseInt(cp.getProperty("Filter." + FilterMain.NAME, "Filter.ActivateUDPReader"));
80 activateUDPReader = (udp == 1);
81 } catch (PropertyNotFoundException e) {
82 activateUDPReader = false;
83 } catch (NumberFormatException e) {
84 activateUDPReader = false;
85 }
86 // check for CORBA Reader
87 try {
88 int corba = Integer.parseInt(cp.getProperty("Filter." + FilterMain.NAME, "Filter.ActivateCORBAReader"));
89 activateCORBAReader = (corba == 1);
90 } catch (PropertyNotFoundException e) {
91 activateCORBAReader = false;
92 } catch (NumberFormatException e) {
93 activateCORBAReader = false;
94 }
95
96 // need to use the Queue later on
97 Queue queue;
98
99 // there's little point starting a Queue and a FilterThread
100 // if nothing is going to be giving us any data
101 if(activateUDPReader || activateCORBAReader) {
102 // see if this Queue needs a size limit
103 try {
104 int queueSizeLimit = Integer.parseInt(cp.getProperty("Filter." + FilterMain.NAME, "Queue.SizeLimit"));
105 String queueRemoveAlgorithm = cp.getProperty("Filter." + FilterMain.NAME, "Queue.RemoveAlgorithm");
106 int algorithm = StringUtils.getStringPos(queueRemoveAlgorithm, Queue.algorithms);
107 if(algorithm != -1) {
108 _logger.write(toString(), Logger.DEBUG, "Starting Queue with size limit of "+queueSizeLimit+", using remove algorithm "+queueRemoveAlgorithm);
109 // we have valid values, so lets start it.
110 queue = new Queue(queueSizeLimit, algorithm);
111 }
112 else {
113 _logger.write(toString(), Logger.WARNING, "Bad Queue Algorithm configuration, not known: "+queueRemoveAlgorithm);
114 // just don't activate a limit
115 queue = new Queue();
116 }
117
118 } catch (PropertyNotFoundException e) {
119 _logger.write(toString(), Logger.DEBUG, "Optional config not set: "+e);
120 // just don't activate a limit
121 queue = new Queue();
122 } catch (NumberFormatException e) {
123 _logger.write(toString(), Logger.WARNING, "Bad Queue SizeLimit configuration: "+e);
124 // just don't activate a limit
125 queue = new Queue();
126 }
127
128 // startup a monitor on this queue
129 try {
130 // try to get the interval, if this fails, we won't start up the monitor
131 int queueMonitorInterval = Integer.parseInt(cp.getProperty("Filter." + FilterMain.NAME, "Queue.MonitorInterval"));
132 String queueName = NAME + " Filter";
133 queue.startMonitor(queueMonitorInterval*1000, queueName);
134 } catch (PropertyNotFoundException e) {
135 _logger.write(toString(), Logger.WARNING, "failed to find queue monitor config, disabling. " + e);
136 }
137
138 // Start a filter thread
139 _logger.write(toString(), Logger.SYSINIT, "starting Filter Thread / Queue consumer");
140 FilterThread filterThread = new FilterThread(queue);
141 filterThread.start();
142 }
143 else {
144 // it's pointless carrying on really...
145 throw new ComponentStartException("Can't start Filter without any inbound data feeds");
146 }
147
148 // the corba listener needs these to be set, so lets
149 // make them something obviously invalid initially
150 int UDPListenPort = -1;
151
152 // UDP Reader start (for inbound host data)
153 if(activateUDPReader) {
154 try {
155 // get the port number from the configuration
156 UDPListenPort = Integer.parseInt(cp.getProperty("Filter." + FilterMain.NAME, "Filter.UDPListenPort"));
157 // start the UDPReader
158 _logger.write(toString(), Logger.SYSINIT, "starting Filter UDP listener");
159 UDPReader udpReader = new UDPReader(UDPListenPort, queue);
160 udpReader.start();
161 } catch (PropertyNotFoundException e) {
162 _logger.write(toString(), Logger.WARNING, "Unable to start UDPReader due to missing configuration: " + e);
163 } catch (NumberFormatException e) {
164 _logger.write(toString(), Logger.WARNING, "Unable to start UDPReader due to invalid configuration: " + e);
165 }
166 }
167
168 // FilterServant start (for inbound child filter data)
169 if(activateCORBAReader) {
170 // start the FilterServant
171 _logger.write(toString(), Logger.SYSINIT, "starting Servant to listen for downstream filters");
172 FilterServant filterServant = new FilterServant(queue);
173 _refman.bindToOrb(filterServant, "iscream.Filter\\." + FilterMain.NAME);
174 }
175
176 // FilterInfoServant start (to provide filter information to the server)
177 _logger.write(toString(), Logger.SYSINIT, "starting Servant to provide filter information");
178 FilterInfoServant filterInfoServant = new FilterInfoServant(UDPListenPort);
179 _refman.bindToOrb(filterInfoServant, "iscream.FilterInfo\\." + FilterMain.NAME);
180
181 _logger.write(toString(), Logger.SYSINIT, "started");
182 }
183
184 /**
185 * Does a dependency check. Used mainly at startup to
186 * see if the required dependencies (components) are up
187 * and running.
188 *
189 * @return a boolean value, true if the depdencies are satisfied
190 */
191 public boolean depCheck() {
192 try {
193 org.omg.CORBA.Object obj;
194 // first check the ConfigurationManager is alive
195 obj = _refman.getCORBARef("iscream.ConfigurationManager");
196 // then suss out our parent filter
197 ConfigurationProxy cp = ConfigurationProxy.getInstance();
198 String parentFilterName = cp.getProperty("Filter." + FilterMain.NAME, "Filter.parentFilter");
199 // finally check the parent filter is alive
200 obj = _refman.getCORBARef("iscream.Filter\\." + parentFilterName);
201 } catch(ComponentCORBAException e) {
202 System.err.println(toString() + ": Dependency Failure: "+e);
203 return false;
204 } catch(PropertyNotFoundException e) {
205 System.err.println(toString() + ": Unable to obtain configuration: "+e);
206 return false;
207 }
208 // dependency check suceeded
209 return true;
210 }
211
212 /**
213 * Overrides the {@link java.lang.Object#toString() Object.toString()}
214 * method to provide clean logging (every class should have this).
215 *
216 * This uses the uk.org.iscream.cms.util.NameFormat class
217 * to format the toString()
218 *
219 * @return the name of this class and its CVS revision
220 */
221 public String toString() {
222 return FormatName.getName(
223 NAME,
224 getClass().getName(),
225 REVISION);
226 }
227
228 //---PRIVATE METHODS---
229
230 //---ACCESSOR/MUTATOR METHODS---
231
232 //---ATTRIBUTES---
233
234 /**
235 * This holds a reference to the
236 * system logger that is being used.
237 */
238 private Logger _logger;
239
240 /**
241 * A reference to the reference manager in use
242 */
243 private ReferenceManager _refman = ReferenceManager.getInstance();
244
245 //---STATIC ATTRIBUTES---
246
247 /**
248 * The friendly name for this component, used by
249 * all related classes.
250 * This is set from the configuration.
251 */
252 public static String NAME;
253
254 }