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.26 by tdb, Wed Mar 14 01:34:28 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 43 | Line 43 | public class FilterMain implements Component {
43       */
44      public void start() throws ComponentStartException {
45          // get references to key objects
46 <        _refman = ReferenceManager.getInstance();
47 <        _logger = ReferenceManager.getInstance().getLogger();
46 >        _logger = _refman.getLogger();
47          
48          _logger.write(toString(), Logger.SYSINIT, "coming up");
49          
50          ConfigurationProxy cp = ConfigurationProxy.getInstance();
51          
52 <        int UDPListenPort, TCPListenPort;
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 <            UDPListenPort = Integer.parseInt(cp.getProperty(FilterMain.NAME, "Filter.UDPListenPort"));
61 <            TCPListenPort = Integer.parseInt(cp.getProperty(FilterMain.NAME, "Filter.TCPListenPort"));
60 >            int tcp = Integer.parseInt(cp.getProperty("Filter." + FilterMain.NAME, "Filter.ActivateTCPReader"));
61 >            activateTCPReader = (tcp == 1);
62          } catch (PropertyNotFoundException e) {
63 <            throw new ComponentStartException("Unable to obtain requried configuration property for component: " + e);
63 >            activateTCPReader = false;
64 >        } catch (NumberFormatException e) {
65 >            activateTCPReader = false;
66          }
67 <        
61 <        // setup a queue
62 <        Queue queue = new Queue();
63 <        
64 <        // startup a monitor on this queue
67 >        // check for UDP Reader
68          try {
69 <            // try to get the interval, if this fails, we won't start up the monitor
70 <            int queueMonitorInterval = Integer.parseInt(cp.getProperty(FilterMain.NAME, "Queue.MonitorInterval"));
68 <            String queueName = NAME + " Filter";
69 <            queue.startMonitor(queueMonitorInterval*1000, queueName);
69 >            int udp = Integer.parseInt(cp.getProperty("Filter." + FilterMain.NAME, "Filter.ActivateUDPReader"));
70 >            activateUDPReader = (udp == 1);
71          } catch (PropertyNotFoundException e) {
72 <            _logger.write(toString(), Logger.WARNING, "failed to find queue monitor config, disabling. " + 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 <        // Start a filter thread
87 <        _logger.write(toString(), Logger.SYSINIT, "starting Filter Thread / Queue consumer");
76 <        FilterThread filterThread = new FilterThread(queue);
77 <        filterThread.start();
86 >        // need to use the Queue later on
87 >        Queue queue;
88          
89 <        // FilterServant start (for inbound child filter data)
90 <        _logger.write(toString(), Logger.DEBUG, "starting Servant to listen for downstream filters");
91 <        FilterServant filterServant = new FilterServant(TCPListenPort, UDPListenPort, queue);
92 <        _refman.bindToOrb(filterServant, "iscream.Filter." + FilterMain.NAME);
93 <
94 <        // UDL Reader start (for inbound host data)
95 <        _logger.write(toString(), Logger.SYSINIT, "starting Filter UDP listener");
96 <        UDPReader udpReader = new UDPReader(UDPListenPort, queue);
97 <        udpReader.start();
98 <
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 >                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 >        // 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          // TCP Reader start (for heartbeats)
144 <        _logger.write(toString(), Logger.SYSINIT, "starting Filter TCP listener");
145 <        TCPReader tcpReader = new TCPReader(TCPListenPort, queue);
146 <        tcpReader.start();
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 +        // 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 +        
175 +        // FilterServant start (for inbound child filter data)
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      
# Line 108 | Line 197 | public class FilterMain implements Component {
197              obj = _refman.getCORBARef("iscream.ConfigurationManager");
198              // then suss out our parent filter
199              ConfigurationProxy cp = ConfigurationProxy.getInstance();
200 <            String parentFilterName = cp.getProperty(NAME, "Filter.parentFilter");
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 <            _logger.write(toString(), Logger.WARNING, "Dependency Failure: "+e);
204 >            System.err.println(toString() + ": Dependency Failure: "+e);
205              return false;
206          } catch(PropertyNotFoundException e) {
207 <            _logger.write(toString(), Logger.WARNING, "Unable to obtain configuration: "+e);
207 >            System.err.println(toString() + ": Unable to obtain configuration: "+e);
208              return false;
209          }
210          // dependency check suceeded
# Line 126 | Line 215 | public class FilterMain implements Component {
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 153 | Line 242 | public class FilterMain implements Component {
242      /**
243       * A reference to the reference manager in use
244       */
245 <    private ReferenceManager _refman;
245 >    private ReferenceManager _refman = ReferenceManager.getInstance();
246  
247   //---STATIC ATTRIBUTES---
248  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines