Tomcat の Valve をどう変換すれば GlassFish で動作しますか?

GlassFish 内の <code>org.apache.catalina.Valve</code> インタフェースは、Tomcat に含まれるものとは異なります。

このインタフェースには、パイプラインの valve 呼び出しをより簡潔に行うための最適化が施されています(このため、サーブレットリクエストを処理する過程でスタックフレームが要求されます): GlassFish の Web コンテナは、一つの valve にパイプライン上の次の valve を呼び出させるかわりに一つの valve に対して一度に呼び出しをかけ、現在の valve 呼び出しの戻り値により、次の valve を起動するかどうかを決定します。

Tomcat の valve を GlasFish に適用するには、次のような変更が必要となります:

  • valve の <code>invoke()</code> のシグネチャを <code>void</code> から <code>int</code> に変更する。
  • 全ての
return;

を、以下のように置き換える。

return Valve.END_PIPELINE;
  • 全ての
getNext().invoke(request, response);

の呼び出しを以下のように置き換え、

return Valve.INVOKE_NEXT;

以下のメソッドに続く全てのコード(削除されることになる valve のロジック)を移動する。

public void postInvoke(Request request, Response response)
      throws IOException, ServletException;

日本語翻訳: Kana

英文 (翻訳したバージョン: 2)