1.Dlaczego sockety a nie RMI The sockets are straightforward to use. The two classes: "ServerSocket" and "Socket" allows establish connections between client and server. "Socket" contains code that knows how to find and communicate with a server. "ServerSocket" contains code that accept client request and creates "Socket" for the specified port: ServerSocket serverSocket = new ServerSocket(1234); Socket socket = serverSocket.accept(); The sockets use stream to sending data by network. It is low level communication. There is no mechanism to remote invocation like RMI. In the application such mechanism is created. Its uses serializable objects and "ObjectOutputStream" and "ObjectInputStream" to send objects over the network. This mechanism use Command design pattern. The pattern allows executing an operation on the server side and reply with response to the client. Disadvantage: Your client has to know the port number on the server. Your server and client have to deal with sockets, low-level streams, and object streams. Your client cannot directly issue commands to the server. You have to create a class to represent a command and its parameters. 2.Jak rozwiazales wyszukiwanie w GUI There are two combo boxes on the main frame on the search panel. The name combo box and location combo box contains a set of names and set of locations. The criteria are determined by database data. The user can only search the names and/or locations that are in database. There is additional item "--all--" to searching for all names and/or for all locations. If the user press the "Search" button the result will appear in main table. 3.Jak rozwiazales lockowanie There is "LockManager" class. This class provide functionality to appropriate accessing and modifying the database file. This class has Map that is used for locking and unlocking. The key is the record number to lock, the value is client cookie which tries access record. The client cookie is Thread.currentThread().getId(); If the client tries update or delete record in database, the client must lock record before that. If the current record is actually locked the client waits in separately thread. To appropriate locking and unlocking , the lock and unlock operation must by used in synchronized block. synchronized(LockManager.getInstance()) It means the Map is accessing in synchronized way. The "LockManager" is singleton class, so the same instance is always synchronized. 4.Czy swoj model do JTable czy defaultowy I used my own data table model "ContractorTableModle" by extending "AbstractTableModel". "AbstractTableModel" provides default implementations for most of the methods in the "TableModel" interface. It requires override only three methods: public int getRowCount(); public int getColumnCount(); public Object getValueAt(int row, int column); The data in "ContractorTableModel" is: private List data = new ArrayList(); The methods: getValueAt getContractor getData getColumnName allows getting and displaying information from model about contractors in straightforward way.