📄 serverproxyimpl.java
字号:
// ========================================================================// Copyright 2006-2007 Sabre Holdings.// ------------------------------------------------------------------------// Licensed under the Apache License, Version 2.0 (the "License");// you may not use this file except in compliance with the License.// You may obtain a copy of the License at// http://www.apache.org/licenses/LICENSE-2.0// Unless required by applicable law or agreed to in writing, software// distributed under the License is distributed on an "AS IS" BASIS,// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.// See the License for the specific language governing permissions and// limitations under the License.// ========================================================================package org.mortbay.jetty.ant;import java.io.File;import java.io.IOException;import java.net.MalformedURLException;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Map;import org.mortbay.jetty.Connector;import org.mortbay.jetty.Handler;import org.mortbay.jetty.RequestLog;import org.mortbay.jetty.Server;import org.mortbay.jetty.ant.utils.ServerProxy;import org.mortbay.jetty.ant.utils.TaskLog;import org.mortbay.jetty.ant.utils.WebApplicationProxy;import org.mortbay.jetty.handler.ContextHandlerCollection;import org.mortbay.jetty.handler.DefaultHandler;import org.mortbay.jetty.handler.HandlerCollection;import org.mortbay.jetty.handler.RequestLogHandler;import org.mortbay.jetty.security.UserRealm;import org.mortbay.resource.Resource;import org.mortbay.xml.XmlConfiguration;import org.xml.sax.SAXException;/** * A proxy class for interaction with Jetty server object. Used to have some * level of abstraction over standard Jetty classes. * * @author Jakub Pawlowicz */public class ServerProxyImpl implements ServerProxy{ /** Proxied Jetty server object. */ private Server server; /** Collection of context handlers (web application contexts). */ private ContextHandlerCollection contexts; /** Location of jetty.xml file. */ private File jettyXml; /** List of connectors. */ private List connectors; /** Request logger. */ private RequestLog requestLog; /** User realms. */ private List userRealms; /** List of added web applications. */ private Map webApplications = new HashMap(); /** * Default constructor. Creates a new Jetty server with a standard connector * listening on a given port. * * @param userRealmsList * * @param port default connector port number. * @param maxIdleTime default connector maximum idle time of for each * connection. */ public ServerProxyImpl(List connectors, List userRealmsList, RequestLog requestLog, File jettyXml) { server = new Server(); server.setStopAtShutdown(true); this.connectors = connectors; this.userRealms = userRealmsList; this.requestLog = requestLog; this.jettyXml = jettyXml; configure(); } /** * @see org.mortbay.jetty.ant.utils.ServerProxy#addWebApplication(WebApplicationProxy, * int) */ public void addWebApplication(WebApplicationProxy webApp, int scanIntervalSeconds) { webApp.createApplicationContext(contexts); if (scanIntervalSeconds > 0) { webApplications.put(webApp, new Integer(scanIntervalSeconds)); } } /** * Configures Jetty server before adding any web applications to it. */ private void configure() { // Applies external configuration via jetty.xml applyJettyXml(); // Configures connectores for this server instance. Iterator connectorIterator = connectors.iterator(); while (connectorIterator.hasNext()) { Connector jettyConnector = (Connector) connectorIterator.next(); server.addConnector(jettyConnector); } // Configures user realms Iterator realmsIterator = userRealms.iterator(); while (realmsIterator.hasNext()) { UserRealm realm = (UserRealm) realmsIterator.next(); server.addUserRealm(realm); } // Does not cache resources, to prevent Windows from locking files Resource.setDefaultUseCaches(false); // Set default server handlers configureHandlers(); } private void configureHandlers() { RequestLogHandler requestLogHandler = new RequestLogHandler(); if (requestLog != null) { requestLogHandler.setRequestLog(requestLog); } contexts = (ContextHandlerCollection) server .getChildHandlerByClass(ContextHandlerCollection.class); if (contexts == null) { contexts = new ContextHandlerCollection(); HandlerCollection handlers = (HandlerCollection) server .getChildHandlerByClass(HandlerCollection.class); if (handlers == null) { handlers = new HandlerCollection(); server.setHandler(handlers); handlers.setHandlers(new Handler[] { contexts, new DefaultHandler(), requestLogHandler }); } else { handlers.addHandler(contexts); } } } /** * Applies jetty.xml configuration to the Jetty server instance. */ private void applyJettyXml() { if (jettyXml != null && jettyXml.exists()) { TaskLog.log("Configuring jetty from xml configuration file = " + jettyXml.getAbsolutePath()); XmlConfiguration configuration; try { configuration = new XmlConfiguration(jettyXml.toURL()); configuration.configure(server); } catch (MalformedURLException e) { throw new RuntimeException(e); } catch (SAXException e) { throw new RuntimeException(e); } catch (IOException e) { throw new RuntimeException(e); } catch (Exception e) { throw new RuntimeException(e); } } } /** * @see org.mortbay.jetty.ant.utils.ServerProxy#start() */ public void start() { try { server.start(); startScanners(); server.join(); } catch (InterruptedException e) { new RuntimeException(e); } catch (Exception e) { new RuntimeException(e); } } /** * Starts web applications' scanners. */ private void startScanners() { Iterator i = webApplications.keySet().iterator(); while (i.hasNext()) { WebApplicationProxyImpl webApp = (WebApplicationProxyImpl) i.next(); Integer scanIntervalSeconds = (Integer) webApplications.get(webApp); JettyRunTask.startScanner(webApp, scanIntervalSeconds.intValue()); } } /** * @see org.mortbay.jetty.ant.utils.ServerProxy#getProxiedObject() */ public Object getProxiedObject() { return server; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -