これは、Application Serverで構成できる、または依存することができるものですか?アプリケーションを再デプロイするときにシングルトンオブジェクトが再構築されるかどうかは疑問です。web-appにサービスを提供するJVMは、再デプロイ時にApplication Serverに再起動しますか?
私はむしろここに尋ねると、ランダムにグーグルやJ2EEサーブレット仕様を読みに頼るよりも簡潔な答えをしてみてくださいとなるだろう -
これは、Application Serverで構成できる、または依存することができるものですか?アプリケーションを再デプロイするときにシングルトンオブジェクトが再構築されるかどうかは疑問です。web-appにサービスを提供するJVMは、再デプロイ時にApplication Serverに再起動しますか?
私はむしろここに尋ねると、ランダムにグーグルやJ2EEサーブレット仕様を読みに頼るよりも簡潔な答えをしてみてくださいとなるだろう -
いいえ、それは(私の知っている、少なくともいないアプリケーションサーバー)ではないでしょう。サーブレット仕様では、ServletContextListenerフックを使用してアプリのライフサイクルを管理しています。 JBossのようなアプリケーションサーバの中には、シングルトンBean(@Service)のための特別なアノテーションがあり、EJB 3.1は@Singletonアノテーションを提供します。シングルトンを使用するときに考えるもう1つのことは、アプリをクラスタ化するときに何が起こるか、高可用性(HA)が必要であるか、何もしない方法を使用しない限り、何らかのタイプのレプリケーションを使用することです。このため、分散キャッシュが有効です。
この質問に対する短い答えはいいえです。このように動作するアプリケーションサーバーについてはわかりません。しかし、指摘すべき点がいくつかあります。
アプリケーションサーバー(JBoss w/Tomcat)が起動すると、すべてのアプリケーションによって共有されるクラスローダーにいくつかのクラスがロードされます。アプリケーションをデプロイすると、クラスが独自のクラスローダーにロードされます。アプリケーションをアンデプロイすると、そのクラスローダーとすべてのクラスがガベージコレクションされます。したがって、アプリケーションを再デプロイすると、すべてのクラスが再ロードされ、シングルトンが再インスタンス化されます。
JVM/Application Serverを再起動した後と同じように、アプリケーションは再配置後も同じように動作します(理論的にはatleast)。
最後のヒント:エンタープライズJavaアプリケーションでシングルトンパターンを使用する場合は、アプリケーションサーバー環境でシングルトンオブジェクトの制限を理解していることを確認してください。たとえば、アプリケーションをクラスタ化する場合は、問題にぶつかることがあります。