You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@struts.apache.org by "Rainer Hermanns (JIRA)" <ji...@apache.org> on 2008/06/14 15:34:05 UTC

[jira] Commented: (WW-2507) I18nInterceptor's intercept method is not thread safe

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

Rainer Hermanns commented on WW-2507:
-------------------------------------

The I18N interceptor in xwork 2.1.2 is now patched.
The session object is synchronized, but this is mainly xwork may use other implementations than S2 SessionMap. 
However, I think we need to adjust the SessionMap to take care of invalid session exceptions.

> 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.