我可以使用JNDI来共享MongoClient实例吗?

时间:2013-08-07 00:03:30

标签: java mongodb jetty jndi mongo-java

我正在使用Jetty作为Web服务器。我已经构建了一个使用MongoDb来获取用户的自定义LoginService / realm。这个LoginService位于它自己的jar中,位于jetty服务器容器的类路径上。

我也想在我的网络应用程序中使用MongoDb。通常,对于SQL,您将设置通过JNDI共享的连接池。我可以用MongoDb做类似的事情吗?

每个MongoClient管理一个连接池。我可以在JNDI中存储任意对象(即一个MongoClient实例),还是必须使用ObjectFactory接口?

如果我必须创建某种ObjectFactory,我基本上可以把它变成单例并返回相同的MongoClient实例吗?

我并不完全了解JNDI,因为那里的资源很少能真正解释它的神奇之处,所以我甚至可能不会问正确的问题。

1 个答案:

答案 0 :(得分:0)

在server.xml中需要这样的东西:

<mongo id="mongo">
    <hostNames>YOUR.MONGODB.HOSTNAME.HERE</hostNames>
</mongo>

<mongoDB databaseName="YOUR_DATABASE_NAME" jndiName="mongo/mongodb" mongoRef="mongo"/>

然后在你的java类中:

@Resource(name = "mongo/mongodb")
DB mongoDB;

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  DBCollection table = mongoDB.getCollection("YOUR_TABLE_NAME");
  // etc.
}