@Override
    public void stop() {
        super.stop();
        // Remove this module as a user event listener
        UserEventDispatcher.removeListener(this);
        // Remove this module as a listener of group events
        GroupEventDispatcher.removeListener(this);
        if (objectName != null) {
            JMXManager.tryUnregister(objectName);
            objectName = null;
        }
        executor.shutdown();
    }
Returns true if a group in the first collection may mutually see a group of the
second collection. More precisely, return true if both collections contain a public
group (i.e. anybody can see the group) or if both collection have a group that may see
each other and the users are members of those groups or if one group is public and the
other group allowed the public group to see it.

@param user the name of the user associated to the first collection of groups. This is always a local user.
@param groups a collection of groups to check against the other collection of groups.
@param otherUser the JID of the user associated to the second collection of groups.
@param otherGroups the other collection of groups to check against the first collection.
@return true if a group in the first collection may mutually see a group of the
        second collection.
xmppserver/src/main/java/org/jivesoftware/openfire/roster/RosterManager.java