2

jbossのようなWebコンテナーには、作成するサーブレットのスレッド数を指定するパラメーターがあることを理解しています。これは、コンテナーがサーブレットの単一インスタンスで実行するために作成できるスレッドの最大数です。

しかし、私の質問は、作成するサーブレットのインスタンスの数を指定する方法はありますか?はいの場合、目的は何ですか?これが必要なのは、リクエストを処理することです。たとえば、単一のインスタンスで実行されている1つまたは複数のスレッドが、そのサーブレットデータを何らかの形で破損したり、destroy()したりする場合は、冗長性を確保します。

4

1 に答える 1

5

編集:気をつけろ!サーブレット仕様2.4以降、インターフェース javax.servlet.SingleThreadModelは非推奨になり、直接置き換えられることはありません。

コンテナが同じサーブレットの複数のインスタンスを作成する必要があるのか​​、それとも常に単一のインスタンスのみを作成するのかについての仕様は明確ではありません。


サーブレット仕様2.4からhttp://download.oracle.com/otndocs/jcp/servlet-2.4-fr-spec-oth-JSpec/

SRV.2.2インスタンスの数

SRV.13章「デプロイメント記述子」で説明されているように、サーブレットを含むWebアプリケーションのデプロイメント記述子の一部であるサーブレット宣言は、サーブレットコンテナがサーブレットのインスタンスを提供する方法を制御します。分散環境(デフォルト)でホストされていないサーブレットの場合、サーブレットコンテナはサーブレット宣言ごとに1つのインスタンスのみを使用する必要があります。ただし、SingleThreadModelインターフェースを実装するサーブレットの場合、サーブレットコンテナは複数のインスタンスをインスタンス化して、重いリクエストの負荷を処理し、リクエストを特定のインスタンスにシリアル化する場合があります。

デプロイメント記述子で配布可能としてマークされたアプリケーションの一部としてサーブレットがデプロイされた場合、コンテナーは、Java仮想マシン(JVMTM)ごとのサーブレット宣言ごとに1つのインスタンスのみを持つことができます。ただし、配布可能なアプリケーションのサーブレットがSingleThreadModelインターフェースを実装している場合、コンテナーは、コンテナーの各JVMでそのサーブレットの複数のインスタンスをインスタンス化する場合があります。

シングルスレッドモデルの詳細については、ドキュメントを参照してください。

于 2011-10-19T19:09:06.780 に答える