[
https://issues.apache.org/struts/browse/WW-2507?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=43673#action_43673
]
Jeromy Evans commented on WW-2507:
----------------------------------
MessageStoreInterceptor and many others share the same issue.
ExecuteAndWaitInterceptor and TokenInterceptor both synchronize on the session
map. I don't think synchronizing on the map will stop the container from
invalidating the session between the two operations above.
The SessionMap implementation contains a synchronized block on the real session
object within the get, put and remove methods.
The purpose of the Map is abstract the session, so shouldn't the SessionMap be
exclusively responsible for ensuring an invalid session exception doesn't
occur?
> 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
>
> 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.