HPS5035   HPS5035 There is no data source object {0} in HttpSession. A possible cause is the use of multiple browsers from a single machine to a chained application. See documentation for more information.

Explanation

A chained Integration Object attempted to retrieve a data source resource from the HttpSession, but the resource is not in the HttpSession object. This may occur for a number of reasons:
  • When you double-click the Internet Explorer icon to open the Internet Explorer browser, this problem does not occur; however, if you use any method other than double-clicking the icon to open the Internet Explorer browser, the problem will occur because the Internet Explorer browser windows will then share a single HttpSession.
  • A single JSP or servlet runs multiple Integration Objects without checking for an error in a previous Integration Object and stopping the next Integration Object from executing. The previous Integration Object will not have placed the data source resource back in the HttpSession if it encountered an error.
  • A user clicks Submit or clicks a link twice before the first button press or link click can be completely processed at the server. If processing is taking longer than expected, a user might click on a link to the next page of a chained Integration Object application twice rather than wait for the next page to process its Integration Object and send the output page back to the client. The second click causes the next page to be processed again, while the Integration Object still has ownership of the data source resource. During this processing, a second instance of the Integration Object cannot find the resource in the HttpSession, and causes a HPS5035 error to be logged and the output of the first Integration Object processing is lost.
  • A very long-running Integration Object (usually more than a minute) might cause the Web server to time out while the Integration Object is still processing. If this occurs, the Web server may destroy the HTTP connection to the browser client. Internet Explorer sometimes reacts to this by immediately requesting the same page again without user intervention. This second request is just like a second Submit or link click, causing a second instance of the Integration Object to run. This second instance fails to find the data source resource in the HttpSession, which causes a HPS5035 error. Additionally, the output of the first Integration Object processing is lost.
  • If the maximum busy time before disconnection specified for the connection expires because a chained Integration Object application was left idle between Integration Objects executing (for example, the Integration Objects are on different pages), then the next Integration Object in the chain will log an HPS5035 if a user continues with the application after the expiration time.
  • If the HttpSession Activity Timeout, set in WebSphere® Application Server, occurs because a chained Integration Object application is left idle between Integration Objects executing (for example, the Integration Objects are on different pages), then the next Integration Object in the chain logs a HPS5035 if a user continues with the application after the expiration time.

User response

The correct action depends on the cause. Possible actions for the listed causes are, respectively:
  • If you are running multiple applications containing chained Integration Objects, be sure to double-click the Internet Explorer icon to open the Internet Explorer browser.
  • JSPs or servlets should not attempt to continue running subsequent chained Integration Objects after an error has occurred in a previous Integration Object in the chain. Instead, subsequent Integration Objects should not be executed if an error occurred in a previous Integration Object, and the Integration Object in error should redirect the client to an error page.
    You might avoid this problem by using servlet or JSP code like this:
                                                                                                         
    // Run the Integration Object transaction. Does a sendRedirect() on error.
    myBean.doHPTransaction(request, response);
    if (myBean.getHPubErrorOccurred() != 0)
    {  // Do not call another Integration Object's doHPTransaction()
     or produce output.
       return;
     // Instead, we allow the sendRedirect() to answer the client.
    } 
  • You might avoid this problem by using a JavaScript snippet like this one:
    <SCRIPT Language="Javascript">
    /**********************************************************************
    *  Prevent multiple Submit or href click invocations from this page.  *
    *  The 'submitFlag' variable is the switch.  When the function is     *
    *  called and the flag is zero, 'true' is returned to the onSubmit    *
    *  parameter of the form. Otherwise a 'false' is returned, preventing *
    *  additional submit buttons/links from being reselected.             *
    **********************************************************************/
    var submitFlag = 0;
    function chkSubForm()
    {
       if (submitFlag == 0)
       { submitFlag = 1;   // first time a button has been clicked
         return true;
       }
       else
       { return false;    // submit has already been clicked
       }
    }
    </SCRIPT>
    <a href="<%= response.encodeUrl("TheNextPage.jsp") %>"
      onClick="return chkSubForm()">Next</a>
  • The simplest way to prevent this is to have no Integration Object run for a very long time. Alternatively, you may be able to adjust the Web server timeout value.
  • If this is not what you want, you can lengthen or disable the maximum busy time before disconnection on your connection.
  • If this is still not what you want, you can lengthen or disable the HttpSession Activity Timeout.