On Mon, 16 Feb 2004, Ted Husted wrote:

> Yes, there lies the rub: If we were to submit a patch to commons-lang today, we 
> could not roll a (potentially) GA-quality release tomorrow. At least not without 
> also rolling a release of commons-lang and waiting for it to "go platinum" first.
>
> My suggestion would be that we start using "bridge packages" to isolate classes that 
> we intend to submit to the Commons. Once the code in our bridge package proves it 
> worth, we can then offer to the corresponding Commons package. If our code is 
> accepted and the updated Commons package hits a General Availability release, we can 
> then move our dependency from the bridge package to the Commons package.
>
> So, if we do determine that a change to the string handling is a difference that 
> makes a difference, we could create a package for methods specifically earmarked for 
> lang, such as o.a.s.commons.lang. Once we release our code, and find that it works 
> well in the field, then we can submit a patch to c-l and roll a release there. Once 
> the c-l is GA with our addition, then we can move the dependency in our on code from 
> o.a.s.commons.lang to o.a.c.lang.  

+1

I like the "bridge" packages idea, because it makes it clear where our
potential dependencies are, as well as how extensive they are.

--
Martin Cooper


>
> This would similar to the approach we are trying with commons-resources: Release the 
> code, copy the code, release the code again, *then* move the dependency.
>
> -Ted.
>
>
> On Mon, 16 Feb 2004 12:41:05 +0800, Andrew Hill wrote:
> > <snip>
> > Maybe now thats been done there should be a policy of
> > only developing against "release" versions of commons code.
> > </snip>
> >
> >
> > +1
> > This seems pretty sensible to me. Id suggest the committers
> > seriously consider this idea.
> >
> >
> > -----Original Message-----
> > From: Niall Pemberton [mailto:[EMAIL PROTECTED]
> > Sent: Monday, 16 February 2004 08:58
> > To: Struts Developers List
> > Subject: Re: string concatenation
> >
> >
> > I agree.
> >
> >
> > I seem to recall there were problems releasing Struts 1.1 because
> > of a hold up getting a commons component released that struts was
> > depending on. That was understandable as various bits of struts
> > were being moved over to commons at the time. Maybe now thats been
> > done there should be a policy of only developing against "release"
> > versions of commons code. That way commons doesn't become something
> > Struts has to wait on and its being developed against stable fully
> > tested commons components.
> >
> > Niall
> >
> >
> > ----- Original Message -----
> > From: "Hablutzel, Robert" <[EMAIL PROTECTED]>
> > To: "Struts Developers List" <[EMAIL PROTECTED]>
> > "Struts Developers List" <[EMAIL PROTECTED]> Sent:
> > Monday, February 16, 2004 12:32 AM Subject: RE: string concatenation
> >
> >
> >> So I'm a bit of a lurker here, but I wanted to put in my $.02.
> >>
> >>
> >> I'd rather see a dependency on efficiently implemented code in a
> >> single
> >>
> > place than either replicating the code or using a less efficient
> > algorithm. Replication just means that bugs in the code aren't
> > fixed in all places, adds confusion to users as to which version to
> > leverage, and makes it harder to introduce possible future code
> > improvements. Trading memory for speed can be a meaningless
> > tradeoff in high-volume applications where the number of GCs
> > visibly impacts overall system performance.
> >
> >>
> >> My preference would be for leveraging code that is in a logical
> >> place (ala
> >>
> > commons-lang) and documenting the dependencies.
> >
> >>
> >> hab
> >>
> >>
> >> -----Original Message-----
> >> From: Martin Cooper [mailto:[EMAIL PROTECTED]
> >> Sent: Sun 2/15/2004 4:21 PM
> >> To: Struts Developers List
> >> Cc:
> >> Subject: RE: string concatenation
> >>
> >>
> >>> -----Original Message-----
> >>> From: David Graham [mailto:[EMAIL PROTECTED]
> >>> Sent: Sunday, February 15, 2004 1:01 PM
> >>> To: Struts Developers List
> >>> Subject: RE: string concatenation
> >>>
> >>>
> >>> Struts has many dependencies already and I'd like to avoid
> >>> adding one
> >>>
> > with
> >>> lang.  Why not just size a large StringBuffer and trade memory
> >>> for
> >>>
> > speed?
> >
> >>
> >> We already have a dependency on Lang, albeit indirectly, so why
> >> not take advantage of it?
> >>
> >> Frankly, I disagree with the push I see from some folks
> >> (including Craig
> >>
> > on
> >> commons-dev recently) to reduce dependencies between components by
> >> duplicating functionality. The whole point of Commons is to avoid
> >> duplication, so why are people pushing back against using the
> >> successful components that we helped create here in Struts?
> >>
> >> --
> >> Martin Cooper
> >>
> >>>
> >>> David
> >>>
> >>>
> >>> --- Martin Cooper <[EMAIL PROTECTED]> wrote:
> >>>> Rather than add a new string utility class to Struts, which
> >>>> isn't
> >>>>
> > really
> >>>> where it should belong, I think we'd be better off just using
> >>>> this:
> >>>>
> >>>>
> >>> http://jakarta.apache.org/commons/lang/api/org/apache/commons/lang /St
> >>> ringUti
> >>>
> >>>> ls.html#join(java.lang.Object[])
> >>>>
> >>>>
> >>>> Alternatively, you could suggest (on the commons-dev list)
> >>>> adding a variation of your StringHolder class, based on the
> >>>> join() method
> >>>>
> > above,
> >>>> to
> >>>> Commons Lang.
> >>>>
> >>>>
> >>>> --
> >>>> Martin Cooper
> >>>>
> >>>>
> >>>>> -----Original Message-----
> >>>>> From: nishant kumar [mailto:[EMAIL PROTECTED]
> >>>>> Sent: Saturday, February 14, 2004 5:46 PM
> >>>>> To: [EMAIL PROTECTED]
> >>>>> Subject: string concatenation
> >>>>>
> >>>>>
> >>>>> hi,
> >>>>> I have a performance tuning suggestion which i think will
> >>>>> greatly impact the performance of struts html tags. String
> >>>>> concatenation using StringBuffer is definitely much better
> >>>>> than
> >>>>> using the plus operator but there are scenarios where there
> >>>>> are much better ways than using StringBuffers. Actually
> >>>>> struts html tags fall
> >>>>>
> >>>> in
> >>>>> those scenarios.
> >>>>> So let me give you an example. this is the code from
> >>>>> renderFormStartElement method of FormTag.
> >>>>>
> >>>>>
> >>>>> StringBuffer results = new StringBuffer();
> >>>>> results.append("<form");
> >>>>> results.append(" name=\"");
> >>>>> results.append(beanName);
> >>>>> results.append("\"");
> >>>>> results.append(" method=\"");
> >>>>> results.append(method == null ? "post" : method);
> >>>>> results.append("\" action=\"");
> >>>>> ....
> >>>>> str = results.toString();
> >>>>>
> >>>>>
> >>>>> pageContext.getOut().write(str);
> >>>>>
> >>>>>
> >>>>> Now lets list the issues with this.
> >>>>> 1. first presizing this buffer is quite difficult (avoided
> >>>>> in this case). here the buffer starts with size 16 and
> >>>>> doubles each time the size is exceeded. This causes
> >>>>> unnecessary creation of new char
> >>>>>
> > arrays
> >>>>> and redundant copy of data whenever resizing happens.
> >>>>> 2. whenever append is called data is copied from the passed
> >>>>> string
> >>>>>
> > to
> >>>>> the end of stringbuffer.
> >>>>> 3. finally the whole concatenated data is again copied into
> >>>>> another string.
> >>>>> 4. and then in the end this string is written to a writer,
> >>>>> another
> >>>>>
> >>>> copy,
> >>>>> which is the only copy required.
> >>>>>
> >>>>>
> >>>>> so even if you had presized the stringbuffer correctly, you
> >>>>> have
> >>>>>
> >>>> copied
> >>>>> the same data thrice instead of just once. And you also
> >>>>> create two
> >>>>>
> > NOT
> >>>>> needed objects.
> >>>>>
> >>>>>
> >>>>> so here is the solution i propose. have a class holding an
> >>>>> array
> >>>>>
> > of
> >>>>> Strings and keep appending strings to this array and
> >>>>> finally print
> >>>>>
> >>>> this
> >>>>> array to the writer. something like this.
> >>>>>
> >>>>>
> >>>>> private String[] data = new String[256];
> >>>>> private int size = 0;
> >>>>>
> >>>>>
> >>>>> public StringHolder append(String str){
> >>>>> ensureCapacity(this.size + 1);
> >>>>> this.data[this.size++] = str;
> >>>>> return this;
> >>>>> }
> >>>>>
> >>>>>
> >>>>> public void writeTo(Writer out) throws IOException{
> >>>>> for (int i = 0; i < this.size; i++){
> >>>>> if (this.data[i] != null){
> >>>>> out.write(this.data[i]);
> >>>>> }
> >>>>> }
> >>>>> }
> >>>>>
> >>>>>
> >>>>> this way only the last copy takes place and you also avoid
> >>>>> creating
> >>>>>
> > so
> >>>>> much garbage.
> >>>>>
> >>>>>
> >>>>> i have attached StringHolder class which does the above
> >>>>> task and
> >>>>>
> > also
> >>>>> the FormTag after making necessary modification to fit in
> >>>>> this
> >>>>>
> > class.
> >>>>>> From the code of FormTag you can see that you need to
> >>>>>> make quite
> >>>>>>
> > few
> >>>>> changes to get great benefit.
> >>>>>
> >>>>>
> >>>>> i have also attached a better implementation of
> >>>>> ResponseUtils.filter(String) method. the logic is on the
> >>>>> same lines
> >>>>>
> > as
> >>>>> above.
> >>>>>
> >>>>>
> >>>>> thanks,
> >>>>> nishant
> >>>>>
> >>>>>
> >>>>> --
> >>>>> nishant kumar <[EMAIL PROTECTED]>
> >>>>
> >>>>
> >>>> --------------------------------------------------------------
> >>>> ------- To unsubscribe, e-mail: struts-dev-
> >>>> [EMAIL PROTECTED] For additional commands, e-
> >>>> mail: [EMAIL PROTECTED]
> >>>
> >>>
> >>> __________________________________
> >>> Do you Yahoo!?
> >>> Yahoo! Finance: Get your refund fast by filing online.
> >>> http://taxes.yahoo.com/filing.html
> >>>
> >>>
> >>> ----------------------------------------------------------------
> >>> ----- To unsubscribe, e-mail: struts-dev-
> >>> [EMAIL PROTECTED] For additional commands, e-mail:
> >>> [EMAIL PROTECTED]
> >>
> >>
> >> ------------------------------------------------------------------
> >> --- To unsubscribe, e-mail: struts-dev-
> >> [EMAIL PROTECTED]
> >> For additional commands, e-mail: struts-dev-
> >> [EMAIL PROTECTED]
> >
> >
> > --------------------------------------------------------------------
> > - To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> >
> >
> > --------------------------------------------------------------------
> > - To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
>
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to