@Override
    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException
    {
        final ExternalizableUtil externalizableUtil = ExternalizableUtil.getInstance();
        subdomain = externalizableUtil.readSafeUTF(in);
        final long size = externalizableUtil.readLong(in);
        this.occupants = new HashSet<>();
        for (long i=0; i<size; i++) {
            final String roomName = externalizableUtil.readSafeUTF(in);
            final String nickname = externalizableUtil.readSafeUTF(in);
            final JID realJID = (JID) externalizableUtil.readSerializable(in);
            final OccupantManager.Occupant occupant = new OccupantManager.Occupant(roomName, nickname, realJID);
            occupants.add(occupant);
        }
        originator = (NodeID) externalizableUtil.readSerializable(in);
    }
Task that is used by a cluster node to inform other cluster nodes of its local occupants. This is intended to be used
by a node that is joining a cluster (to send its local occupants to all other nodes), and by nodes in an existing
cluster that detect a new node joining (to send their local occupants to the joining node).

@author Guus der Kinderen
xmppserver/src/main/java/org/jivesoftware/openfire/muc/cluster/SyncLocalOccupantsAndSendJoinPresenceTask.java