[CT414]: Add RMI sample code
This commit is contained in:
BIN
year4/semester2/CT414/materials/code/01-rmisample/.DS_Store
vendored
Normal file
BIN
year4/semester2/CT414/materials/code/01-rmisample/.DS_Store
vendored
Normal file
Binary file not shown.
@ -0,0 +1,15 @@
|
||||
import java.rmi.*;
|
||||
|
||||
public class CityClient
|
||||
{
|
||||
public static void main (String args[])
|
||||
{
|
||||
try {
|
||||
String target = (args.length == 0) ? "Ireland" : args[0];
|
||||
CityServer cities = (CityServer) Naming.lookup("//localhost/Capitals");
|
||||
String capital = cities.getCapital(target);
|
||||
System.out.println(capital);
|
||||
}
|
||||
catch (Exception e) {}
|
||||
}
|
||||
}
|
@ -0,0 +1,8 @@
|
||||
// Remote Object has a single method that is passed
|
||||
// the name of a country and returns the capital city.
|
||||
import java.rmi.*;
|
||||
|
||||
public interface CityServer extends Remote
|
||||
{
|
||||
String getCapital(String Country) throws RemoteException;
|
||||
}
|
@ -0,0 +1,54 @@
|
||||
import java.rmi.*;
|
||||
import java.rmi.server.*;
|
||||
import java.rmi.registry.*;
|
||||
|
||||
public class CityServerImpl implements CityServer
|
||||
{
|
||||
// constructor is required in RMI
|
||||
CityServerImpl() throws RemoteException
|
||||
{
|
||||
super(); // call the parent constructor
|
||||
}
|
||||
|
||||
// Remote method we are implementing!
|
||||
public String getCapital(String country) throws RemoteException
|
||||
{
|
||||
System.out.println("Sending return string now - country requested: " + country);
|
||||
if (country.toLowerCase().compareTo("usa") == 0)
|
||||
return "Washington";
|
||||
else if (country.toLowerCase().compareTo("ireland") == 0)
|
||||
return "Dublin";
|
||||
else if (country.toLowerCase().compareTo("france") == 0)
|
||||
return "Paris";
|
||||
return "Don't know that one!";
|
||||
}
|
||||
|
||||
// main is required because the server is standalone
|
||||
public static void main(String args[])
|
||||
{
|
||||
try
|
||||
{
|
||||
// First reset our Security manager - deprecated so no longer used
|
||||
//if (System.getSecurityManager() == null) {
|
||||
// System.setSecurityManager(new SecurityManager());
|
||||
// System.out.println("Security manager set");
|
||||
// }
|
||||
|
||||
// Create an instance of the local object
|
||||
CityServer cityServer = new CityServerImpl();
|
||||
System.out.println("Instance of City Server created");
|
||||
CityServer stub = (CityServer) UnicastRemoteObject.exportObject(cityServer, 0);
|
||||
|
||||
// Put the server object into the Registry
|
||||
// Naming.rebind("Capitals", stub);
|
||||
Registry registry = LocateRegistry.getRegistry();
|
||||
registry.rebind("Capitals", stub);
|
||||
System.out.println("Name rebind completed");
|
||||
System.out.println("Server ready for requests!");
|
||||
}
|
||||
catch(Exception exc)
|
||||
{
|
||||
System.out.println("Error in main - " + exc.toString());
|
||||
}
|
||||
}
|
||||
}
|
1
year4/semester2/CT414/materials/code/01-rmisample/start-client.sh
Executable file
1
year4/semester2/CT414/materials/code/01-rmisample/start-client.sh
Executable file
@ -0,0 +1 @@
|
||||
java -cp /Users/des/Documents/CT414-Samples/rmisample -Djava.rmi.server.codebase=file:/Users/des/Documents/CT414-Samples/rmisample CityClient
|
1
year4/semester2/CT414/materials/code/01-rmisample/start-registry.sh
Executable file
1
year4/semester2/CT414/materials/code/01-rmisample/start-registry.sh
Executable file
@ -0,0 +1 @@
|
||||
rmiregistry -J-Djava.rmi.server.codebase=file:/Users/des/Documents/CT414-Samples/rmisample/
|
1
year4/semester2/CT414/materials/code/01-rmisample/start-server.sh
Executable file
1
year4/semester2/CT414/materials/code/01-rmisample/start-server.sh
Executable file
@ -0,0 +1 @@
|
||||
java -cp /Users/des/Documents/CT414-Samples/rmisample -Djava.rmi.server.codebase=file:/Users/des/Documents/CT414-Samples/rmisample/ CityServerImpl
|
BIN
year4/semester2/CT414/materials/code/02-rmicompute/.DS_Store
vendored
Normal file
BIN
year4/semester2/CT414/materials/code/02-rmicompute/.DS_Store
vendored
Normal file
Binary file not shown.
BIN
year4/semester2/CT414/materials/code/02-rmicompute/client/.DS_Store
vendored
Normal file
BIN
year4/semester2/CT414/materials/code/02-rmicompute/client/.DS_Store
vendored
Normal file
Binary file not shown.
@ -0,0 +1,65 @@
|
||||
/*
|
||||
* Copyright (c) 1995, 2008, Oracle and/or its affiliates. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* - Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* - Neither the name of Oracle or the names of its
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
||||
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
package client;
|
||||
|
||||
import java.rmi.registry.LocateRegistry;
|
||||
import java.rmi.registry.Registry;
|
||||
import java.math.BigDecimal;
|
||||
import compute.Compute;
|
||||
|
||||
public class ComputePi {
|
||||
public static void main(String args[]) {
|
||||
int registryport = 20345;
|
||||
|
||||
if (args.length > 0)
|
||||
registryport = Integer.parseInt(args[0]);
|
||||
|
||||
System.out.println("RMIRegistry port = " + registryport);
|
||||
|
||||
// SecurityManager is deprecated so no longer used in this application
|
||||
// if (System.getSecurityManager() == null) {
|
||||
// System.setSecurityManager(new SecurityManager());
|
||||
// }
|
||||
|
||||
try {
|
||||
String name = "Compute";
|
||||
Registry registry = LocateRegistry.getRegistry(registryport);
|
||||
Compute comp = (Compute) registry.lookup(name);
|
||||
Pi task = new Pi(Integer.parseInt(args[1]));
|
||||
BigDecimal pi = comp.executeTask(task);
|
||||
System.out.println(pi);
|
||||
} catch (Exception e) {
|
||||
System.err.println("ComputePi exception:");
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,126 @@
|
||||
/*
|
||||
* Copyright (c) 1995, 2008, Oracle and/or its affiliates. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* - Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* - Neither the name of Oracle or the names of its
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
||||
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
package client;
|
||||
|
||||
import compute.Task;
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
|
||||
public class Pi implements Task<BigDecimal>, Serializable {
|
||||
|
||||
private static final long serialVersionUID = 227L;
|
||||
|
||||
/** constants used in pi computation */
|
||||
private static final BigDecimal FOUR =
|
||||
BigDecimal.valueOf(4);
|
||||
|
||||
/** rounding mode to use during pi computation */
|
||||
private static final int roundingMode =
|
||||
BigDecimal.ROUND_HALF_EVEN;
|
||||
|
||||
/** digits of precision after the decimal point */
|
||||
private final int digits;
|
||||
|
||||
/**
|
||||
* Construct a task to calculate pi to the specified
|
||||
* precision.
|
||||
*/
|
||||
public Pi(int digits) {
|
||||
this.digits = digits;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculate pi.
|
||||
*/
|
||||
public BigDecimal execute() {
|
||||
return computePi(digits);
|
||||
}
|
||||
|
||||
/**
|
||||
* Compute the value of pi to the specified number of
|
||||
* digits after the decimal point. The value is
|
||||
* computed using Machin's formula:
|
||||
*
|
||||
* pi/4 = 4*arctan(1/5) - arctan(1/239)
|
||||
*
|
||||
* and a power series expansion of arctan(x) to
|
||||
* sufficient precision.
|
||||
*/
|
||||
public static BigDecimal computePi(int digits) {
|
||||
int scale = digits + 5;
|
||||
BigDecimal arctan1_5 = arctan(5, scale);
|
||||
BigDecimal arctan1_239 = arctan(239, scale);
|
||||
BigDecimal pi = arctan1_5.multiply(FOUR).subtract(
|
||||
arctan1_239).multiply(FOUR);
|
||||
return pi.setScale(digits,
|
||||
BigDecimal.ROUND_HALF_UP);
|
||||
}
|
||||
/**
|
||||
* Compute the value, in radians, of the arctangent of
|
||||
* the inverse of the supplied integer to the specified
|
||||
* number of digits after the decimal point. The value
|
||||
* is computed using the power series expansion for the
|
||||
* arc tangent:
|
||||
*
|
||||
* arctan(x) = x - (x^3)/3 + (x^5)/5 - (x^7)/7 +
|
||||
* (x^9)/9 ...
|
||||
*/
|
||||
public static BigDecimal arctan(int inverseX,
|
||||
int scale)
|
||||
{
|
||||
BigDecimal result, numer, term;
|
||||
BigDecimal invX = BigDecimal.valueOf(inverseX);
|
||||
BigDecimal invX2 =
|
||||
BigDecimal.valueOf(inverseX * inverseX);
|
||||
|
||||
numer = BigDecimal.ONE.divide(invX,
|
||||
scale, roundingMode);
|
||||
|
||||
result = numer;
|
||||
int i = 1;
|
||||
do {
|
||||
numer =
|
||||
numer.divide(invX2, scale, roundingMode);
|
||||
int denom = 2 * i + 1;
|
||||
term =
|
||||
numer.divide(BigDecimal.valueOf(denom),
|
||||
scale, roundingMode);
|
||||
if ((i % 2) != 0) {
|
||||
result = result.subtract(term);
|
||||
} else {
|
||||
result = result.add(term);
|
||||
}
|
||||
i++;
|
||||
} while (term.compareTo(BigDecimal.ZERO) != 0);
|
||||
return result;
|
||||
}
|
||||
}
|
3
year4/semester2/CT414/materials/code/02-rmicompute/compile-code.sh
Executable file
3
year4/semester2/CT414/materials/code/02-rmicompute/compile-code.sh
Executable file
@ -0,0 +1,3 @@
|
||||
javac engine/*.java
|
||||
javac compute/*.java
|
||||
javac client/*.java
|
BIN
year4/semester2/CT414/materials/code/02-rmicompute/compute.jar
Normal file
BIN
year4/semester2/CT414/materials/code/02-rmicompute/compute.jar
Normal file
Binary file not shown.
BIN
year4/semester2/CT414/materials/code/02-rmicompute/compute/.DS_Store
vendored
Normal file
BIN
year4/semester2/CT414/materials/code/02-rmicompute/compute/.DS_Store
vendored
Normal file
Binary file not shown.
@ -0,0 +1,39 @@
|
||||
/*
|
||||
* Copyright (c) 1995, 2008, Oracle and/or its affiliates. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* - Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* - Neither the name of Oracle or the names of its
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
||||
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
package compute;
|
||||
|
||||
import java.rmi.Remote;
|
||||
import java.rmi.RemoteException;
|
||||
|
||||
public interface Compute extends Remote {
|
||||
<T> T executeTask(Task<T> t) throws RemoteException;
|
||||
}
|
@ -0,0 +1,36 @@
|
||||
/*
|
||||
* Copyright (c) 1995, 2008, Oracle and/or its affiliates. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* - Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* - Neither the name of Oracle or the names of its
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
||||
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
package compute;
|
||||
|
||||
public interface Task<T> {
|
||||
T execute();
|
||||
}
|
@ -0,0 +1,76 @@
|
||||
/*
|
||||
* Copyright (c) 1995, 2008, Oracle and/or its affiliates. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* - Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* - Neither the name of Oracle or the names of its
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
||||
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
package engine;
|
||||
|
||||
import java.rmi.registry.LocateRegistry;
|
||||
import java.rmi.registry.Registry;
|
||||
import java.rmi.server.UnicastRemoteObject;
|
||||
import compute.Compute;
|
||||
import compute.Task;
|
||||
|
||||
public class ComputeEngine implements Compute {
|
||||
|
||||
public ComputeEngine() {
|
||||
super();
|
||||
}
|
||||
|
||||
public <T> T executeTask(Task<T> t) {
|
||||
return t.execute();
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
int registryport = 20345;
|
||||
|
||||
if (args.length > 0)
|
||||
registryport = Integer.parseInt(args[0]);
|
||||
|
||||
System.out.println("RMIRegistry port = " + registryport);
|
||||
|
||||
// SecurityManager is deprecated so no longer used in this application
|
||||
// if (System.getSecurityManager() == null) {
|
||||
// System.setSecurityManager(new SecurityManager());
|
||||
// }
|
||||
|
||||
try {
|
||||
String name = "Compute";
|
||||
Compute engine = new ComputeEngine();
|
||||
Compute stub =
|
||||
(Compute) UnicastRemoteObject.exportObject(engine, 0);
|
||||
Registry registry = LocateRegistry.getRegistry(registryport);
|
||||
registry.rebind(name, stub);
|
||||
System.out.println("ComputeEngine bound");
|
||||
} catch (Exception e) {
|
||||
System.err.println("ComputeEngine exception:");
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
1
year4/semester2/CT414/materials/code/02-rmicompute/start-client.sh
Executable file
1
year4/semester2/CT414/materials/code/02-rmicompute/start-client.sh
Executable file
@ -0,0 +1 @@
|
||||
java -cp /Users/des/Documents/CT414-Samples/rmicompute/compute.jar:. client.ComputePi 20345 45
|
1
year4/semester2/CT414/materials/code/02-rmicompute/start-registry.sh
Executable file
1
year4/semester2/CT414/materials/code/02-rmicompute/start-registry.sh
Executable file
@ -0,0 +1 @@
|
||||
rmiregistry -J-Djava.rmi.server.codebase=file:/Users/des/Documents/CT414-Samples/rmicompute/ 20345
|
1
year4/semester2/CT414/materials/code/02-rmicompute/start-server.sh
Executable file
1
year4/semester2/CT414/materials/code/02-rmicompute/start-server.sh
Executable file
@ -0,0 +1 @@
|
||||
java -cp /Users/des/Documents/CT414-Samples/rmicompute/compute.jar:. engine.ComputeEngine 20345
|
Reference in New Issue
Block a user