IBM webMethods Hybrid Integration

IBM webMethods Hybrid Integration

Join this online group to communicate across IBM product users and experts by sharing advice and best practices with peers and staying up to date regarding product enhancements.

 View Only
  • 1.  TConnectionManager deadlock issue

    Posted Thu September 18, 2003 07:25 PM

    I have a client who is getting the following problem: They have two threads which are trying to access the same collection through the TaminoAPI4J API. Both threads are using the TConnectionPoolManager to try and retrieve the collection. When they come in at just the right time (we can reproduce fairly readily), both threads deadlock and the application
    is halted.

    This is the program he is using:
    private void getPooledConnection() throws EmrException
    {
    try
    {
    if(!TConnectionPoolManager.getInstance().hasPool(this.poolName))
    {
    TConnectionPoolManager.getInstance()
    .addConnectionPool(this.poolName,
    this.dbName,
    this.poolDomain,
    this.userName,
    this.password,
    this.poolMaxConn,
    this.poolInitConn,
    this.poolTimeOut);

    }
    this.connection =
    TConnectionPoolManager.getInstance().getConnection(this.poolName);
    }
    catch (TConnectionNotAvailableException e)
    {
    throw new EmrException(“Failed to get a connection from the
    pool”, e);
    }
    }



    The Tamino version is 4.1.4.1, it’s a Windows 2000 machine (single processor), the application runs inside of Apache Tomcat.

    This is the stack trace:
    STACK TRACE – THREAD 1
    =======================

    Thread-5[1] where
    [1] java.lang.Object.wait (native method)
    [2]
    com.softwareag.tamino.db.API.connection.TConnectionPoolImpl.getConnection
    (null)
    [3]
    com.softwareag.tamino.db.API.connection.TConnectionPoolImpl.getConnection
    (null)
    [4]
    com.softwareag.tamino.db.API.connection.TConnectionPoolManager.getConnecti
    on (null)
    [5] com.softwareag.emr.util.TaminoConnection.getPooledConnection
    (TaminoConnec
    tion.java:119)
    [6] com.softwareag.emr.util.TaminoConnection.open
    (TaminoConnection.java:63)
    [7] com.softwareag.emr.util.TaminoConnection.open
    (TaminoConnection.java:52)
    [8] com.softwareag.emr.security.SessionManagerDAO.connect
    (SessionManagerDAO.j
    ava:204)
    [9] com.softwareag.emr.security.SessionManagerDAO.get
    (SessionManagerDAO.java:
    87)
    [10] com.softwareag.emr.security.SessionManager.getUser
    (SessionManager.java:1
    79)
    [11] com.softwareag.emr.util.HeaderTag.getUser (HeaderTag.java:185)
    [12] com.softwareag.emr.util.HeaderTag.doStartTag (HeaderTag.java:49)
    [13] org.apache.jsp.UserManagement_jsp._jspx_meth_emr_header_0
    (UserManagement
    _jsp.java:232)
    [14] org.apache.jsp.UserManagement_jsp._jspService
    (UserManagement_jsp.java:94
    )
    [15] org.apache.jasper.runtime.HttpJspBase.service (HttpJspBase.java:137)
    [16] javax.servlet.http.HttpServlet.service (HttpServlet.java:853)
    [17] org.apache.jasper.servlet.JspServletWrapper.service
    (JspServletWrapper.ja
    va:210)
    [18] org.apache.jasper.servlet.JspServlet.serviceJspFile
    (JspServlet.java:295)

    [19] org.apache.jasper.servlet.JspServlet.service (JspServlet.java:241)
    [20] javax.servlet.http.HttpServlet.service (HttpServlet.java:853)
    [21] org.apache.catalina.core.ApplicationFilterChain.internalDoFilter
    (Applica
    tionFilterChain.java:247)
    [22] org.apache.catalina.core.ApplicationFilterChain.doFilter
    (ApplicationFilt
    erChain.java:193)
    [23] org.apache.catalina.core.StandardWrapperValve.invoke
    (StandardWrapperValv
    e.java:256)
    [24]
    org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.in
    vokeNext (StandardPipeline.java:643)
    [25] org.apache.catalina.core.StandardPipeline.invoke
    (StandardPipeline.java:4
    80)
    [26] org.apache.catalina.core.ContainerBase.invoke
    (ContainerBase.java:995)
    [27] org.apache.catalina.core.StandardContextValve.invoke
    (StandardContextValv


    STACK TRACE – THREAD 2
    =======================
    [1] java.lang.Object.wait (native method)
    [2]
    com.softwareag.tamino.db.API.connection.TConnectionPoolImpl.getConnection
    (null)
    [3]
    com.softwareag.tamino.db.API.connection.TConnectionPoolImpl.getConnection
    (null)
    [4]
    com.softwareag.tamino.db.API.connection.TConnectionPoolManager.getConnecti
    on (null)
    [5] com.softwareag.emr.util.TaminoConnection.getPooledConnection
    (TaminoConnec
    tion.java:119)
    [6] com.softwareag.emr.util.TaminoConnection.open
    (TaminoConnection.java:63)
    [7] com.softwareag.emr.util.TaminoConnection.open
    (TaminoConnection.java:52)
    [8] com.softwareag.emr.security.SessionManagerDAO.connect
    (SessionManagerDAO.j
    ava:204)
    [9] com.softwareag.emr.security.SessionManagerDAO.removeByTime
    (SessionManager
    DAO.java:119)
    [10] com.softwareag.emr.security.SessionManager.run
    (SessionManager.java:86)


    As you can see in frame 2 of both stacks, it is in the getConnection()
    method and waiting for a lock to be released on
    “some object”.

    Please advice on what can be done to avoid this deadlock in the connection manager
    Regards,
    Sumeet Bhatia


    #API-Management
    #webMethods-Tamino-XML-Server-APIs
    #webMethods


  • 2.  RE: TConnectionManager deadlock issue

    Posted Fri September 19, 2003 03:45 PM

    I’m trying to get an answer for you. However, due to vacation of several people, it might take a couple of days. Sorry about that.


    #webMethods-Tamino-XML-Server-APIs
    #webMethods
    #API-Management


  • 3.  RE: TConnectionManager deadlock issue

    Posted Tue September 23, 2003 08:40 AM

    The current problem has been resolved.

    The problem appears to have been with the client code reaching the maximum number of connections allocated to the particular connection pool.

    There was a section of code in which we were doing a connect and not calling disconnect
    on the connection allocated by the pool.

    The only question they have is :
    Shouldn’t the connection pool manager through an exception when this occurs (it says so in the docs)?


    #webMethods
    #API-Management
    #webMethods-Tamino-XML-Server-APIs


  • 4.  RE: TConnectionManager deadlock issue

    Posted Tue September 30, 2003 04:13 PM

    I wrote a little test trying to simulate your scenario.
    The test creates 22 worker threads. Each worker gets a connection from the same pool, but does not close this connection (i.e. it does not return it back to the pool). The pool has a maxConnection of 20. The worker threads 21 and 22 get a TConnectionNotAvailableException as expected when they try to get their connection.
    I got no deadlock. Does my little test simulate your szenario?

    Stefan


    #API-Management
    #webMethods
    #webMethods-Tamino-XML-Server-APIs