why throwing exception? it is to notify the caller that the listener will not be invoked?