@Nonnull
    public MultiUserChatServiceImpl createMultiUserChatService(@Nonnull final String subdomain, @Nullable final String description, final boolean isHidden) throws AlreadyExistsException {
        if (getMultiUserChatServiceID(subdomain) != null) {
            Log.info("Unable to create a service for {} as one already exists.", subdomain);
            throw new AlreadyExistsException();
        }

        Log.info("Creating MUC service '{}'", subdomain);
        final MultiUserChatServiceImpl muc = new MultiUserChatServiceImpl(subdomain, description, isHidden);
        insertService(subdomain, description, isHidden);
        registerMultiUserChatService(muc);
        return muc;
    }
Creates a new MUC service and registers it with the manager (which causes a cluster-wide notification to be sent)
and starts up the service.

@param subdomain Subdomain of the MUC service.
@param description Description of the MUC service (can be null for default description)
@param isHidden True if the service is hidden from view in services lists.
@return MultiUserChatService implementation that was just created.
@throws AlreadyExistsException if the service already exists.
xmppserver/src/main/java/org/jivesoftware/openfire/muc/MultiUserChatManager.java