0 Replies Latest reply: Mar 28, 2013 3:59 AM by BillCarson RSS

    Weblogic deadlock with JDBC session persistence

    BillCarson
      Good day,

      We are configuring a session replication for our web application (ATG ecommerce). The architecture is composed by a cluster with 4 nodes on Weblogic 10.3.5.0.

      We choosed the JDBC replication by using the following weblogic-application.xml:

      <?xml version='1.0' encoding='UTF-8'?>
      <weblogic-application>
      <session-descriptor>
      <timeout-secs>1200</timeout-secs>
      <persistent-store-type>jdbc</persistent-store-type>
      <persistent-store-pool>ATGWL</persistent-store-pool>
      <sharing-enabled>true</sharing-enabled>
      <url-rewriting-enabled>false</url-rewriting-enabled>
      </session-descriptor>
      </weblogic-application>

      We also created the required table and the Weblogic Data Source ATGWL (non XA driver).
      Once the instances started, a deadlock occurs when a new user (without JSESSION_ID cookies in the request) try to access the web app:


      Thread '[ACTIVE] ExecuteThread: '8' for queue: 'weblogic.kernel.Default (self-tuning)'' is waiting to acquire lock 'weblogic.servlet.internal.session.JDBCSessionData@7a9728ec' that is held by thread '[ACTIVE] ExecuteThread: '11' for queue: 'weblogic.kernel.Default (self-tuning)''

      Stack trace:
      ------------
      weblogic.servlet.internal.session.JDBCSessionContext.getSessionInternal(JDBCSessionContext.java:207)
      weblogic.servlet.internal.ServletRequestImpl$SessionHelper.getValidSession(ServletRequestImpl.java:2896)
      weblogic.servlet.internal.ServletRequestImpl$SessionHelper.getSessionInternal(ServletRequestImpl.java:2436)
      weblogic.servlet.internal.ServletRequestImpl$SessionHelper.getSession(ServletRequestImpl.java:2403)
      weblogic.servlet.internal.ServletRequestImpl.getSession(ServletRequestImpl.java:1293)
      weblogic.servlet.security.internal.SecurityModule$SessionRetrievalAction.run(SecurityModule.java:624)
      weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
      weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)
      weblogic.servlet.security.internal.SecurityModule.getUserSession(SecurityModule.java:515)
      weblogic.servlet.security.internal.ServletSecurityManager.checkAccess(ServletSecurityManager.java:81)
      weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2213)
      weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2183)
      weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1454)
      weblogic.work.ExecuteThread.execute(ExecuteThread.java:209)
      weblogic.work.ExecuteThread.run(ExecuteThread.java:178)



      No problems if we use "replicated_if_clustered" as persistence store type (but we consider jdbc persistence as the best choice for our application).

      Any feedback?

      Thanks a lot,
      Giuseppe.