リモート要求ディスパッチャーに関する考慮事項
このトピックでは、リモート要求ディスパッチャーを使用する際に注意しなければならないいくつかの考慮事項について述べます。
- アプリケーションが特定のエンコードでのパラメーターを予期している場合は、通常の組み込みの場合と同様、
リモート要求ディスパッチ (RRD) が発生する前にそのアプリケーションで文字エンコードを設定する必要があります。
- ローカル・サーバーの ServletInputStream データは、リモート・サーバーでは使用できません。 ローカル・サーバーは、RRD 要求をリモート・サーバーに送信する前に POST データを解析し、 パラメーターを要求パラメーターとして組み込みます。 リモート・サーバーは、multipart form データにアクセスできません。 リモート・サーバーが要求から入力ストリームを取得しようとすると、UnsupportedOperationException が作成されます。
- リモート・サーバーでは、元の要求参照にはアクセスできません。
- ローカル・サーバーで作成される要求および応答ラッパーは、リモート・サーバーでは使用できません。 使用できない理由は、ServletRequestWrappers オブジェクトと WebSphere® 内部の ServletRequest オブジェクトが Serializable を実装していないためです。
- 要求属性はシリアライズ可能でなければなりません。
- 属性のクラス定義は、ローカル・サーバーとリモート・サーバーの両方で使用できる必要があります。
- 要求属性は、リモート・サーバーに伝搬され、ローカル・サーバーに戻されます。
- HTTP セッション
- Web アプリケーションがリモートである場合は、異なる Web アプリケーション間で相互に セッション・アクセスを行うことはできません。
- すべての Web アプリケーションがローカル・サーバーにある場合は、 複数の Web アプリケーションからアクセスできるテーブルにセッションを保管することにより、 そのセッションを Web アプリケーション間で共有することができます。 これは RRD では不可能であり、ローカルの場合でもお勧めはできません。
- サーブレット・プログラミング・モデル: 異なる Web アプリケーション内のセッションにはアクセスできません。
- ローカルでもリモートの場合と同様、標準のプログラミング・モデルを使用します。
- ローカル・モードでは、アプリケーションは、Web アプリケーション間で参照をキャッシュに入れ、 セッションを共有することができますが、RRD の場合はできません。
- 要求属性として保管されているセッション・オブジェクトは、リモート・サーバーでは使用できません。 Session クラスが Serializable を実装していないためです。
- ローカル・サーバー上で設定されるスレッド局在変数は、リモート・サーバーでは使用できません。
- ServletContext オブジェクト上で定義されるすべてのメソッドが、RRD ServletContext オブジェクトで使用できるわけではありません。 詳しくは、com.ibm.wsspi.rrd.context.RemoteServletContext の SPI 資料を参照してください。
- リモート・サーバーは、RRD の使用時にはローカル・サーバーの出力にアクセスできません。
- Cookie と ServletRequestWrappers
カスタマー・アプリケーションが HttpServletRequest.getCookies メソッドをラップし、追加の Cookie を戻すか、 Cookie を除去する場合、変更された Cookie はリモート・サーバーには送信されません。 javax.servlet.http.Cookie が Serializable を実装していないためです。 元の要求ヘッダーからの Cookie は、リモート・サーバーに送信されます。