001 package com.croftsoft.apps.vaft.app; 002 003 import java.io.*; 004 import java.net.MalformedURLException; 005 import java.rmi.*; 006 import java.util.*; 007 008 import com.croftsoft.apps.vaft.core.*; 009 import com.croftsoft.apps.vaft.security.HostSecurityManager; 010 import com.croftsoft.core.net.http.WebServer; 011 012 /********************************************************************* 013 * <P> 014 * @author 015 * <A HREF="http://www.alumni.caltech.edu/~croft">David W. Croft</A> 016 * @version 017 * 2000-04-30 018 *********************************************************************/ 019 020 public class VAFT 021 ////////////////////////////////////////////////////////////////////// 022 ////////////////////////////////////////////////////////////////////// 023 { 024 025 private static final String CODEBASE_PROPERTY 026 = "java.rmi.server.codebase"; 027 028 private Config config; 029 private WebServer webServer; 030 private Host host; 031 032 ////////////////////////////////////////////////////////////////////// 033 ////////////////////////////////////////////////////////////////////// 034 035 public static void main ( String [ ] args ) 036 throws AlreadyBoundException, 037 MalformedURLException, 038 RemoteException, 039 UnknownHostException 040 ////////////////////////////////////////////////////////////////////// 041 { 042 System.setSecurityManager ( new HostSecurityManager ( ) ); 043 044 Config config = Config.parse ( args, System.out ); 045 if ( config == null ) return; 046 047 if ( config.getUse_control_panel ( ) ) 048 new ControlPanel ( config ); 049 else 050 new VAFT ( config ); 051 } 052 053 ////////////////////////////////////////////////////////////////////// 054 ////////////////////////////////////////////////////////////////////// 055 056 protected VAFT ( Config config ) 057 throws AlreadyBoundException, 058 MalformedURLException, 059 RemoteException, 060 UnknownHostException 061 ////////////////////////////////////////////////////////////////////// 062 { 063 this.config = config; 064 start_WebServer ( ); 065 start_Host ( ); 066 } 067 068 ////////////////////////////////////////////////////////////////////// 069 ////////////////////////////////////////////////////////////////////// 070 071 protected WebServer getWebServer ( ) { return webServer; } 072 protected Host getHost ( ) { return host; } 073 074 ////////////////////////////////////////////////////////////////////// 075 ////////////////////////////////////////////////////////////////////// 076 077 protected void start_WebServer ( ) 078 ////////////////////////////////////////////////////////////////////// 079 { 080 Properties properties = System.getProperties ( ); 081 String codebase 082 = "http://" + config.getWeb_server_name ( ) + ":" 083 + config.getWeb_server_port ( ) + "/"; 084 properties.put ( CODEBASE_PROPERTY, codebase ); 085 this.webServer = new WebServer ( 086 config.getWeb_server_root ( ), 087 config.getWeb_server_port ( ) ); 088 new Thread ( webServer ).start ( ); 089 } 090 091 protected void start_Host ( ) 092 throws AlreadyBoundException, 093 MalformedURLException, 094 RemoteException, 095 UnknownHostException 096 ////////////////////////////////////////////////////////////////////// 097 { 098 HostInfo self = new HostInfo ( 099 config.getRmi_server_name ( ), 100 config.getRmi_server_port ( ), 101 config.getRmi_object_name ( ), 102 new String [ ] { "com.orbs.pub.app.agent.vaft.core.SwapRemote" } 103 ); 104 105 HostList hostList = new HostList ( 106 self, config.createSeed ( ), config.getSwap_delay ( ) ); 107 108 // null password 109 host = Host.bind_Host ( 110 config.getRmi_object_name ( ), null, hostList ); 111 } 112 113 protected void shutdown ( ) 114 ////////////////////////////////////////////////////////////////////// 115 { 116 try { host.shutdown ( null ); } catch ( Exception e ) { } 117 try { webServer.shutdown ( ); } catch ( Exception e ) { } 118 } 119 120 ////////////////////////////////////////////////////////////////////// 121 ////////////////////////////////////////////////////////////////////// 122 }