2013-05-11 4 views
0

J'utilise une base de données MongoDB avec java-eene pas ouvrir une nouvelle connexion sur chaque pilote java mongodb demande

J'ai mon objet de connexion:

public class MongoDb { 

static Mongo m; 
DB db; 
DBCollection coll; 

public MongoDb(String collection){ 
    m = null; 
    try { 
     if(m==null){ 
      m = new Mongo("127.0.0.1"); 
     } 
     db = m.getDB("game"); 
     coll = db.getCollection(collection); 
    } catch (UnknownHostException e) { 
     System.out.println("Database connexion error"); 
     e.printStackTrace(); 
    } 
} 

public void save(BasicDBObject bdbo){ 
    coll.insert(bdbo); 
} 

public void update(BasicDBObject search, BasicDBObject update){ 
    coll.update(search, update); 
} 

public void remove(BasicDBObject bdbo){ 
    coll.remove(bdbo); 
} 

public long count(){ 
    long nb = coll.getCount(); 
    return nb; 
} 

public List<DBObject> getAll(){ 
    List<DBObject> list = new ArrayList<DBObject>(); 
    DBCursor cursor = coll.find().limit(100); 
    try { 
     while(cursor.hasNext()) { 
      list.add(cursor.next()); 
     } 
    } finally { 
     cursor.close(); 
    } 
    return list; 
} 

public List<DBObject> getAll(String key, String value){ 
    List<DBObject> list = new ArrayList<DBObject>(); 
    BasicDBObject q = new BasicDBObject(); 
    q.append(key, Pattern.compile(value, Pattern.CASE_INSENSITIVE)); 
    DBCursor cursor = coll.find(q).limit(100); 
    try { 
     while(cursor.hasNext()) { 
      list.add(cursor.next()); 
     } 
    } finally { 
     cursor.close(); 
    } 
    return list; 
} 

public DBObject findOne(BasicDBObject bdbo){ 
    DBObject obj = coll.findOne(bdbo); 
    return obj; 
} 
} 

Mais chaque fois que je fais demande ceci créer une nouvelle connexion et il y a un nombre maximum de connexion sur mongodb, donc si j'atteins le nombre maximum de requêtes je dois redémarrer mongodb

Y a-t-il un moyen d'initialiser la connexion à la base de données une seule fois, ou test id la connexion se termine-t-elle?

Merci

+0

Votre code ne ferme pas toujours la connexion! Je commencerais par faire un grand refactoring de votre design afin que vous utilisiez quelque chose comme 'Spring' pour injecter la connexion. Ensuite, utilisez un filtre pour ouvrir et fermer les connexions et les injecter là où elles sont requises. Enfin, stockez les connexions dans une piscine afin de ne pas ouvrir et fermer les connexions à chaque fois. –

Répondre

2

Oui, il suffit de ne pas réinitialiser la connexion lors de la création de l'objet de la requête, comme cela:

public class MongoDb { 

static Mongo m = new Mongo("127.0.0.1"); 
DB db; 
DBCollection coll; 

public MongoDb(String collection){ 
    db = m.getDB("game"); 
    //... 

Ou redessiner vos classes pour séparer le proxy de base de données (connexion stockage, peut-être en tant que singleton) à partir des objets de requête.

+0

+1 pour la séparation des préoccupations. –

+0

Cela fonctionne merci pour votre aide – Ajouve

Questions connexes