MongoDB JavaEE Singleton额外实例

时间:2013-05-05 10:42:57

标签: mongodb java-ee singleton instance stateless-session-bean

所以,在使用在Jboss 4.2.3上运行的Servlet 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永远不会为空。

我可能会遗漏一些简单的东西,但任何提示都会很方便,欢呼。

1 个答案:

答案 0 :(得分:0)

如何将一些调试输出放入构造函数中?

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

您还可以在该行设置断点,以了解何时创建另一个实例。