private void removeChatUser(final JID userAddress)
    {
        final Set<String> roomNames = occupantManager.roomNamesForAddress(userAddress);

        for (final String roomName : roomNames)
        {
            final Lock lock = getChatRoomLock(roomName);
            lock.lock();
            try {
                final MUCRoom room = getChatRoom(roomName);
                if (room == null) {
                    // Mismatch between MUCUser#getRooms() and MUCRoom#localMUCRoomManager ?
                    Log.warn("User '{}' appears to have been an occupant of room '{}' of service '{}' but that room does not seem to exist.", userAddress, roomName, chatServiceName);
                    continue;
                }
                final MUCOccupant occupant = room.getOccupantByFullJID(userAddress);
                if (occupant == null) {
                    // Mismatch between MUCUser#getRooms() and MUCRoom#occupants ?
                    Log.warn("User '{}' appears to have been an occupant of room '{}' of service '{}' but the associated occupant data does not seem to exist.", userAddress, roomName, chatServiceName);
                    continue;
                }
                try {
                    room.leaveRoom(occupant);
                    // Ensure that all cluster nodes see the change to the room
                    syncChatRoom(room);
                } catch (final Exception e) {
                    Log.error(e.getMessage(), e);
                }
            } finally {
                lock.unlock();
            }
        }
    }
Removes a user from all chat rooms.

@param userAddress The user's normal jid, not the chat nickname jid.
xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/MultiUserChatServiceImpl.java