Re: A more general approach to configuring for compatibility

2010-12-23 Thread Michal Gruca

There are three that I know of that may be used to achieve that

First is Wookie (Apache licence)
Second one is jumpstart (also open source, don't know what licence though)
Third is hotel bookmarking application

I know that two of those are made as a demo apps, but they contain a lot of
T5 features still. Only thing needed would be server for selenium tests and
some separate repo for test. Maybe apache-extras?

Regards
Michał Gruca
-- 
View this message in context: 
http://tapestry-users.832.n2.nabble.com/A-more-general-approach-to-configuring-for-compatibility-tp5846901p5861794.html
Sent from the Tapestry Users mailing list archive at Nabble.com.

-
To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
For additional commands, e-mail: users-h...@tapestry.apache.org



Re: A more general approach to configuring for compatibility

2010-12-22 Thread Donny Nadolny
That would probably be helpful for development of the framework, to
make sure certain changes that break backwards compatibility don't get
made lightly. It's not a complete solution though - the tapestry
javascript file will change, and that will change behavior, as well as
the java code behind those components. For example, a change that
stopped the server side form validation event from happening wouldn't
be caught by this.

You would really need a full application with tests in order to ensure
backwards comparability. I remember reading that the maven team asked
for people to submit plugins they had made, including tests, so that
they could run them against their new version of maven as they were
developing it, to make sure they were backwards compatible. Maybe the
Tapestry team needs something like that - several applications,
complete with selenium (or other high level) tests that can be run to
make sure that all changes are backwards compatible, or to consciously
decide to make a change that isn't.

On Wed, Dec 22, 2010 at 3:56 PM, Andreas Andreou  wrote:
> I was recently thinking about this but from another direction - what if we
> have a heavy page full of forms and almost every one of the tapestry-core
> components and we render and store (in svn) the outcome of its rendering
> both in production and in development mode.
>
> That way we'd end up with many files of the form
> page-dev-5.0.11.html
> page-prod-5.0.11.html
> page-prod-5.2.2.html
> page-dev-5.2.4.html
> page-prod-5.2.4.html
> e.t.c
>
> and a simple diff between any of those will show important info to the user
> and to the devs
> On Fri, Dec 17, 2010 at 22:09, 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 
>> 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 
>>> 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 
>>> 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...@tap

Re: A more general approach to configuring for compatibility

2010-12-22 Thread Andreas Andreou
I was recently thinking about this but from another direction - what if we
have a heavy page full of forms and almost every one of the tapestry-core
components and we render and store (in svn) the outcome of its rendering
both in production and in development mode.

That way we'd end up with many files of the form
page-dev-5.0.11.html
page-prod-5.0.11.html
page-prod-5.2.2.html
page-dev-5.2.4.html
page-prod-5.2.4.html
e.t.c

and a simple diff between any of those will show important info to the user
and to the devs
On Fri, Dec 17, 2010 at 22:09, 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 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 
>> 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 
>> 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
>



-- 
Andreas Andreou - andy...@apache.org - http://blog.andyhot.gr
Tapestry PMC / Tacos developer
Open Source / JEE Consulting

-
To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
For additional commands, e-mail: users-h...@tapestry.apache.org



Re: A more general approach to configuring for compatibility

2010-12-22 Thread Michal Gruca

I'm not familiar with Tapestry code but that sounds like a lot of if's and
checking for version. If i'm not mistaken then it will pollute the code and
maybe slow down applications (as every action will need to be checked)
If it is possible then additional modules sounds as much better idea. If
someone is upgrading library version then some minimal effort is required
from his side (downloading new jar/changing maven). Some small additional
effort (downloading second jar/adding maven dependency) should not be so
exhausting, and will allow to avoid a lot of unnecessary code.

Regards
Michał Gruca
-- 
View this message in context: 
http://tapestry-users.832.n2.nabble.com/A-more-general-approach-to-configuring-for-compatibility-tp5846901p5859511.html
Sent from the Tapestry Users mailing list archive at Nabble.com.

-
To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
For additional commands, e-mail: users-h...@tapestry.apache.org



Re: A more general approach to configuring for compatibility

2010-12-20 Thread Thiago H. de Paula Figueiredo
On Fri, 17 Dec 2010 20:25:48 -0200, Robert Zeigler   
wrote:


For this to really work, we might need to introduce a mechanism for  
explicitly overriding components...


We don't need to introduce one because we already have it: it's just a  
matter of decorating or advising the ComponentClassResolver service,  
specifically the resolveComponentTypeToClassName() method.


--
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



Re: A more general approach to configuring for compatibility

2010-12-17 Thread Robert Zeigler
For compatibility purposes, we would always be type compatible. :)
But introducing a general mechanism for component overriding could be tricky 
because of the issue.  I guess you could enforce type compatibility when the 
components are overridden? Not sure what an "override" would look like...
In terms of the component definitions in code, we're already instrumenting 
that, right? So for the user, as long as the types are type compatible, we 
should be ok. So what if there was a component class mapping somewhere that let 
you map from a declared component class to the concrete component class? The 
@InjectComponent case is somewhat trivial since the component type will be 
determined by the template.  The @Component case is the tricky one; we normally 
grab the component class from the declared type, unless the "type" is set via 
annotation.  In both of these cases, you have a type.  So you ask a 
"ComponentOverrides" service for the "real type" to use.  We should be able to 
enforce that overrides are subclasses of the component they override at startup 
time by making the service eagerload, and just checking that the type is 
assignable from the overridden type. 

Or...

As it stands now, applications can override components by supplying the same 
package structure + component, right? Because the classes in the application 
are searched before the classes in the tapestry module, so if a user defined 
org/apache/tapestry5/corelib/components/Label.java, said class would be used at 
runtime in place of the one provided by tapestry.  Is this something we can 
leverage to allow "compatibility modules" to define "exact matches" to core-lib 
components??

Robert

> The problem with overriding core components looks simple:
> 
>  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 
>> 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
 

Re: A more general approach to configuring for compatibility

2010-12-17 Thread Howard Lewis Ship
On Fri, Dec 17, 2010 at 3:27 PM, Robert Zeigler  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:

 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 
> 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", 

Re: A more general approach to configuring for compatibility

2010-12-17 Thread Robert Zeigler
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.

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  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 >> 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...
 
 Jos

Re: A more general approach to configuring for compatibility

2010-12-17 Thread Howard Lewis Ship
Well, something that is deprecated with a replacement in Tapestry 5.(n)
might be removed in 5.(n+1), though I suspect most users would prefer to see
it live on to 5.(n+2).


On Fri, Dec 17, 2010 at 3: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 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 > >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 
>> >> 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

Re: A more general approach to configuring for compatibility

2010-12-17 Thread Howard Lewis Ship
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  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  >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 
> >> 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 uns

Re: A more general approach to configuring for compatibility

2010-12-17 Thread Kalle Korhonen
On Fri, Dec 17, 2010 at 2:25 PM, Robert Zeigler  wrote:
> 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?

Brilliant! Now that would showcase the power of Tapestry IoC pretty
well. And it'd be also very convenient for users to configure.

Kalle


> 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 
>> 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 
>>> 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 
>>> 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

Re: A more general approach to configuring for compatibility

2010-12-17 Thread Robert Zeigler
+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 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 
>> 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 
>> 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 Tapes

A more general approach to configuring for compatibility

2010-12-17 Thread Howard Lewis Ship
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 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 
> 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 
> 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