In order to verify that your unreferenced is working properly, you will need to do 3 things:
1. Create some way to put a significant delay between when your client calls lock and when it calls unlock. You can use Thread.sleep, System.in.read, System.exit, or just comment out the call to unlock.
2. Put some System.out.println's in your unreferenced(), so you can see when it is being called on the server side object.
3. Run the server and client and start the booking process then quit the client without calling unlock. LEAVE the server running for about 15 minutes or so, and
you should see your println's confirming that unreferenced was called.
Hope that clarifies it. You seem to be on the right track.
Pete