おはようございます。
私は現在、ApacheTomcat7サーバーにデプロイされているJavaWebサービスプロジェクトに取り組んでいます。プロジェクトのニーズに応じて、グローバル(WSスレッド間で、すべてのリクエストによって作成される)オブジェクトをメモリに保持する必要があります。したがって、私は次のようにシングルトンデザインパターンを実装しようとしました。
public class SingletonDesign {
private static boolean _instanceFlag = false;
private static final SingletonDesign _instance = new SingletonDesign();
private static GlobalObject _myGlobalObject;
private SingletonDesign() {
if(_instanceFlag == false) {
_myGlobalObject = new GlobalObject();
_instanceFlag = true;
}
}
public static GlobalObject getModel() {
if(_instanceFlag == false) {
_myGlobalObject = new GlobalObject();
_instanceFlag = true;
}
return _myGlobalObject;
}
public static int parseModel() {
if(_instanceFlag == false) {
_myGlobalObject = new ItemSimilarityModel();
_instanceFlag = true;
}
int val = _myGlobalObject.parseFromFile();
return val;
}
}
リクエストが行われるたびに、新しいスレッドがWeb上に作成されるという事実を認識しています–サービスクラス(オブジェクト)。私の目標は、すべてのスレッドにグローバルなSingletonDesignオブジェクトを含めることです。これは、メモリ内で存続し、一度だけ作成されます。上記のデザインは私の期待どおりに機能しているように見えますが、それが正しいかどうかはよくわかりません。だからこれらは私の質問です:
1)SingletonDesignオブジェクトのメソッドを静的にする必要があるのはなぜですか?(私はそれらを非静的として定義しようとしましたが、私のシングルトンオブジェクトは正しく初期化されていません)。
2)上記のデザインは、シングルトンデザインパターンのウィキペディアページから見たものです。私を混乱させる部分は、他のシングルトン実装でも見た_instanceフィールドの初期化です。なぜそのオブジェクトが必要なのですか?
3)サーバーが停止するまで、オブジェクトは存続しますか?私はいくつかのテストを行いました、そしてそれは生きているようです、しかし私は100%確信している必要があります。
お手数をおかけしますが、よろしくお願いいたします。