アプリケーションサーバに再デプロイにあなたのWebアプリの再起動をサービスするJVMをしていますか?
質問
これは、設定および/またはアプリケーション・サーバーに依存できるものですか?あなたがアプリケーションを再デプロイする際シングルトンオブジェクトが再構築される場合、私は疑問に思ってます。
-私はむしろここに尋ねると、ランダムにグーグルやJ2EEサーブレット仕様を読みに頼るよりも簡潔な答えをしてみてくださいとなるだろう
解決
いいえ、それは(私が知っている、少なくともいないアプリケーションサーバー)ではないでしょう。サーブレット仕様は、あなたののServletContextListener のフックを提供しますアプリのライフサイクルを管理します。 JBossのようないくつかのアプリケーションサーバでは、シングルトン豆(@Service)のための特別な注釈を持っている、とEJB 3.1はあなたに@Singletonアノテーションを提供します。シングルトンを使用した場合について考えるもうひとつは、あなたがアプリあなたをクラスタ化するときに、共有何もアプローチを使用しない限り、あなたは、高可用性(HA)を必要とするか、または複製のいくつかのタイプを使用します何が起こるかです。分散キャッシュはこの理由のために良いです。
他のヒント
この質問への短い答えはノーです。私はこのように動作する任意のアプリケーションサーバを知りません。しかし、指摘しなければならない点がいくつかあります。
:単純な説明は、次のとおり アプリケーションサーバー(Tomcatの/ワットすなわち。JBossが)起動すると、、それはすべてのアプリケーションで共有されるクラスローダにいくつかのクラスをロードします。それはあなたのアプリケーションをデプロイするとき、それは、独自のクラスローダにこれらのクラスをロードします。アプリケーションをアンデプロイすると、そのクラスローダとそのすべてのクラスはゴミが収集されます。アプリケーションを再デプロイするときに、すべてのクラスが再ロードされ、そしてあなたのシングルトンが再インスタンス化されます。
あなたのアプリケーションは、(理論的には、少なくとも)JVM /アプリケーションサーバーの再起動後など、再デプロイ後に同じように動作します。
ただ、最後のヒント:あなたは、エンタープライズJavaアプリケーションにSingletonパターンを使用する場合は、アプリケーションサーバ環境でのシングルトンオブジェクトの限界を知っていることを確認してください。あなたがあなたのアプリケーションをクラスタ化する場合は、例えば、問題に実行することができます。