package org.thrudb.thrudex;
import java.io.File;
import java.io.FileInputStream;
import java.util.Properties;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
import org.apache.thrift.TProcessor;
import org.apache.thrift.server.THsHaServer;
import org.apache.thrift.server.TServer;
import org.apache.thrift.server.THsHaServer.Options;
import org.apache.thrift.transport.TNonblockingServerSocket;
import org.apache.thrift.transport.TNonblockingServerTransport;
import org.thrudb.thrudex.lucene.ThrudexLuceneHandler;
public class ThrudexServer {
private String indexRoot;
private int port;
private int threadCount;
private Logger logger = Logger.getLogger(this.getClass().getSimpleName());
public String getIndexRoot() {
return indexRoot;
}
public void setIndexRoot(String indexRoot) {
this.indexRoot = indexRoot;
}
public int getPort() {
return port;
}
public void setPort(int port) {
this.port = port;
}
public int getThreadCount() {
return threadCount;
}
public void setThreadCount(int threadCount) {
this.threadCount = threadCount;
}
public void start() {
//Start the server
try {
logger.info("Starting thrudex service");
logger.info("index root: " + this.getIndexRoot());
logger.info("service port: " + this.getPort());
logger.info("thread count: " + this.getThreadCount());
//Transport
TNonblockingServerTransport serverSocket =
new TNonblockingServerSocket(port);
//Processor
TProcessor processor =
new Thrudex.Processor(new ThrudexLuceneHandler(indexRoot));
Options opt = new Options();
opt.maxWorkerThreads = threadCount;
//Server
TServer server = new THsHaServer(processor,serverSocket);
//Serve
server.serve();
} catch(Exception e) {
logger.error("Exception caught:", e);
}
}
/**
* @param args
*/
public static void main(String[] args) {
File propFile = null;
Properties properties = new Properties();
//check args
for (int i=0; i<args.length; i++) {
if(args[i].equalsIgnoreCase("-f")) {
if (i+1 >= args.length) {
printUsageAndExit();
}
else {
propFile = new File(args[i+1]);
if(propFile.exists() && propFile.canRead() && propFile.isFile()) {
try {
properties.load(new FileInputStream(propFile));
} catch(Exception e) {
System.err.println("Error while loading properties file: "
+ args[i+1] + " (" + e.getMessage() + ")");
System.exit(1);
}
} else {
System.err.println("Invalid properties file: "+args[i+1]);
System.exit(1);
}
}
}
}
if(properties.isEmpty()) {
printUsageAndExit();
}
PropertyConfigurator.configure(propFile.getAbsolutePath());
ThrudexServer thrudexServer = new ThrudexServer();
if(!properties.containsKey("INDEX_ROOT")){
System.err.println("INDEX_ROOT Property Required");
System.exit(1);
}
String indexRoot = properties.getProperty("INDEX_ROOT");
thrudexServer.setIndexRoot(indexRoot);
int port = Integer.valueOf(properties.getProperty("SERVER_PORT","9090"));
thrudexServer.setPort(port);
int threadCount = Integer.valueOf(properties.getProperty("THREAD_COUNT", "5"));
thrudexServer.setThreadCount(threadCount);
thrudexServer.start();
}
private static void printUsageAndExit()
{
System.err.println("Usage : thrudex -f thrudex.properties");
System.exit(1);
}
}