Embedded Jetty



-------------------------------------------------------------------------------------------------
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; } }


<TOP>