【问题标题】:MongoDB JavaEE Singleton Extra InstancesMongoDB JavaEE 单例额外实例
【发布时间】:2013-05-05 10:42:56
【问题描述】:

所以,我在尝试使用 MongoDB(和 java 驱动程序)、使用 Servlets EJB 和 EJB 计时器、在 Jboss 4.2.3 上运行时遇到了这个小问题。

我像这样创建一个 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 永远不会为空。

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

【问题讨论】:

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


【解决方案1】:

你把一些调试输出放到你的构造函数中怎么样?

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

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

【讨论】:

  • 我已经完成了,唯一的实例是在启动时由 threadid 14 创建的,之后没有创建任何实例,但连接不断打开,这很奇怪。
  • 你不可能序列化你的单身人士,对吧?除此之外,我没有想法,抱歉。
  • 不,我不是。不过还是谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-09-06
  • 2017-09-01
  • 2019-01-06
  • 1970-01-01
  • 1970-01-01
  • 2017-09-04
  • 1970-01-01
相关资源
最近更新 更多