Assignment 2 (Draft)
The aim of this assignment is to deepen your experience in
designing and implementing distributed computing applications on
the Internet using remote objects. The programming language will
be Java. Communication protocols in the distributed application
will be based on Java RMI or Corba.
The Task
Your task in this assignment is to design, implement, test and
discuss a distributed bank account based on a sequential consistency
algorithm.
The distributed system should consist of a number of peers that
make available distributed bank account objects consisting of (at least):
- Name
- The name of the account
- Transactions
- A list of transactions that have occurred on this account
- Balance
- The current account balance
The following methods should be available over the network
(you can define further methods if you want):
- AddNode(name)
- Register a new member node with a given name with the collective (the
name can be a simple string).
- RemNode(name)
- Remove a member node from the system
- DepositWithdraw(amount)
- Deposit a certain amount of money on the account (or withdraw if the
amount is negative).
- AddInterest(percent)
- Calculate a percentage interest from the current balance and this to the balance
of the account.
User Interface
Each peer should display
- The name of the account (changeable by the user).
- The current account balance, and
- the list of transactions that have occurred
In addition, the user should have the ability to deposit or withdraw
an amount of money from the account or have a certain amount of interest
added to the account.
All changes should only occur locally until the user clicks on a Sync
button (to simulate network delays, etc.). Furthermore your program should allow
sequential consistency to be switched on or off. If the Sync button gets
pressed with sequential consistency switched on, the list of transactions should
be sequentially consistent across all peers, otherwise the list should show the
local order of events.
Here is an example of what the user interface could look like:
General suggestions
- Read this document carefully.
- Attend all lectures and lab sessions for discussing
the techniques related to this assignment.
- Review the book chapters about synchronisation and
consistency!
- A simple way to ensure sequential consistency is to use Lamport timestamps
and number the nodes (peers). If two events have the same time stamp, use
the node number as a sorting criterion.
Assessment
This assignment is worth 30 marks (30% of the total maximum
marks for the course).
You need to work individually on this assignment!
You cannot work in groups or in pairs.
Your project will be judged on its correctness, functionality,
documentation, and general quality. 80 % of the total marks
will be allocated for the correctness, functionality, and quality
of the implemented program, and 20 % of the total marks for
the quality of the accompanying documentation and lab presentation.
Submission procedure
You must submit your work (including your program and
and documentation) electronically using
this web page.
You should submit your work in time. Penalties for late
submissions are 10% per day late!
Due Date
This assignment is due on COB, Friday, 13 October 2006
(End of week 11).
Electronic submission
Your electronic submission should consist of a
ZIP
file, including a .jar file capable of being executed, a
well-presented, compilable listing of your source, and documentation
(see below). You need to demonstrate your running program in the week after
the assignment is due (or the week thereafter, if you are submitting late).
Use Virgil to
electronically submit your assignment
by
following this link.
Documentation Submission
Your documentation should be in electronic form. It should be included
in the above ZIP file and
comprise the following:
- A cover page, clearly showing the code and name of the
course (3510CIT Distributed Computing), your name and student
number.
- A report containing a brief description of your design, the
reasons for your main design decisions, a summary of the
program's functionality and limitations, a reflective analysis
of your approach and achievements, a description of the testing
performed, a discussion of how you could extend the program,
and instructions for running the program.
- A documentation of the class hierarchy, including the
objects and methods that implement the program.
- A listing of the Java source files (with sensible comments)
which implement the program (if you include this in your main
documentation, please make sure that you include the compilable
.java files as well!).
Last Changed: $Date: 2006/09/18 09:06:47 $
|