Exercises 1. and 5. are implemented in the same LockManager-implementation. Exercise 2. is implemented in QueueClient.java. This is slightly different from what was asked, nut shows how the global WFG can be constructed, and that was the main point of the exercise. To make a 2 phase commit (E5), type 'commit' in the LockClientController. You see how the servers make a decision and the final result in the client. So the client acts as a coordinator, which is not the case in real environments. TxnIdTest.java shows how the transaction id is constructed as specified in E1. It contains time and server id. They can both be obtained from the txnId later on.