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.37
Committed: Fri Sep 6 15:10:48 2002 UTC (21 years, 8 months ago) by tdb
Branch: MAIN
Changes since 1.36: +5 -5 lines
Log Message:
Fix for upgrade to Jacorb 1.4.1. It's our fault actually, we've not been
correctly using the names when binding to the Naming Service. This needs to
be fixed properly at some point, but for now I've changed changed the code
so it "means" the same as it did before the upgrade.

File Contents

# User Rev Content
1 tdb 1.35 /*
2     * i-scream central monitoring system
3 tdb 1.36 * http://www.i-scream.org.uk
4 tdb 1.35 * 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 tdb 1.1 //---PACKAGE DECLARATION---
22 tdb 1.31 package uk.org.iscream.cms.server.filter;
23 tdb 1.1
24     //---IMPORTS---
25 tdb 1.31 import uk.org.iscream.cms.server.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 tdb 1.1
30     /**
31     * A Filter Startup Class
32 ajm 1.16 * A filter is an iscream component.
33 tdb 1.1 *
34 tdb 1.32 * @author $Author: tdb $
35 tdb 1.37 * @version $Id: FilterMain.java,v 1.36 2002/05/21 16:47:17 tdb Exp $
36 tdb 1.1 */
37 tdb 1.19 public class FilterMain implements Component {
38 tdb 1.1
39     //---FINAL ATTRIBUTES---
40    
41     /**
42     * The current CVS revision of this class
43     */
44 tdb 1.37 public static final String REVISION = "$Revision: 1.36 $";
45 tdb 1.1
46     //---STATIC METHODS---
47    
48 ajm 1.16 //---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 ajm 1.24 // get references to key objects
66 tdb 1.27 _logger = _refman.getLogger();
67 ajm 1.24
68 ajm 1.16 _logger.write(toString(), Logger.SYSINIT, "coming up");
69 tdb 1.20
70 tdb 1.25 ConfigurationProxy cp = ConfigurationProxy.getInstance();
71 ajm 1.16
72 tdb 1.32 // which input methods do we need to activate?
73     // default to activating them
74     boolean activateTCPReader = true;
75     boolean activateUDPReader = true;
76     boolean activateCORBAReader = true;
77    
78     // check for TCP Reader
79     try {
80 tdb 1.33 int tcp = Integer.parseInt(cp.getProperty("Filter." + FilterMain.NAME, "Filter.ActivateTCPReader"));
81 tdb 1.32 activateTCPReader = (tcp == 1);
82     } catch (PropertyNotFoundException e) {
83     activateTCPReader = false;
84     } catch (NumberFormatException e) {
85     activateTCPReader = false;
86     }
87     // check for UDP Reader
88     try {
89 tdb 1.33 int udp = Integer.parseInt(cp.getProperty("Filter." + FilterMain.NAME, "Filter.ActivateUDPReader"));
90 tdb 1.32 activateUDPReader = (udp == 1);
91     } catch (PropertyNotFoundException e) {
92     activateUDPReader = false;
93     } catch (NumberFormatException e) {
94     activateUDPReader = false;
95     }
96     // check for CORBA Reader
97 tdb 1.25 try {
98 tdb 1.33 int corba = Integer.parseInt(cp.getProperty("Filter." + FilterMain.NAME, "Filter.ActivateCORBAReader"));
99 tdb 1.32 activateCORBAReader = (corba == 1);
100 tdb 1.25 } catch (PropertyNotFoundException e) {
101 tdb 1.32 activateCORBAReader = false;
102     } catch (NumberFormatException e) {
103     activateCORBAReader = false;
104 tdb 1.25 }
105 ajm 1.13
106 tdb 1.32 // need to use the Queue later on
107 tdb 1.30 Queue queue;
108 tdb 1.32
109     // there's little point starting a Queue and a FilterThread
110     // if nothing is going to be giving us any data
111     if(activateTCPReader || activateUDPReader || activateCORBAReader) {
112     // see if this Queue needs a size limit
113     try {
114 tdb 1.33 int queueSizeLimit = Integer.parseInt(cp.getProperty("Filter." + FilterMain.NAME, "Queue.SizeLimit"));
115     String queueRemoveAlgorithm = cp.getProperty("Filter." + FilterMain.NAME, "Queue.RemoveAlgorithm");
116 tdb 1.32 int algorithm = StringUtils.getStringPos(queueRemoveAlgorithm, Queue.algorithms);
117     if(algorithm != -1) {
118     _logger.write(toString(), Logger.DEBUG, "Starting Queue with size limit of "+queueSizeLimit+", using remove algorithm "+queueRemoveAlgorithm);
119     // we have valid values, so lets start it.
120     queue = new Queue(queueSizeLimit, algorithm);
121     }
122     else {
123     _logger.write(toString(), Logger.WARNING, "Bad Queue Algorithm configuration, not known: "+queueRemoveAlgorithm);
124     // just don't activate a limit
125     queue = new Queue();
126     }
127    
128     } catch (PropertyNotFoundException e) {
129     _logger.write(toString(), Logger.DEBUG, "Optional config not set: "+e);
130     // just don't activate a limit
131     queue = new Queue();
132     } catch (NumberFormatException e) {
133     _logger.write(toString(), Logger.WARNING, "Bad Queue SizeLimit configuration: "+e);
134 tdb 1.30 // just don't activate a limit
135     queue = new Queue();
136     }
137    
138 tdb 1.32 // startup a monitor on this queue
139     try {
140     // try to get the interval, if this fails, we won't start up the monitor
141 tdb 1.33 int queueMonitorInterval = Integer.parseInt(cp.getProperty("Filter." + FilterMain.NAME, "Queue.MonitorInterval"));
142 tdb 1.32 String queueName = NAME + " Filter";
143     queue.startMonitor(queueMonitorInterval*1000, queueName);
144     } catch (PropertyNotFoundException e) {
145     _logger.write(toString(), Logger.WARNING, "failed to find queue monitor config, disabling. " + e);
146     }
147    
148     // Start a filter thread
149     _logger.write(toString(), Logger.SYSINIT, "starting Filter Thread / Queue consumer");
150     FilterThread filterThread = new FilterThread(queue);
151     filterThread.start();
152     }
153     else {
154     // it's pointless carrying on really...
155     throw new ComponentStartException("Can't start Filter without any inbound data feeds");
156 tdb 1.30 }
157 tdb 1.25
158 tdb 1.32 // the corba listener needs these to be set, so lets
159     // make them something obviously invalid initially
160     int TCPListenPort = -1;
161     int UDPListenPort = -1;
162    
163     // TCP Reader start (for heartbeats)
164     if(activateTCPReader) {
165     try {
166     // get the port number from the configuration
167 tdb 1.33 TCPListenPort = Integer.parseInt(cp.getProperty("Filter." + FilterMain.NAME, "Filter.TCPListenPort"));
168 tdb 1.32 // start the TCPReader
169     _logger.write(toString(), Logger.SYSINIT, "starting Filter TCP listener");
170     TCPReader tcpReader = new TCPReader(TCPListenPort, queue);
171     tcpReader.start();
172     } catch (PropertyNotFoundException e) {
173     _logger.write(toString(), Logger.WARNING, "Unable to start TCPReader due to missing configuration: " + e);
174     } catch (NumberFormatException e) {
175     _logger.write(toString(), Logger.WARNING, "Unable to start TCPReader due to invalid configuration: " + e);
176     }
177 tdb 1.25 }
178 tdb 1.18
179 tdb 1.32 // UDP Reader start (for inbound host data)
180     if(activateUDPReader) {
181     try {
182     // get the port number from the configuration
183 tdb 1.33 UDPListenPort = Integer.parseInt(cp.getProperty("Filter." + FilterMain.NAME, "Filter.UDPListenPort"));
184 tdb 1.32 // start the UDPReader
185     _logger.write(toString(), Logger.SYSINIT, "starting Filter UDP listener");
186     UDPReader udpReader = new UDPReader(UDPListenPort, queue);
187     udpReader.start();
188     } catch (PropertyNotFoundException e) {
189     _logger.write(toString(), Logger.WARNING, "Unable to start UDPReader due to missing configuration: " + e);
190     } catch (NumberFormatException e) {
191     _logger.write(toString(), Logger.WARNING, "Unable to start UDPReader due to invalid configuration: " + e);
192     }
193     }
194 tdb 1.18
195 ajm 1.13 // FilterServant start (for inbound child filter data)
196 tdb 1.32 if(activateCORBAReader) {
197     // start the FilterServant
198     _logger.write(toString(), Logger.SYSINIT, "starting Servant to listen for downstream filters");
199 tdb 1.34 FilterServant filterServant = new FilterServant(queue);
200 tdb 1.37 _refman.bindToOrb(filterServant, "iscream.Filter\\." + FilterMain.NAME);
201 tdb 1.32 }
202 tdb 1.34
203     // FilterInfoServant start (to provide filter information to the server)
204     _logger.write(toString(), Logger.SYSINIT, "starting Servant to provide filter information");
205     FilterInfoServant filterInfoServant = new FilterInfoServant(TCPListenPort, UDPListenPort);
206 tdb 1.37 _refman.bindToOrb(filterInfoServant, "iscream.FilterInfo\\." + FilterMain.NAME);
207 ajm 1.13
208 ajm 1.16 _logger.write(toString(), Logger.SYSINIT, "started");
209 tdb 1.1 }
210 tdb 1.26
211     /**
212     * Does a dependency check. Used mainly at startup to
213     * see if the required dependencies (components) are up
214     * and running.
215     *
216     * @return a boolean value, true if the depdencies are satisfied
217     */
218     public boolean depCheck() {
219     try {
220     org.omg.CORBA.Object obj;
221     // first check the ConfigurationManager is alive
222     obj = _refman.getCORBARef("iscream.ConfigurationManager");
223     // then suss out our parent filter
224     ConfigurationProxy cp = ConfigurationProxy.getInstance();
225 tdb 1.33 String parentFilterName = cp.getProperty("Filter." + FilterMain.NAME, "Filter.parentFilter");
226 tdb 1.26 // finally check the parent filter is alive
227 tdb 1.37 obj = _refman.getCORBARef("iscream.Filter\\." + parentFilterName);
228 tdb 1.26 } catch(ComponentCORBAException e) {
229 tdb 1.28 System.err.println(toString() + ": Dependency Failure: "+e);
230 tdb 1.26 return false;
231     } catch(PropertyNotFoundException e) {
232 tdb 1.28 System.err.println(toString() + ": Unable to obtain configuration: "+e);
233 tdb 1.26 return false;
234     }
235     // dependency check suceeded
236     return true;
237     }
238    
239 ajm 1.16 /**
240     * Overrides the {@link java.lang.Object#toString() Object.toString()}
241     * method to provide clean logging (every class should have this).
242     *
243 tdb 1.31 * This uses the uk.org.iscream.cms.server.util.NameFormat class
244 ajm 1.16 * to format the toString()
245     *
246     * @return the name of this class and its CVS revision
247     */
248     public String toString() {
249     return FormatName.getName(
250 ajm 1.17 NAME,
251 ajm 1.16 getClass().getName(),
252     REVISION);
253 tdb 1.1 }
254    
255     //---PRIVATE METHODS---
256    
257     //---ACCESSOR/MUTATOR METHODS---
258    
259     //---ATTRIBUTES---
260 ajm 1.16
261     /**
262     * This holds a reference to the
263     * system logger that is being used.
264     */
265 ajm 1.24 private Logger _logger;
266 ajm 1.16
267     /**
268     * A reference to the reference manager in use
269     */
270 tdb 1.27 private ReferenceManager _refman = ReferenceManager.getInstance();
271 ajm 1.16
272 tdb 1.1 //---STATIC ATTRIBUTES---
273 ajm 1.16
274     /**
275     * The friendly name for this component, used by
276     * all related classes.
277     * This is set from the configuration.
278     */
279     public static String NAME;
280 tdb 1.1
281 tdb 1.21 }