The found the
thread synchronization (lock/unlock) was hard.
One realy has to understand how synchronization monitors works (wait - notify).
It was useful to use
junit for
testing the lock/unlock in order to detect deadlocks and other problems.
Used the NetBeans
IDE,
Ant for managing the project and JUnit for testing - great tools and all are free !
I used RMI.