Abstraction for accessing attribute objects associated with a request.
Supports access to request-scoped attributes as well as to session-scoped
attributes, with the optional notion of a "global session".

Can be implemented for any kind of request/session mechanism,
in particular for servlet requests and portlet requests.

removeAttribute

Note that an implementation should also remove a registered destruction
callback for the specified attribute, if any. It does, however, not
need to execute a registered destruction callback in this case,
since the object will be destroyed by the caller (if appropriate).

registerDestructionCallback

Register a callback to be executed on destruction of the
specified attribute in the given scope.

Implementations should do their best to execute the callback
at the appropriate time: that is, at request completion or session
termination, respectively. If such a callback is not supported by the
underlying runtime environment, the callback must be ignored
and a corresponding warning should be logged.

Note that 'destruction' usually corresponds to destruction of the
entire scope, not to the individual attribute having been explicitly
removed by the application. If an attribute gets removed via this
facade's removeAttribute(String, int) method, any registered
destruction callback should be disabled as well, assuming that the
removed object will be reused or manually destroyed.

NOTE: Callback objects should generally be serializable if
they are being registered for a session scope. Otherwise the callback
(or even the entire session) might not survive web app restarts.