The goal of this assignment is to use Java RMI to create a framework for distributed computation. A framework for client-server computation has been defined in the RMI tutorial at sun.com. That framework involves two interfaces, compute.Compute and compute.Task. Modify it in such a way that the tasks can be split, the sub-tasks can be sent out to a list of other available servers to be computed, and then the results can be re-composed. The basic interfaces follow:
package compute; import java.rmi.Remote; import java.rmi.RemoteException; public interface Compute extends Remote { Object executeTask(Task t) throws RemoteException; }
package compute; import java.io.Serializable; public interface Task extends Serializable { Object execute(); }
After extending the interfaces as appropriate and creating an implementation, write two short example applications which use the framework, splitting and re-joining tasks. Possible algorithms you could use would be tree-analysis algorithms, tic-tac-toe move planning algorithms, Fibonacci number generation algorithms, or many other things. It should be capable of having portions run on different computers.
All exceptions must be properly handled.
Here are a list of possible extensions to the project. Completion of one or more of these will result in a better grade. It should also be noted that, if you have an idea for a different extension, ask either the instructor or TA for approval.
Grading will be split in the following way:
Submission:
The due date for this project is March 2nd, 2004, 11:55pm EST. You should
use the assignments drop-off box located at the course's WebCT page. Upload
a JAR file containing all the relevant documented Java files, along
with a README file describing the project and its usage. 24-hour late
submissions will receive a 10% grade penalty, 3-day late submissions will
receive a 25% penalty. Assignments will not be received after March
5th, 2004.