public synchronized Future<?> join( @Nonnull MUCOccupant occupantData )
    {
        return join( occupantData, true, true );
    }
Makes a user in our XMPP domain join the FMUC room.

The join event is propagated to all nodes in the FMUC set that the room is part of.

When 'outbound' federation is desired, but has not yet been established (when this is the first user to join the
room), federation is initiated.

Depending on the configuration and state of the FMUC set, the join operation is considered 'blocking'. In case of
a FMUC based on master-slave mode, for example, the operation cannot continue until the remote FMUC node has
echo'd back the join. To accommodate this behavior, this method will return a Future instance. The Future will
immediately be marked as 'done' when the operation need not have 'blocking' behavior. Note that in such cases,
the Future being 'done' does explicitly <em>not</em> indicate that the remote FMUC node has received, processed
and/or accepted the event.

If the local room is not configured to federate with another room, an invocation of this method will do nothing.

@param occupantData The occupant data in which the user is joining the room.
@return A future object that completes when the stanza can be propagated locally.
xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/FMUCHandler.java