anchor.diff:  (because it is first in the list), and also registers the simple
   filesystem provider. The simple filesystem provider is not optional;
   it is required for temporary files.
  +
  +=== Bootstrap the IO Service on the server side
  +
  +UberFire web applications access the shared VFS via RPC (remote
  +procedure calls) to the server-side IO service, and this service needs
  +some help getting started when the web application is first started on
  +the server.
  +
  +Create the following two classes to ensure the IO service starts up
  +when the application is deployed to the server:
  +
  +.Create src/main/java/com/mycompany/uftutorial/server/UberFireConfiguration.java
  +[source,java]
  +------
  +/*
  + * Copyright 2012 JBoss Inc
  + *
  + * Licensed under the Apache License, Version 2.0 (the "License");
  + * you may not use this file except in compliance with the License.
  + * You may obtain a copy of the License at
  + *
  + *       http://www.apache.org/licenses/LICENSE-2.0
  + *
  + * Unless required by applicable law or agreed to in writing, software
  + * distributed under the License is distributed on an "AS IS" BASIS,
  + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
  + implied.
  + * See the License for the specific language governing permissions and
  + * limitations under the License.
  + */
  +
  +package com.mycompany.uftutorial.server;
  +
  +import javax.annotation.PostConstruct;
  +import javax.annotation.PreDestroy;
  +import javax.enterprise.context.ApplicationScoped;
  +import javax.enterprise.inject.Produces;
  +import javax.inject.Inject;
  +import javax.inject.Named;
  +
  +import org.jboss.errai.common.client.api.Assert;
  +import org.slf4j.Logger;
  +import org.slf4j.LoggerFactory;
  +import org.uberfire.commons.cluster.ClusterServiceFactory;
  +import org.uberfire.commons.services.cdi.Startup;
  +import org.uberfire.commons.services.cdi.StartupType;
  +import org.uberfire.io.IOService;
  +import org.uberfire.io.impl.IOServiceDotFileImpl;
  +import org.uberfire.io.impl.cluster.IOServiceClusterImpl;
  +
  +@Startup(StartupType.BOOTSTRAP)
  +@ApplicationScoped
  +public class UberFireConfiguration {
  +
  +  private static final Logger logger =
  +  LoggerFactory.getLogger(UberFireConfiguration.class);
  +
  +  @Inject
  +  @Named("clusterServiceFactory")
  +  private ClusterServiceFactory clusterServiceFactory;
  +
  +  private IOService ioService;
  +
  +  @PostConstruct
  +  public void setup() {
  +    if ( clusterServiceFactory == null ) {
  +      ioService = new IOServiceDotFileImpl();
  +    } else {
  +      ioService = new IOServiceClusterImpl( new
  +  IOServiceDotFileImpl(), clusterServiceFactory );
  +    }
  +    logger.debug("Using IOService: " + ioService);
  +  }
  +
  +  @PreDestroy
  +  public void onShutdown() {
  +    ioService.dispose();
  +  }
  +
  +  @Produces
  +  @Named("ioStrategy")
  +  public IOService ioService() {
  +    return Assert.notNull(ioService);
  +  }
  +
  +}
  +------
  +
  +And this second class, which is separately responsible for ensuring
  +that UberFire's ConfigurationService is bootstrapped. Unfortunately,
  +you can't just inject ConfigurationService into the above class,
  +because the ConfigurationService depends on the IOService, and the
  +above class is responsible for producing the IOService instance. This
  +leads Weld to print a warning about the circular dependency.
  +
  +.Create src/main/java/com/mycompany/uftutorial/server/UberFireServerBootstrapper.java
  +------
  +package com.mycompany.uftutorial.server;
  +
  +import javax.annotation.PostConstruct;
  +import javax.enterprise.context.ApplicationScoped;
  +import javax.inject.Inject;
  +
  +import org.slf4j.Logger;
  +import org.slf4j.LoggerFactory;
  +import org.uberfire.backend.server.config.ConfigurationService;
  +import org.uberfire.commons.services.cdi.Startup;
  +
  +/**
  + * This class is a workaround to ensure the UberFire ConfigurationService has
  + * been initialized before the first client request comes in (it has side
  + * effects, including bootstrapping the filesystem service). See JIRA issue
  + * UF-17 for details.
  + * <p>
  + * Unfortunately, we can't simply inject {@link ConfigurationService} into our
  + * {@link UberFireConfiguration} bean, because that creates a circular injection
  + * dependency chain.
  + */
  +@Startup
  +@ApplicationScoped
  +public class UberFireServerBootstrapper {
  +
  +  private static final Logger logger =
  +  LoggerFactory.getLogger(UberFireServerBootstrapper.class);
  +
  +  @Inject ConfigurationService configurationService;
  +
  +  @PostConstruct
  +  private void init() {
  +    configurationService.toString(); // this line ensures the ConfigurationService bean is really instantiated. do not remove!
  +    logger.info("Finished creating UberFire ConfigurationService");
  +  }
  +}
  +------
  +
   
   == Enable the UberFire CDI Extensions
   
  
positive.code: 
  TODO: why doesn't login.jsp have to be in this list?
  
  At this point, we have fully configured UberFire Security.
  
  == Set up the VFS
  
negative.code: 
  import org.uberfire.client.mvp.PlaceManager;
  import org.uberfire.client.workbench.Header;
  import org.uberfire.client.workbench.widgets.menu.WorkbenchMenuBarPresenter;
  import org.uberfire.mvp.Command;
  import org.uberfire.workbench.model.menu.MenuFactory;
  import org.uberfire.workbench.model.menu.Menus;
  