0

そのため、Jboss 4.2.3で実行されているサーブレットEJBとEJBタイマーを使用して、MongoDB(およびJavaドライバー)を使用しようとしているときに、この小さな問題が発生しました。

私はそのようにmongoシングルトンを作成します

private static Mongo mongoSingleton = null;

private MongoSingleton()
{

}

public synchronized static Mongo getMongo() throws UnknownHostException
{
     if(mongoSingleton == null)
     {
         MongoOptions options = new MongoOptions();
         options.connectionsPerHost = 40;
         mongoSingleton = new Mongo("localhost", options); 
     }
     return mongoSingleton;
}

次に、ステートレス セッション Bean (データベース トランザクションに使用) 間でインスタンスを渡します。

DB db = MongoSingleton.getMongo().getDB("data");

何かが欠けていない限り、確かにこれはシングルトンで作成された単一のインスタンスを使用する必要がありますが、Mongo コンソールを確認すると、Mongo インスタンスの作成後にアプリケーションで追加の接続が作成されていることに気付きました。奇数回 (すべてのデータベース トランザクションで発生するわけではありません)、最初のインスタンスが作成された後、mongoSingleton が null になることはありません。

簡単なものが欠けているかもしれませんが、ヒントがあれば便利です。

4

1 に答える 1

0

デバッグ出力をコンストラクターに入れてみませんか?

private MongoSingleton()
{
    long threadId = Thread.currentThread().getId();
    System.out.println("New instance created from thread " + threadId);
}

その行にブレークポイントを設定して、正確に別のインスタンスがいつ作成されるかを理解することもできます。

于 2013-05-05T13:26:31.370 に答える