On Sat, May 17, 2008 at 12:12 AM, Leon Rosenberg <
[EMAIL PROTECTED]> wrote:

> Hi,
>
>  was just browsing through tomcat code, and the following is just a
> mystery to me ->StandardSession.fireSessionsEvent(type,data):
>
>   public void fireSessionEvent(String type, Object data) {
>        if (listeners.size() < 1)
>            return;
>        SessionEvent event = new SessionEvent(this, type, data);
>        SessionListener list[] = new SessionListener[0];
> --------> WHY synchronized?
>   synchronized (listeners) {
>            list = (SessionListener[]) listeners.toArray(list);
>        }


It is kind of Snapshot Pattern i thought. Synchronize copy the
SessionListener list as toArray is not thread safety. Then further
synchronized is not required in the for loop below (as the list is a
snapshot of the original list). Thus any registration or removal of session
listener does not need to wait the complete of event firing in
StandardSession.


>
>
>        for (int i = 0; i < list.length; i++){
>            ((SessionListener) list[i]).sessionEvent(event);
>        }
>
>    }
>
>
> can someone enlighten me? :-)
>
>
> regards
> Leon
>
> ---------------------------------------------------------------------
> To start a new topic, e-mail: users@tomcat.apache.org
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>
Twinsen

Reply via email to