If you throw an exception, then it is totally unclear to the user what the state of the object is. Currently the remaining part of the destroy method isn't called :

context.removeProxy(this);
        context = null;

This this object is never removed from its context and therefor you have a memory leak.

So that is something which needs to be addresses anyway.