Allen:
I didn't list them individually because there are a bunch. Here are some
techniques I'd use to track them down.
A lot of them originate in DateUtil, where the format is defined as a single
instance. DateUtil.format() itself does synchronize, but callers of
DateUtil can get references to the formats back and apply them themselves.
For example, look for callers of DateUtil.get8charDateFormat(); consider
them all suspect, at least worth a check. Most of these callers get the
reference to the format and go on to call format() without synchronizing.
Another thing to look for is member fields of type SimpleDateFormat that are
in objects that are potentially shared across threads, for example,
HibernateWeblogManagerImpl which has a "formatter" field originally defined
to point to DateUtil.get8charDateFormat(), but which gets shared quite
heavily.
In some cases these member fields are in objects like RollerRequest that are
generally instantiated once per thread so it seems safe at first, but when
you look closely, the member reference actually goes back to a shared static
instance in DateUtil, so you end up with multi-threaded access to it.
I wanted to kind of put a heads up out so that we would be careful not to
continue to increase the number of these things. I will try to start going
through and helping to fix them. The bugs that they cause tend to have very
hard-to-reproduce mysterious behaviors.
--a.
----- Original Message -----
From: "Allen Gilliland" <[EMAIL PROTECTED]>
To: <[email protected]>
Sent: Wednesday, August 23, 2006 9:51 AM
Subject: Re: SimpleDateFromat usage in Roller 3.0
Anil,
can you list the places where this is happening? the overwhelming
majority of the work for 3.0 happened in the ui.rendering package and a
quick glance at the use of SimpleDateFormat in those classes looks okay to
me.
i agree that we should try and find places where we are not including a
locale in the use of SimpleDateFormat and fix that.
-- Allen
Anil Gangolli wrote:
I'm seeing a couple of things related to SimpleDateFormat usage in the
Roller 3.0 codebase:
(1) There are a number of places where SimpleDateFormat is used in the
Roller 3.0 codebase where the instance is shared but there is no
synchronization being done. These things are not MT-safe.
(2) Most construction of the formats use locales, but there are a number
of places where SimpleDateFormat is constructed without a locale. Not
sure if these are issues; I think some are, and some aren't. --a.