2

これは、アプリケーション サーバーに設定および/または依存できるものですか? アプリケーションを再デプロイすると、シングルトン オブジェクトが再構築されるかどうか疑問に思っています。

ランダムにグーグルで検索したり、J2EEサーブレット仕様を読むことに頼ったりするよりも、ここで質問して簡潔な答えを得たいと思います-

4

2 に答える 2

1

この質問に対する簡単な答えはノーです。このように動作するアプリケーションサーバーを知りません。ただし、指摘すべきことがいくつかあります。以下は簡単な説明です。

アプリケーションサーバー(つまり、JBoss w / Tomcat)が起動すると、すべてのアプリケーションで共有されるクラスローダーにいくつかのクラスがロードされます。アプリケーションをデプロイすると、それらのクラスが独自のクラスローダーにロードされます。アプリケーションをアンデプロイすると、そのクラスローダーとそのすべてのクラスがガベージコレクションされます。したがって、アプリケーションが再デプロイされると、すべてのクラスが再ロードされ、シングルトンが再インスタンス化されます。

アプリケーションは(理論的には)再デプロイ後も、JVM/アプリケーションサーバーの再起動後と同じように動作します。

最後のヒント:エンタープライズJavaアプリケーションでシングルトンパターンを使用する場合は、アプリケーションサーバー環境でのシングルトンオブジェクトの制限を知っていることを確認してください。たとえば、アプリケーションをクラスタ化する場合、問題が発生する可能性があります。

于 2009-05-15T19:05:18.450 に答える
1

いいえ、そうではありません (少なくとも、私が知っているアプリ サーバーはありません)。サーブレット仕様は、アプリのライフサイクルを管理するためのServletContextListenerフックを提供します。JBoss などの一部のアプリケーション サーバーには、シングルトン Bean (@Service) 用の特別なアノテーションがあり、EJB 3.1 では @Singleton アノテーションが提供されます。シングルトンを使用する際に考慮すべきもう 1 つのことは、アプリをクラスター化するとどうなるかということです。シェア ナッシング アプローチを使用しない限り、高可用性 (HA) が必要になるか、ある種のレプリケーションが必要になります。分散キャッシュは、この理由で優れています。

于 2009-05-15T18:54:09.960 に答える