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.33
Committed: Fri Mar 16 15:16:01 2001 UTC (23 years, 2 months ago) by tdb
Branch: MAIN
Changes since 1.32: +27 -4 lines
Log Message:
Added queue size limit. This is provisional, if it is a success it will be
mirrored across the whole server.

File Contents

# User Rev Content
1 ajm 1.27
2 tdb 1.1 //---PACKAGE DECLARATION---
3 tdb 1.32 package uk.org.iscream.rootfilter;
4 tdb 1.1
5     //---IMPORTS---
6 tdb 1.32 import uk.org.iscream.util.*;
7     import uk.org.iscream.core.*;
8     import uk.org.iscream.componentmanager.*;
9     import uk.org.iscream.clientinterface.*;
10 tdb 1.1
11     /**
12 ajm 1.10 * The root filter is what all filters talk to
13     * Hosts cannot talk to this implementation of a filter.
14     * It provides hooks to all data interfaces for the system
15     * namely the client interface and the db interface.
16     * This is an i-scream component that starts the
17     * RootFilter services.
18 tdb 1.1 *
19 tdb 1.29 * @author $Author: tdb1 $
20 tdb 1.33 * @version $Id: RootFilter.java,v 1.32 2001/03/14 23:25:29 tdb1 Exp $
21 tdb 1.1 */
22 tdb 1.17 public class RootFilter implements Component {
23 tdb 1.1
24     //---FINAL ATTRIBUTES---
25    
26     /**
27     * The current CVS revision of this class
28     */
29 tdb 1.33 public static final String REVISION = "$Revision: 1.32 $";
30 ajm 1.10
31 tdb 1.1 //---STATIC METHODS---
32    
33 ajm 1.10 //---CONSTRUCTORS---
34    
35     //---PUBLIC METHODS---
36 ajm 1.5
37 ajm 1.10 /**
38     * This starts the Root Filter for the system
39     */
40     public void start() throws ComponentStartException {
41 ajm 1.26 // get references to key objects
42 tdb 1.30 _logger = _refman.getLogger();
43 ajm 1.26
44 ajm 1.10 _logger.write(toString(), Logger.SYSINIT, "coming up");
45 tdb 1.28
46     ConfigurationProxy cp = ConfigurationProxy.getInstance();
47     String configName = "RootFilter";
48    
49     // set the name of the root filter
50     try {
51     NAME = cp.getProperty(configName, "RootFilter.name");
52     } catch (PropertyNotFoundException e) {
53     NAME = null;
54     _logger.write(toString(), Logger.WARNING, "RootFilter name not set: "+e);
55 tdb 1.23 }
56 tdb 1.28
57     // try and get the names of the ciReal and ciDB
58     String realInterface, dbInterface;
59     try {
60     realInterface = cp.getProperty(configName, "RootFilter.realtimeInterfaceName");
61     dbInterface = cp.getProperty(configName, "RootFilter.dbInterfaceName");
62     } catch (PropertyNotFoundException e) {
63     _logger.write(toString(), Logger.DEBUG, "Optional config not set: "+e);
64     realInterface = null;
65     dbInterface = null;
66 tdb 1.1 }
67 tdb 1.23
68 ajm 1.13 ClientInterface ciReal = null, ciDB = null;
69 ajm 1.8 // get reference to the client interfaces - the real time one
70 ajm 1.11 if (realInterface != null) {
71 ajm 1.13 ciReal = ClientInterfaceHelper.narrow(_refman.getCORBARef("iscream.ClientInterface." + realInterface));
72 ajm 1.11 }
73 ajm 1.10 // get reference to the client interfaces - and the db one
74 ajm 1.11 if (dbInterface != null) {
75 ajm 1.13 ciDB = ClientInterfaceHelper.narrow(_refman.getCORBARef("iscream.ClientInterface." + dbInterface));
76 ajm 1.11 }
77 tdb 1.33
78 tdb 1.28 // setup a queue
79 tdb 1.33 Queue queue;
80     // see if this Queue needs a size limit
81     try {
82     int queueSizeLimit = Integer.parseInt(cp.getProperty(configName, "Queue.SizeLimit"));
83     String queueRemoveAlgorithm = cp.getProperty(configName, "Queue.RemoveAlgorithm");
84     int algorithm = StringUtils.getStringPos(queueRemoveAlgorithm, Queue.algorithms);
85     if(algorithm != -1) {
86     queue = new Queue(queueSizeLimit, algorithm);
87     }
88     else {
89     _logger.write(toString(), Logger.WARNING, "Bad Queue Algorithm configuration, not known: "+queueRemoveAlgorithm);
90     // just don't activate a limit
91     queue = new Queue();
92     }
93    
94     } catch (PropertyNotFoundException e) {
95     _logger.write(toString(), Logger.DEBUG, "Optional config not set: "+e);
96     // just don't activate a limit
97     queue = new Queue();
98     } catch (NumberFormatException e) {
99     _logger.write(toString(), Logger.WARNING, "Bad Queue SizeLimit configuration: "+e);
100     // just don't activate a limit
101     queue = new Queue();
102     }
103 tdb 1.15
104 tdb 1.28 // startup a monitor on this queue
105     try {
106     // try to get the interval, if this fails, we won't start up the monitor
107     int queueMonitorInterval = Integer.parseInt(cp.getProperty(configName, "Queue.MonitorInterval"));
108     String queueName = NAME + " RootFilter";
109     queue.startMonitor(queueMonitorInterval*1000, queueName);
110     } catch (PropertyNotFoundException e) {
111     _logger.write(toString(), Logger.WARNING, "failed to find queue monitor config, disabling. " + e);
112     }
113 tdb 1.15
114 ajm 1.11 if (realInterface == null) {
115     _logger.write(toString(), Logger.DEBUG, "hooked to interfaces - " + dbInterface);
116 tdb 1.15 CIWrapper c = new CIWrapper(ciDB, queue);
117     c.start();
118 ajm 1.11 } else if (dbInterface == null) {
119     _logger.write(toString(), Logger.DEBUG, "hooked to interfaces - " + realInterface);
120 tdb 1.15 CIWrapper c = new CIWrapper(ciReal, queue);
121     c.start();
122 ajm 1.11 } else {
123     _logger.write(toString(), Logger.DEBUG, "hooked to interfaces - " + realInterface + " & " + dbInterface);
124 tdb 1.15 CIWrapper c = new CIWrapper(ciReal, queue);
125     c.start();
126     c = new CIWrapper(ciDB, queue);
127     c.start();
128 ajm 1.11 }
129 tdb 1.15
130 ajm 1.8 // RootFilterServant start (for inbound child filter data)
131 ajm 1.10 _logger.write(toString(), Logger.DEBUG, "starting Root Filter");
132 tdb 1.15 RootFilterServant filterServant = new RootFilterServant(queue);
133 ajm 1.8 // bind to the naming service as a filter
134 ajm 1.14 _refman.bindToOrb(filterServant, "iscream.Filter." + RootFilter.NAME);
135 tdb 1.1
136 ajm 1.10 _logger.write(toString(), Logger.SYSINIT, "started");
137 tdb 1.18
138 tdb 1.29 }
139    
140     /**
141     * Does a dependency check. Used mainly at startup to
142     * see if the required dependencies (components) are up
143     * and running.
144     *
145     * @return a boolean value, true if the depdencies are satisfied
146     */
147     public boolean depCheck() {
148     try {
149     org.omg.CORBA.Object obj;
150     // first check the ConfigurationManager is alive
151     obj = _refman.getCORBARef("iscream.ConfigurationManager");
152     // then get some info on the CLI and DBI
153     ConfigurationProxy cp = ConfigurationProxy.getInstance();
154     String cli = cp.getProperty("RootFilter", "RootFilter.realtimeInterfaceName");
155     String dbi = cp.getProperty("RootFilter", "RootFilter.dbInterfaceName");
156     // finally check the CLI and DBI are alive
157     obj = _refman.getCORBARef("iscream.ClientInterface." + cli);
158     obj = _refman.getCORBARef("iscream.ClientInterface." + dbi);
159     } catch(ComponentCORBAException e) {
160 tdb 1.31 System.err.println(toString() + ": Dependency Failure: "+e);
161 tdb 1.29 return false;
162     } catch(PropertyNotFoundException e) {
163 tdb 1.31 System.err.println(toString() + ": Unable to obtain configuration: "+e);
164 tdb 1.29 return false;
165     }
166     // dependency check suceeded
167     return true;
168 tdb 1.1 }
169 ajm 1.10
170     /**
171     * Overrides the {@link java.lang.Object#toString() Object.toString()}
172     * method to provide clean logging (every class should have this).
173     *
174 tdb 1.32 * This uses the uk.org.iscream.util.NameFormat class
175 ajm 1.10 * to format the toString()
176     *
177     * @return the name of this class and its CVS revision
178     */
179     public String toString() {
180     return FormatName.getName(
181 ajm 1.14 NAME,
182 ajm 1.10 getClass().getName(),
183     REVISION);
184 tdb 1.1 }
185    
186     //---PRIVATE METHODS---
187    
188     //---ACCESSOR/MUTATOR METHODS---
189    
190     //---ATTRIBUTES---
191 ajm 1.10
192     /**
193     * This holds a reference to the
194     * system logger that is being used.
195     */
196 ajm 1.26 private Logger _logger;
197 ajm 1.10
198     /**
199     * A reference to the reference manager in use
200     */
201 tdb 1.30 private ReferenceManager _refman = ReferenceManager.getInstance();
202 ajm 1.10
203 tdb 1.1 //---STATIC ATTRIBUTES---
204 ajm 1.10
205     /**
206     * The friendly name for this component, used by
207     * all related classes.
208     * This is set from the configuration.
209     */
210     public static String NAME;
211 tdb 1.1
212 ajm 1.5 }