Java tutorial
/* * Copyright (C) 2000 - 2015 TagServlet Ltd * * This file is part of Open BlueDragon (OpenBD) CFML Server Engine. * * OpenBD is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * Free Software Foundation,version 3. * * OpenBD is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with OpenBD. If not, see http://www.gnu.org/licenses/ * * Additional permission under GNU GPL version 3 section 7 * * If you modify this Program, or any covered work, by linking or combining * it with any of the JARS listed in the README.txt (or a modified version of * (that library), containing parts covered by the terms of that JAR, the * licensors of this Program grant you additional permission to convey the * resulting work. * README.txt @ http://www.openbluedragon.org/license/README.txt * * http://openbd.org/ */ package com.bluedragon.mongo; import java.net.Inet4Address; import java.net.InetSocketAddress; import java.net.UnknownHostException; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import net.spy.memcached.AddrUtil; import com.mongodb.MongoClient; import com.mongodb.MongoClientOptions; import com.mongodb.MongoClientURI; import com.mongodb.MongoCredential; import com.mongodb.ReadPreference; import com.mongodb.ServerAddress; import com.mongodb.client.MongoDatabase; public class MongoDSN extends Object { private static Map<String, MongoClientWrapper> clientMongoMap = new HashMap<String, MongoClientWrapper>(); public long lastUsed; private MongoDatabase mdb; private MongoClient mongoclient; private String server, user, pass, db, mongouri = null, ip; private int port; public MongoDSN(String mongouri) { this.mongouri = mongouri; this.mdb = null; } public MongoDSN(String server, int port, String user, String pass, String db) throws UnknownHostException { this.db = db; this.server = server; this.user = user; this.pass = pass; this.port = port; this.ip = Inet4Address.getByName(server).getHostAddress(); this.mongouri = null; this.mdb = null; } public synchronized void open() throws Exception { if (mongouri == null) { if (clientMongoMap.containsKey(ip + port)) { mdb = clientMongoMap.get(ip + port).open().getDatabase(db); } else { mongoclient = newClient(server + ":" + port, user, pass, db); MongoClientWrapper mcw = new MongoClientWrapper(mongoclient); clientMongoMap.put(ip + port, mcw); mdb = mcw.open().getDatabase(db); } } else { MongoClientURI clientURI = new MongoClientURI(mongouri); mongoclient = new MongoClient(clientURI); mdb = mongoclient.getDatabase(clientURI.getDatabase()); } lastUsed = System.currentTimeMillis(); } public synchronized void close() { if (mdb != null) { if (mongouri == null) { clientMongoMap.get(ip + port).close(); if (clientMongoMap.get(ip + port).getUsageCount() == 0) clientMongoMap.remove(ip + port); mdb = null; mongoclient = null; } else { mongoclient.close(); mongoclient = null; } } } public String getDBName() { return db; } public MongoDatabase getDatabase() { return mdb; } public MongoClient getClient() { return mongoclient; } public static MongoClient newClient(String server, String user, String pass, String db) throws UnknownHostException { MongoClientOptions options = MongoClientOptions.builder() .readPreference(ReadPreference.secondaryPreferred()).build(); List<InetSocketAddress> serverList = AddrUtil.getAddresses(server); List<ServerAddress> addrs = new ArrayList<ServerAddress>(); Iterator<InetSocketAddress> it = serverList.iterator(); while (it.hasNext()) { InetSocketAddress isa = it.next(); addrs.add(new ServerAddress(isa.getAddress(), isa.getPort())); } if (user != null) { MongoCredential cred = MongoCredential.createCredential(user, db, pass.toCharArray()); List<MongoCredential> creds = new ArrayList<MongoCredential>(); creds.add(cred); return new MongoClient(addrs, creds, options); } else { return new MongoClient(addrs, options); } } }