On 27/06/2009, Xie Xiaodong <xxd82...@gmail.com> wrote:
> But how could ThreadLocal be shared among all AccessLogValve instances on
>  the same server? After all, each thread access ThreadLocal has its own.
>
>  Another point, based on the java doc of ThreadLocal, maybe "private
>  ThreadLocal<AccessDateStruct> currentDateStruct" should be declared as
>  static?

+1, that should ensure that it will be shared.

Also it should be declared final.

>
>  2009/6/27 Konstantin Kolinko <knst.koli...@gmail.com>
>
>
>  > Mark Thomas wrote:
>  > >Konstantin Kolinko wrote:
>  > >> 2. struct.currentDateString is calculated in two different places
>  > >> I propose to encapsulate that code into AccessDateStruct
>  > >>
>  > >> 3. Invocation of getDate() in invoke() (the only place where getDate()
>  > >> is called):
>  > >> I think that getDate() also can be incapsulated into AccessDateStruct.
>  > >> Actually, I think of the following:
>  > >>  1) In invoke() there is already a variable that stores current time
>  > >> millis: "t2"
>  > >>   I propose to replace that getDate() with
>  > >> AccessDateStruct.setDate(t2) that will perform the same job.
>  > >>  2) Change the signature of replace(..., Date, ..) method, and pass a
>  > >> reference to the AccessDateStruct instead of a Date.
>  > >>  In the future the replace(..) methods of this class can be changed to
>  > >> accept a StringBuffer, instead of returning a String, but that can be
>  > >> another story.
>  > >>
>  > >>  If AccessDateStruct is passed into the replace() method,
>  > >> timeTakenFormatter can be added to it as well. Maybe.
>  > >>
>  > >> 4. The log() method still creates a new Date() once in a second.
>  > >> The Date instance can be stored in some member variable and reused. It
>  > >> is in a synchronized block, so it will be safe.
>  > >> I do not like, that it is the same once-in-a-second synchronized
>  > >> block, that we already avoided once by using those ThreadLocals.
>  > >> Can be addressed separately, though.
>  > >
>  > > Thanks for this. I'll see about updating the patch.
>  > >
>  >
>  > One more thought:
>  > It would be better if the ThreadLocal is shared among all
>  > AccessLogValve instances on the same server. Otherwise, the count of
>  > threads will be multiplied by the count of AccessLogValve instances.
>  >
>  > That implies that the AccessDateStruct does not have any configurable
>  > parameters or any valve instance specific data.
>  > E.g., fileDateFormat is configurable, thus its formatter is not a
>  > candidate to be put there (and it is not there now).
>  >
>  > >> I do not like, that it is the same once-in-a-second synchronized
>  > >> block, that we already avoided
>  > I was not right writing this. We avoided sync around the formatters on
>  > every call, and that makes a difference.
>  > We already have sync in the writer on every call, so this sync
>  > once-in-a second won't be something noticeable. Though maybe it can be
>  > done once in 5/20/60 secs, but who cares.
>  >
>  > Best regards,
>  > Konstantin Kolinko
>  >
>  > ---------------------------------------------------------------------
>  > To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
>  > For additional commands, e-mail: dev-h...@tomcat.apache.org
>  >
>  >
>
>
>
> --
>  Sincerely yours and Best Regards,
>
> Xie Xiaodong
>

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

Reply via email to