The use of this is not thread-safe. It is set by startListening(), called by super.start() and used/unset by stopListening() called by super.stop().

Perhaps it would be better to have the server field maintained by AbstractListenerService, and have startListening() return it, and stopListening() accept it as a parameter to keep the thread safety part in one place.