- 论坛徽章:
- 0
|
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.catalina.Connector;
import org.apache.catalina.Context;
import org.apache.catalina.Engine;
import org.apache.catalina.Host;
import org.apache.catalina.LifecycleException;
import org.apache.catalina.Logger;
import org.apache.catalina.logger.FileLogger;
import org.apache.catalina.startup.Embedded;
import org.yak.util.YAKGlobals;
import java.io.File;
import java.net.InetAddress;
/**
* 启动一个 Tomcat 服务器
*
* @author J.Y.N
*/
public class AdminConsolePlugin implements Plugin {
private static Embedded server = null;
private Engine engine = null;
private Host host = null;
private int port;// 服务器工作端口
private Context context;
private int securePort;// 服务器安全工作端口
private File pluginDir;// 插件目录
/**
* Create a jetty module.
*/
public AdminConsolePlugin() {
}
public void restartListeners() {
try {
String restarting = "服务器管理程序重启";
System.out.println(restarting);
server.stop();
server.removeContext(context);
server.removeHost(host);
server.removeEngine(engine);
engine = server.createEngine();
engine.setName("yak");
host = server.createHost("localhost", pluginDir.getAbsoluteFile()
.toString());
engine.addChild(host);
engine.setDefaultHost(host.getName());
// Add web-app
context = server.createContext("", pluginDir.getAbsoluteFile()
+ File.separator + "web");
host.addChild(context);
server.addEngine(engine);
loadListeners();
server.start();
printListenerMessages();
} catch (Exception e) {
}
}
private void loadListeners() throws Exception {
String interfaceName = YAKGlobals.getXMLProperty("server.domain",
"127.0.0.1");
port = Integer.parseInt(YAKGlobals.getXMLProperty("server.port", "80"));
Connector connector = server.createConnector(InetAddress
.getByName(interfaceName), port, false);
server.addConnector(connector);
}
public void initializePlugin(PluginManager manager, File pluginDir) {
this.pluginDir = pluginDir;
try {
if (System.getProperty("org.apache.commons.logging.LogFactory") == null) {
System.setProperty("org.apache.commons.logging.LogFactory",
"org.mortbay.log.Factory");
}
File logDir = new File(YAKGlobals.getHomeDirectory(), "logs");
if (!logDir.exists()) {
logDir.mkdirs();
}
FileLogger logFile = new FileLogger();
logFile.setDirectory(logDir.getAbsolutePath());
logFile.setPrefix("tomca-console");
// Create an embedded server
server = new Embedded();
server.setLogger(logFile);
// print all log statments to standard error
server.setDebug(Logger.WARNING);
server.setCatalinaHome(pluginDir.getAbsoluteFile().getParent());
// Create an engine
engine = server.createEngine();
engine.setName("yak");
// Create a default virtual host
host = server.createHost("localhost", pluginDir.getAbsoluteFile()
.toString());
engine.addChild(host);
engine.setDefaultHost(host.getName());
// Create the ROOT context
context = server.createContext("", pluginDir.getAbsoluteFile()
+ File.separator + "web");
host.addChild(context);
// Install the assembled container hierarchy
server.addEngine(engine);
loadListeners();
// Start the embedded server
server.start();
printListenerMessages();
} catch (Exception e) {
System.err.println("Error starting admin console: "
+ e.getMessage());
}
}
public void destroyPlugin() {
host = null;
try {
if (server != null) {
server.stop();
server = null;
}
} catch (LifecycleException e) {
}
}
/**
* Returns the Jetty instance started by this plugin.
*
* @return the Jetty server instance.
*/
public static Embedded getServer() {
return server;
}
/**
* Writes out startup messages for the listeners.
*/
private void printListenerMessages() {
String warning = ("admin.console.warning");
String listening = ("admin.console.listening");
}
}
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/1677/showart_67253.html |
|