⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 abstractjamesservice.java

📁 java mail,java mailjava mailjava mailjava mail
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/**************************************************************** * Licensed to the Apache Software Foundation (ASF) under one   * * or more contributor license agreements.  See the NOTICE file * * distributed with this work for additional information        * * regarding copyright ownership.  The ASF licenses this file   * * to you 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.apache.james.core;import org.apache.avalon.framework.activity.Disposable;import org.apache.avalon.framework.activity.Initializable;import org.apache.avalon.framework.configuration.Configurable;import org.apache.avalon.framework.configuration.Configuration;import org.apache.avalon.framework.configuration.ConfigurationException;import org.apache.avalon.framework.logger.LogEnabled;import org.apache.avalon.framework.service.ServiceException;import org.apache.avalon.framework.service.ServiceManager;import org.apache.avalon.framework.service.Serviceable;import org.apache.excalibur.thread.ThreadPool;import org.apache.avalon.cornerstone.services.threads.ThreadManager;import org.apache.avalon.cornerstone.services.connection.AbstractHandlerFactory;import org.apache.avalon.cornerstone.services.connection.ConnectionHandler;import org.apache.avalon.cornerstone.services.connection.ConnectionHandlerFactory;import org.apache.avalon.cornerstone.services.sockets.ServerSocketFactory;import org.apache.avalon.cornerstone.services.sockets.SocketManager;import org.apache.james.services.JamesConnectionManager;import org.apache.james.util.watchdog.ThreadPerWatchdogFactory;import org.apache.james.util.watchdog.WatchdogFactory;import java.net.InetAddress;import java.net.ServerSocket;import java.net.UnknownHostException;/** * Server which creates connection handlers. All new James service must * inherit from this abstract implementation. * */public abstract class AbstractJamesService extends AbstractHandlerFactory    implements Serviceable, Configurable, Disposable, Initializable, ConnectionHandlerFactory {    /**     * The default value for the connection timeout.     */    protected static final int DEFAULT_TIMEOUT = 5* 60 * 1000;    /**     * The name of the parameter defining the connection timeout.     */    protected static final String TIMEOUT_NAME = "connectiontimeout";    /**     * The default value for the connection backlog.     */    protected static final int DEFAULT_BACKLOG = 5;    /**     * The name of the parameter defining the connection backlog.     */    protected static final String BACKLOG_NAME = "connectionBacklog";    /**     * The name of the parameter defining the service hello name.     */    public static final String HELLO_NAME = "helloName";    /**     * The ConnectionManager that spawns and manages service connections.     */    private JamesConnectionManager connectionManager;    /**     * The name of the thread group to be used by this service for      * generating connections     */    protected String threadGroup;    /**     * The thread pool used by this service that holds the threads     * that service the client connections.     */    protected ThreadPool threadPool = null;    /**     * The server socket type used to generate connections for this server.     */    protected String serverSocketType = "plain";    /**     * The port on which this service will be made available.     */    protected int port = -1;    /**     * Network interface to which the service will bind.  If not set,     * the server binds to all available interfaces.     */    protected InetAddress bindTo = null;    /*     * The server socket associated with this service     */    protected ServerSocket serverSocket;    /**     * The name of the connection used by this service.  We need to     * track this so we can tell the ConnectionManager which service     * to disconnect upon shutdown.     */    protected String connectionName;    /**     * The maximum number of connections allowed for this service.     */    protected Integer connectionLimit;    /**     * The connection idle timeout.  Used primarily to prevent server     * problems from hanging a connection.     */    protected int timeout;    /**     * The connection backlog.     */    protected int backlog;    /**     * The hello name for the service.     */    protected String helloName;    /**     * The component manager used by this service.     */    private ServiceManager compMgr;    /**     * Whether this service is enabled.     */    private volatile boolean enabled;    /**     * Flag holding the disposed state of the component.     */    private boolean m_disposed = false;    /**     * @see org.apache.avalon.framework.service.Serviceable#service(ServiceManager)     */    public void service(ServiceManager comp) throws ServiceException {        super.service( comp );        compMgr               = comp;        connectionManager =            (JamesConnectionManager)compMgr.lookup(JamesConnectionManager.ROLE);    }    /**     * @see org.apache.avalon.framework.configuration.Configurable#configure(Configuration)     */    public void configure(Configuration conf) throws ConfigurationException {        enabled = conf.getAttributeAsBoolean("enabled", true);        if (!enabled) {          getLogger().info(getServiceType() + " disabled by configuration");          return;        }        Configuration handlerConfiguration = conf.getChild("handler");        // Send the handler subconfiguration to the super class.  This         // ensures that the handler config is passed to the handlers.        //        // TODO: This should be rationalized.  The handler element of the        //       server configuration doesn't really make a whole lot of         //       sense.  We should modify the config to get rid of it.        //       Keeping it for now to maintain backwards compatibility.        super.configure(handlerConfiguration);        port = conf.getChild("port").getValueAsInteger(getDefaultPort());        Configuration serverSocketTypeConf = conf.getChild("serverSocketType", false);        String confSocketType = null;        if (serverSocketTypeConf != null ) {            confSocketType = serverSocketTypeConf.getValue();        }        if (confSocketType == null) {            // Only load the useTLS parameter if a specific socket type has not            // been specified.  This maintains backwards compatibility while            // allowing us to have more complex (i.e. multiple SSL configuration)            // deployments            final boolean useTLS = conf.getChild("useTLS").getValueAsBoolean(isDefaultTLSEnabled());            if (useTLS) {              serverSocketType = "ssl";            }        } else {            serverSocketType = confSocketType;        }        StringBuffer infoBuffer;        threadGroup = conf.getChild("threadGroup").getValue(null);        if (threadGroup != null) {            infoBuffer =                new StringBuffer(64)                        .append(getServiceType())                        .append(" uses thread group: ")                        .append(threadGroup);            getLogger().info(infoBuffer.toString());        }        else {            getLogger().info(getServiceType() + " uses default thread group.");        }        try {            final String bindAddress = conf.getChild("bind").getValue(null);            if( null != bindAddress ) {                bindTo = InetAddress.getByName(bindAddress);                infoBuffer =                    new StringBuffer(64)                            .append(getServiceType())                            .append(" bound to: ")                            .append(bindTo);                getLogger().info(infoBuffer.toString());            }        }        catch( final UnknownHostException unhe ) {            throw new ConfigurationException( "Malformed bind parameter in configuration of service " + getServiceType(), unhe );        }        String hostName = null;        try {            hostName = InetAddress.getLocalHost().getHostName();        } catch (UnknownHostException ue) {            hostName = "localhost";        }        infoBuffer =            new StringBuffer(64)                    .append(getServiceType())                    .append(" is running on: ")                    .append(hostName);        getLogger().info(infoBuffer.toString());        Configuration helloConf = handlerConfiguration.getChild(HELLO_NAME);        boolean autodetect = helloConf.getAttributeAsBoolean("autodetect", true);        if (autodetect) {            helloName = hostName;        } else {            helloName = helloConf.getValue("localhost");        }        infoBuffer =            new StringBuffer(64)                    .append(getServiceType())                    .append(" handler hello name is: ")                    .append(helloName);        getLogger().info(infoBuffer.toString());

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -