-------------------------------------------------------------------------------------------------
package netjfwatcher.jetty.control;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.logging.Logger;
import javax.xml.parsers.FactoryConfigurationError;
import netjfwatcher.jetty.preference.JettyConfig;
import netjfwatcher.jetty.preference.JettyConfigFileParse;
import org.apache.log4j.BasicConfigurator;
import org.mortbay.jetty.Connector;
import org.mortbay.jetty.Handler;
import org.mortbay.jetty.Server;
import org.mortbay.jetty.handler.HandlerCollection;
import org.mortbay.jetty.nio.SelectChannelConnector;
import org.mortbay.jetty.security.HashUserRealm;
import org.mortbay.jetty.security.UserRealm;
import org.mortbay.jetty.webapp.WebAppContext;
public class JettyControl {
// ロギング
private static Logger logger = null;
private org.mortbay.jetty.Server jettyServer;
private JettyControl() {
logger = Logger.getLogger(this.getClass().getName());
initLog4j();
}
public void setJettyServerConf() throws JettyException {
if (jettyServer != null && jettyServer.isRunning()) {
throw new JettyException("Already run Jetty server.");
}
jettyServer = new Server();
org.mortbay.jetty.nio.SelectChannelConnector connector =
new SelectChannelConnector();
connector.setPort(8080);
jettyServer.setConnectors(new Connector[] { connector });
WebAppContext webAppContext = new WebAppContext();
webAppContext.setContextPath("/netjfwatcher");
webAppContext.setWar("webapps/netjfwatcher.war");
HashUserRealm userRealm = new HashUserRealm();
userRealm.setName(./etc/realm.properties);
try {
userRealm.setConfig(jettyConf.getUserRealmPath());
} catch (IOException e1) {
logger.warning("IOException " + e1.getMessage());
throw new JettyException("IOException " + e1.getMessage());
}
jettyServer.setUserRealms(new UserRealm[] { userRealm });
HandlerCollection handlers = new HandlerCollection(); // org.mortbay.jetty.handler.HandlerCollection
handlers.setHandlers(new Handler[] { webAppContext });
jettyServer.setHandler(handlers);
}
public void startJettyServer() throws JettyException {
try {
jettyServer.start();
jettyServer.join();
} catch (FileNotFoundException e) {
logger.warning("FileNotFoundException " + e.getMessage());
throw new JettyException("FileNotFoundException " + e.getMessage());
} catch (Exception e) {
logger.warning("Exception " + e.getMessage());
throw new JettyException("Exception " + e.getMessage());
}
}
public void stopJettyServer() throws JettyException {
try {
jettyServer.stop();
} catch (Exception e) {
logger.warning("Exception " + e.getMessage());
throw new JettyException("Exception " + e.getMessage());
}
}
private void initLog4j() throws FactoryConfigurationError {
// PreferenceStoreから定義ファイル名をとってきて読み込む
BasicConfigurator.configure();
}
/**
* このクラスのインスタンスを返します。
* (内部クラスが保持しているシングルトン・オブジェクトを
* 返します)
*
* @return シングルトン・オブジェクトとしてのこのクラスの
* インスタンス
*/
public static JettyControl getInstance() {
return SingletonResource.RESOURCE;
}
/**
* シングルトン・オブジェクトを保持する内部クラスです。
*
*/
private static class SingletonResource {
static final JettyControl RESOURCE = new JettyControl();
}
public org.mortbay.jetty.Server getJettyServer() {
return jettyServer;
}
}