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.  Tansaction Code Hanging

    Posted Mon September 08, 2003 05:17 AM

    I am building a VB.NET web service connecting to Tamino 4.1.4 using the 4.1.5.1 API.

    The following function works if I use autocommit (and comment ou the BeginTransaction) but with LocalTransaction, it hangs (though the data is wrtieen to tamino, and even if I do a stop of the database using roll-back the data is still in tamino).

    (Sorry for the lack for formatting, it seems your input removes the tabs that make the code easier to follow.)

    <WebMethod()> Public Function SaveDynaFormDoc(ByVal TaminoDB As String, ByVal strCollection As String, ByVal strXML As String) As String
    Dim tConn As TaminoConnection
    Dim tCom As TaminoCommand
    Dim tDom As TaminoDocument
    Dim tTran As TaminoTransaction
    Dim tResponse As TaminoResponse
    Dim strError As String
    Dim oDom As New Xml.XmlDocument
    Dim tPref As New TaminoPreference
    Dim tUser As New TaminoUserInfo(“”, “”)
    Try
    oDom.LoadXml(strXML)
    tDom = New TaminoDocument(oDom)
    tPref.NonActivityTimeout = 20
    tPref.TransactionTimeout = 20
    tConn = New TaminoConnection(TaminoDB, tUser, tPref)
    tConn.Open(TaminoConnectionMode.LocalTransaction)
    'tConn.Open(TaminoConnectionMode.AutoCommit)
    tCom = tConn.CreateCommand(strCollection)
    Catch ex As Exception
    strError = String.Concat("Unexpected error connecting to Tamino. ;; Error_Message: ", ex.Message, Constants.vbCrLf, " ;; Stack_Trace: ", ex.StackTrace)
    tConn.Close()
    Return String.Concat(“Fail: Standard Exception,”, strError)
    End Try
    Try
    tTran = tConn.BeginTransaction()
    tResponse = tCom.Insert(tDom)
    If Not tResponse.ReturnValue = “0” Then
    strError = tResponse.ErrorText
    If tConn.IsInTransaction Then
    tTran.Rollback()
    End If
    tConn.Close()
    Return String.Concat("Fail: ", strError)
    Else
    If tConn.IsInTransaction Then
    tTran.Commit()
    End If
    tConn.Close()
    Return "Success " & tResponse.ReturnValue
    End If
    Catch tExcp As TaminoException
    strError = String.Concat("A WebException has been caught. ", tExcp.ToString(), tExcp.TargetSite.Name)
    If tConn.IsInTransaction Then
    tTran.Rollback()
    End If
    tConn.Close()
    Return String.Concat(“Fail: Tamino Exception,”, strError)
    Catch webExcp As WebException
    strError = String.Concat("A WebException has been caught. ", webExcp.ToString())
    Dim status As WebExceptionStatus = webExcp.Status
    ’ If status is WebExceptionStatus.ProtocolError,there has been a protocol error and a WebResponseshould exist. Display the protocol error.
    If status = WebExceptionStatus.ProtocolError Then
    strError = strError & "The server returned protocol error "
    ’ Get HttpWebResponse so that you can check the HTTP status code.
    Dim httpResponse As HttpWebResponse = CType(webExcp.Response, HttpWebResponse)
    strError = String.Concat(“Unexpected error executing transaction.”, strError, Int(httpResponse.StatusCode).ToString(), " - ", httpResponse.StatusCode.ToString())
    End If
    If tConn.IsInTransaction Then
    tTran.Rollback()
    End If
    tConn.Close()
    Return String.Concat(“Fail: Web Exception,”, strError)
    Catch ex2 As Exception
    strError = String.Concat("Unexpected error executing transaction. ;; Error_Message: ", ex2.Message, Constants.vbCrLf, " ;; Stack_Trace: ", ex2.StackTrace)
    If tConn.IsInTransaction() Then
    tTran.Rollback()
    End If
    tConn.Close()
    Return String.Concat(“Fail: Standard Exception,”, strError)
    End Try

    End Function


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


  • 2.  RE: Tansaction Code Hanging

    Posted Mon September 08, 2003 09:44 AM

    The following (equivalent?) C# works for me - I used the CODE layout brackets button. If you use larger timeouts (e.g. 60) does that make any difference?

    TaminoUserInfo    userInfo   = new TaminoUserInfo("", "");
    
    TaminoPreference  preference = new TaminoPreference();
    preference.TransactionTimeout = 20;
    preference.NonActivityTimeout = 20;
    
    // create connection
    TaminoConnection connection = new TaminoConnection(URL, userInfo, preference);
    
    // open connection
    connection.Open(TaminoConnectionMode.LocalTransaction);
    
    // begin transaction
    TaminoTransaction transaction = connection.BeginTransaction();
    
    // create command for test collection
    TaminoCommand command = connection.CreateCommand(COLLECTION);
    
    // create test document
    XmlDocument xmlDoc = new XmlDocument();
    xmlDoc.LoadXml("<SimpleInsertTimeout/>");
    TaminoDocument doc = new TaminoDocument(xmlDoc);
    doc.DocName = "SimpleInsertTimeout";
    
    // insert test document
    TaminoResponse response = command.Insert(doc);
    if (response.ReturnValue != "0") Console.WriteLine("Insert failed: "+response.ErrorText);
    
    // rollback
    transaction.Rollback();
    
    // close connection
    if (connection != null) connection.Close();



    [This message was edited by Mark Kuschnir on 08 Sep 2003 at 11:59.]

    [This message was edited by Mark Kuschnir on 09 Sep 2003 at 07:41.]


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


  • 3.  RE: Tansaction Code Hanging

    Posted Mon September 08, 2003 01:29 PM

    Is the code hanging on the Close method? Or another method?


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


  • 4.  RE: Tansaction Code Hanging

    Posted Mon September 08, 2003 05:36 PM

    One question I have on your code, you are not using Commit() or RollBack() this seems like it would cause the transaction to timeout.

    Also I have code to handle errors that might occur in object execution, I have found this essecial in the past in dealing with transactions within Tamino (as in the past I found if they are not Rolled back they can lock the database and or schemas).

    I added the more restrictive timeouts after the service went out to lunch for very extended periods of time.


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


  • 5.  RE: Tansaction Code Hanging

    Posted Mon September 08, 2003 09:13 PM

    Oh just as FYI I am Larry, last night I could not find my previous userid as so I re-registered.


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


  • 6.  RE: Tansaction Code Hanging

    Posted Tue September 09, 2003 09:15 AM

    OK.

    I added code to do a Rollback. When I run this it works and there is no document in the database as expected. If I use Commit instead then I get a document in the database as expected.

    When you say that you made the timeouts more restrictive because the “service went out to lunch” what does that mean? Did you get a WebException “operation timed out”?


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


  • 7.  RE: Tansaction Code Hanging

    Posted Wed September 10, 2003 02:54 AM

    Yes I am getting Operation Timed Out.

    And it seems to be the the Close() operation that is cuasing the difficulty.

    Here is a sample:
    System.Net.WebException: The operation has timed-out. at SoftwareAG.Tamino.Api.Common.Command.Execute() at SoftwareAG.Tamino.Api.TaminoConnection.Close() at TaminoConnect.TaminoConnect.SaveDynaFormDoc(String TaminoDB, String strCollection, String strXML) in c:\inetpub\wwwroot\TaminoConnect\TaminoConnect.asmx.vb:line 110


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


  • 8.  RE: Tansaction Code Hanging

    Posted Wed September 10, 2003 09:27 AM

    We used to get this in our automated test suites if we had forgotten to do cleanup (i.e. TaminoConnection.Close() calls). It seemed to be indicative of running out of system resources such as streams.

    Does this happen immediately or after a number of runs? Which TaminoAPI.dll are you using? You can check using Properties->Version from Windows Explorer.


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