Assignment 7: RMI - Due Wednesday, July 30th

This assignment will be to create a simple distributed application - Virtual ATM machine

You will be creating both a Client and a Server program that communicate via RMI. The program is a virtual ATM machine. A simple GUI should connect and authenticate a ID/PIN number combination, then allow an arbitrary amount of withdrawls and deposits. Your program should do the following:
  1. The client be a simple GUI containing several simple JLabels, JTextBoxes and 1 Button - the two fields should be an account number and a pin number. Hit the button will "authenticate" them with the server. There should also be 2 other Text Boxes and 2 Other buttons, one Box/Button combination should allow entering/submitted an amount to Deposit, and the other Box/Button comibation should allow entering/submitting an amount to withdraw. There should also be a Label somewhere to indicate what's happening "Authentication succeeded/Authentication Failed/Deposit Succeeded, Withdrawl Failed, etc."
  2. The Server must hold a few accounts (3 at least). You may want to make a simple account class that just has data members and accessors for account number, pin and balance. When the server is started, it should have these in memory (you can hardcode values in the server - you don't need to store them or do anything fancy - they should just be there).
  3. You should then create remote methods for authenticating, depositing, and withdrawing. These should be simple! Don't overthink them.
  4. Once this is written, you must test it. Capture program runs on both the client and the server. The server capture should show you compiling the .java file and then going through all of the steps to get the server up and running and ready to receive RMI requests (including the starting of the rmiregistry service). The client script should show you compiling the .java file and then running the client application. The client application should first get a remote reference to the server's object and then store and retrieve values from it. The exact behavior of your client application is up to you...just make sure it successfully tests the behavior of your class.
I made the details about the assignment purposely vague. I leave the implementation up to you.