J'utilise mongodb-java-driver, et rien d'autre sauf cela. J'ai créé singleten EJB avec la connexion à Mongo.MonoDb crée une connexion à chaque opération sur la collection
@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;
}
}
Je reçois ce ejb dans le haricot ApplicationScoped (JSF) (juste pour être sûr que je vais avoir une seule instance de connexion DB).
@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;
}
}
Puis, en demande scope haricots j'obtenir des données de 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)
}
Pourquoi même si j'ai le même « db » instance d'objet, je ne peux pas obtenir des données sans créer de nouvelle connexion, pourquoi je peux ne partageons pas cette connexion comme elle devrait être due à la mise en commun? }
Je vois le même comportement avec le pilote Node.Js MongoDb. Avez-vous eu de la chance pour savoir pourquoi cela se passe? –
Je viens de trouver une réponse à votre question en résolvant un problème similaire. –