myfaces-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Jeanne Waldman (JIRA)" <>
Subject [jira] [Commented] (TRINIDAD-2055) Introduce ChangeManager wrapper class
Date Sat, 26 Mar 2011 15:48:05 GMT


Jeanne Waldman commented on TRINIDAD-2055:

Answer from Andy to Prakash's question --
Let's take a closer look at the use case that I am hoping to address...

I want to write a ChangeManager implementation that:

1.  Delegates all of the real work to some other ChangeManager.
2.  Examines ComponentChanges as they are added and drops certain
changes that I do not want to save.

I can do this today by writing my own wrapper class that extends
ChangeManager directly and provides delegating implementations of all
of the ChangeManager methods.

However, if we later add some new method to the ChangeManager contract
(as we did with applySimpleComponentChanges()), my wrapper class would
need to be updated - ie. I would need to add yet another delegating
method implementation for the new API.  This is annoying and fragile.

On the other hand, if we introduce a base wrapper class in Trinidad,
my concrete wrapper subclass is not impacted by new additions to the
ChangeManager API.  Any time we add a new method to the ChangeManager,
we would add an equivalent implementation to the ChangeManagerWrapper
base class.  In addition to reducing the amount of work to implement a
ChangeManager wrapper class (no longer need to re-implement every
ChangeManager method), we have significantly reduced the risk of
breaking such classes as the API evolves.

FWIW, this approach of providing a base wrapper class is a very common
pattern.  (As Pavitra hinted at this, is used all over the place in


> Introduce ChangeManager wrapper class
> -------------------------------------
>                 Key: TRINIDAD-2055
>                 URL:
>             Project: MyFaces Trinidad
>          Issue Type: Improvement
>    Affects Versions: 2.0.0-beta-2
>            Reporter: Andy Schwartz
>            Assignee: Andy Schwartz
>            Priority: Minor
>             Fix For: 2.0.0-beta-3
>         Attachments:
> One way that users might customize change management behavior is to create a proxy ChangeManager
that delegates through to an underlying ChangeManager (eg. to SessionChangeManager) for most
operations after performing filtering of the incoming changes.  It is possible to implement
such proxy ChangeManager classes today.  However, without a wrapper base class, these implementations
are fragile - ie. they will break if we ever introduce a new method to the ChangeManager API.
> A more robust solution would be to introduce a base wrapper class for proxy ChangeManager
implementations to extend.  That way, in the event that we do introduce new ChangeManager
methods, the base wrapper class can be updated in parallel, protecting subclasses from the

This message is automatically generated by JIRA.
For more information on JIRA, see:

View raw message