View Javadoc

1   /**
2    *
3    * Copyright 2005 The Apache Software Foundation
4    *
5    *  Licensed under the Apache License, Version 2.0 (the "License");
6    *  you may not use this file except in compliance with the License.
7    *  You may obtain a copy of the License at
8    *
9    *     http://www.apache.org/licenses/LICENSE-2.0
10   *
11   *  Unless required by applicable law or agreed to in writing, software
12   *  distributed under the License is distributed on an "AS IS" BASIS,
13   *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   *  See the License for the specific language governing permissions and
15   *  limitations under the License.
16   */
17  package org.apache.geronimo.kernel;
18  
19  import java.util.Date;
20  import java.util.Set;
21  import java.util.Collections;
22  import javax.management.ObjectName;
23  
24  import org.apache.geronimo.gbean.GBeanData;
25  import org.apache.geronimo.gbean.GBeanInfo;
26  import org.apache.geronimo.gbean.AbstractNameQuery;
27  import org.apache.geronimo.gbean.AbstractName;
28  import org.apache.geronimo.kernel.lifecycle.LifecycleMonitor;
29  import org.apache.geronimo.kernel.proxy.ProxyManager;
30  import org.apache.geronimo.kernel.repository.Artifact;
31  
32  /**
33   * @version $Rev:386515 $ $Date: 2006-04-24 00:27:37 -0700 (Mon, 24 Apr 2006) $
34   */
35  public interface Kernel {
36      /**
37       * The JMX name used by a Kernel to register itself when it boots.
38       */
39      ObjectName KERNEL = ObjectNameUtil.getObjectName(":role=Kernel");
40      AbstractName KERNEL_NAME = new AbstractName(new Artifact("geronimo", "boot", "none", "car"), Collections.singletonMap("role", "kernel"), KERNEL);
41  
42      /**
43       * Get the name of this kernel
44       *
45       * @return the name of this kernel
46       */
47      String getKernelName();
48  
49      /**
50       * Gets the naming system used by this kernel.
51       * @return the naming system used by this kernel
52       */
53      Naming getNaming();
54  
55      /**
56       * Gets the dependency manager kernel service
57       * @return the dependency manager or null if the kernel is not running
58       */
59      DependencyManager getDependencyManager();
60  
61      /**
62       * Gets the lifecycle monitor kernel service
63       * @return the lifecycle monitor or null if the kernel is not running
64       */
65      LifecycleMonitor getLifecycleMonitor();
66  
67      /**
68       * Gets the proxy manager kernel service
69       * @return the proxy manager or null if the kernel is not running
70       */
71      ProxyManager getProxyManager();
72  
73      /**
74       * Load a specific GBean into this kernel.
75       * This is intended for applications that are embedding the kernel.
76       *
77       * @param gbeanData the GBean to load
78       * @param classLoader the class loader to use to load the gbean
79       * @throws org.apache.geronimo.kernel.GBeanAlreadyExistsException if the name is already used
80       * @throws org.apache.geronimo.kernel.InternalKernelException if there is a problem during registration
81       */
82      void loadGBean(GBeanData gbeanData, ClassLoader classLoader) throws GBeanAlreadyExistsException, InternalKernelException;
83  
84      /**
85       * Is there a GBean registered with the kernel under the specified name?
86       * @param name the name to check
87       * @return true if there is a gbean registered under the specified name; false otherwise
88       */
89      boolean isLoaded(AbstractName name);
90      boolean isLoaded(String shortName);
91      boolean isLoaded(Class type);
92      boolean isLoaded(String shortName, Class type);
93  
94      /**
95       * Gets the specified GBean instance.
96       *
97       * @param name the GBean instance to get
98       * @throws org.apache.geronimo.kernel.GBeanNotFoundException if the GBean could not be found
99       * @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 }