struts-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Bob Tiernay (JIRA)" <j...@apache.org>
Subject [jira] Commented: (WW-2507) I18nInterceptor's intercept method is not thread safe
Date Sat, 14 Jun 2008 15:08:05 GMT

    [ https://issues.apache.org/struts/browse/WW-2507?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=44163#action_44163
] 

Bob Tiernay commented on WW-2507:
---------------------------------

After some thought, the above solution doesn't apply to concurrent AJAX requests from a single
user where session invalidation wins. But I think this is more of an application design issue
and not really a flaw in the framework.

> I18nInterceptor's intercept method is not thread safe
> -----------------------------------------------------
>
>                 Key: WW-2507
>                 URL: https://issues.apache.org/struts/browse/WW-2507
>             Project: Struts 2
>          Issue Type: Bug
>          Components: Core Interceptors
>    Affects Versions: 2.0.11
>            Reporter: Bob Tiernay
>             Fix For: 2.1.3
>
>
> The following excerpt from I18nInterceptor's intercept method is not thread safe:
>         //save it in session
>         Map session = invocation.getInvocationContext().getSession(); <--- start of
atomic operation
>         if (session != null) {
>             if (requested_locale != null) {
>                 Locale locale = (requested_locale instanceof Locale) ?
>                         (Locale) requested_locale : LocalizedTextUtil.localeFromString(requested_locale.toString(),
null);
>                 if (log.isDebugEnabled()) {
>                     log.debug("store locale=" + locale);
>                 }
>                 if (locale != null) {
>                     session.put(attributeName, locale);
>                 }
>             }
>             //set locale for action
>             Object locale = session.get(attributeName); <--- session may no longer
exist due to concurrecy.
>             if (locale != null && locale instanceof Locale) {
>                 if (log.isDebugEnabled()) {
>                     log.debug("apply locale=" + locale);
>                 }
>                 saveLocale(invocation, (Locale)locale);
>             }
>         }
> Between the calls of:
> 1. Map session = invocation.getInvocationContext().getSession(); , and
> 2. Object locale = session.get(attributeName); 
> the session may have been invalidated.  In my particular application, this was indeed
the case.  This causes an invalid session exception to be raised.
> The recommended handling would be to synchronize this portion of the method.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message