2013-04-17 20 views
2

我使用的是mongodb-java-driver,除此之外没有别的。我创建了连接到Mongo的singleten EJB。MonoDb创建集合上的每一个操作的连接

@Singleton 
public class MongoConnection { 

private DB db = null; 
private MongoClient mongoClient = null; 

@PostConstruct 
public void init() { 
    try { 
    mongoClient = new MongoClient("localhost", 27017); 
    db = mongoClient.getDB("mydb"); 
    } catch (UnknownHostException e) { 
    e.printStackTrace(); 
} 
} 

public MongoConnection() { 
} 

public DB getDb() { 
    return db; 
} 
public DBCollection getCollectionInDatabase(String collection) { 
    DBCollection coll; 
    coll = db.getCollection(collection); 
    return coll; 
} 
} 

我得到这个EJB在ApplicationScoped豆(JSF)(只是要确定,我将只有一个数据库连接的情况下)。

@Named("appMongo") 
@ApplicationScoped 
public class MongoApplicationScope implements Serializable{ 

private static final long serialVersionUID = 1L; 
@EJB MongoConnection mu; 


public MongoConnection getMu() { 
return mu; 
} 

public void setMu(MongoConnection mu) { 
this.mu = mu; 
} 
} 

然后在要求范围的bean我从获取数据DB

@Named("mongoBean") 
@SessionScoped 
public class MongoBean implements Serializable { 

private static final long serialVersionUID = 1L; 
@Inject MongoApplicationScope mongoAccess; 
public void mongoDzialanie() { 
DBCollection coll = mongoAccess.getMu().getDb().getCollection("oko"); //at this step everything is correct 
System.out.println(coll.getCount()); //new connection is created text from mongoDB console -> connection accepted from 127.0.0.1:57700 #2 (2 connections now open) 

} 

为什么即使我有同样的“DB”的对象实例,而无需创建新的连接,为什么我不能,我不能获取数据分享这个连接,因为它应该是由于共享? }

+0

我看到与Node.Js MongoDb驱动程序相同的行为。你有没有发现为什么会发生这种情况? –

+0

我刚刚通过解决类似问题找到了您的问题的答案。 –

回答

0

MongoDB驱动程序每次使用集合时都会在后台打开新的连接。司机决定何时开新车。我相信这取决于驾驶员的实施。

您可以通过设置poolSize值来控制打开的最大连接数(对于Node.JS MongoDb驱动程序,默认值为5)http://mongodb.github.io/node-mongodb-native/2.2/api/MongoClient.html#connect对于Java或其他语言,它可能会有所不同。检查你的文档。

如果您打算拥有多个数据库对象,则每个对象都有自己的连接池。在我的情况下,我有mainDb和logsDb。每个池都有10个。因此,最多可以打开20个并发连接。

最后,如果您使用的是node.js驱动程序,请务必将Number作为值传递,而不是字符串(即poolSize:10)。这将节省您的小时/天的故障排除:)

相关问题