This week's book giveaway is in the OCAJP 8 forum. We're giving away four copies of OCA Java SE 8 Programmer I Study Guide and have Edward Finegan & Robert Liguori on-line! See this thread for details.
Yes, you can throw an IllegalStateException when a record is trying to lock the same record. In my solution i simply throw an IllegalStateException if a thread/client is trying to lock a record if it has already locked a record (even if he's trying to lock the same record).
I used also my own interface (extending Sun's interface) and added some methods + changed some method declarations (but it were still legal overrides) and I passed the SCJD exam (so did a whole lot of other ranchers), so I don't think it is a problem if you do it too.