ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/i-scream/projects/cms/source/server/uk/org/iscream/cms/server/rootfilter/RootFilter.java
Revision: 1.41
Committed: Fri Sep 6 15:10:48 2002 UTC (21 years, 8 months ago) by tdb
Branch: MAIN
Changes since 1.40: +7 -7 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.39 /*
2     * i-scream central monitoring system
3 tdb 1.40 * http://www.i-scream.org.uk
4 tdb 1.39 * 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 ajm 1.27
22 tdb 1.1 //---PACKAGE DECLARATION---
23 tdb 1.38 package uk.org.iscream.cms.server.rootfilter;
24 tdb 1.1
25     //---IMPORTS---
26 tdb 1.38 import uk.org.iscream.cms.server.util.*;
27     import uk.org.iscream.cms.server.core.*;
28     import uk.org.iscream.cms.server.componentmanager.*;
29     import uk.org.iscream.cms.server.clientinterface.*;
30 tdb 1.1
31     /**
32 ajm 1.10 * The root filter is what all filters talk to
33     * Hosts cannot talk to this implementation of a filter.
34     * It provides hooks to all data interfaces for the system
35     * namely the client interface and the db interface.
36     * This is an i-scream component that starts the
37     * RootFilter services.
38 tdb 1.1 *
39 tdb 1.39 * @author $Author: tdb $
40 tdb 1.41 * @version $Id: RootFilter.java,v 1.40 2002/05/21 16:47:18 tdb Exp $
41 tdb 1.1 */
42 tdb 1.17 public class RootFilter implements Component {
43 tdb 1.1
44     //---FINAL ATTRIBUTES---
45    
46     /**
47     * The current CVS revision of this class
48     */
49 tdb 1.41 public static final String REVISION = "$Revision: 1.40 $";
50 ajm 1.10
51 tdb 1.1 //---STATIC METHODS---
52    
53 ajm 1.10 //---CONSTRUCTORS---
54    
55     //---PUBLIC METHODS---
56 ajm 1.5
57 ajm 1.10 /**
58     * This starts the Root Filter for the system
59     */
60     public void start() throws ComponentStartException {
61 ajm 1.26 // get references to key objects
62 tdb 1.30 _logger = _refman.getLogger();
63 ajm 1.26
64 ajm 1.10 _logger.write(toString(), Logger.SYSINIT, "coming up");
65 tdb 1.28
66     ConfigurationProxy cp = ConfigurationProxy.getInstance();
67     String configName = "RootFilter";
68    
69     // set the name of the root filter
70     try {
71     NAME = cp.getProperty(configName, "RootFilter.name");
72     } catch (PropertyNotFoundException e) {
73     NAME = null;
74     _logger.write(toString(), Logger.WARNING, "RootFilter name not set: "+e);
75 tdb 1.23 }
76 tdb 1.28
77     // try and get the names of the ciReal and ciDB
78     String realInterface, dbInterface;
79 tdb 1.36 // first realtime
80 tdb 1.28 try {
81     realInterface = cp.getProperty(configName, "RootFilter.realtimeInterfaceName");
82 tdb 1.36 } catch (PropertyNotFoundException e) {
83     _logger.write(toString(), Logger.DEBUG, "Optional config not set: "+e);
84     realInterface = null;
85     }
86     // next dbi
87     try {
88 tdb 1.28 dbInterface = cp.getProperty(configName, "RootFilter.dbInterfaceName");
89     } catch (PropertyNotFoundException e) {
90     _logger.write(toString(), Logger.DEBUG, "Optional config not set: "+e);
91     dbInterface = null;
92 tdb 1.1 }
93 tdb 1.23
94 ajm 1.13 ClientInterface ciReal = null, ciDB = null;
95 ajm 1.8 // get reference to the client interfaces - the real time one
96 ajm 1.11 if (realInterface != null) {
97 tdb 1.41 ciReal = ClientInterfaceHelper.narrow(_refman.getCORBARef("iscream.ClientInterface\\." + realInterface));
98 ajm 1.11 }
99 ajm 1.10 // get reference to the client interfaces - and the db one
100 ajm 1.11 if (dbInterface != null) {
101 tdb 1.41 ciDB = ClientInterfaceHelper.narrow(_refman.getCORBARef("iscream.ClientInterface\\." + dbInterface));
102 ajm 1.11 }
103 tdb 1.33
104 tdb 1.28 // setup a queue
105 tdb 1.33 Queue queue;
106     // see if this Queue needs a size limit
107     try {
108     int queueSizeLimit = Integer.parseInt(cp.getProperty(configName, "Queue.SizeLimit"));
109     String queueRemoveAlgorithm = cp.getProperty(configName, "Queue.RemoveAlgorithm");
110     int algorithm = StringUtils.getStringPos(queueRemoveAlgorithm, Queue.algorithms);
111     if(algorithm != -1) {
112 tdb 1.34 _logger.write(toString(), Logger.DEBUG, "Starting Queue with size limit of "+queueSizeLimit+", using remove algorithm "+queueRemoveAlgorithm);
113     // we have valid values, so lets start it.
114 tdb 1.33 queue = new Queue(queueSizeLimit, algorithm);
115     }
116     else {
117     _logger.write(toString(), Logger.WARNING, "Bad Queue Algorithm configuration, not known: "+queueRemoveAlgorithm);
118     // just don't activate a limit
119     queue = new Queue();
120     }
121    
122     } catch (PropertyNotFoundException e) {
123     _logger.write(toString(), Logger.DEBUG, "Optional config not set: "+e);
124     // just don't activate a limit
125     queue = new Queue();
126     } catch (NumberFormatException e) {
127     _logger.write(toString(), Logger.WARNING, "Bad Queue SizeLimit configuration: "+e);
128     // just don't activate a limit
129     queue = new Queue();
130     }
131 tdb 1.15
132 tdb 1.28 // startup a monitor on this queue
133     try {
134     // try to get the interval, if this fails, we won't start up the monitor
135     int queueMonitorInterval = Integer.parseInt(cp.getProperty(configName, "Queue.MonitorInterval"));
136     String queueName = NAME + " RootFilter";
137     queue.startMonitor(queueMonitorInterval*1000, queueName);
138     } catch (PropertyNotFoundException e) {
139     _logger.write(toString(), Logger.WARNING, "failed to find queue monitor config, disabling. " + e);
140     }
141 tdb 1.15
142 tdb 1.37 if (realInterface != null && dbInterface != null) {
143     _logger.write(toString(), Logger.DEBUG, "hooked to interfaces - " + realInterface + " & " + dbInterface);
144     CIWrapper c = new CIWrapper(ciReal, queue);
145     c.start();
146     c = new CIWrapper(ciDB, queue);
147     c.start();
148     } else if (realInterface == null) {
149 ajm 1.11 _logger.write(toString(), Logger.DEBUG, "hooked to interfaces - " + dbInterface);
150 tdb 1.15 CIWrapper c = new CIWrapper(ciDB, queue);
151     c.start();
152 ajm 1.11 } else if (dbInterface == null) {
153     _logger.write(toString(), Logger.DEBUG, "hooked to interfaces - " + realInterface);
154 tdb 1.15 CIWrapper c = new CIWrapper(ciReal, queue);
155     c.start();
156 ajm 1.11 } else {
157 tdb 1.37 _logger.write(toString(), Logger.WARNING, "not hooked to any client interfaces, this is probably not intentional!");
158 ajm 1.11 }
159 tdb 1.15
160 ajm 1.8 // RootFilterServant start (for inbound child filter data)
161 ajm 1.10 _logger.write(toString(), Logger.DEBUG, "starting Root Filter");
162 tdb 1.15 RootFilterServant filterServant = new RootFilterServant(queue);
163 ajm 1.8 // bind to the naming service as a filter
164 tdb 1.41 _refman.bindToOrb(filterServant, "iscream.Filter\\." + RootFilter.NAME);
165 tdb 1.1
166 ajm 1.10 _logger.write(toString(), Logger.SYSINIT, "started");
167 tdb 1.18
168 tdb 1.29 }
169    
170     /**
171     * Does a dependency check. Used mainly at startup to
172     * see if the required dependencies (components) are up
173     * and running.
174     *
175     * @return a boolean value, true if the depdencies are satisfied
176     */
177     public boolean depCheck() {
178 tdb 1.35 org.omg.CORBA.Object obj;
179    
180     // first we need to check the Configuration system is available
181 tdb 1.29 try {
182     // first check the ConfigurationManager is alive
183     obj = _refman.getCORBARef("iscream.ConfigurationManager");
184 tdb 1.35 } catch(ComponentCORBAException e) {
185     System.err.println(toString() + ": Dependency Failure: "+e);
186     return false;
187     }
188    
189     // next we need to check which client interfaces *should*
190     // be active, and check them. Note they do not have to
191     // be enabled, and we should check this.
192     // -- each check only forces a dependency if it's configured
193     ConfigurationProxy cp = ConfigurationProxy.getInstance();
194     // first check the client interface
195     try {
196 tdb 1.29 String cli = cp.getProperty("RootFilter", "RootFilter.realtimeInterfaceName");
197 tdb 1.41 obj = _refman.getCORBARef("iscream.ClientInterface\\." + cli);
198 tdb 1.35 } catch(ComponentCORBAException e) {
199     System.err.println(toString() + ": Dependency Failure: "+e);
200     return false;
201     } catch(PropertyNotFoundException e) {
202     System.err.println(toString() + ": Client interface not configured and thus not enabled.");
203     }
204     // second check the database interface
205     try {
206 tdb 1.29 String dbi = cp.getProperty("RootFilter", "RootFilter.dbInterfaceName");
207 tdb 1.41 obj = _refman.getCORBARef("iscream.ClientInterface\\." + dbi);
208 tdb 1.29 } catch(ComponentCORBAException e) {
209 tdb 1.31 System.err.println(toString() + ": Dependency Failure: "+e);
210 tdb 1.29 return false;
211     } catch(PropertyNotFoundException e) {
212 tdb 1.35 System.err.println(toString() + ": Database interface not configured and thus not enabled.");
213 tdb 1.29 }
214 tdb 1.35
215 tdb 1.29 // dependency check suceeded
216     return true;
217 tdb 1.1 }
218 ajm 1.10
219     /**
220     * Overrides the {@link java.lang.Object#toString() Object.toString()}
221     * method to provide clean logging (every class should have this).
222     *
223 tdb 1.38 * This uses the uk.org.iscream.cms.server.util.NameFormat class
224 ajm 1.10 * to format the toString()
225     *
226     * @return the name of this class and its CVS revision
227     */
228     public String toString() {
229     return FormatName.getName(
230 ajm 1.14 NAME,
231 ajm 1.10 getClass().getName(),
232     REVISION);
233 tdb 1.1 }
234    
235     //---PRIVATE METHODS---
236    
237     //---ACCESSOR/MUTATOR METHODS---
238    
239     //---ATTRIBUTES---
240 ajm 1.10
241     /**
242     * This holds a reference to the
243     * system logger that is being used.
244     */
245 ajm 1.26 private Logger _logger;
246 ajm 1.10
247     /**
248     * A reference to the reference manager in use
249     */
250 tdb 1.30 private ReferenceManager _refman = ReferenceManager.getInstance();
251 ajm 1.10
252 tdb 1.1 //---STATIC ATTRIBUTES---
253 ajm 1.10
254     /**
255     * The friendly name for this component, used by
256     * all related classes.
257     * This is set from the configuration.
258     */
259     public static String NAME;
260 tdb 1.1
261 ajm 1.5 }