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
(Generate patch)

Comparing projects/cms/source/server/uk/org/iscream/cms/server/filter/FilterMain.java (file contents):
Revision 1.20 by tdb, Sun Jan 28 06:03:58 2001 UTC vs.
Revision 1.33 by tdb, Wed Mar 20 13:05:49 2002 UTC

# Line 1 | Line 1
1   //---PACKAGE DECLARATION---
2 < package uk.ac.ukc.iscream.filter;
2 > package uk.org.iscream.cms.server.filter;
3  
4   //---IMPORTS---
5 < import uk.ac.ukc.iscream.util.*;
6 < import uk.ac.ukc.iscream.core.*;
7 < import uk.ac.ukc.iscream.componentmanager.*;
8 < import uk.ac.ukc.iscream.filter.*;
5 > import uk.org.iscream.cms.server.util.*;
6 > import uk.org.iscream.cms.server.core.*;
7 > import uk.org.iscream.cms.server.componentmanager.*;
8 > import uk.org.iscream.cms.server.filter.*;
9  
10   /**
11   * A Filter Startup Class
# Line 42 | Line 42 | public class FilterMain implements Component {
42       * Starts the Filter component
43       */
44      public void start() throws ComponentStartException {
45 <              
45 >        // get references to key objects
46 >        _logger = _refman.getLogger();
47 >        
48          _logger.write(toString(), Logger.SYSINIT, "coming up");
47            
48        // configuration variables we require
49        int UDPListenPort = 0;
50        int TCPListenPort = 0;
51        String parentFilterName = null;
49          
50 <        Configuration config = _refman.getCM().getConfiguration(FilterMain.NAME);
51 <        if (config == null) {
52 <            throw new ComponentStartException("Unable to obtain configuration for component");
50 >        ConfigurationProxy cp = ConfigurationProxy.getInstance();
51 >        
52 >        // which input methods do we need to activate?
53 >        // default to activating them
54 >        boolean activateTCPReader = true;
55 >        boolean activateUDPReader = true;
56 >        boolean activateCORBAReader = true;
57 >        
58 >        // check for TCP Reader
59 >        try {
60 >            int tcp = Integer.parseInt(cp.getProperty("Filter." + FilterMain.NAME, "Filter.ActivateTCPReader"));
61 >            activateTCPReader = (tcp == 1);
62 >        } catch (PropertyNotFoundException e) {
63 >            activateTCPReader = false;
64 >        } catch (NumberFormatException e) {
65 >            activateTCPReader = false;
66          }
67 <        else {
67 >        // check for UDP Reader
68 >        try {
69 >            int udp = Integer.parseInt(cp.getProperty("Filter." + FilterMain.NAME, "Filter.ActivateUDPReader"));
70 >            activateUDPReader = (udp == 1);
71 >        } catch (PropertyNotFoundException e) {
72 >            activateUDPReader = false;
73 >        } catch (NumberFormatException e) {
74 >            activateUDPReader = false;
75 >        }
76 >        // check for CORBA Reader
77 >        try {
78 >            int corba = Integer.parseInt(cp.getProperty("Filter." + FilterMain.NAME, "Filter.ActivateCORBAReader"));
79 >            activateCORBAReader = (corba == 1);
80 >        } catch (PropertyNotFoundException e) {
81 >            activateCORBAReader = false;
82 >        } catch (NumberFormatException e) {
83 >            activateCORBAReader = false;
84 >        }
85 >        
86 >        // need to use the Queue later on
87 >        Queue queue;
88 >        
89 >        // there's little point starting a Queue and a FilterThread
90 >        // if nothing is going to be giving us any data
91 >        if(activateTCPReader || activateUDPReader || activateCORBAReader) {
92 >            // see if this Queue needs a size limit
93              try {
94 <                // get the configuration properties we need
95 <                UDPListenPort = Integer.parseInt(config.getProperty("Filter.UDPListenPort"));
96 <                TCPListenPort = Integer.parseInt(config.getProperty("Filter.TCPListenPort"));
97 <                parentFilterName = config.getProperty("Filter.parentFilter");
98 <            } catch (org.omg.CORBA.MARSHAL e) {
99 <                throw new ComponentStartException("Unable to obtain requried configuration property for component");
94 >                int queueSizeLimit = Integer.parseInt(cp.getProperty("Filter." + FilterMain.NAME, "Queue.SizeLimit"));
95 >                String queueRemoveAlgorithm = cp.getProperty("Filter." + FilterMain.NAME, "Queue.RemoveAlgorithm");
96 >                int algorithm = StringUtils.getStringPos(queueRemoveAlgorithm, Queue.algorithms);
97 >                if(algorithm != -1) {
98 >                    _logger.write(toString(), Logger.DEBUG, "Starting Queue with size limit of "+queueSizeLimit+", using remove algorithm "+queueRemoveAlgorithm);
99 >                    // we have valid values, so lets start it.
100 >                    queue = new Queue(queueSizeLimit, algorithm);
101 >                }
102 >                else {
103 >                    _logger.write(toString(), Logger.WARNING, "Bad Queue Algorithm configuration, not known: "+queueRemoveAlgorithm);
104 >                    // just don't activate a limit
105 >                    queue = new Queue();
106 >                }
107 >                
108 >            } catch (PropertyNotFoundException e) {
109 >                _logger.write(toString(), Logger.DEBUG, "Optional config not set: "+e);
110 >                // just don't activate a limit
111 >                queue = new Queue();
112 >            } catch (NumberFormatException e) {
113 >                _logger.write(toString(), Logger.WARNING, "Bad Queue SizeLimit configuration: "+e);
114 >                // just don't activate a limit
115 >                queue = new Queue();
116              }
117 +            
118 +            // startup a monitor on this queue
119 +            try {
120 +                // try to get the interval, if this fails, we won't start up the monitor
121 +                int queueMonitorInterval = Integer.parseInt(cp.getProperty("Filter." + FilterMain.NAME, "Queue.MonitorInterval"));
122 +                String queueName = NAME + " Filter";
123 +                queue.startMonitor(queueMonitorInterval*1000, queueName);
124 +            } catch (PropertyNotFoundException e) {
125 +                _logger.write(toString(), Logger.WARNING, "failed to find queue monitor config, disabling. " + e);
126 +            }
127 +            
128 +            // Start a filter thread
129 +            _logger.write(toString(), Logger.SYSINIT, "starting Filter Thread / Queue consumer");
130 +            FilterThread filterThread = new FilterThread(queue);
131 +            filterThread.start();
132          }
133 +        else {
134 +            // it's pointless carrying on really...
135 +            throw new ComponentStartException("Can't start Filter without any inbound data feeds");            
136 +        }
137          
138 <        _logger.write(toString(), Logger.SYSINIT, "configured");
138 >        // the corba listener needs these to be set, so lets
139 >        // make them something obviously invalid initially
140 >        int TCPListenPort = -1;
141 >        int UDPListenPort = -1;
142          
143 <        // get parent
144 <        Filter parentFilter = FilterHelper.narrow(_refman.getCORBARef("iscream.Filter." + parentFilterName));
143 >        // TCP Reader start (for heartbeats)
144 >        if(activateTCPReader) {
145 >            try {
146 >                // get the port number from the configuration
147 >                TCPListenPort = Integer.parseInt(cp.getProperty("Filter." + FilterMain.NAME, "Filter.TCPListenPort"));
148 >                // start the TCPReader
149 >                _logger.write(toString(), Logger.SYSINIT, "starting Filter TCP listener");
150 >                TCPReader tcpReader = new TCPReader(TCPListenPort, queue);
151 >                tcpReader.start();
152 >            } catch (PropertyNotFoundException e) {
153 >                _logger.write(toString(), Logger.WARNING, "Unable to start TCPReader due to missing configuration: " + e);
154 >            } catch (NumberFormatException e) {
155 >                _logger.write(toString(), Logger.WARNING, "Unable to start TCPReader due to invalid configuration: " + e);
156 >            }
157 >        }
158          
159 <        // setup a queue
160 <        Queue queue = new Queue();
159 >        // UDP Reader start (for inbound host data)
160 >        if(activateUDPReader) {
161 >            try {
162 >                // get the port number from the configuration
163 >                UDPListenPort = Integer.parseInt(cp.getProperty("Filter." + FilterMain.NAME, "Filter.UDPListenPort"));
164 >                // start the UDPReader
165 >                _logger.write(toString(), Logger.SYSINIT, "starting Filter UDP listener");
166 >                UDPReader udpReader = new UDPReader(UDPListenPort, queue);
167 >                udpReader.start();
168 >            } catch (PropertyNotFoundException e) {
169 >                _logger.write(toString(), Logger.WARNING, "Unable to start UDPReader due to missing configuration: " + e);
170 >            } catch (NumberFormatException e) {
171 >                _logger.write(toString(), Logger.WARNING, "Unable to start UDPReader due to invalid configuration: " + e);
172 >            }
173 >        }
174          
76        // Start a filter thread
77        _logger.write(toString(), Logger.SYSINIT, "starting Filter Thread / Queue consumer");
78        FilterThread filterThread = new FilterThread(queue, parentFilter);
79        filterThread.start();
80        
175          // FilterServant start (for inbound child filter data)
176 <        _logger.write(toString(), Logger.DEBUG, "starting Filter Child -> Parent link for upstream parent - " + parentFilterName);
177 <        FilterServant filterServant = new FilterServant(TCPListenPort, UDPListenPort, queue);
178 <        _refman.bindToOrb(filterServant, "iscream.Filter." + FilterMain.NAME);
179 <
180 <        // UDL Reader start (for inbound host data)
181 <        _logger.write(toString(), Logger.SYSINIT, "starting Filter UDP listener");
88 <        UDPReader udpReader = new UDPReader(UDPListenPort, queue);
89 <        udpReader.start();
90 <
91 <        // TCP Reader start (for heartbeats)
92 <        _logger.write(toString(), Logger.SYSINIT, "starting Filter TCP listener");
93 <        TCPReader tcpReader = new TCPReader(TCPListenPort, queue);
94 <        tcpReader.start();
176 >        if(activateCORBAReader) {
177 >            // start the FilterServant
178 >            _logger.write(toString(), Logger.SYSINIT, "starting Servant to listen for downstream filters");
179 >            FilterServant filterServant = new FilterServant(TCPListenPort, UDPListenPort, queue);
180 >            _refman.bindToOrb(filterServant, "iscream.Filter." + FilterMain.NAME);
181 >        }
182          
183          _logger.write(toString(), Logger.SYSINIT, "started");
184      }
185 <
185 >    
186      /**
187 +     * Does a dependency check. Used mainly at startup to
188 +     * see if the required dependencies (components) are up
189 +     * and running.
190 +     *
191 +     * @return a boolean value, true if the depdencies are satisfied
192 +     */
193 +    public boolean depCheck() {
194 +        try {
195 +            org.omg.CORBA.Object obj;
196 +            // first check the ConfigurationManager is alive
197 +            obj = _refman.getCORBARef("iscream.ConfigurationManager");
198 +            // then suss out our parent filter
199 +            ConfigurationProxy cp = ConfigurationProxy.getInstance();
200 +            String parentFilterName = cp.getProperty("Filter." + FilterMain.NAME, "Filter.parentFilter");
201 +            // finally check the parent filter is alive
202 +            obj = _refman.getCORBARef("iscream.Filter." + parentFilterName);
203 +        } catch(ComponentCORBAException e) {
204 +            System.err.println(toString() + ": Dependency Failure: "+e);
205 +            return false;
206 +        } catch(PropertyNotFoundException e) {
207 +            System.err.println(toString() + ": Unable to obtain configuration: "+e);
208 +            return false;
209 +        }
210 +        // dependency check suceeded
211 +        return true;
212 +    }
213 +    
214 +    /**
215       * Overrides the {@link java.lang.Object#toString() Object.toString()}
216       * method to provide clean logging (every class should have this).
217       *
218 <     * This uses the uk.ac.ukc.iscream.util.NameFormat class
218 >     * This uses the uk.org.iscream.cms.server.util.NameFormat class
219       * to format the toString()
220       *
221       * @return the name of this class and its CVS revision
# Line 122 | Line 237 | public class FilterMain implements Component {
237       * This holds a reference to the
238       * system logger that is being used.
239       */
240 <    private Logger _logger = ReferenceManager.getInstance().getLogger();
240 >    private Logger _logger;
241  
242      /**
243       * A reference to the reference manager in use
# Line 138 | Line 253 | public class FilterMain implements Component {
253       */
254      public static String NAME;
255  
256 < }            
256 > }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines