1919import java .rmi .RemoteException ;
2020import java .rmi .server .UnicastRemoteObject ;
2121
22+ import static group25 .Utils .AnsiColors .BLACK ;
23+ import static group25 .Utils .AnsiColors .BLUE ;
24+ import static group25 .Utils .AnsiColors .RED ;
25+
2226public class RMICarResourceManager extends CarResourceManager {
2327
2428 private static final String s_serverName = "CarServer" ;
2529
30+ private static String s_serverHostname = "localhost" ;
2631 private static int s_serverPort = 2001 ;
2732 private static String s_customerServerHostname = "localhost" ;
2833 private static int s_customerServerPort = 2003 ;
34+ private static String s_middlewareHostname = "localhost" ;
35+ private static int s_middlewarePort = 2005 ;
36+
37+ private static boolean should_recover = false ;
2938
3039 public RMICarResourceManager (String name , IMiddlewareResourceManager midRM ) {
3140 super (name , "carData1.xml" , "carData2.xml" , "carMasterRecord.xml" , "carLogFile.txt" , midRM );
3241 }
3342
3443 public static void main (String args []) {
3544 CliParser cliParser = new CliParser ("RMICarResourceManager" , args , new String []{
45+ CliParser .SHOULD_RECOVER ,
46+ CliParser .CAR_HOSTNAME ,
3647 CliParser .CAR_PORT ,
3748 CliParser .CUSTOMER_HOSTNAME ,
3849 CliParser .CUSTOMER_PORT ,
3950 CliParser .MIDDLEWARE_HOSTNAME ,
4051 CliParser .MIDDLEWARE_PORT
4152 });
53+ if (cliParser .parsedArg (CliParser .CAR_HOSTNAME ))
54+ s_serverHostname = cliParser .getParsedHostname (CliParser .CAR_HOSTNAME );
4255 if (cliParser .parsedArg (CliParser .CAR_PORT ))
4356 s_serverPort = cliParser .getParsedPort (CliParser .CAR_PORT );
4457 if (cliParser .parsedArg (CliParser .CUSTOMER_HOSTNAME ))
4558 s_customerServerHostname = cliParser .getParsedHostname (CliParser .CUSTOMER_HOSTNAME );
4659 if (cliParser .parsedArg (CliParser .CUSTOMER_PORT ))
4760 s_customerServerPort = cliParser .getParsedPort (CliParser .CUSTOMER_PORT );
48-
49- // get middleware for voting
50- String middlewareHostname = null ;
51- int middlewarePort = -1 ;
52- IMiddlewareResourceManager midRM = null ;
5361 if (cliParser .parsedArg (CliParser .MIDDLEWARE_HOSTNAME ))
54- middlewareHostname = cliParser .getParsedHostname (CliParser .MIDDLEWARE_HOSTNAME );
62+ s_middlewareHostname = cliParser .getParsedHostname (CliParser .MIDDLEWARE_HOSTNAME );
5563 if (cliParser .parsedArg (CliParser .MIDDLEWARE_PORT ))
56- middlewarePort = cliParser .getParsedPort (CliParser .MIDDLEWARE_PORT );
57- if (middlewareHostname == null || middlewarePort == -1 ) {
58- // bad bad not good
64+ s_middlewarePort = cliParser .getParsedPort (CliParser .MIDDLEWARE_PORT );
65+ if (cliParser .parsedArg (CliParser .SHOULD_RECOVER ))
66+ should_recover = true ;
67+
68+ // get middleware for voting
69+ IMiddlewareResourceManager midRM = null ;
70+ if (s_middlewareHostname == null || s_middlewarePort == -1 ) {
71+ System .out .println (RED .colorString ("Error: " )+"CarRM failed to parse middleware args" );
5972 } else {
60- midRM = RMIUtils .getRMIobject (middlewareHostname , middlewarePort , "MiddlewareServer" );
73+ midRM = RMIUtils .getRMIobject (s_middlewareHostname , s_middlewarePort , "MiddlewareServer" );
6174 }
6275
6376 // Create a new Server object
@@ -79,5 +92,21 @@ public static void main(String args[]) {
7992 }));
8093
8194 System .out .println ("'" + s_serverName + "' resource manager server ready and bound to '" + s_serverName + "'" );
95+
96+ // TODO: recover state
97+ if (should_recover ) {
98+ System .out .println (BLUE .colorString ("recovering state from files" ));
99+ }
100+
101+ // for recovery, force middleware to reconnect to carRM
102+ try {
103+ Thread .sleep (1000 );
104+ midRM .reconnect ("car" , s_serverHostname , s_serverPort , "CarServer" );
105+ } catch (RemoteException e ) {
106+ System .out .println (RED .colorString ("Error: " )+"could not reconnect middleware to car RM" );
107+ } catch (Exception e ) {
108+ System .out .println (RED .colorString ("RMICarRM: " )+e .toString ());
109+ e .printStackTrace ();
110+ }
82111 }
83112}
0 commit comments