📄 module.java
字号:
/* * Copyright (c) 2001 Sun Microsystems, Inc. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, * if any, must include the following acknowledgment: * "This product includes software developed by the * Sun Microsystems, Inc. for Project JXTA." * Alternately, this acknowledgment may appear in the software itself, * if and wherever such third-party acknowledgments normally appear. * * 4. The names "Sun", "Sun Microsystems, Inc.", "JXTA" and "Project JXTA" must * not be used to endorse or promote products derived from this * software without prior written permission. For written * permission, please contact Project JXTA at http://www.jxta.org. * * 5. Products derived from this software may not be called "JXTA", * nor may "JXTA" appear in their name, without prior written * permission of Sun. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL SUN MICROSYSTEMS OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of Project JXTA. For more * information on Project JXTA, please see * <http://www.jxta.org/>. * * This license is based on the BSD license adopted by the Apache Foundation. * * $Id: Module.java,v 1.10 2004/10/29 19:29:32 bondolo Exp $ */package net.jxta.platform;import net.jxta.peergroup.PeerGroup;import net.jxta.document.Advertisement;import net.jxta.id.ID;import net.jxta.exception.PeerGroupException;/** * Defines the interface for modules loaded by PeerGroups. Message transports, * services and applications need to implement this interface if they are * to be loaed and started by a PeerGroup. Service and Application extend * Module, PeerGroup implements Service and ShellApp implements Application, as * a result both implement Module. * * <p/>Jxta Modules are given their initialization parameters via the init() * method rather than a non-default constructor. * * <p/>Modules are passed the peer group within which they are created. * From the peergroup object, Modules can acccess all the peer group * services. The PeerGroup within which a PeerGroup runs is known as its * parent. * * <p/>The initial root peer group is known as the World Peer Group and is * implemented by an object of class Platform, a subclass of PeerGroup. * The "parent" PeerGroup of the World Peer Group is null. * * @see net.jxta.protocol.ModuleImplAdvertisement * @see net.jxta.platform.ModuleClassID * @see net.jxta.peergroup.PeerGroup * @see net.jxta.document.Advertisement * @see net.jxta.id.ID * @see net.jxta.platform.Application * @see net.jxta.service.Service **/public interface Module { /** * <code>startApp()</code> completed successfully. This module claims to now * be fully functional and no further invocation of startApp is required. **/ public static final int START_OK = 0; /** * This is to be used mostly by co-dependent services when started as * a set (such as {@link PeerGroup} services) so that their * <code>startApp()</code> method may be invoked multiple times. * * <p/>This value indicates that startApp must be retried later in order for * this module to become fully functional. However, some progress in * functionality was accomplished. * * <p/>This is a strong indication that some other modules may be able * to advance or complete their initialization if their * <code>startApp()</code> method is invoked again. * * <p/>The distinction between START_AGAIN_STALLED and START_AGAIN_PROGRESS * is only a hint. Each module makes an arbitrary judgement in this * respect. It is up to the invoker of startApp to ensure that the * starting of a set of modules eventualy succeeds or fails. **/ public static final int START_AGAIN_PROGRESS = 1; /** * This is to be used mostly by co-dependent services when started as * a set (such as {@link PeerGroup} services) so that their startApp * method may be invoked multiple times. * * <p/>This value indicates that startApp must be retried later in order for * this module to become fully functional. However, some progress in * functionality was accomplished. * * <p/>If all modules in a set return this value, it is a strong indication * that the modules co-dependency is such that it prevents them * collectively from starting. * * <p/>The distinction between START_AGAIN_STALLED and START_AGAIN_PROGRESS * is only a hint. Each module makes an arbitrary judgement in this * respect. It is up to the invoker of startApp to ensure that the * starting of a set of modules eventualy succeeds or fails. **/ public static final int START_AGAIN_STALLED = 2; /** * Initialize the module, passing it its peer group and advertisement. * * <p/>Note: when subclassing one of the existing PeerGroup implementations * (which implement Module), it may not be recommended to overload the init * method. See the documentation of the PeerGroup class being subclassed. * * @param group The PeerGroup from which this Module can obtain services. * If this module is a Service, this is also the PeerGroup of which this * module is a service. * * @param assignedID Identity of Module within group. * modules can use it as a the root of their namespace to create * names that are unique within the group but predictible by the * same module on another peer. This is normaly the ModuleClassID * which is also the name under which the module is known by other * modules. For a group it is the PeerGroupID itself. * The parameters of a service, in the Peer configuration, are indexed * by the assignedID of that service, and a Service must publish its * run-time parameters in the Peer Advertisement under its assigned ID. * * @param implAdv The implementation advertisement for this * Module. It is permissible to pass null if no implementation * advertisement is available. This may happen if the * implementation was selected by explicit class name rather than * by following an implementation advertisement. Modules are not * required to support that style of loading, but if they do, then * their documentation should mention it. * * @exception PeerGroupException This module failed to initialize. **/ public void init(PeerGroup group, ID assignedID, Advertisement implAdv) throws PeerGroupException; /** * Complete any remaining initialization of the module. The module should * be fully functional after <code>startApp()</code> is completed. That is * also the opportunity to supply arbitrary arguments (mostly to * applications). * * <p/>If this module is a {@link PeerGroup} service, it may be invoked * several times depending on its return value. * * @param args An array of Strings forming the parameters for this * Module. * * @return int A status indication which may be one of * {@link #START_OK}, {@link #START_AGAIN_PROGRESS}, * {@link #START_AGAIN_STALLED}, which indicates partial or complete * success, or any other value (negative values are * recommended for future compatibility), which indicates failure. **/ public int startApp(String[] args); /** * Stop a module. This may be called any time after <code>init()</code> * completes and should not assume that <code>startApp()</code> has been * called or completed. * * <p/>The Module cannot be forced to comply, but in the future * we might be able to deny it access to anything after some timeout. **/ public void stopApp();}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -