/**
*
*/
package jframe.mongodb.client.service.impl;
import java.io.File;
import java.io.FileInputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import jframe.core.plugin.annotation.InjectPlugin;
import jframe.core.plugin.annotation.Injector;
import jframe.core.plugin.annotation.Start;
import jframe.core.plugin.annotation.Stop;
import jframe.mongodb.client.MongoClientConf;
import jframe.mongodb.client.MongoClientPlugin;
import jframe.mongodb.client.service.MongoClientService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.mongodb.MongoClient;
import com.mongodb.MongoClientURI;
/**
* @author dzh
* @date Jul 6, 2015 3:45:04 PM
* @since 1.0
*/
@Injector
public class MongoClientServiceImpl implements MongoClientService {
static Logger LOG = LoggerFactory.getLogger(MongoClientServiceImpl.class);
@InjectPlugin
static MongoClientPlugin Plugin;
static String FILE_CONF = "file.mongoclient";
static MongoClientConf MongoConf;
Map<String, MongoClient> clients;
@Start
void start() {
start(Plugin.getConfig(FILE_CONF, ""));
}
void start(String path) {
File conf = new File(path);
if (!conf.exists()) {
LOG.error("Not found mongo-client.properties");
return;
}
MongoConf = new MongoClientConf();
try {
MongoConf.init(new FileInputStream(conf));
String[] ids = MongoConf.getGroupIds();
clients = new HashMap<String, MongoClient>(ids.length, 1);
for (String id : ids) {
loadMongoClient(id);
}
} catch (Exception e) {
LOG.error(e.getMessage());
return;
}
LOG.info("Load MongoClientService successfully!");
}
private void loadMongoClient(String id) {
String uri = MongoConf.getConf(id, MongoClientConf.P_uri, "");
if ("".equals(uri)) {
LOG.warn("Not found {}'s uri", id);
return;
}
MongoClient mongoClient = new MongoClient(new MongoClientURI(uri));
clients.put(id, mongoClient);
}
@Stop
public void stop() {
if (clients == null)
return;
for (Entry<String, MongoClient> mc : clients.entrySet()) {
try {
mc.getValue().close();
} catch (Exception e) {
LOG.error(e.getMessage());
}
}
}
@Override
public MongoClient getClient(String id) {
return clients.get(id);
}
public static final MongoClientService test(String path) {
MongoClientServiceImpl mcs = new MongoClientServiceImpl();
mcs.start(path);
return mcs;
}
}