On Fri, Dec 17, 2010 at 3:27 PM, Robert Zeigler <robe...@scazdl.org> wrote:

> Yeah, to be sure.  That's why I like the tapestry-compatibility module
> idea.... you add it if you want full backwards compatibility.  You leave it
> out if you don't need it/want the new behavior by default.
> Additionally, each compatibility module could contribute the
> TAPESTRY_COMPATIBILITY symbol appropriate for it.  Like I said, just
> "thinking out loud".  You're probably right that at least /some/ special
> casing will remain in the core.  But I think a large fraction of backwards
> compatibility-type contributions could be factored into specific modules.
>  Managing which module does what might be a pain... I'm just imagining:
> "This module adds 5.1 backwards compatibility to 5.2.  That one does to 5.3"
> and so forth.  But I /think/ what you would do is have a
> "tapestry-compatibility-50" (and tapestry-compatibility-51, 52, etc.) with
> versions 5.1.0.x, and maybe 5.2.0.x.  And eventually 5.3.0.x.  So the
> version matches the tapestry-core version that you needs to add backwards
> compatibilitly /to/.  The module name reflects the level of compatibility
> that you're adding.  I dunno... now that I'm saying it out loud, it sounds
> like it could be overly confusing.  But the overall concept is good, I
> think. Especially if it's possible to override core component definitions;
> I'm not sure if that's (easily) possible currently.
>
>
The problem with overriding core components looks simple:

<t:label> normally means org.apache.tapestry5.corelib.components.Label

It seems like you could do some magic somewhere to map "label" instead to
org.apache.tapestry5.compat52.components.Label

However, you get hosed by other options, such as:

  @Component(for="username")
  private Label usernameLabel;

or even

  @InjectCompnent
  private Label usernameLabel;

... especially because there's no guarantee that the compatibility Label
class is type compatible with the default Label (i.e., a subtype).

Despite this, if I had it to do over again, I would have fewer options for
components in the templates; as in, if you want mixins, you'd have to use
the @Component annotation on a field.



> Robert
>
> On Dec 17, 2010, at 12/175:12 PM , Howard Lewis Ship wrote:
>
> > It's a tricky situation; some users are going to want to upgrade to 5.3
> and
> > see new features and behaviors automatically; others will want to upgrade
> to
> > 5.3 and see nothing change until they enable it.
> >
> > I like the idea of factoring out as much as possible into
> > tapestry-compatibility.jar.
> >
> > I think there will always have to be some "case" logic to handle some of
> > these compatibility issues. It's simply not avoidable (well, perhaps by
> > adding n-layers of new abstraction, and that's not going to happen).
> >
> > On Fri, Dec 17, 2010 at 2:25 PM, Robert Zeigler <robe...@scazdl.org>
> wrote:
> >
> >> +1.
> >> Although the question remains... how /long/ to be compatible.  For
> >> instance, you might want "5.0" in there, as well, in which case, the
> >> label-id generation would need to be enabled for modes 5.0 and 5.1
> >> (suggesting perhaps a need for some conversion to an "ordered" value...
> >> something more than boolean).
> >>
> >> What we /don't/ want is to have the codebase littered with multiple
> >> different cases for different versions.  It might go that way, but at
> some
> >> point, support for old behavior has to go... the question is when?
> >>
> >> I'm thinking out loud here, but...
> >> Recently, I upgraded a project from 5.0.15 to 5.1.0.4.  The project is
> >> fairly complex, and there were some major changes in Tapestry's behavior
> >> between 5.0.15 and 5.0.18, when the public apis were locked down as
> stable.
> >> What impressed me from this process was how much of the "old" behavior I
> >> could restore via various service contributions.  It makes me wonder if,
> >> instead of introducing a "compatibility version" symbol (and associated
> >> checks in the code), we could introduce "compatibility modules".  Eg:
> >> tapestry-compatibility-5.1 (version 5.2.4) would restore 5.1's behavior
> in
> >> 5.2.4.  For this to really work, we might need to introduce a mechanism
> for
> >> explicitly overriding components... so the 5.1 compatibility could have
> a
> >> label component that overrides the default 5.2 component, or something
> like
> >> that.  Anyway... this might be a good solution to avoid littering the
> core
> >> codebase with checks.
> >>
> >> Thoughts?
> >>
> >> Robert
> >>
> >> On Dec 17, 2010, at 12/172:09 PM , Howard Lewis Ship wrote:
> >>
> >>> It was simply the case that the id wasn't needed, because the label
> could
> >> be
> >>> located as previously outlined.
> >>>
> >>> Rather than have an endless number of switches to set, I think we may
> >> need a
> >>> global compatibility symbol ("tapestry.compatibility"), and maybe a
> >>> mechanism for turning that into a boolean at the point of injection.
>  The
> >>> values for the symbol would be "5.1", "5.2"  "5.3", etc.
> >>>
> >>> The quickstart archetype should set the symbol in the generated
> >> AppModule.
> >>> In this way, users on upgrade could conciously change the compatibility
> >>> mode.
> >>>
> >>> We would want to document, exhaustively, what is enabled or disabled
> >> based
> >>> on the symbol.
> >>>
> >>> This isn't a total solution to backwards compatibility, and not
> >> everything
> >>> could be handled this way, but it would be a good start.
> >>>
> >>> On Fri, Dec 17, 2010 at 11:38 AM, Josh Canfield <
> joshcanfi...@gmail.com
> >>> wrote:
> >>>
> >>>> Hmm...
> >>>>
> >>>> The id needs to be put back, but before we add a symbol to allow it to
> >>>> be optionally removed I'd like to make sure that Howard (and anyone
> >>>> else) really needed it removed and it wasn't just some house cleaning.
> >>>> I imagine if it was really a number of bytes issue then more than just
> >>>> the label could be optimized and a markup filter like Robert suggested
> >>>> is more appropriate...
> >>>>
> >>>> Josh
> >>>>
> >>>> On Fri, Dec 17, 2010 at 10:56 AM, Robert Zeigler <robe...@scazdl.org>
> >>>> wrote:
> >>>>>
> >>>>> On Dec 17, 2010, at 12/1712:53 PM , Thiago H. de Paula Figueiredo
> >> wrote:
> >>>>>
> >>>>>> On Fri, 17 Dec 2010 16:35:43 -0200, Robert Zeigler <
> >> robe...@scazdl.org>
> >>>> wrote:
> >>>>>>
> >>>>>>> Just to clarify, I hope that by "true" you mean that id generation
> is
> >>>> turned /on/ by default. :)
> >>>>>>
> >>>>>> Your hope isn't in vain. :) true = on in this case.
> >>>>>>
> >>>>>>> warnings as time allowed.  The important thing is that even with
> >>>> deprecated methods, the old /behavior/ was preserved.  It's a policy
> we
> >>>> should adhere to more in Tapestry.  What users need /most/ from the
> >>>> framework is dependable behavior; in large part, they need that more
> >> than
> >>>> the few bytes of bandwidth saved by removing the id from the label
> >>>> component.
> >>>>>>
> >>>>>> Agreed. I guess most of the disrupting changes were just honest
> >>>> mistakes. It's kinda hard to foresee of all the consequence of a
> change,
> >>>> specially when most of the users (the developers using Tapestry) are
> not
> >> in
> >>>> your team.
> >>>>>>
> >>>>>
> >>>>> Fair enough.
> >>>>>
> >>>>> Robert
> >>>>>
> >>>>>> --
> >>>>>> Thiago H. de Paula Figueiredo
> >>>>>> Independent Java, Apache Tapestry 5 and Hibernate consultant,
> >> developer,
> >>>> and instructor
> >>>>>> Owner, Ars Machina Tecnologia da Informação Ltda.
> >>>>>> http://www.arsmachina.com.br
> >>>>>>
> >>>>>>
> ---------------------------------------------------------------------
> >>>>>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
> >>>>>> For additional commands, e-mail: users-h...@tapestry.apache.org
> >>>>>
> >>>>>
> >>>>> ---------------------------------------------------------------------
> >>>>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
> >>>>> For additional commands, e-mail: users-h...@tapestry.apache.org
> >>>>>
> >>>>>
> >>>>
> >>>> ---------------------------------------------------------------------
> >>>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
> >>>> For additional commands, e-mail: users-h...@tapestry.apache.org
> >>>>
> >>>>
> >>>
> >>>
> >>> --
> >>> Howard M. Lewis Ship
> >>>
> >>> Creator of Apache Tapestry
> >>>
> >>> The source for Tapestry training, mentoring and support. Contact me to
> >> learn
> >>> how I can get you up and productive in Tapestry fast!
> >>>
> >>> (971) 678-5210
> >>> http://howardlewisship.com
> >>
> >>
> >> ---------------------------------------------------------------------
> >> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
> >> For additional commands, e-mail: users-h...@tapestry.apache.org
> >>
> >>
> >
> >
> > --
> > Howard M. Lewis Ship
> >
> > Creator of Apache Tapestry
> >
> > The source for Tapestry training, mentoring and support. Contact me to
> learn
> > how I can get you up and productive in Tapestry fast!
> >
> > (971) 678-5210
> > http://howardlewisship.com
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
> For additional commands, e-mail: users-h...@tapestry.apache.org
>
>


-- 
Howard M. Lewis Ship

Creator of Apache Tapestry

The source for Tapestry training, mentoring and support. Contact me to learn
how I can get you up and productive in Tapestry fast!

(971) 678-5210
http://howardlewisship.com

Reply via email to