001 /** 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017 package org.apache.geronimo.kernel; 018 019 import java.util.Date; 020 import java.util.Set; 021 import java.util.Collections; 022 import javax.management.ObjectName; 023 024 import org.apache.geronimo.gbean.GBeanData; 025 import org.apache.geronimo.gbean.GBeanInfo; 026 import org.apache.geronimo.gbean.AbstractNameQuery; 027 import org.apache.geronimo.gbean.AbstractName; 028 import org.apache.geronimo.kernel.lifecycle.LifecycleMonitor; 029 import org.apache.geronimo.kernel.proxy.ProxyManager; 030 import org.apache.geronimo.kernel.repository.Artifact; 031 032 /** 033 * @version $Rev:386515 $ $Date: 2008-10-21 14:44:05 +0000 (Tue, 21 Oct 2008) $ 034 */ 035 public interface Kernel { 036 /** 037 * The JMX name used by a Kernel to register itself when it boots. 038 */ 039 ObjectName KERNEL = ObjectNameUtil.getObjectName(":role=Kernel"); 040 AbstractName KERNEL_NAME = new AbstractName(new Artifact("geronimo", "boot", "none", "car"), Collections.singletonMap("role", "kernel"), KERNEL); 041 042 /** 043 * Get the name of this kernel 044 * 045 * @return the name of this kernel 046 */ 047 String getKernelName(); 048 049 /** 050 * Gets the naming system used by this kernel. 051 * @return the naming system used by this kernel 052 */ 053 Naming getNaming(); 054 055 /** 056 * Gets the dependency manager kernel service 057 * @return the dependency manager or null if the kernel is not running 058 */ 059 DependencyManager getDependencyManager(); 060 061 /** 062 * Gets the lifecycle monitor kernel service 063 * @return the lifecycle monitor or null if the kernel is not running 064 */ 065 LifecycleMonitor getLifecycleMonitor(); 066 067 /** 068 * Gets the proxy manager kernel service 069 * @return the proxy manager or null if the kernel is not running 070 */ 071 ProxyManager getProxyManager(); 072 073 /** 074 * Load a specific GBean into this kernel. 075 * This is intended for applications that are embedding the kernel. 076 * 077 * @param gbeanData the GBean to load 078 * @param classLoader the class loader to use to load the gbean 079 * @throws org.apache.geronimo.kernel.GBeanAlreadyExistsException if the name is already used 080 * @throws org.apache.geronimo.kernel.InternalKernelException if there is a problem during registration 081 */ 082 void loadGBean(GBeanData gbeanData, ClassLoader classLoader) throws GBeanAlreadyExistsException, InternalKernelException; 083 084 /** 085 * Is there a GBean registered with the kernel under the specified name? 086 * @param name the name to check 087 * @return true if there is a gbean registered under the specified name; false otherwise 088 */ 089 boolean isLoaded(AbstractName name); 090 boolean isLoaded(String shortName); 091 boolean isLoaded(Class type); 092 boolean isLoaded(String shortName, Class type); 093 094 /** 095 * Gets the specified GBean instance. 096 * 097 * @param name the GBean instance to get 098 * @throws org.apache.geronimo.kernel.GBeanNotFoundException if the GBean could not be found 099 * @throws InternalKernelException if there is a general error 100 * @throws IllegalStateException If the gbean is disabled 101 */ 102 Object getGBean(AbstractName name) throws GBeanNotFoundException, InternalKernelException, IllegalStateException; 103 Object getGBean(String shortName) throws GBeanNotFoundException, InternalKernelException, IllegalStateException; 104 Object getGBean(Class type) throws GBeanNotFoundException, InternalKernelException, IllegalStateException; 105 Object getGBean(String shortName, Class type) throws GBeanNotFoundException, InternalKernelException, IllegalStateException; 106 107 /** 108 * Start a specific GBean. 109 * 110 * @param name the GBean to start 111 * @throws org.apache.geronimo.kernel.GBeanNotFoundException if the GBean could not be found 112 * @throws InternalKernelException if there GBean is not state manageable or if there is a general error 113 * @throws IllegalStateException If the gbean is disabled 114 */ 115 void startGBean(AbstractName name) throws GBeanNotFoundException, InternalKernelException, IllegalStateException; 116 void startGBean(String shortName) throws GBeanNotFoundException, InternalKernelException, IllegalStateException; 117 void startGBean(Class type) throws GBeanNotFoundException, InternalKernelException, IllegalStateException; 118 void startGBean(String shortName, Class type) throws GBeanNotFoundException, InternalKernelException, IllegalStateException; 119 120 /** 121 * Start a specific GBean and its children. 122 * 123 * @param name the GBean to start 124 * @throws GBeanNotFoundException if the GBean could not be found 125 * @throws InternalKernelException if there GBean is not state manageable or if there is a general error 126 * @throws IllegalStateException If the gbean is disabled 127 */ 128 void startRecursiveGBean(AbstractName name) throws GBeanNotFoundException, InternalKernelException, IllegalStateException; 129 void startRecursiveGBean(String shortName) throws GBeanNotFoundException, InternalKernelException, IllegalStateException; 130 void startRecursiveGBean(Class type) throws GBeanNotFoundException, InternalKernelException, IllegalStateException; 131 void startRecursiveGBean(String shortName, Class type) throws GBeanNotFoundException, InternalKernelException, IllegalStateException; 132 133 /** 134 * Is there a GBean registered with the kernel under the specified name and is it running? 135 * @param name the name to check 136 * @return true if there is a gbean registered under the specified name and is it running; false otherwise 137 */ 138 boolean isRunning(AbstractName name); 139 boolean isRunning(String shortName); 140 boolean isRunning(Class type); 141 boolean isRunning(String shortName, Class type); 142 143 /** 144 * Stop a specific GBean. 145 * 146 * @param name the GBean to stop 147 * @throws GBeanNotFoundException if the GBean could not be found 148 * @throws InternalKernelException if there GBean is not state manageable or if there is a general error 149 * @throws IllegalStateException If the gbean is disabled 150 */ 151 void stopGBean(AbstractName name) throws GBeanNotFoundException, InternalKernelException, IllegalStateException; 152 void stopGBean(String shortName) throws GBeanNotFoundException, InternalKernelException, IllegalStateException; 153 void stopGBean(Class type) throws GBeanNotFoundException, InternalKernelException, IllegalStateException; 154 void stopGBean(String shortName, Class type) throws GBeanNotFoundException, InternalKernelException, IllegalStateException; 155 156 /** 157 * Unload a specific GBean. 158 * This is intended for applications that are embedding the kernel. 159 * 160 * @param name the name of the GBean to unregister 161 * @throws GBeanNotFoundException if the GBean could not be found 162 * @throws InternalKernelException if there GBean is a problem while unloading the GBean 163 */ 164 void unloadGBean(AbstractName name) throws GBeanNotFoundException, InternalKernelException, IllegalStateException; 165 void unloadGBean(String shortName) throws GBeanNotFoundException, InternalKernelException, IllegalStateException; 166 void unloadGBean(Class type) throws GBeanNotFoundException, InternalKernelException, IllegalStateException; 167 void unloadGBean(String shortName, Class type) throws GBeanNotFoundException, InternalKernelException, IllegalStateException; 168 169 /** 170 * Gets the state of the specified GBean. 171 * @param name the name of the GBean 172 * @return the state of the GBean 173 * @throws GBeanNotFoundException if the GBean could not be found 174 */ 175 int getGBeanState(AbstractName name) throws GBeanNotFoundException; 176 int getGBeanState(String shortName) throws GBeanNotFoundException; 177 int getGBeanState(Class type) throws GBeanNotFoundException; 178 int getGBeanState(String shortName, Class type) throws GBeanNotFoundException; 179 180 /** 181 * Gets the time the specified GBean was started 182 * @param name the name of the GBean 183 * @return the start time of the GBean or 0 if not running 184 * @throws GBeanNotFoundException if the GBean could not be found 185 */ 186 long getGBeanStartTime(AbstractName name) throws GBeanNotFoundException; 187 long getGBeanStartTime(String shortName) throws GBeanNotFoundException; 188 long getGBeanStartTime(Class type) throws GBeanNotFoundException; 189 long getGBeanStartTime(String shortName, Class type) throws GBeanNotFoundException; 190 191 /** 192 * Gets the ClassLoader used to register the specified GBean 193 * @param name the name of the gbean from which the class loader should be extracted 194 * @return the class loader associated with the specified GBean 195 * @throws GBeanNotFoundException if the specified GBean is not registered with the kernel 196 */ 197 ClassLoader getClassLoaderFor(AbstractName name) throws GBeanNotFoundException; 198 ClassLoader getClassLoaderFor(String shortName) throws GBeanNotFoundException; 199 ClassLoader getClassLoaderFor(Class type) throws GBeanNotFoundException; 200 ClassLoader getClassLoaderFor(String shortName, Class type) throws GBeanNotFoundException; 201 202 /** 203 * Return the GBeanInfo for a registered GBean instance. 204 * @param name the name of the GBean whose info should be returned 205 * @return the info for that instance 206 * @throws GBeanNotFoundException if there is no instance with the supplied name 207 */ 208 GBeanInfo getGBeanInfo(AbstractName name) throws GBeanNotFoundException; 209 GBeanInfo getGBeanInfo(String shortName) throws GBeanNotFoundException; 210 GBeanInfo getGBeanInfo(Class type) throws GBeanNotFoundException; 211 GBeanInfo getGBeanInfo(String shortName, Class type) throws GBeanNotFoundException; 212 213 /** 214 * Return the GBeanData for a GBean instance. 215 * @param name the name of the GBean whose info should be returned 216 * @return the info for that instance 217 * @throws GBeanNotFoundException if there is no instance with the supplied name 218 */ 219 GBeanData getGBeanData(AbstractName name) throws GBeanNotFoundException, InternalKernelException; 220 GBeanData getGBeanData(String shortName) throws GBeanNotFoundException, InternalKernelException; 221 GBeanData getGBeanData(Class type) throws GBeanNotFoundException, InternalKernelException; 222 GBeanData getGBeanData(String shortName, Class type) throws GBeanNotFoundException, InternalKernelException; 223 224 /** 225 * Gets the AbstractNames of all GBeans matching the abstractNameQuery. 226 * @param abstractNameQuery the query to execute 227 * @return the AbstractNames of all matching GBeans 228 */ 229 Set listGBeans(AbstractNameQuery abstractNameQuery); 230 231 /** 232 * Returns a Set of all GBeans matching the set of object name pattern 233 * @param abstractNameQueries the queries to execute 234 * @return a List of AbstractNameName of matching GBeans registered with this kernel 235 */ 236 Set listGBeans(Set abstractNameQueries); 237 238 /** 239 * Gets the value of an attribute on the specified gbean 240 * @param name the name of the gbean from which the attribute will be retrieved 241 * @param attributeName the name of the attribute to fetch 242 * @return the value of the attribute 243 * @throws GBeanNotFoundException if there is not a gbean under the specified name 244 * @throws NoSuchAttributeException if the gbean does not contain the specified attribute 245 * @throws Exception if the gbean throws an exception from the getter 246 */ 247 Object getAttribute(AbstractName name, String attributeName) throws GBeanNotFoundException, NoSuchAttributeException, Exception; 248 Object getAttribute(String shortName, String attributeName) throws GBeanNotFoundException, NoSuchAttributeException, Exception; 249 Object getAttribute(Class type, String attributeName) throws GBeanNotFoundException, NoSuchAttributeException, Exception; 250 Object getAttribute(String shortName, Class type, String attributeName) throws GBeanNotFoundException, NoSuchAttributeException, Exception; 251 252 /** 253 * Sets the value of an attribute on the specified gbean 254 * @param name the name of the gbean from in which the new attribute value will be set 255 * @param attributeName the name of the attribute to set 256 * @param attributeValue the new value of the attribute 257 * @throws GBeanNotFoundException if there is not a gbean under the specified name 258 * @throws NoSuchAttributeException if the gbean does not contain the specified attribute 259 * @throws Exception if the gbean throws an exception from the setter 260 */ 261 void setAttribute(AbstractName name, String attributeName, Object attributeValue) throws GBeanNotFoundException, NoSuchAttributeException, Exception; 262 void setAttribute(String shortName, String attributeName, Object attributeValue) throws GBeanNotFoundException, NoSuchAttributeException, Exception; 263 void setAttribute(Class type, String attributeName, Object attributeValue) throws GBeanNotFoundException, NoSuchAttributeException, Exception; 264 void setAttribute(String shortName, Class type, String attributeName, Object attributeValue) throws GBeanNotFoundException, NoSuchAttributeException, Exception; 265 266 /** 267 * Invokes a no-argument method on the specified GBean 268 * @param name the name of the gbean from in which the new attribute value will be set 269 * @param methodName the name of the method to invoke 270 * @return the return value of the method or null if the specified method does not return a value 271 * @throws GBeanNotFoundException if there is not a gbean under the specified name 272 * @throws NoSuchOperationException if the gbean does not have the specified operation 273 * @throws InternalKernelException if an error occurs within the kernel itself 274 * @throws Exception if the method throws an exception 275 */ 276 Object invoke(AbstractName name, String methodName) throws GBeanNotFoundException, NoSuchOperationException, InternalKernelException, Exception; 277 Object invoke(String shortName, String methodName) throws GBeanNotFoundException, NoSuchOperationException, InternalKernelException, Exception; 278 Object invoke(Class type, String methodName) throws GBeanNotFoundException, NoSuchOperationException, InternalKernelException, Exception; 279 Object invoke(String shortName, Class type, String methodName) throws GBeanNotFoundException, NoSuchOperationException, InternalKernelException, Exception; 280 281 /** 282 * Invokes a method on the specified GBean with the specified arguments 283 * @param name the name of the gbean from in which the new attribute value will be set 284 * @param methodName the name of the method to invoke 285 * @param args the arguments to pass to the method 286 * @param types the types of the arguments; the types are used to determine the signature of the mehod that should be invoked 287 * @return the return value of the method or null if the specified method does not return a value 288 * @throws GBeanNotFoundException if there is not a gbean under the specified name 289 * @throws NoSuchOperationException if the gbean does not have the specified operation 290 * @throws InternalKernelException if an error occurs within the kernel itself 291 * @throws Exception if the method throws an exception 292 */ 293 Object invoke(AbstractName name, String methodName, Object[] args, String[] types) throws GBeanNotFoundException, NoSuchOperationException, InternalKernelException, Exception; 294 Object invoke(String shortName, String methodName, Object[] args, String[] types) throws GBeanNotFoundException, NoSuchOperationException, InternalKernelException, Exception; 295 Object invoke(Class type, String methodName, Object[] args, String[] types) throws GBeanNotFoundException, NoSuchOperationException, InternalKernelException, Exception; 296 Object invoke(String shortName, Class type, String methodName, Object[] args, String[] types) throws GBeanNotFoundException, NoSuchOperationException, InternalKernelException, Exception; 297 298 /** 299 * Assuming the argument represents a service running in the kernel, 300 * returns an AbstractName for it. If the argument is not a service or the 301 * kernel cannot produce an AbstractName for it, returns null. 302 */ 303 AbstractName getAbstractNameFor(Object service); 304 305 /** 306 * Assuming the argument represents a service running in the kernel, 307 * returns the short name of the service. If the argument is not a service, returns null. 308 */ 309 String getShortNameFor(Object service); 310 311 /** 312 * Brings the kernel online 313 * @throws Exception if the kernel can not boot 314 */ 315 void boot() throws Exception; 316 317 /** 318 * Returns the time this kernel was last booted. 319 * @return the time this kernel was last booted; null if the kernel has not been 320 */ 321 Date getBootTime(); 322 323 /** 324 * Registers a runnable to execute when the kernel is shutdown 325 * @param hook a runnable to execute when the kernel is shutdown 326 */ 327 void registerShutdownHook(Runnable hook); 328 329 /** 330 * Unregisters a runnable from the list to execute when the kernel is shutdown 331 * @param hook the runnable that should be removed 332 */ 333 void unregisterShutdownHook(Runnable hook); 334 335 /** 336 * Stops the kernel 337 */ 338 void shutdown(); 339 340 /** 341 * Has the kernel been booted 342 * @return true if the kernel has been booted; false otherwise 343 */ 344 boolean isRunning(); 345 346 /** 347 * @deprecated Use AbstractName version instead 348 */ 349 Object getGBean(ObjectName name) throws GBeanNotFoundException, InternalKernelException, IllegalStateException; 350 /** 351 * @deprecated Use AbstractName version instead 352 */ 353 int getGBeanState(ObjectName name) throws GBeanNotFoundException; 354 /** 355 * @deprecated Use AbstractName version instead 356 */ 357 GBeanInfo getGBeanInfo(ObjectName name) throws GBeanNotFoundException; 358 /** 359 * Returns a Set with elements of type ObjectName 360 * 361 * @deprecated Use AbstractNameQuery version instead 362 */ 363 Set listGBeans(ObjectName pattern); 364 /** 365 * @deprecated Use AbstractName version instead 366 */ 367 Object getAttribute(ObjectName name, String attributeName) throws GBeanNotFoundException, NoSuchAttributeException, Exception; 368 /** 369 * @deprecated Use AbstractName version instead 370 */ 371 Object invoke(ObjectName name, String methodName) throws GBeanNotFoundException, NoSuchOperationException, InternalKernelException, Exception; 372 /** 373 * @deprecated Use AbstractName version instead 374 */ 375 Object invoke(ObjectName name, String methodName, Object[] args, String[] types) throws GBeanNotFoundException, NoSuchOperationException, InternalKernelException, Exception; 376 377 String getStateReason(AbstractName abstractName); 378 }