Besides having the README.TXT, DesignChoices.txt and UserDoc.txt files (I've gone over them 2 dozen times already ), the following is a summary of what I've done for the project:
Used MVC pattern for the GUI. The Model controls state of the data. The View builds components for display. The Controller directs activity for both and handles all actions initiated by the user. The View uses a JTable per requirements, but overall the View is very vanilla - just the facts. No bells or whistles.
The Controller talks to a Facade. The Facade passes all requests from the Controller for data, etc. All business logic resides in this Facade. The Facade (implements a Data Interface) handles all requests to the following: a Connection Factory, a Server and a Connection Builder. The Connection Builder (client side) gets connections to the Connection Factory (server side) class.
The Connection Factory is implemented with RMI. You can assume I properly integrated Remote and UnicastRemoteObject in the Connection Factory and the Server class. The ConnectionFactory builds a Data Factory and has a getter for the Server class. The Server class is embedded with a reference to the Data Factory. The Connection Factory will create a new Server thread for each client and return it to each client side Facade. Only one Data class is used by all the clients in remote mode.
The Server class implements a Data interface and Unreferenced. It takes composite data requests and breaks them into atomic requests and directs them to the appropriate class - either to the Data class through the Data Factory reference or to FieldInfo or DataInfo. The Server class has reference to a Lock Manager.
The Lock Manager is a singleton and is used only in remote mode. It only handles atomic requests to lock or unlock. It only returns a boolean to indicate if locking was successful or not. The blocking of records is done in the Server class.
Implemented a ChainedException class. All exception classes extend from here. Typically, exceptions are thrown at atomic levels and are caught at composite levels - usually the Controller on the client and the Server on the server side.
Modified Data class and then overrode the lock, unlock and criteriaFind methods.
Implemented a policy file for client and server, but don't really need it.
On server side, command line startup requires policy file, database name and DNS.
On client side, only need policy file at command line. Port and DNS are entered in a JDialog for remote mode. A JFileChooser is used for database selection in local mode.
That's pretty much it and it all works! I've tested till I'm sick of seeing this thing.
Anybody see any glaring holes?