001 /* 002 * JBoss, Home of Professional Open Source. 003 * Copyright 2008, Red Hat Middleware LLC, and individual contributors 004 * as indicated by the @author tags. See the copyright.txt file in the 005 * distribution for a full listing of individual contributors. 006 * 007 * This is free software; you can redistribute it and/or modify it 008 * under the terms of the GNU Lesser General Public License as 009 * published by the Free Software Foundation; either version 2.1 of 010 * the License, or (at your option) any later version. 011 * 012 * This software is distributed in the hope that it will be useful, 013 * but WITHOUT ANY WARRANTY; without even the implied warranty of 014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 015 * Lesser General Public License for more details. 016 * 017 * You should have received a copy of the GNU Lesser General Public 018 * License along with this software; if not, write to the Free 019 * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 020 * 02110-1301 USA, or see the FSF site: http://www.fsf.org. 021 */ 022 package org.jboss.dna.repository.services; 023 024 import java.util.concurrent.TimeUnit; 025 import net.jcip.annotations.ThreadSafe; 026 027 /** 028 * Contract defining an administrative interface for controlling the running state of a service. 029 * 030 * @author Randall Hauch 031 */ 032 @ThreadSafe 033 public interface ServiceAdministrator { 034 035 /** 036 * The available states. 037 * 038 * @author Randall Hauch 039 */ 040 public static enum State { 041 STARTED, 042 PAUSED, 043 SHUTDOWN, 044 TERMINATED; 045 } 046 047 /** 048 * Return the current state of this system. 049 * 050 * @return the current state 051 */ 052 public State getState(); 053 054 /** 055 * Set the state of the system. This method does nothing if the desired state matches the current state. 056 * 057 * @param state the desired state 058 * @return this object for method chaining purposes 059 * @see #setState(String) 060 * @see #start() 061 * @see #pause() 062 * @see #shutdown() 063 */ 064 public ServiceAdministrator setState( State state ); 065 066 /** 067 * Set the state of the system. This method does nothing if the desired state matches the current state. 068 * 069 * @param state the desired state in string form 070 * @return this object for method chaining purposes 071 * @throws IllegalArgumentException if the specified state string is null or does not match one of the predefined 072 * {@link State predefined enumerated values} 073 * @see #setState(State) 074 * @see #start() 075 * @see #pause() 076 * @see #shutdown() 077 */ 078 public ServiceAdministrator setState( String state ); 079 080 /** 081 * Start monitoring and sequence the events. This method can be called multiple times, including after the system is 082 * {@link #pause() paused}. However, once the system is {@link #shutdown() shutdown}, it cannot be started or paused. 083 * 084 * @return this object for method chaining purposes 085 * @throws IllegalStateException if called when the system has been {@link #shutdown() shutdown}. 086 * @see #pause() 087 * @see #shutdown() 088 * @see #isStarted() 089 */ 090 public ServiceAdministrator start(); 091 092 /** 093 * Temporarily stop monitoring and sequencing events. This method can be called multiple times, including after the system is 094 * {@link #start() started}. However, once the system is {@link #shutdown() shutdown}, it cannot be started or paused. 095 * 096 * @return this object for method chaining purposes 097 * @throws IllegalStateException if called when the system has been {@link #shutdown() shutdown}. 098 * @see #start() 099 * @see #shutdown() 100 * @see #isPaused() 101 */ 102 public ServiceAdministrator pause(); 103 104 /** 105 * Permanently stop monitoring and sequencing events. This method can be called multiple times, but only the first call has an 106 * effect. Once the system has been shutdown, it may not be {@link #start() restarted} or {@link #pause() paused}. 107 * 108 * @return this object for method chaining purposes 109 * @see #start() 110 * @see #pause() 111 * @see #isShutdown() 112 */ 113 public ServiceAdministrator shutdown(); 114 115 /** 116 * Blocks until the shutdown has completed, or the timeout occurs, or the current thread is interrupted, whichever happens 117 * first. 118 * 119 * @param timeout the maximum time to wait 120 * @param unit the time unit of the timeout argument 121 * @return <tt>true</tt> if this service complete shut down and <tt>false</tt> if the timeout elapsed before it was shut 122 * down completely 123 * @throws InterruptedException if interrupted while waiting 124 */ 125 boolean awaitTermination( long timeout, TimeUnit unit ) throws InterruptedException; 126 127 /** 128 * Return whether this system has been started and is currently running. 129 * 130 * @return true if started and currently running, or false otherwise 131 * @see #start() 132 * @see #pause() 133 * @see #isPaused() 134 * @see #isShutdown() 135 * @see #isTerminated() 136 */ 137 public boolean isStarted(); 138 139 /** 140 * Return whether this system is currently paused. 141 * 142 * @return true if currently paused, or false otherwise 143 * @see #pause() 144 * @see #start() 145 * @see #isStarted() 146 * @see #isShutdown() 147 * @see #isTerminated() 148 */ 149 public boolean isPaused(); 150 151 /** 152 * Return whether this system has been shut down. 153 * 154 * @return true if this service has been shut down, or false otherwise 155 * @see #shutdown() 156 * @see #isPaused() 157 * @see #isStarted() 158 * @see #isTerminated() 159 */ 160 public boolean isShutdown(); 161 162 /** 163 * Return whether this system has finished {@link #shutdown() shutting down}. Note that <code>isTerminated</code> is never 164 * <code>true</code> unless either {@link #shutdown()} was called first. 165 * 166 * @return true if the system has finished shutting down, or false otherwise 167 * @see #shutdown() 168 * @see #isPaused() 169 * @see #isStarted() 170 * @see #isShutdown() 171 */ 172 public boolean isTerminated(); 173 174 }