I also have modified the Data class. My reasons were:
* I think locking and searching are basic capabilities of a database. A database without them is quite useless
* Performance: if extending I can only use the Data public/protected interface. On the contrary, if modifying I can access private fields/methods that can make criteriaFind much faster
* Bug hunting: Data's javadoc was wrong, and some methods had bugs. So I had to modify Data anyway.
As an example:
Client Design:
* MVC? Yes/No Why? How?
* Facade to access the server?
* How did you deal with remote/local connection? Did you have a unique interface? Did you use Strategy
pattern? How about RemoteExceptions?
* Multithreaded client?
* Exception handling/mechanism
* comboboxes or textfields? hardcoded airports, database read airports or nothing?
* search criteria: origin plus destination airports, or added carrier or more?
* internationalization?
Server design:
* locking mechanism:
- lock manager: yes/no
- how to identify client
- lock implement in local mode/remote mode
- database locking: lock(-1) / unlock (-1)
* exception handling/mechanism
* RMI vs sockets
* How do you deal with dead clients? Unreferenced?
* is your server capable of using one database or multiple databases?
* deadlock prevention
* did you use a Factory pattern to create connections?
* criteria find implementation
* Did you use a policy file? why?
* How did you deal with deprecated methods?