1) That does look suspicous.
I'd suggest using a ConcurrentHashMap.
2) Somebody else mentioned this a while ago.
They even suggested that it should unregister
a listener that throws an unchecked throwable.
We couldn't find this behaviour defined in the spec.
I will make the changes and propose the patch.
I am also working on a HANotificationBreadcasterSupport, which is the same use as the regular one, only it is symmetric throughout a cluster partition. Invoking sendNotification() on any of the broadcasters will notify all listeners that are subscribed to a copy of the brodacaster mbean with the same name and in the same partition as the notifying broadcaster.
This will hopefully turn into a convenient farming tool.
More details to follow ...
Here is an article on constructing listener lists in a multi-threaded environment :
The approach is unconventional.
It seems the problem has already been solved, but anyway.