Reshmi Choudhury created TRINIDAD-2278:
------------------------------------------

             Summary: HttpSession inside a synchronized block in the class 
TokenCache of trinidad-impl-1.0.10.jar could cause to deadlock while used with 
WAS 7
                 Key: TRINIDAD-2278
                 URL: https://issues.apache.org/jira/browse/TRINIDAD-2278
             Project: MyFaces Trinidad
          Issue Type: Bug
    Affects Versions: 1.0.10-core
            Reporter: Reshmi Choudhury


Hi,

We are using trinidad-impl-1.0.10.jar in our product. I see that HttpSession is 
used in a synchronized block in the class TokenCache of 
trinidad-impl-1.0.10.jar. Could you please clarify if this could cause to 
deadlock while used with WAS 7.

Please find the below code snippet for your quick reference.

static public TokenCache getTokenCacheFromSession( FacesContext context,  
String  cacheName,  boolean  createIfNeeded,  int   defaultSize)   {
    ExternalContext external = context.getExternalContext();
    Object session = external.getSession(true);
    assert(session != null);

    TokenCache cache;
    // Synchronize on the session object to ensure that
    // we don't ever create two different caches
    synchronized (session)
    {
      cache = (TokenCache) external.getSessionMap().get(cacheName);
      if ((cache == null) && createIfNeeded)
      {
        // Seed the token cache with the session ID (if available)
        int seed = 0;
        if (_USE_SESSION_TO_SEED_ID)
        {
          if (session instanceof HttpSession)
          {
            String id = ((HttpSession) session).getId();
            if (id != null)
              seed = id.hashCode();
          }
        }

        cache = new TokenCache(defaultSize, seed);

        external.getSessionMap().put(cacheName, cache);
      }
    }

    return cache;
  }

This information is required as IBM informs the developer not to synchronize 
the session or it will cause deadlocks. WAS 7 implements the Servlets 2.5 
specification and manages the thread safety for any modification to the session 
map. Please refer to the URL 
http://pic.dhe.ibm.com/infocenter/wasinfo/v7r0/index.jsp?topic=/com.ibm.websphere.nd.multiplatform.doc/info/ae/ae/uprs_rsession_manager.html
 for more details. This URL contains this text:

“Applications cannot synchronize session objects inside of their servlets or 
Java Server Pages because a deadlock with the session manager may occur. The 
deadlock occurs because the session manager does not expect the use of more 
than one locking mechanism”

Here is an excellent article on this topic, which explains when explicit 
synchronization is needed in the application code and when the servlet 
container's locking mechanism is sufficient:

http://www.ibm.com/developerworks/library/j-jtp09238/index.html
 
It would be really helpful if we receive the information at the earliest as 
this is priority at our end.

Thanks in advance.

Regards,
Reshmi

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira


Reply via email to