?? quickserver.java
字號:
serviceError = null;
if(getServiceState() == Service.RUNNING)
return false;
try {
startServer();
} catch(AppException e) {
serviceError = e;
return false;
}
return true;
}
/**
* Stop the service.
* @return true if serivce was stopped from Running state.
* @since 1.2
*/
public boolean stopService() {
serviceError = null;
if(getServiceState() == Service.STOPPED)
return false;
try {
stopServer();
clearAllPools();
} catch(AppException e) {
serviceError = e;
return false;
} catch(Exception e) {
serviceError = e;
return false;
}
return true;
}
/**
* Suspends the service.
* @return true if service was suspended from resumed state.
* @since 1.2
*/
public boolean suspendService() {
serviceError = null;
if(getServiceState() == Service.RUNNING) {
suspendMaxConnection = maxConnection;
suspendMaxConnectionMsg = maxConnectionMsg;
maxConnection = 0;
maxConnectionMsg = "Service is suspended.";
setServiceState(Service.SUSPENDED);
logger.info("Service "+getName()+" is suspended.");
return true;
}
return false;
}
/**
* Resume the service.
* @return true if service was resumed from suspended state.
* @since 1.2
*/
public boolean resumeService() {
serviceError = null;
if(getServiceState() == Service.SUSPENDED) {
maxConnection = suspendMaxConnection;
maxConnectionMsg = suspendMaxConnectionMsg;
setServiceState(Service.RUNNING);
logger.info("Service "+getName()+" resumed.");
return true;
}
return false;
}
/**
* Information about the service.
* @since 1.2
*/
public String info() {
serviceError = null;
StringBuffer buf = new StringBuffer();
buf.append(getName()+"\n");
buf.append(getBindAddr().getHostAddress()+" "+getPort()+"\n");
return buf.toString();
}
// *** End of Service interface methods
/**
* Initialise and create the server.
* @param param of the xml configuration file.
* @exception AppException if QuickServerConfig creation failed from the xml config file.
* @since 1.4.7
*/
public synchronized void initServer(Object param[]) throws AppException {
QuickServerConfig qsConfig = null;
try {
qsConfig = ConfigReader.read( (String)param[0]);
} catch(Exception e) {
logger.severe("Could not init server from xml file "+
(new File((String)param[0]).getAbsolutePath())+" : " +e);
throw new AppException("Could not init server from xml file",e);
}
initServer(qsConfig);
}
/**
* Initialise and create the service.
* @param qsConfig QuickServerConfig object.
* @since 1.4.7
*/
public synchronized void initServer(QuickServerConfig qsConfig) throws AppException {
setConfig(qsConfig);
try {
configQuickServer();
loadApplicationClasses();
//start InitServerHooks
InitServerHooks ish = getConfig().getInitServerHooks();
if(ish!=null) {
Iterator iterator = ish.iterator();
String initServerHookClassName = null;
Class initServerHookClass = null;
InitServerHook initServerHook = null;
while(iterator.hasNext()) {
initServerHookClassName = (String)iterator.next();
initServerHookClass = getClass(initServerHookClassName, true);
initServerHook = (InitServerHook) initServerHookClass.newInstance();
logger.info("Loaded init server hook: " + initServerHookClassName);
logger.fine("Init server hook info: " + initServerHook.info());
initServerHook.handleInit(QuickServer.this);
}
}
} catch(Exception e) {
logger.severe("Could not load init server hook: " +e);
logger.warning("StackTrace:\n"+MyString.getStackTrace(e));
throw new AppException("Could not load init server hook",e);
}
setServiceState(Service.INIT);
logger.finest("\r\n"+MyString.getSystemInfo(getVersion()));
}
/**
* Returns the state of the process
* As any constant of {@link Service} interface.
* @since 1.2
*/
public int getServiceState() {
return serviceState;
}
/**
* Sets the state of the process
* As any constant of {@link Service} interface.
* @since 1.2
*/
public void setServiceState(int state) {
serviceState = state;
}
private void configConsoleLoggingLevel(QuickServer qs, String temp) {
if(temp.equals("SEVERE"))
qs.setConsoleLoggingLevel(Level.SEVERE);
else if(temp.equals("WARNING"))
qs.setConsoleLoggingLevel(Level.WARNING);
else if(temp.equals("INFO"))
qs.setConsoleLoggingLevel(Level.INFO);
else if(temp.equals("CONFIG"))
qs.setConsoleLoggingLevel(Level.CONFIG);
else if(temp.equals("FINE"))
qs.setConsoleLoggingLevel(Level.FINE);
else if(temp.equals("FINER"))
qs.setConsoleLoggingLevel(Level.FINER);
else if(temp.equals("FINEST"))
qs.setConsoleLoggingLevel(Level.FINEST);
else
logger.warning("unknown level "+temp);
}
/**
* Configures QuickServer based on the passed QuickServerConfig object.
* @since 1.2
*/
public void configQuickServer(QuickServerConfig config) throws Exception {
QuickServer qs = QuickServer.this;
qs.setConfig(config); //v1.3
qs.setBasicConfig(config);
String temp = config.getConsoleLoggingLevel();
configConsoleLoggingLevel(qs, temp);
temp = null;
qs.setConsoleLoggingFormatter(config.getConsoleLoggingFormatter());
qs.setName(config.getName());
qs.setPort(config.getPort());
qs.setClientEventHandler(config.getClientEventHandler());
qs.setClientCommandHandler(config.getClientCommandHandler());
if(config.getAuthenticator()!=null)
qs.setAuthenticator(config.getAuthenticator()); //v1.3
else if(config.getClientAuthenticationHandler()!=null)
qs.setClientAuthenticationHandler(config.getClientAuthenticationHandler()); //v1.4.6
qs.setClientObjectHandler(config.getClientObjectHandler());
qs.setClientBinaryHandler(config.getClientBinaryHandler());//v1.4
qs.setClientWriteHandler(config.getClientWriteHandler());//v1.4.5
qs.setClientData(config.getClientData());
qs.setClientExtendedEventHandler(config.getClientExtendedEventHandler());
qs.setDefaultDataMode(config.getDefaultDataMode());//v1.4.6
qs.setServerBanner(config.getServerBanner());
qs.setTimeout(config.getTimeout());
qs.setMaxAuthTry(config.getMaxAuthTry());
qs.setMaxAuthTryMsg(config.getMaxAuthTryMsg());
qs.setTimeoutMsg(config.getTimeoutMsg());
qs.setMaxConnection(config.getMaxConnection());
qs.setMaxConnectionMsg(config.getMaxConnectionMsg());
qs.setBindAddr(config.getBindAddr());
//v1.3.2
qs.setCommunicationLogging(config.getCommunicationLogging());
//v1.3.3
qs.setSecurityManagerClass(config.getSecurityManagerClass());
qs.setAccessConstraintConfig(config.getAccessConstraintConfig());
temp = config.getApplicationJarPath();
if(temp!=null) {
File ajp = new File(temp);
if(ajp.isAbsolute()==false) {
temp = config.getConfigFile();
ajp = new File(temp);
temp = ajp.getParent() + File.separatorChar +
config.getApplicationJarPath();
config.setApplicationJarPath(temp);
temp = null;
}
qs.setApplicationJarPath(config.getApplicationJarPath());
//set path also to QSAdmin
if(config.getQSAdminServerConfig() != null ) {
getQSAdminServer().getServer().setApplicationJarPath(
config.getApplicationJarPath());
}
}
qs.setServerHooks(config.getServerHooks());
qs.setSecure(config.getSecure());
}
/**
* Configures QSAdminServer based on the passed QuickServerConfig object.
* @since 1.2
*/
public void configQuickServer(QSAdminServerConfig config)
throws Exception {
QuickServer qs = getQSAdminServer().getServer();
qs.setBasicConfig(config);
//set the Logging Level to same as main QS
String temp = getConsoleLoggingLevel();//config.getConsoleLoggingLevel();
configConsoleLoggingLevel(qs, temp);
//set the Logging Formatter to same as main QS
//qs.setConsoleLoggingFormatter(config.getConsoleLoggingFormatter());
qs.setConsoleLoggingFormatter(getConsoleLoggingFormatter());
qs.setClientEventHandler(config.getClientEventHandler());//v1.4.6
qs.setClientCommandHandler(config.getClientCommandHandler());
qs.setName(config.getName());
qs.setPort(config.getPort());
if(config.getAuthenticator()!=null)
qs.setAuthenticator(config.getAuthenticator()); //v1.3
else if(config.getClientAuthenticationHandler()!=null)
qs.setClientAuthenticationHandler(config.getClientAuthenticationHandler()); //v1.4.6
qs.setClientObjectHandler(config.getClientObjectHandler());
qs.setClientBinaryHandler(config.getClientBinaryHandler());//v1.4
qs.setClientWriteHandler(config.getClientWriteHandler());//v1.4.5
qs.setClientData(config.getClientData());
qs.setClientExtendedEventHandler(config.getClientExtendedEventHandler());//v1.4.6
qs.setDefaultDataMode(config.getDefaultDataMode());//v1.4.6
qs.setServerBanner(config.getServerBanner());
qs.setTimeout(config.getTimeout());
qs.setMaxAuthTry(config.getMaxAuthTry());
qs.setMaxAuthTryMsg(config.getMaxAuthTryMsg());
qs.setTimeoutMsg(config.getTimeoutMsg());
qs.setMaxConnection(config.getMaxConnection());
qs.setMaxConnectionMsg(config.getMaxConnectionMsg());
qs.setBindAddr(config.getBindAddr());
//v1.3.2
qs.setCommunicationLogging(config.getCommunicationLogging());
getQSAdminServer().setCommandPlugin(config.getCommandPlugin());
//v1.3.2
if(config.getCommandShellEnable().equals("true"))
getQSAdminServer().setShellEnable(true);
getQSAdminServer().setPromptName(config.getCommandShellPromptName());
//v1.3.3
qs.setAccessConstraintConfig(config.getAccessConstraintConfig());
qs.setServerHooks(config.getServerHooks());
qs.setSecure(config.getSecure());
}
/**
* Configures QSAdminServer and QuickServer based on the
* internal QuickServerConfig object.
* @since 1.3
*/
public void configQuickServer() throws Exception {
configQuickServer(getConfig());
if(getConfig().getQSAdminServerConfig() != null ) {
configQuickServer(getConfig().getQSAdminServerConfig());
}
}
/**
* Usage: QuickServer [-options]<br/>
* Where options include:<br/>
* -about Opens About Dialogbox<br/>
* -load <xml_config_file> [options] Loads the server from xml file.
* where options include:
* -fullXML2File <new_file_name>
*/
public static void main(String args[]) {
try {
if(args.length >= 1) {
if(args[0].equals("-about")) {
org.quickserver.net.server.gui.About.main(null);
} else if(args[0].equals("-load") && args.length>=2) {
QuickServer qs = QuickServer.load(args[1]);
if(qs!=null) handleOptions(args, qs);
} else {
System.out.println(printUsage());
}
} else {
System.out.println(printUsage());
org.quickserver.net.server.gui.About.showAbout();
}
} catch(Exception e) {
e.printStackTrace();
}
}
/**
* Loads the server from the xml file name passed.
* @since 1.4.7
*/
public static QuickServer load(String xml) throws AppException {
QuickServer qs = new QuickServer();
Object config[] = new Object[] {xml};
qs.initServer(config);
qs.startServer();
if(qs.getConfig().getQSAdminServerConfig()!= null) {
qs.startQSAdminServer();
}
return qs;
}
/** Prints usage */
private static String printUsage() {
StringBuffer sb = new StringBuffer();
sb.append("QuickServer - Java library/framework for creating robust multi-client TCP servers.\n");
sb.append("Copyright (C) QuickServer.org\n\n");
sb.append("Usage: QuickServer [-options]\n");
sb.append("Where options include:\n");
sb.append(" -about\t"+"Opens About Dialog box\n");
sb.append(" -load <xml_config_file> [load-options]\t"+"Loads the server from xml file.\n");
sb.append(" Where load-options include:\n");
sb.append(" -fullXML2File <file_name>\t"+"Dumps the Full XML configuration of the QuickServer loaded.\n");
return sb.toString();
}
private static void handleOptions(String args[], QuickServer quickserver) {
if(args.length<3) return;
if(args[2].equals("-fullXML2File") && args.length>=4) {
File file = new File(args[3]);
logger.info("Writing full xml configuration to file: "+file.getAbsolutePath());
try {
TextFile.write(file, quickserver.getConfig().toXML(null));
} catch(Exception e) {
logger.warning("Error writing full xml configuration: "+e);
}
}
}
/**
* Cleans all Object and Thread pools
* @since 1.3
*/
public void clearAllPools() throws Exception {
try {
if(pool!=null)
getClientPool().clear();
if(clientHandlerPool!=null)
getClientHandlerPool().clear();
if(getClientDataPool()!=null)
getClientDataPool().clear();
if(getDBPoolUtil()!=null)
getDBPoolUtil().clean();
if(byteBufferPool!=null)
getByteBufferPool().clear();
} catch(Exception e) {
logger.warning("Error: "+e);
throw e;
}
}
/**
* Closes all Object and Thread pools
* @since 1.3
*/
public void closeAllPools() throws Exception {
if(pool==null && clientHandlerPool==null && getClientDataPool()==null &&
getDBPoolUtil()==null && byteBufferPool==null) {
return;
}
logger.fine("Closing pools for "+getName());
try {
if(pool!=null && PoolHelper.isPoolOpen(getClientPool().getObjectPool())) {
logger.finer("Closing ClientThread pool.");
getClientPool().close();
}
if(clientHandlerPool!=null && PoolHelper.isPoolOpen(getClientHandlerPool())) {
logger.finer("Closing ClientHandler pool.");
getClientHandlerPool().close();
}
if(getClientDataPool()!=null && PoolHelper.isPoolOpen(getClientDataPool())) {
logger.finer("Closing ClientData pool.");
getClientDataPool().close();
}
if(getDBPoolUtil()!=null) {
logger.finer("Closing DB pool.");
getDBPoolUtil().clean();
}
if(byteBufferPool!=null && PoolHelper.isPoolOpen(getByteBufferPool())) {
logger.finer("Closing ByteBuffer pool.");
getByteBufferPool().close();
}
logger.fine("Closed pools for "+getName());
} catch(Exception e) {
logger.warning("Error closing pools for "+getName()+": "+e);
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -