ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/i-scream/projects/cms/source/server/uk/org/iscream/cms/server/clientinterface/ClientInterfaceMain.java
(Generate patch)

Comparing projects/cms/source/server/uk/org/iscream/cms/server/clientinterface/ClientInterfaceMain.java (file contents):
Revision 1.3 by ajm, Tue Dec 5 15:59:35 2000 UTC vs.
Revision 1.31 by tdb, Sun Aug 1 10:40:48 2004 UTC

# Line 1 | Line 1
1 + /*
2 + * i-scream central monitoring system
3 + * http://www.i-scream.org
4 + * 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   //---PACKAGE DECLARATION---
22 < package uk.ac.ukc.iscream.clientinterface;
22 > package uk.org.iscream.cms.server.clientinterface;
23  
24   //---IMPORTS---
25 < import uk.ac.ukc.iscream.util.*;
26 < import uk.ac.ukc.iscream.core.*;
25 > import uk.org.iscream.cms.server.componentmanager.*;
26 > import uk.org.iscream.cms.server.core.*;
27 > import uk.org.iscream.cms.util.*;
28  
29   /**
30 < * A ClientInterface startup class
30 > * This class starts the real time clients
31 > * client interface.
32 > * This is an iscream component that sends data
33 > * direct to clients running on desktops to provide
34 > * real time information.
35   *
36   * @author  $Author$
37   * @version $Id$
38   */
39 < class ClientInterfaceMain {
39 > public class ClientInterfaceMain implements Component {
40  
41   //---FINAL ATTRIBUTES---
42  
# Line 22 | Line 47 | class ClientInterfaceMain {
47      
48   //---STATIC METHODS---
49  
50 <    public static void main(String[] args) {
26 <        // ***************************************
27 <        // VERY TEMPORARY - will find a better way
28 <        System.setProperty("org.omg.CORBA.ORBClass","jacorb.orb.ORB");
29 <        System.setProperty("org.omg.CORBA.ORBSingletonClass","jacorb.orb.ORBSingleton");
30 <        // ***************************************
50 > //---CONSTRUCTORS---
51  
52 <        ReferenceManager refman = ReferenceManager.init(null, null);
52 >    /**
53 >     * Constructs a ClientInterface with the name given
54 >     *
55 >     * @param givenName the name
56 >     */
57 >    public ClientInterfaceMain(String givenName) {
58 >        NAME = givenName;
59 >    }
60  
61 <        // can't have a real toString() :)
35 <        String toString = "ClientInterface{" + refman.getName() + "}(" + REVISION.substring(11, REVISION.length() - 2) + ")";
36 <                
37 <        refman.getLogger().write(toString, Logger.SYSINIT, "coming up");
38 <            
39 <        // configuration variables we require
40 <        String ourName = null;
41 <        int listenPort = 0;
42 <        
43 <        Configuration config = refman.getCM().getConfiguration("ClientInterface");
44 <        if (config == null) {
45 <            throw new RuntimeException ("CRITICAL:Unable to obtain configuration" +
46 <                                        "         Advise you check the i-scream log for more information.");
47 <        } else {
48 <            try {
49 <                ourName = config.getProperty("RootFilter.realtimeInterfaceName");
50 <                listenPort = Integer.parseInt(config.getProperty("ClientInterface.listenPort"));
51 <            } catch (org.omg.CORBA.MARSHAL e) {
52 <                refman.getLogger().write(toString, Logger.FATAL, "required config property not present");
53 <                throw new RuntimeException ("CRITICAL:Unable to obtain required configuration property" +
54 <                                            "         Advise you check the i-scream log for more information.");
61 > //---PUBLIC METHODS---
62  
63 <            }
64 <        }
65 <        // now we have the name of the interface we set it
66 <        refman.setName(ourName);
67 <        toString = "ClientInterface{" + refman.getName() + "}(" + REVISION.substring(11, REVISION.length() - 2) + ")";
68 <        refman.getLogger().write(toString, Logger.SYSINIT, "configured");
69 <                
63 >    /**
64 >     * This method starts the ClientInterface
65 >     */
66 >    public void start() throws ComponentStartException {
67 >        // get references to key objects
68 >        _logger = _refman.getLogger();
69 >        
70 >        _logger.write(toString(), Logger.SYSINIT, "coming up");
71 >        
72 >        // Setup a PacketSorter
73 >        PacketSorter ps = new PacketSorter();
74 >        ps.start();
75 >        
76          // ClientInterfaceServant start (for inbound data)
77 <        refman.getLogger().write(toString, Logger.DEBUG, "starting servant for inbound data");
78 <        ClientInterfaceServant ciServant = new ClientInterfaceServant();
79 <        refman.bindToOrb(ciServant, "iscream.ClientInterface." + refman.getName());
77 >        _logger.write(toString(), Logger.DEBUG, "starting servant for inbound data");
78 >        try {
79 >            ClientInterfaceServant ciServant = new ClientInterfaceServant(ps);
80 >            //_refman.bindToOrb(ciServant, "iscream.ClientInterface\\." + ClientInterfaceMain.NAME);
81 >            org.omg.CORBA.Object objRef = _refman.getRootPOA().servant_to_reference(ciServant);
82 >            Client client = ClientHelper.narrow(objRef);
83 >            
84 >            String parent = ConfigurationProxy.getInstance().getProperty("ClientInterface." + ClientInterfaceMain.NAME, "ClientInterface.parent");
85 >            objRef = _refman.getCORBARef("iscream.ClientInterface\\." + parent);
86 >            CorbaClientListener listener = CorbaClientListenerHelper.narrow(objRef);
87 >            
88 >            CorbaControlHandler handler = listener.connect(client, NAME);
89 >            handler.startData();
90 >        }
91 >        catch(Exception e) {
92 >            // not sure what to do here
93 >            // so we just log the error
94 >            _logger.write(toString(), Logger.ERROR, "ERROR - " + e.getMessage());
95 >        }
96          
97 <        ClientListener clientListener = new ClientListener(listenPort, ciServant);
98 <        clientListener.start();
97 >        // Startup the TCPListener
98 >        TCPClientListener tcpClientListener = new TCPClientListener(ps);
99 >        tcpClientListener.start();
100          
101 <        // start the POA off
102 <        // now we are running, we just need to serve
103 <        // so we ask the orb to block for us until it has finished
104 <        refman.activatePOA();
105 <        refman.getLogger().write(toString, Logger.SYSINIT, "started");
106 <        refman.getORB().run();
101 >        // Startup the CORBA Listener
102 >        _logger.write(toString(), Logger.DEBUG, "starting servant for inbound clients");
103 >        CorbaClientListenerServant corbaServant = new CorbaClientListenerServant(ps);
104 >        _refman.bindToOrb(corbaServant, "iscream.ClientInterface\\." + ClientInterfaceMain.NAME);
105 >        
106 >        _logger.write(toString(), Logger.SYSINIT, "started");
107      }
108 +    
109 +    /**
110 +     * Does a dependency check. Used mainly at startup to
111 +     * see if the required dependencies (components) are up
112 +     * and running.
113 +     *
114 +     * @return a boolean value, true if the depdencies are satisfied
115 +     */
116 +    public boolean depCheck() {
117 +        try {
118 +            org.omg.CORBA.Object obj;
119 +            obj = _refman.getCORBARef("iscream.Logger");
120 +            obj = _refman.getCORBARef("iscream.ConfigurationManager");
121 +            // suss out the parent client interface
122 +            ConfigurationProxy cp = ConfigurationProxy.getInstance();
123 +            String parentName = cp.getProperty("ClientInterface." + ClientInterfaceMain.NAME, "ClientInterface.parent");
124 +            // check the parent is alive
125 +            obj = _refman.getCORBARef("iscream.ClientInterface\\." + parentName);
126 +        } catch(ComponentCORBAException e) {
127 +            System.err.println(toString() + ": Dependency Failure: "+e);
128 +            return false;
129 +        } catch(PropertyNotFoundException e) {
130 +            System.err.println(toString() + ": Unable to obtain configuration: "+e);
131 +            return false;
132 +        }
133 +        // dependency check suceeded
134 +        return true;
135 +    }
136 +    
137 +    /**
138 +     * Overrides the {@link java.lang.Object#toString() Object.toString()}
139 +     * method to provide clean logging (every class should have this).
140 +     *
141 +     * This uses the uk.org.iscream.cms.util.NameFormat class
142 +     * to format the toString()
143 +     *
144 +     * @return the name of this class and its CVS revision
145 +     */
146 +    public String toString() {
147 +        return FormatName.getName(
148 +            NAME,
149 +            getClass().getName(),
150 +            REVISION);
151 +    }
152  
79 //---CONSTRUCTORS---
80
81 //---PUBLIC METHODS---
82
153   //---PRIVATE METHODS---
154  
155   //---ACCESSOR/MUTATOR METHODS---
156  
157   //---ATTRIBUTES---
158  
159 +    /**
160 +     * This holds a reference to the
161 +     * system logger that is being used.
162 +     */
163 +    private Logger _logger;
164 +
165 +    /**
166 +     * A reference to the reference manager in use
167 +     */
168 +    private ReferenceManager _refman = ReferenceManager.getInstance();
169 +
170   //---STATIC ATTRIBUTES---
171  
172 < }            
172 >    /**
173 >     * The friendly name for this component, used by
174 >     * all related classes.
175 >     * This is set from the configuration.
176 >     */
177 >    public static String NAME;
178 >
179 > }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines