HPS5035 HPS5035 HttpSession の中にデータ・ソース・オブジェクト {0} がありません。考えられる原因としては、単一マシンから複数のブラウザーをチェーン・アプリケーションに対して使用している可能性があります。詳細については資料を参照してください。
説明
チェーニングされた統合オブジェクトが HttpSession からデータ・ソース・リソースを検索しようとしましたが、そのリソースは HttpSession オブジェクト内にありません。これは、次のいくつかの理由が原因と考えられます。
- Internet Explorer アイコンをダブルクリックして Internet Explorer ブラウザーを開く場合は、この問題は発生しません。しかし、アイコンをダブルクリックする以外の何らかのメソッドを使用して、Internet Explorer ブラウザーを開く場合は、Internet Explorer ブラウザーのウィンドウが単一の HttpSession を共用するため、問題が発生します。
- 単一の JSP またはサーブレットは、以前の統合オブジェクト内のエラーを検査せずに、また、次の統合オブジェクトの実行を停止せずに、複数の統合オブジェクトを実行します。以前の統合オブジェクトは、エラーに遭遇した場合に、データ・ソース・リソースを HttpSession に戻していないことになります。
- 最初にボタンを押したことや、リンクをクリックしたことがサーバーで完全に処理される前に、ユーザーが「実行依頼」をクリックするか、リンクを 2 回クリックしています。処理が予想より長くかかる場合、ユーザーは、その統合オブジェクトを処理して出力ページをクライアントに送り返すための次のページを待たずに、チェーニングされた 統合オブジェクト・アプリケーションの次のページへのリンクを 2 回クリックした可能性があります。2 番目のクリックは、統合オブジェクトがデータ・ソース・リソースの所有権をまだ所有している間に、次のページを再度処理させる原因となります。この処理の間は、統合オブジェクトの 2 番目のインスタンスは HttpSession 内のリソースを検出できず、HPS5035 エラーがログに記録され、最初の統合オブジェクトの処理の出力が失われる原因となります。
- 非常に長く実行している統合オブジェクト (通常 1 分以上) は、統合オブジェクトがまだ処理している間に、Web サーバーがタイムアウトとなる原因となります。Web サーバーは、タイムアウトになると、ブラウザー・クライアントへの HTTP 接続を破棄する場合があります。Internet Explorer は、ユーザーの介入なしに、即時に同じページを再度要求することによって、これに対応することがあります。この 2 番目の要求は、2 回目の「実行依頼」またはリンクのクリックと同じで、統合オブジェクトの 2 番目のインスタンスを実行する原因となります。この 2 番目のインスタンスは、HttpSession 内のデータ・ソース・リソースの検出に失敗し、HPS5035 エラーとなります。さらに、最初の統合オブジェクトの処理の出力は、失われます。
- チェーニングされた統合オブジェクト・アプリケーションが、実行中の統合オブジェクトの間にアイドル中のままにされたために (例えば、統合オブジェクトが別のページ上にあるなど)、その接続に指定されている切断より前に最大使用中時間が満了した場合は、ユーザーが満了時刻後もそのアプリケーションを続行するのであれば、チェーン内の次の統合オブジェクトが HPS5035 をログに記録します。
- チェーニングされた統合オブジェクト・アプリケーションが、実行中の統合オブジェクトの間にアイドル中のままにされたために (例えば、統合オブジェクトが別のページ上にあるなど)、WebSphere® アプリケーション・サーバー 内に設定されている HttpSession アクティビティー・タイムアウトが発生した場合は、ユーザーが満了時刻後もそのアプリケーションを続行するのであれば、チェーン内の次の統合オブジェクトが HPS5035 をログに記録します。
ユーザーの処置
正しい処置は、その原因によって異なります。リストされている原因に対する考えられる処置は、それぞれ次のとおりです。
- チェーニングされた統合オブジェクトを含む複数のアプリケーションを実行している場合は、必ず Internet Explorer アイコンをダブルクリックして Internet Explorer ブラウザーを開くようにしてください。
- JSP またはサーブレットは、チェーン内の前の統合オブジェクトでエラーが発生した後は、後続のチェーニングされた統合オブジェクトを実行し続けようとすべきではありません。それよりも、前の統合オブジェクトでエラーが発生した場合、後続の統合オブジェクトを実行すべきではありません。また、エラー中のその統合オブジェクトは、クライアントをエラー・ページへリダイレクトする必要があります。 下記のように、サーブレットまたは JSP コードを使用することによって、この問題を回避できる場合があります。
// 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. }
- 次のような JavaScript のスニペットによって、この問題を回避できる場合があります。
<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>
- これを防ぐ最も簡単な方法は、統合オブジェクトを長時間実行しないことです。別の方法として、Web サーバーのタイムアウト値を調整することもできます。
- この方法が好ましくない場合は、接続が切断される前に、最大使用中時間を延長するか、または使用不可にすることができます。
- この方法でも好ましくない場合は、HttpSession アクティビティー・タイムアウトを延長するか、または使用不可にすることができます。