Skip to content

Commit 8947387

Browse files
committed
prepare RMI to run on multiple servers
1 parent cc28338 commit 8947387

14 files changed

+263
-105
lines changed

code/Client/Client/RMIClient.java

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,23 +7,24 @@
77
import java.rmi.RemoteException;
88
import java.rmi.NotBoundException;
99

10-
import java.util.*;
11-
import java.io.*;
12-
1310
public class RMIClient extends Client {
14-
private static String s_serverHost = "localhost";
15-
private static int s_serverPort = 2005;
11+
private static String s_middlewareHostname = "localhost";
12+
private static int s_middlewarePort = 2005;
1613
private static String s_serverName = "MiddlewareServer";
17-
18-
//TODO: REPLACE 'ALEX' WITH YOUR GROUP NUMBER TO COMPILE
1914
private static String s_rmiPrefix = "group25_";
2015

2116
public static void main(String args[]) {
2217
if (args.length > 0) {
23-
s_serverHost = args[0];
18+
s_middlewareHostname = args[0];
2419
}
2520
if (args.length > 1) {
26-
s_serverName = args[1];
21+
try {
22+
s_middlewarePort = Integer.parseInt(args[1]);
23+
} catch (Exception e) {
24+
System.err.println((char) 27 + "[31;1mClient exception: " + (char) 27 + "[0m2nd arg must be integer for middleware port");
25+
e.printStackTrace();
26+
System.exit(1);
27+
}
2728
}
2829
if (args.length > 2) {
2930
System.err.println((char) 27 + "[31;1mClient exception: " + (char) 27 + "[0mUsage: java client.RMIClient [server_hostname [server_rmiobject]]");
@@ -52,7 +53,7 @@ public RMIClient() {
5253
}
5354

5455
public void connectServer() {
55-
connectServer(s_serverHost, s_serverPort, s_serverName);
56+
connectServer(s_middlewareHostname, s_middlewarePort, s_serverName);
5657
}
5758

5859
public void connectServer(String server, int port, String name) {

code/Client/Client/TCPClient.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,13 @@ public static void main(String args[]) {
2121
s_serverHost = args[0];
2222
}
2323
if (args.length > 1) {
24-
s_serverName = args[1];
24+
try {
25+
s_serverPort = Integer.parseInt(args[1]);
26+
} catch (Exception e) {
27+
System.err.println((char) 27 + "[31;1mClient exception: " + (char) 27 + "[0m2nd arg must be integer port for middleware server");
28+
e.printStackTrace();
29+
System.exit(1);
30+
}
2531
}
2632
if (args.length > 2) {
2733
System.err.println((char) 27 + "[31;1mClient exception: " + (char) 27 + "[0mUsage: java client.TCPClient [server_hostname [server_rmiobject]]");

code/Client/run_rmi_client.sh

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1-
# Usage: ./run_client.sh [<server_hostname> [<server_rmiobject>]]
1+
#!/usr/bin/env bash
2+
echo 'Usage: ./run_client.sh [<server_hostname> [<server_port>]]'
3+
echo '$1 hostname of middleware (default localhost)'
4+
echo '$2 port number of middleware (default 2005)'
25

36
java -Djava.security.policy=java.policy -cp ../Server/RMIInterface.jar:../Server/TCP.jar:../Server.Trace.jar:. Client.RMIClient $1 $2

code/Client/run_tcp_client.sh

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1-
# Usage: ./run_client.sh [<server_hostname> [<server_rmiobject>]]
1+
#!/usr/bin/env bash
2+
echo 'Usage: ./run_client.sh [<server_hostname> [<server_port>]]'
3+
echo '$1 hostname of middleware (default localhost)'
4+
echo '$2 port number of middleware (default 2005)'
25

36
java -Djava.security.policy=java.policy -cp ../Server/RMIInterface.jar:../Server/TCP.jar:../Server/Trace.jar:. Client.TCPClient $1 $2

code/Server/Server/RMI/RMICarResourceManager.java

Lines changed: 27 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -17,38 +17,53 @@
1717
import java.rmi.RemoteException;
1818
import java.rmi.server.UnicastRemoteObject;
1919

20-
// RMIResourceManager is a whole class containing a registry and references to objects
21-
// These objects can be created through "creators", i.e. addFlight, addCars, addRooms
22-
// After creation or updates, through creators/setters, the object is written to RNHashMap
23-
// RNHashMap takes a key and stores the object as the value
24-
// Read data simply pulls object values from this RNHashMap
25-
2620
public class RMICarResourceManager extends CarResourceManager implements IRemoteResourceManagerGetter {
2721
private static String s_serverName = "CarServer";
28-
//TODO: REPLACE 'ALEX' WITH YOUR GROUP NUMBER TO COMPILE
22+
private static int s_serverPort = 2001;
2923
private static String s_rmiPrefix = "group25_";
24+
private static String s_customerServerHostname = "localhost";
25+
private static int s_customerServerPort = 2003;
3026

3127
public static void main(String args[]) {
3228
if (args.length > 0) {
33-
s_serverName = args[0];
29+
try {
30+
s_serverPort = Integer.parseInt(args[0]);
31+
} catch (Exception e) {
32+
System.err.println((char) 27 + "[31;1mClient exception: " + (char) 27 + "[0m1st arg must be integer for carserver port (default 2001)");
33+
e.printStackTrace();
34+
System.exit(1);
35+
}
36+
}
37+
if (args.length > 1) {
38+
s_customerServerHostname = args[1];
39+
}
40+
if (args.length > 2) {
41+
try {
42+
s_customerServerPort = Integer.parseInt(args[2]);
43+
} catch (Exception e) {
44+
System.err.println((char) 27 + "[31;1mClient exception: " + (char) 27 + "[0m3rd arg must be integer for customer server port (default 2003)");
45+
e.printStackTrace();
46+
System.exit(1);
47+
}
3448
}
3549

3650
// Create the RMI server entry
3751
try {
38-
// Create a new Server object
52+
// Create a new resource manager object
3953
RMICarResourceManager server = new RMICarResourceManager(s_serverName);
4054

41-
server.customerRM = (ICustomerResourceManager) server.getRemoteResourceManager("localhost", 2003, "CustomerServer");
55+
// get a reference to a customerRM
56+
server.customerRM = (ICustomerResourceManager) server.getRemoteResourceManager(s_customerServerHostname, s_customerServerPort, "CustomerServer");
4257

4358
// Dynamically generate the stub (client proxy)
4459
ICarResourceManager resourceManager = (ICarResourceManager) UnicastRemoteObject.exportObject(server, 0);
4560

4661
// Bind the remote object's stub in the registry
4762
Registry l_registry;
4863
try {
49-
l_registry = LocateRegistry.createRegistry(2001);
64+
l_registry = LocateRegistry.createRegistry(s_serverPort);
5065
} catch (RemoteException e) {
51-
l_registry = LocateRegistry.getRegistry(2001);
66+
l_registry = LocateRegistry.getRegistry(s_serverPort);
5267
}
5368
final Registry registry = l_registry;
5469
registry.rebind(s_rmiPrefix + s_serverName, resourceManager);

code/Server/Server/RMI/RMICustomerResourceManager.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,18 @@
2121

2222
public class RMICustomerResourceManager extends CustomerResourceManager {
2323
private static String s_serverName = "CustomerServer";
24-
//TODO: REPLACE 'ALEX' WITH YOUR GROUP NUMBER TO COMPILE
24+
private static int s_serverPort = 2003;
2525
private static String s_rmiPrefix = "group25_";
2626

2727
public static void main(String args[]) {
2828
if (args.length > 0) {
29-
s_serverName = args[0];
29+
try {
30+
s_serverPort = Integer.parseInt(args[0]);
31+
} catch (Exception e) {
32+
System.err.println((char) 27 + "[31;1mClient exception: " + (char) 27 + "[0m1st arg must be integer for customerserver port (default 2003)");
33+
e.printStackTrace();
34+
System.exit(1);
35+
}
3036
}
3137

3238
// Create the RMI server entry
@@ -40,9 +46,9 @@ public static void main(String args[]) {
4046
// Bind the remote object's stub in the registry
4147
Registry l_registry;
4248
try {
43-
l_registry = LocateRegistry.createRegistry(2003);
49+
l_registry = LocateRegistry.createRegistry(s_serverPort);
4450
} catch (RemoteException e) {
45-
l_registry = LocateRegistry.getRegistry(2003);
51+
l_registry = LocateRegistry.getRegistry(s_serverPort);
4652
}
4753
final Registry registry = l_registry;
4854
registry.rebind(s_rmiPrefix + s_serverName, resourceManager);

code/Server/Server/RMI/RMIFlightResourceManager.java

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,30 +25,50 @@
2525

2626
public class RMIFlightResourceManager extends FlightResourceManager implements IRemoteResourceManagerGetter {
2727
private static String s_serverName = "FlightServer";
28-
//TODO: REPLACE 'ALEX' WITH YOUR GROUP NUMBER TO COMPILE
28+
private static int s_serverPort = 2000;
2929
private static String s_rmiPrefix = "group25_";
30+
private static String s_customerServerHostname = "localhost";
31+
private static int s_customerServerPort = 2003;
3032

3133
public static void main(String args[]) {
3234
if (args.length > 0) {
33-
s_serverName = args[0];
35+
try {
36+
s_serverPort = Integer.parseInt(args[0]);
37+
} catch (Exception e) {
38+
System.err.println((char) 27 + "[31;1mClient exception: " + (char) 27 + "[0m1st arg must be integer for flightserver port (default 2000)");
39+
e.printStackTrace();
40+
System.exit(1);
41+
}
42+
}
43+
if (args.length > 1) {
44+
s_customerServerHostname = args[1];
45+
}
46+
if (args.length > 2) {
47+
try {
48+
s_customerServerPort = Integer.parseInt(args[2]);
49+
} catch (Exception e) {
50+
System.err.println((char) 27 + "[31;1mClient exception: " + (char) 27 + "[0m3rd arg must be integer for customer server port (default 2003)");
51+
e.printStackTrace();
52+
System.exit(1);
53+
}
3454
}
3555

3656
// Create the RMI server entry
3757
try {
3858
// Create a new Server object
3959
RMIFlightResourceManager server = new RMIFlightResourceManager(s_serverName);
4060

41-
server.customerRM = (ICustomerResourceManager) server.getRemoteResourceManager("localhost", 2003, "CustomerServer");
61+
server.customerRM = (ICustomerResourceManager) server.getRemoteResourceManager(s_customerServerHostname,s_customerServerPort, "CustomerServer");
4262

4363
// Dynamically generate the stub (client proxy)
4464
IFlightResourceManager resourceManager = (IFlightResourceManager) UnicastRemoteObject.exportObject(server, 0);
4565

4666
// Bind the remote object's stub in the registry
4767
Registry l_registry;
4868
try {
49-
l_registry = LocateRegistry.createRegistry(2000);
69+
l_registry = LocateRegistry.createRegistry(s_serverPort);
5070
} catch (RemoteException e) {
51-
l_registry = LocateRegistry.getRegistry(2000);
71+
l_registry = LocateRegistry.getRegistry(s_serverPort);
5272
}
5373
final Registry registry = l_registry;
5474
registry.rebind(s_rmiPrefix + s_serverName, resourceManager);

code/Server/Server/RMI/RMIMiddlewareResourceManager.java

Lines changed: 70 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,74 @@
1313

1414
public class RMIMiddlewareResourceManager extends MiddlewareResourceManager {
1515
private static String s_serverName = "MiddlewareServer";
16-
16+
private static int s_serverPort = 2005;
1717
private static String s_rmiPrefix = "group25_";
18+
private static String s_customerServerHostname = "localhost";
19+
private static int s_customerServerPort = 2003;
20+
private static String s_flightServerHostname = "localhost";
21+
private static int s_flightServerPort = 2000;
22+
private static String s_roomServerHostname = "localhost";
23+
private static int s_roomServerPort = 2002;
24+
private static String s_carServerHostname = "localhost";
25+
private static int s_carServerPort = 2001;
1826

1927
public static void main(String args[]) {
2028
if (args.length > 0) {
21-
s_serverName = args[0];
29+
try {
30+
s_serverPort = Integer.parseInt(args[0]);
31+
} catch (Exception e) {
32+
System.err.println((char) 27 + "[31;1mClient exception: " + (char) 27 + "[0m1st arg must be integer for middlewareserver port (default 2005)");
33+
e.printStackTrace();
34+
System.exit(1);
35+
}
36+
}
37+
if (args.length > 1) {
38+
s_customerServerHostname = args[1];
39+
}
40+
if (args.length > 2) {
41+
try {
42+
s_customerServerPort = Integer.parseInt(args[2]);
43+
} catch (Exception e) {
44+
System.err.println((char) 27 + "[31;1mClient exception: " + (char) 27 + "[0m3rd arg must be integer for customerserver port (default 2003)");
45+
e.printStackTrace();
46+
System.exit(1);
47+
}
48+
}
49+
if (args.length > 3) {
50+
s_flightServerHostname = args[3];
51+
}
52+
if (args.length > 4) {
53+
try {
54+
s_flightServerPort = Integer.parseInt(args[4]);
55+
} catch (Exception e) {
56+
System.err.println((char) 27 + "[31;1mClient exception: " + (char) 27 + "[0m5th arg must be integer for flightserver port (default 2000)");
57+
e.printStackTrace();
58+
System.exit(1);
59+
}
60+
}
61+
if (args.length > 5) {
62+
s_roomServerHostname = args[5];
63+
}
64+
if (args.length > 6) {
65+
try {
66+
s_roomServerPort = Integer.parseInt(args[6]);
67+
} catch (Exception e) {
68+
System.err.println((char) 27 + "[31;1mClient exception: " + (char) 27 + "[0m7th arg must be integer for roomserver port (default 2002)");
69+
e.printStackTrace();
70+
System.exit(1);
71+
}
72+
}
73+
if (args.length > 7) {
74+
s_carServerHostname = args[7];
75+
}
76+
if (args.length > 8) {
77+
try {
78+
s_carServerPort = Integer.parseInt(args[8]);
79+
} catch (Exception e) {
80+
System.err.println((char) 27 + "[31;1mClient exception: " + (char) 27 + "[0m9th arg must be integer for carserver port (default 2001)");
81+
e.printStackTrace();
82+
System.exit(1);
83+
}
2284
}
2385

2486
// Create the RMI server entry
@@ -32,9 +94,9 @@ public static void main(String args[]) {
3294
// Bind the remote object's stub in the registry
3395
Registry l_registry;
3496
try {
35-
l_registry = LocateRegistry.createRegistry(2005);
97+
l_registry = LocateRegistry.createRegistry(s_serverPort);
3698
} catch (RemoteException e) {
37-
l_registry = LocateRegistry.getRegistry(2005);
99+
l_registry = LocateRegistry.getRegistry(s_serverPort);
38100
}
39101
final Registry registry = l_registry;
40102
registry.rebind(s_rmiPrefix + s_serverName, resourceManager);
@@ -52,15 +114,10 @@ public void run() {
52114
});
53115
System.out.println("'" + s_serverName + "' resource manager server ready and bound to '" + s_rmiPrefix + s_serverName + "'");
54116

55-
56-
// get car, flight, resourceManagers
57-
// @TODO add parameters
58-
// server.connectAllServers("localhost", 2000, "FlightServer", "localhost", 2001, "CarServer", "localhost", 2002, "Server");
59-
// server.connectCustomerServer("localhost", 2003, "CustomerServer");
60-
server.flightRM = (IFlightResourceManager) server.getRemoteResourceManager("localhost", 2000, "FlightServer");
61-
server.carRM = (ICarResourceManager) server.getRemoteResourceManager("localhost", 2001, "CarServer");
62-
server.roomRM = (IRoomResourceManager) server.getRemoteResourceManager("localhost", 2002, "RoomServer");
63-
server.customerRM = (ICustomerResourceManager) server.getRemoteResourceManager("localhost", 2003, "CustomerServer");
117+
server.flightRM = (IFlightResourceManager) server.getRemoteResourceManager(s_flightServerHostname,s_flightServerPort, "FlightServer");
118+
server.carRM = (ICarResourceManager) server.getRemoteResourceManager(s_carServerHostname,s_carServerPort, "CarServer");
119+
server.roomRM = (IRoomResourceManager) server.getRemoteResourceManager(s_roomServerHostname,s_roomServerPort, "RoomServer");
120+
server.customerRM = (ICustomerResourceManager) server.getRemoteResourceManager(s_customerServerHostname,s_customerServerPort, "CustomerServer");
64121
} catch (Exception e) {
65122
System.err.println((char) 27 + "[31;1mServer exception: " + (char) 27 + "[0mUncaught exception");
66123
e.printStackTrace();

code/Server/Server/RMI/RMIRoomResourceManager.java

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,30 +25,50 @@
2525

2626
public class RMIRoomResourceManager extends RoomResourceManager implements IRemoteResourceManagerGetter {
2727
private static String s_serverName = "RoomServer";
28-
//TODO: REPLACE 'ALEX' WITH YOUR GROUP NUMBER TO COMPILE
28+
private static int s_serverPort = 2002;
2929
private static String s_rmiPrefix = "group25_";
30+
private static String s_customerServerHostname = "localhost";
31+
private static int s_customerServerPort = 2003;
3032

3133
public static void main(String args[]) {
3234
if (args.length > 0) {
33-
s_serverName = args[0];
35+
try {
36+
s_serverPort = Integer.parseInt(args[0]);
37+
} catch (Exception e) {
38+
System.err.println((char) 27 + "[31;1mClient exception: " + (char) 27 + "[0m1st arg must be integer for roomserver port (default 2002)");
39+
e.printStackTrace();
40+
System.exit(1);
41+
}
42+
}
43+
if (args.length > 1) {
44+
s_customerServerHostname = args[1];
45+
}
46+
if (args.length > 2) {
47+
try {
48+
s_customerServerPort = Integer.parseInt(args[2]);
49+
} catch (Exception e) {
50+
System.err.println((char) 27 + "[31;1mClient exception: " + (char) 27 + "[0m3rd arg must be integer for customer server port (default 2003)");
51+
e.printStackTrace();
52+
System.exit(1);
53+
}
3454
}
3555

3656
// Create the RMI server entry
3757
try {
3858
// Create a new Server object
3959
RMIRoomResourceManager server = new RMIRoomResourceManager(s_serverName);
4060

41-
server.customerRM = (ICustomerResourceManager) server.getRemoteResourceManager("localhost", 2003, "CustomerServer");
61+
server.customerRM = (ICustomerResourceManager) server.getRemoteResourceManager(s_customerServerHostname,s_customerServerPort, "CustomerServer");
4262

4363
// Dynamically generate the stub (client proxy)
4464
IRoomResourceManager resourceManager = (IRoomResourceManager) UnicastRemoteObject.exportObject(server, 0);
4565

4666
// Bind the remote object's stub in the registry
4767
Registry l_registry;
4868
try {
49-
l_registry = LocateRegistry.createRegistry(2002);
69+
l_registry = LocateRegistry.createRegistry(s_serverPort);
5070
} catch (RemoteException e) {
51-
l_registry = LocateRegistry.getRegistry(2002);
71+
l_registry = LocateRegistry.getRegistry(s_serverPort);
5272
}
5373
final Registry registry = l_registry;
5474
registry.rebind(s_rmiPrefix + s_serverName, resourceManager);

0 commit comments

Comments
 (0)