This discussion is archived
0 Replies Latest reply: Mar 28, 2013 1:59 AM by 996292 RSS

Weblogic deadlock with JDBC session persistence

996292 Newbie
Currently Being Moderated
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.

Legend

  • Correct Answers - 10 points
  • Helpful Answers - 5 points