Hi Blake,

+1 on this cool enhancement!

-Matthias

On Fri, Jul 16, 2010 at 7:16 AM, Blake Sullivan
<[email protected]> wrote:
> For Trinidad-1856, I would like to add the following public apis:
> New apis:
>
> on org.apache.myfaces.trinidad.bean.util.StateUtils:
>  /**
>   * Returns <code>true</code> if the attributes of the session and
> application Maps should be
>   * checked for cases where the attribute was mutated but not dirtied for
> failover.  If
>   * <code>checkSessionSerialization</code> returns <code>true</code>, the
> contents of the
>   * Session should be checked.  If
> <code>checkApplicationSerialization</code> returns
>   * <code>true</code>, the Serializable content of the Application should be
> checked.
>   * @return true if the contents of scopes should be checked for mutation
> without dirtying.
>   * @see #checkApplicationSerialization
>   * @see #checkSessionSerialization
>   */
>  public static boolean checkManagedBeanMutation(ExternalContext extContext)
>  {
>    return _CHECK_MANAGED_BEAN_MUTATATION;
>  }
>
> In order to catch mutations to non-HTTP servlet environments we need need to
> wrap the Session and Application Maps.  (for HttpRequests, we wrpa the
> underlying ServletContext and Session objects in order to catch direct
> mutations).  To do so, the following apis are added to
>
> org.apache.myfaces.trinidad.util.CollectionUtils
>
>  /**
>   * Interface for trapping mutations to a Map.
>   * @param <K> the type of the keys of the Map that MapMutationHooks are
> associated with
>   * @param <V> the type of the values of the Map that MapMutationHooks are
> associated with
>   * @see #newMutationHookedMap
>   */
>  public interface MapMutationHooks<K, V>
>  {
>    /**
>     * Called when the associated Map of the MapMutationHooks is written to
>     * @param key   key of entry that has changed
>     * @param value value of entry that has changed
>     */
>    public void writeNotify(K key, V value);
>
>    /**
>     * Called when an entry is removed from the associated Map of the
> MapMutationHooks
>     * @param key   key of entry that has been removed
>     */
>    public void removeNotify(Object key);
>  }
>
>  /**
>   * Creates a new Map that informs the MapMutationHooks of any direct
> mutations.  Mutations to
>   * the underlying Map will not be caught.
>   * If the base map is Serializable, the returned Map will be Serializable
>   * @param <K> type of the keys of the Map
>   * @param <V> type of the values of the Map
>   * @param map Underlying map to trap mutations of
>   * @param hooks MapMutationHooks to inform of mutations to the returned Map
>   * @return a new Map that traps the mutations to the underlying Map
>   * @throws NullPointerException if map or hooks are null
>   */
>  public static <K,V> Map<K, V> newMutationHookedMap(Map<K, V> map,
> MapMutationHooks<K, V> hooks)
>
> The JIRA contains more information about the purpose.
> -- Blake Sullivan
>



-- 
Matthias Wessendorf

blog: http://matthiaswessendorf.wordpress.com/
sessions: http://www.slideshare.net/mwessendorf
twitter: http://twitter.com/mwessendorf

Reply via email to