自定义服务时服务的启动顺序

在实现自定义服务时,我们很可能会依赖其它服务或核心服务,在这种情况下,要求自定义服务的启动必须在依赖服务启动之后。例如我们在ResolverService服务之上实现自己的服务,就是说我们的服务要使用ResolverService来实现自己的功能。
那么在自定义服务的
java 代码
 
  1. public int startApp(String[] args) {  
  2.     // Now that the service is being started, set the ResolverService  
  3.     // object to use handle our queries and send responses.  
  4.     resolver = peerGroup.getResolverService();  
  5.     if(resolver == null) {  
  6.         return Module.START_AGAIN_PROGRESS;  
  7.     }  
  8.     // Add ourselves as a handler using the uniquely constructed  
  9.     // handler name.  
  10.     resolver.registerHandler(handlerName, this);  
  11.     return Module.START_OK;  
  12. }  
通过上述代码判断,如果resolver的值为null,那么说明ResolverService还没有初始化,我们返回 Module.START_AGAIN_PROGRESS,表示我们的服务还需要再次初始化。如果resolver的值不为null,那么说明ResolverService已经初始化,我们返回 Module.START_OK,即可。其它依赖服务与此类似。

下面的Module接口中对几个常量进行了说明,可以看出 Module.START_AGAIN_PROGRESS与 Module. START_AGAIN_STALLED的含义基本相同。

java 代码
 
  1. /* 
  2.  * Copyright (c) 2001-2007 Sun Microsystems, Inc.  All rights reserved. 
  3.  *   
  4.  *  The Sun Project JXTA(TM) Software License 
  5.  *   
  6.  *  Redistribution and use in source and binary forms, with or without  
  7.  *  modification, are permitted provided that the following conditions are met: 
  8.  *   
  9.  *  1. Redistributions of source code must retain the above copyright notice, 
  10.  *     this list of conditions and the following disclaimer. 
  11.  *   
  12.  *  2. Redistributions in binary form must reproduce the above copyright notice,  
  13.  *     this list of conditions and the following disclaimer in the documentation  
  14.  *     and/or other materials provided with the distribution. 
  15.  *   
  16.  *  3. The end-user documentation included with the redistribution, if any, must  
  17.  *     include the following acknowledgment: "This product includes software  
  18.  *     developed by Sun Microsystems, Inc. for JXTA(TM) technology."  
  19.  *     Alternately, this acknowledgment may appear in the software itself, if  
  20.  *     and wherever such third-party acknowledgments normally appear. 
  21.  *   
  22.  *  4. The names "Sun", "Sun Microsystems, Inc.", "JXTA" and "Project JXTA" must  
  23.  *     not be used to endorse or promote products derived from this software  
  24.  *     without prior written permission. For written permission, please contact  
  25.  *     Project JXTA at http://www.jxta.org. 
  26.  *   
  27.  *  5. Products derived from this software may not be called "JXTA", nor may  
  28.  *     "JXTA" appear in their name, without prior written permission of Sun. 
  29.  *   
  30.  *  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, 
  31.  *  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND  
  32.  *  FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SUN  
  33.  *  MICROSYSTEMS OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,  
  34.  *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT  
  35.  *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,  
  36.  *  OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF  
  37.  *  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING  
  38.  *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,  
  39.  *  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
  40.  *   
  41.  *  JXTA is a registered trademark of Sun Microsystems, Inc. in the United  
  42.  *  States and other countries. 
  43.  *   
  44.  *  Please see the license information page at : 
  45.  *  <http://www.jxta.org/project/www/license.html> for instructions on use of  
  46.  *  the license in source files. 
  47.  *   
  48.  *  ==================================================================== 
  49.  *   
  50.  *  This software consists of voluntary contributions made by many individuals  
  51.  *  on behalf of Project JXTA. For more information on Project JXTA, please see  
  52.  *  http://www.jxta.org. 
  53.  *   
  54.  *  This license is based on the BSD license adopted by the Apache Foundation.  
  55.  */  
  56.   
  57. package net.jxta.platform;  
  58.   
  59.   
  60. import net.jxta.peergroup.PeerGroup;  
  61. import net.jxta.document.Advertisement;  
  62. import net.jxta.id.ID;  
  63. import net.jxta.exception.PeerGroupException;  
  64.   
  65.   
  66. /** 
  67.  * Defines the interface for modules loaded by PeerGroups. Message transports, 
  68.  * services and applications need to implement this interface if they are 
  69.  * to be loaded and started by a PeerGroup. Service and Application extend 
  70.  * Module, PeerGroup implements Service and ShellApp implements Application, as 
  71.  * a result both implement Module. 
  72.  * 
  73.  * <p/>Jxta Modules are given their initialization parameters via the init() 
  74.  * method rather than a non-default constructor. 
  75.  * 
  76.  * <p/>Modules are passed the peer group within which they are created. 
  77.  * From the peergroup object, Modules can access all the peer group 
  78.  * services. The PeerGroup within which a PeerGroup runs is known as its 
  79.  * parent. 
  80.  * 
  81.  * <p/>The initial root peer group is known as the World Peer Group and is 
  82.  * implemented by an object of class Platform, a subclass of PeerGroup. 
  83.  * The "parent" PeerGroup of the World Peer Group is null. 
  84.  * 
  85.  * @see net.jxta.protocol.ModuleImplAdvertisement 
  86.  * @see net.jxta.platform.ModuleClassID 
  87.  * @see net.jxta.peergroup.PeerGroup 
  88.  * @see net.jxta.document.Advertisement 
  89.  * @see net.jxta.id.ID 
  90.  * @see net.jxta.platform.Application 
  91.  * @see net.jxta.service.Service 
  92.  **/  
  93. public interface Module {  
  94.       
  95.     /** 
  96.      * <code>startApp()</code> completed successfully. This module claims to now 
  97.      * be fully functional and no further invocation of startApp is required. 
  98.      **/  
  99.     public static final int START_OK = 0;  
  100.       
  101.     /** 
  102.      * This is to be used mostly by co-dependent services when started as 
  103.      * a set (such as {@link PeerGroup} services) so that their 
  104.      * <code>startApp()</code> method may be invoked multiple times. 
  105.      * 
  106.      * <p/>This value indicates that startApp must be retried later in order for 
  107.      * this module to become fully functional. However, some progress in 
  108.      * functionality was accomplished. 
  109.      * 
  110.      * <p/>This is a strong indication that some other modules may be able 
  111.      * to advance or complete their initialization if their 
  112.      * <code>startApp()</code> method is invoked again. 
  113.      * 
  114.      * <p/>The distinction between START_AGAIN_STALLED and START_AGAIN_PROGRESS 
  115.      * is only a hint. Each module makes an arbitrary judgment in this 
  116.      * respect. It is up to the invoker of startApp to ensure that the 
  117.      * starting of a set of modules eventually succeeds or fails. 
  118.      **/  
  119.     public static final int START_AGAIN_PROGRESS = 1;  
  120.       
  121.     /** 
  122.      * This is to be used mostly by co-dependent services when started as 
  123.      * a set (such as {@link PeerGroup} services) so that their startApp 
  124.      * method may be invoked multiple times. 
  125.      * 
  126.      * <p/>This value indicates that startApp must be retried later in order for 
  127.      * this module to become fully functional. However, some progress in 
  128.      * functionality was accomplished. 
  129.      * 
  130.      * <p/>If all modules in a set return this value, it is a strong indication 
  131.      * that the modules co-dependency is such that it prevents them 
  132.      * collectively from starting. 
  133.      * 
  134.      * <p/>The distinction between START_AGAIN_STALLED and START_AGAIN_PROGRESS 
  135.      * is only a hint. Each module makes an arbitrary judgment in this 
  136.      * respect. It is up to the invoker of startApp to ensure that the 
  137.      * starting of a set of modules eventually succeeds or fails. 
  138.      **/  
  139.     public static final int START_AGAIN_STALLED = 2;  
  140.           
  141.     /** 
  142.      * This return result is used to indicate that the module refuses to start 
  143.      * because it has been configured to be disabled or otherwise cannot run 
  144.      * (missing hardware, missing system resources, etc.) The module will not be 
  145.      * functional and should be discarded but the failure to load may be ignored  
  146.      * by the loader at it's discretion. 
  147.      */  
  148.     public static final int START_DISABLED = Integer.MIN_VALUE + 100;  
  149.       
  150.     /** 
  151.      * Initialize the module, passing it its peer group and advertisement. 
  152.      * 
  153.      * <p/>Note: when subclassing one of the existing PeerGroup implementations 
  154.      * (which implement Module), it may not be recommended to overload the init 
  155.      * method. See the documentation of the PeerGroup class being subclassed. 
  156.      * 
  157.      *  @param group The PeerGroup from which this Module can obtain services. 
  158.      *  If this module is a Service, this is also the PeerGroup of which this 
  159.      *  module is a service. 
  160.      * 
  161.      *  @param assignedID Identity of Module within group. 
  162.      *  modules can use it as a the root of their namespace to create 
  163.      *  names that are unique within the group but predictable by the 
  164.      *  same module on another peer. This is normally the ModuleClassID 
  165.      *  which is also the name under which the module is known by other 
  166.      *  modules. For a group it is the PeerGroupID itself. 
  167.      *  The parameters of a service, in the Peer configuration, are indexed 
  168.      *  by the assignedID of that service, and a Service must publish its 
  169.      *  run-time parameters in the Peer Advertisement under its assigned ID. 
  170.      * 
  171.      *  @param implAdv The implementation advertisement for this 
  172.      *  Module. It is permissible to pass null if no implementation 
  173.      *  advertisement is available. This may happen if the 
  174.      *  implementation was selected by explicit class name rather than 
  175.      *  by following an implementation advertisement. Modules are not 
  176.      *  required to support that style of loading, but if they do, then 
  177.      *  their documentation should mention it. 
  178.      * 
  179.      *  @exception PeerGroupException This module failed to initialize. 
  180.      **/  
  181.     public void init(PeerGroup group, ID assignedID, Advertisement implAdv) throws PeerGroupException;  
  182.       
  183.     /** 
  184.      * Complete any remaining initialization of the module. The module should 
  185.      * be fully functional after <code>startApp()</code> is completed. That is 
  186.      * also the opportunity to supply arbitrary arguments (mostly to 
  187.      * applications). 
  188.      * 
  189.      * <p/>If this module is a {@link PeerGroup} service, it may be invoked 
  190.      * several times depending on its return value. 
  191.      * 
  192.      * @param args An array of Strings forming the parameters for this 
  193.      * Module. 
  194.      * 
  195.      * @return int A status indication which may be one of 
  196.      * {@link #START_OK}, {@link #START_AGAIN_PROGRESS}, 
  197.      * {@link #START_AGAIN_STALLED}, which indicates partial or complete 
  198.      * success, or any other value (negative values are 
  199.      * recommended for future compatibility), which indicates failure. 
  200.      **/  
  201.     public int startApp(String[] args);  
  202.       
  203.     /** 
  204.      *  Stop a module. This may be called any time after <code>init()</code> 
  205.      *  completes and should not assume that <code>startApp()</code> has been 
  206.      *  called or completed. 
  207.      * 
  208.      *  <p/>The Module cannot be forced to comply, but in the future 
  209.      *  we might be able to deny it access to anything after some timeout. 
  210.      **/  
  211.     public void stopApp();  
  212. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值