code: public Map<Object, Object> getAttributes() {
  
          if (defaultFacesContext != null) {
              return defaultFacesContext.getAttributes();
          }
          if (!isCreatedFromValidFactory) {
              if (attributesForInvalidFactoryConstruction == null) {
                  attributesForInvalidFactoryConstruction = new HashMap<Object, Object>();
              }
              return attributesForInvalidFactoryConstruction;
          }
          throw new UnsupportedOperationException();
   
      }
docs: <p class="changed_added_2_0">Return a mutable <code>Map</code>
  representing the attributes associated wth this
  <code>FacesContext</code> instance.  This <code>Map</code> is
  useful to store attributes that you want to go out of scope when the
  Faces lifecycle for the current request ends, which is not always the same
  as the request ending, especially in the case of Servlet filters
  that are invoked <strong>after</strong> the Faces lifecycle for this
  request completes.  Accessing this <code>Map</code> does not cause any
  events to fire, as is the case with the other maps: for request, session, and
  application scope.  When {@link #release()} is invoked, the attributes
  must be cleared.</p>
  
  <div class="changed_added_2_0">
  
  <p>The <code>Map</code> returned by this method is not associated with
  the request.  If you would like to get or set request attributes,
  see {@link ExternalContext#getRequestMap}.
  
  <p>The default implementation throws
  <code>UnsupportedOperationException</code> and is provided
  for the sole purpose of not breaking existing applications that extend
  this class.</p>
  
  </div>
  
  @throws IllegalStateException if this method is called after
  this instance has been released
  
  @since 2.0