code: public synchronized void addProjection( String externalNodeKey,
                                              String projectedNodeKey,
                                              String alias,
                                              SessionCache systemSession) {
          Projection projection = new Projection(externalNodeKey, projectedNodeKey, alias);
          storeProjection(projection, systemSession);
          Snapshot current = this.snapshot.get();
          Snapshot updated = current.withProjection(projection);
          this.snapshot.compareAndSet(current, updated);
      }
docs: Stores a mapping from an external node towards an existing, internal node which will become a federated node. These
  projections are created via
  {@link org.modeshape.jcr.api.federation.FederationManager#createProjection(String, String, String, String)} and need to be
  stored so that parent back references (from the projection to the external node) are correctly handled.
  
  @param externalNodeKey a {@code non-null} String representing the {@link NodeKey} format of the projection's id.
  @param projectedNodeKey a {@code non-null} String, representing the value of the external node's key
  @param alias a {@code non-null} String, representing the alias of the projection.