/* * Author: Joseph Wang */ package com.leadpoint.syndication.db.mongo.mortgage; import java.util.ArrayList; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import com.leadpoint.config.Meta; import com.mongodb.Mongo; import com.mongodb.MongoOptions; import com.mongodb.ServerAddress; public class MongoConnnection { private static final int SERVER_INFORMATION_FIELD_SIZE = 2; private static final int SERVER_NAME_FIELD = 0; private static final int SERVER_PORT_FIELD = 1; private static Meta META = Meta.getMeta(MongoConnnection.class); private static String mongodb_servers = META.getString("mongodb_servers", "ip-10-160-86-4:10000,ip-10-161-50-230:10000"); private static int max_connection = META.getInteger("max_connection", 400); public static final int MAX_OBJECT_CHUNKS = 1000; private static Mongo m = null; private static Log log = LogFactory.getLog(MongoConnnection.class); private static MongoConnnection instance; private MongoConnnection() { init(mongodb_servers); } public static synchronized MongoConnnection getInstance() { if (instance == null) { instance = new MongoConnnection(); } return instance; } public Object clone() throws CloneNotSupportedException { throw new CloneNotSupportedException(); } public Mongo getMongo() { if (m == null) { init(mongodb_servers); } return m; } public void reconnect() { close(); init(mongodb_servers); } public void init(String server_list) { if (m == null) { MongoOptions opt = new MongoOptions(); opt.autoConnectRetry = true; opt.connectionsPerHost = max_connection; String[] servers = server_list.split(","); ArrayList addr = new ArrayList(); int serverCount = 0; for (int i = 0; i < servers.length; ++i) { String[] serverInfo = servers[i].split(":"); try { if (serverInfo.length == SERVER_INFORMATION_FIELD_SIZE) { log.info("MongoConnnection: add server " + serverInfo[SERVER_NAME_FIELD] + " at port " + serverInfo[SERVER_PORT_FIELD]); ServerAddress host = new ServerAddress( serverInfo[SERVER_NAME_FIELD], Integer.parseInt(serverInfo[SERVER_PORT_FIELD])); addr.add(host); serverCount++; } } catch (Exception ex) { log.fatal( "MongoConnnection: problem with adding server list " + server_list, ex); } } if (serverCount > 0) { try { m = new Mongo(addr, opt); } catch (Exception ex) { log.fatal("MongoConnnection: problem with creating MongoDB instance for server list " + server_list, ex); m = null; } } else { log.fatal("MongoConnnection: empty server list " + server_list); } } } public void close() { if (m != null) { m.close(); m = null; log.info("MongoConnnection: close MongoDB instance for server list " + mongodb_servers); } } }