I'm implementing my spec using synchronized/wait() approach. There are any problem to make the calls to lock/delete/unlock and lock/update/unlock in the server with just one call from the client? I'm using RMI and i think (if i'm not wrong) this way can facilitate the no same-thread-guarantee issue that RMI says.
PS: I didn't want to say atomic as an really atomic operation in the title.
If you are developing a thin client, your server will have a single method (e.g. book) which handles all necessary business logic (locking record, updating record, unlocking record, checking if the record is still available/bookable) and you'll have one call from the client to execute the booking process. With a fat/thick client you will have a bunch of calls to execute the booking process.