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.system.jmx;
018
019 import java.util.Date;
020 import java.util.Set;
021 import javax.management.AttributeNotFoundException;
022 import javax.management.InstanceNotFoundException;
023 import javax.management.JMException;
024 import javax.management.JMRuntimeException;
025 import javax.management.MBeanServerConnection;
026 import javax.management.ObjectName;
027
028 import org.apache.geronimo.gbean.GBeanData;
029 import org.apache.geronimo.gbean.GBeanInfo;
030 import org.apache.geronimo.gbean.AbstractName;
031 import org.apache.geronimo.gbean.AbstractNameQuery;
032 import org.apache.geronimo.kernel.DependencyManager;
033 import org.apache.geronimo.kernel.GBeanAlreadyExistsException;
034 import org.apache.geronimo.kernel.GBeanNotFoundException;
035 import org.apache.geronimo.kernel.InternalKernelException;
036 import org.apache.geronimo.kernel.Kernel;
037 import org.apache.geronimo.kernel.NoSuchAttributeException;
038 import org.apache.geronimo.kernel.NoSuchOperationException;
039 import org.apache.geronimo.kernel.Naming;
040 import org.apache.geronimo.kernel.lifecycle.LifecycleMonitor;
041 import org.apache.geronimo.kernel.proxy.ProxyManager;
042
043 /**
044 * @version $Rev: 706640 $ $Date: 2008-10-21 14:44:05 +0000 (Tue, 21 Oct 2008) $
045 */
046 public class KernelDelegate implements Kernel {
047 private final MBeanServerConnection mbeanServer;
048 private final ProxyManager proxyManager;
049
050 public KernelDelegate(MBeanServerConnection mbeanServer) {
051 this.mbeanServer = mbeanServer;
052 proxyManager = new JMXProxyManager(this);
053 }
054
055 public Date getBootTime() {
056 return (Date) getKernelAttribute("bootTime");
057 }
058
059 public String getKernelName() {
060 return (String) getKernelAttribute("kernelName");
061 }
062
063 public Naming getNaming() {
064 return (Naming) getKernelAttribute("naming");
065 }
066
067 public Object getGBean(ObjectName name) throws GBeanNotFoundException, InternalKernelException, IllegalStateException {
068 try {
069 return invokeKernel("getGBean", new Object[] {name}, new String[] {ObjectName.class.getName()});
070 } catch (GBeanNotFoundException e) {
071 throw e;
072 } catch (RuntimeException e) {
073 throw e;
074 } catch (Exception e) {
075 throw new InternalKernelException(e);
076 }
077 }
078
079 public Object getGBean(AbstractName name) throws GBeanNotFoundException, InternalKernelException, IllegalStateException {
080 try {
081 return invokeKernel("getGBean", new Object[] {name}, new String[] {AbstractName.class.getName()});
082 } catch (GBeanNotFoundException e) {
083 throw e;
084 } catch (RuntimeException e) {
085 throw e;
086 } catch (Exception e) {
087 throw new InternalKernelException(e);
088 }
089 }
090
091 public Object getGBean(String shortName) throws GBeanNotFoundException, InternalKernelException, IllegalStateException {
092 try {
093 return invokeKernel("getGBean", new Object[] {shortName}, new String[] {String.class.getName()});
094 } catch (GBeanNotFoundException e) {
095 throw e;
096 } catch (RuntimeException e) {
097 throw e;
098 } catch (Exception e) {
099 throw new InternalKernelException(e);
100 }
101 }
102
103 public Object getGBean(Class type) throws GBeanNotFoundException, InternalKernelException, IllegalStateException {
104 try {
105 return invokeKernel("getGBean", new Object[] {type}, new String[] {Class.class.getName()});
106 } catch (GBeanNotFoundException e) {
107 throw e;
108 } catch (RuntimeException e) {
109 throw e;
110 } catch (Exception e) {
111 throw new InternalKernelException(e);
112 }
113 }
114
115 public Object getGBean(String shortName, Class type) throws GBeanNotFoundException, InternalKernelException, IllegalStateException {
116 try {
117 return invokeKernel("getGBean", new Object[] {shortName, type}, new String[] {String.class.getName(), Class.class.getName()});
118 } catch (GBeanNotFoundException e) {
119 throw e;
120 } catch (RuntimeException e) {
121 throw e;
122 } catch (Exception e) {
123 throw new InternalKernelException(e);
124 }
125 }
126
127 public void loadGBean(GBeanData gbeanData, ClassLoader classLoader) throws GBeanAlreadyExistsException {
128 try {
129 invokeKernel("loadGBean", new Object[] {gbeanData, classLoader}, new String[] {GBeanData.class.getName(), ClassLoader.class.getName()});
130 } catch (GBeanAlreadyExistsException e) {
131 throw e;
132 } catch (RuntimeException e) {
133 throw e;
134 } catch (Exception e) {
135 throw new InternalKernelException(e);
136 }
137 }
138
139 public void startGBean(AbstractName name) throws GBeanNotFoundException, InternalKernelException, IllegalStateException {
140 try {
141 invokeKernel("startGBean", new Object[] {name}, new String[] {AbstractName.class.getName()});
142 } catch (GBeanNotFoundException e) {
143 throw e;
144 } catch (RuntimeException e) {
145 throw e;
146 } catch (Exception e) {
147 throw new InternalKernelException(e);
148 }
149 }
150
151 public void startGBean(String shortName) throws GBeanNotFoundException, InternalKernelException, IllegalStateException {
152 try {
153 invokeKernel("startGBean", new Object[] {shortName}, new String[] {String.class.getName()});
154 } catch (GBeanNotFoundException e) {
155 throw e;
156 } catch (RuntimeException e) {
157 throw e;
158 } catch (Exception e) {
159 throw new InternalKernelException(e);
160 }
161 }
162
163 public void startGBean(Class type) throws GBeanNotFoundException, InternalKernelException, IllegalStateException {
164 try {
165 invokeKernel("startGBean", new Object[] {type}, new String[] {Class.class.getName()});
166 } catch (GBeanNotFoundException e) {
167 throw e;
168 } catch (RuntimeException e) {
169 throw e;
170 } catch (Exception e) {
171 throw new InternalKernelException(e);
172 }
173 }
174
175 public void startGBean(String shortName, Class type) throws GBeanNotFoundException, InternalKernelException, IllegalStateException {
176 try {
177 invokeKernel("startGBean", new Object[] {shortName, type}, new String[] {String.class.getName(), Class.class.getName()});
178 } catch (GBeanNotFoundException e) {
179 throw e;
180 } catch (RuntimeException e) {
181 throw e;
182 } catch (Exception e) {
183 throw new InternalKernelException(e);
184 }
185 }
186
187 public void startRecursiveGBean(AbstractName name) throws GBeanNotFoundException, InternalKernelException, IllegalStateException {
188 try {
189 invokeKernel("startRecursiveGBean", new Object[] {name}, new String[] {AbstractName.class.getName()});
190 } catch (GBeanNotFoundException e) {
191 throw e;
192 } catch (RuntimeException e) {
193 throw e;
194 } catch (Exception e) {
195 throw new InternalKernelException(e);
196 }
197 }
198
199 public void startRecursiveGBean(String shortName) throws GBeanNotFoundException, InternalKernelException, IllegalStateException {
200 try {
201 invokeKernel("startRecursiveGBean", new Object[] {shortName}, new String[] {String.class.getName()});
202 } catch (GBeanNotFoundException e) {
203 throw e;
204 } catch (RuntimeException e) {
205 throw e;
206 } catch (Exception e) {
207 throw new InternalKernelException(e);
208 }
209 }
210
211 public void startRecursiveGBean(Class type) throws GBeanNotFoundException, InternalKernelException, IllegalStateException {
212 try {
213 invokeKernel("startRecursiveGBean", new Object[] {type}, new String[] {Class.class.getName()});
214 } catch (GBeanNotFoundException e) {
215 throw e;
216 } catch (RuntimeException e) {
217 throw e;
218 } catch (Exception e) {
219 throw new InternalKernelException(e);
220 }
221 }
222
223 public void startRecursiveGBean(String shortName, Class type) throws GBeanNotFoundException, InternalKernelException, IllegalStateException {
224 try {
225 invokeKernel("startRecursiveGBean", new Object[] {shortName, type}, new String[] {String.class.getName(), Class.class.getName()});
226 } catch (GBeanNotFoundException e) {
227 throw e;
228 } catch (RuntimeException e) {
229 throw e;
230 } catch (Exception e) {
231 throw new InternalKernelException(e);
232 }
233 }
234
235 public boolean isRunning(AbstractName name) {
236 try {
237 return ((Boolean) invokeKernel("isRunning", new Object[]{name}, new String[]{AbstractName.class.getName()})).booleanValue();
238 } catch (RuntimeException e) {
239 throw e;
240 } catch (Exception e) {
241 throw new InternalKernelException(e);
242 }
243 }
244
245 public boolean isRunning(String shortName) {
246 try {
247 return ((Boolean) invokeKernel("isRunning", new Object[]{shortName}, new String[]{String.class.getName()})).booleanValue();
248 } catch (RuntimeException e) {
249 throw e;
250 } catch (Exception e) {
251 throw new InternalKernelException(e);
252 }
253 }
254
255 public boolean isRunning(Class type) {
256 try {
257 return ((Boolean) invokeKernel("isRunning", new Object[]{type}, new String[]{Class.class.getName()})).booleanValue();
258 } catch (RuntimeException e) {
259 throw e;
260 } catch (Exception e) {
261 throw new InternalKernelException(e);
262 }
263 }
264
265 public boolean isRunning(String shortName, Class type) {
266 try {
267 return ((Boolean) invokeKernel("isRunning", new Object[]{shortName, type}, new String[]{String.class.getName(), Class.class.getName()})).booleanValue();
268 } catch (RuntimeException e) {
269 throw e;
270 } catch (Exception e) {
271 throw new InternalKernelException(e);
272 }
273 }
274
275
276 public void stopGBean(AbstractName name) throws GBeanNotFoundException, InternalKernelException, IllegalStateException {
277 try {
278 invokeKernel("stopGBean", new Object[] {name}, new String[] {AbstractName.class.getName()});
279 } catch (GBeanNotFoundException e) {
280 throw e;
281 } catch (RuntimeException e) {
282 throw e;
283 } catch (Exception e) {
284 throw new InternalKernelException(e);
285 }
286 }
287
288 public void stopGBean(String shortName) throws GBeanNotFoundException, InternalKernelException, IllegalStateException {
289 try {
290 invokeKernel("stopGBean", new Object[] {shortName}, new String[] {String.class.getName()});
291 } catch (GBeanNotFoundException e) {
292 throw e;
293 } catch (RuntimeException e) {
294 throw e;
295 } catch (Exception e) {
296 throw new InternalKernelException(e);
297 }
298 }
299
300 public void stopGBean(Class type) throws GBeanNotFoundException, InternalKernelException, IllegalStateException {
301 try {
302 invokeKernel("stopGBean", new Object[] {type}, new String[] {Class.class.getName()});
303 } catch (GBeanNotFoundException e) {
304 throw e;
305 } catch (RuntimeException e) {
306 throw e;
307 } catch (Exception e) {
308 throw new InternalKernelException(e);
309 }
310 }
311
312 public void stopGBean(String shortName, Class type) throws GBeanNotFoundException, InternalKernelException, IllegalStateException {
313 try {
314 invokeKernel("stopGBean", new Object[] {shortName, type}, new String[] {String.class.getName(), Class.class.getName()});
315 } catch (GBeanNotFoundException e) {
316 throw e;
317 } catch (RuntimeException e) {
318 throw e;
319 } catch (Exception e) {
320 throw new InternalKernelException(e);
321 }
322 }
323
324 public void unloadGBean(AbstractName name) throws GBeanNotFoundException, InternalKernelException, IllegalStateException {
325 try {
326 invokeKernel("unloadGBean", new Object[] {name}, new String[] {AbstractName.class.getName()});
327 } catch (GBeanNotFoundException e) {
328 throw e;
329 } catch (RuntimeException e) {
330 throw e;
331 } catch (Exception e) {
332 throw new InternalKernelException(e);
333 }
334 }
335
336 public void unloadGBean(String shortName) throws GBeanNotFoundException, InternalKernelException, IllegalStateException {
337 try {
338 invokeKernel("unloadGBean", new Object[] {shortName}, new String[] {String.class.getName()});
339 } catch (GBeanNotFoundException e) {
340 throw e;
341 } catch (RuntimeException e) {
342 throw e;
343 } catch (Exception e) {
344 throw new InternalKernelException(e);
345 }
346 }
347
348 public void unloadGBean(Class type) throws GBeanNotFoundException, InternalKernelException, IllegalStateException {
349 try {
350 invokeKernel("unloadGBean", new Object[] {type}, new String[] {Class.class.getName()});
351 } catch (GBeanNotFoundException e) {
352 throw e;
353 } catch (RuntimeException e) {
354 throw e;
355 } catch (Exception e) {
356 throw new InternalKernelException(e);
357 }
358 }
359
360 public void unloadGBean(String shortName, Class type) throws GBeanNotFoundException, InternalKernelException, IllegalStateException {
361 try {
362 invokeKernel("unloadGBean", new Object[] {shortName, type}, new String[] {String.class.getName(), Class.class.getName()});
363 } catch (GBeanNotFoundException e) {
364 throw e;
365 } catch (RuntimeException e) {
366 throw e;
367 } catch (Exception e) {
368 throw new InternalKernelException(e);
369 }
370 }
371
372 public int getGBeanState(ObjectName name) throws GBeanNotFoundException {
373 try {
374 return ((Integer) invokeKernel("getGBeanState", new Object[]{name}, new String[]{ObjectName.class.getName()})).intValue();
375 } catch (GBeanNotFoundException e) {
376 throw e;
377 } catch (RuntimeException e) {
378 throw e;
379 } catch (Exception e) {
380 throw new InternalKernelException(e);
381 }
382 }
383
384 public int getGBeanState(AbstractName name) throws GBeanNotFoundException {
385 try {
386 return ((Integer) invokeKernel("getGBeanState", new Object[]{name}, new String[]{AbstractName.class.getName()})).intValue();
387 } catch (GBeanNotFoundException e) {
388 throw e;
389 } catch (RuntimeException e) {
390 throw e;
391 } catch (Exception e) {
392 throw new InternalKernelException(e);
393 }
394 }
395
396 public int getGBeanState(String shortName) throws GBeanNotFoundException {
397 try {
398 return ((Integer) invokeKernel("getGBeanState", new Object[]{shortName}, new String[]{String.class.getName()})).intValue();
399 } catch (GBeanNotFoundException e) {
400 throw e;
401 } catch (RuntimeException e) {
402 throw e;
403 } catch (Exception e) {
404 throw new InternalKernelException(e);
405 }
406 }
407
408 public int getGBeanState(Class type) throws GBeanNotFoundException {
409 try {
410 return ((Integer) invokeKernel("getGBeanState", new Object[]{type}, new String[]{Class.class.getName()})).intValue();
411 } catch (GBeanNotFoundException e) {
412 throw e;
413 } catch (RuntimeException e) {
414 throw e;
415 } catch (Exception e) {
416 throw new InternalKernelException(e);
417 }
418 }
419
420 public int getGBeanState(String shortName, Class type) throws GBeanNotFoundException {
421 try {
422 return ((Integer) invokeKernel("getGBeanState", new Object[]{shortName, type}, new String[]{String.class.getName(), Class.class.getName()})).intValue();
423 } catch (GBeanNotFoundException e) {
424 throw e;
425 } catch (RuntimeException e) {
426 throw e;
427 } catch (Exception e) {
428 throw new InternalKernelException(e);
429 }
430 }
431
432 public long getGBeanStartTime(AbstractName name) throws GBeanNotFoundException {
433 try {
434 return ((Long) invokeKernel("getGBeanStartTime", new Object[]{name}, new String[]{AbstractName.class.getName()})).longValue();
435 } catch (GBeanNotFoundException e) {
436 throw e;
437 } catch (RuntimeException e) {
438 throw e;
439 } catch (Exception e) {
440 throw new InternalKernelException(e);
441 }
442 }
443
444 public long getGBeanStartTime(String shortName) throws GBeanNotFoundException {
445 try {
446 return ((Long) invokeKernel("getGBeanStartTime", new Object[]{shortName}, new String[]{String.class.getName()})).longValue();
447 } catch (GBeanNotFoundException e) {
448 throw e;
449 } catch (RuntimeException e) {
450 throw e;
451 } catch (Exception e) {
452 throw new InternalKernelException(e);
453 }
454 }
455
456 public long getGBeanStartTime(Class type) throws GBeanNotFoundException {
457 try {
458 return ((Long) invokeKernel("getGBeanStartTime", new Object[]{type}, new String[]{Class.class.getName()})).longValue();
459 } catch (GBeanNotFoundException e) {
460 throw e;
461 } catch (RuntimeException e) {
462 throw e;
463 } catch (Exception e) {
464 throw new InternalKernelException(e);
465 }
466 }
467
468 public long getGBeanStartTime(String shortName, Class type) throws GBeanNotFoundException {
469 try {
470 return ((Long) invokeKernel("getGBeanStartTime", new Object[]{shortName, type}, new String[]{String.class.getName(), Class.class.getName()})).longValue();
471 } catch (GBeanNotFoundException e) {
472 throw e;
473 } catch (RuntimeException e) {
474 throw e;
475 } catch (Exception e) {
476 throw new InternalKernelException(e);
477 }
478 }
479
480 public Object getAttribute(ObjectName objectName, String attributeName) throws Exception {
481 return invokeKernel("getAttribute", new Object[]{objectName, attributeName}, new String[]{ObjectName.class.getName(), String.class.getName()});
482 }
483
484 public Object getAttribute(AbstractName abstractName, String attributeName) throws GBeanNotFoundException, NoSuchAttributeException, Exception {
485 return invokeKernel("getAttribute", new Object[]{abstractName, attributeName}, new String[]{AbstractName.class.getName(), String.class.getName()});
486 }
487
488 public Object getAttribute(String shortName, String attributeName) throws GBeanNotFoundException, NoSuchAttributeException, Exception {
489 return invokeKernel("getAttribute", new Object[]{shortName, attributeName}, new String[]{String.class.getName(), String.class.getName()});
490 }
491
492 public Object getAttribute(Class type, String attributeName) throws GBeanNotFoundException, NoSuchAttributeException, Exception {
493 return invokeKernel("getAttribute", new Object[]{type, attributeName}, new String[]{Class.class.getName(), String.class.getName()});
494 }
495
496 public Object getAttribute(String shortName, Class type, String attributeName) throws GBeanNotFoundException, NoSuchAttributeException, Exception {
497 return invokeKernel("getAttribute", new Object[]{shortName, type, attributeName}, new String[]{String.class.getName(), Class.class.getName(), String.class.getName()});
498 }
499
500 public void setAttribute(AbstractName abstractName, String attributeName, Object attributeValue) throws GBeanNotFoundException, NoSuchAttributeException, Exception {
501 invokeKernel("setAttribute", new Object[]{abstractName, attributeName, attributeValue}, new String[]{AbstractName.class.getName(), String.class.getName(), Object.class.getName()});
502 }
503
504 public void setAttribute(String shortName, String attributeName, Object attributeValue) throws GBeanNotFoundException, NoSuchAttributeException, Exception {
505 invokeKernel("setAttribute", new Object[]{shortName, attributeName, attributeValue}, new String[]{String.class.getName(), String.class.getName(), Object.class.getName()});
506 }
507
508 public void setAttribute(Class type, String attributeName, Object attributeValue) throws GBeanNotFoundException, NoSuchAttributeException, Exception {
509 invokeKernel("setAttribute", new Object[]{type, attributeName, attributeValue}, new String[]{Class.class.getName(), String.class.getName(), Object.class.getName()});
510 }
511
512 public void setAttribute(String shortName, Class type, String attributeName, Object attributeValue) throws GBeanNotFoundException, NoSuchAttributeException, Exception {
513 invokeKernel("setAttribute", new Object[]{shortName, type, attributeName, attributeValue}, new String[]{String.class.getName(), Class.class.getName(), String.class.getName(), Object.class.getName()});
514 }
515
516 public Object invoke(ObjectName objectName, String methodName) throws Exception {
517 return invokeKernel("invoke", new Object[]{objectName, methodName}, new String[]{ObjectName.class.getName(), String.class.getName()});
518 }
519
520 public Object invoke(AbstractName abstractName, String methodName) throws GBeanNotFoundException, NoSuchOperationException, InternalKernelException, Exception {
521 return invokeKernel("invoke", new Object[]{abstractName, methodName}, new String[]{AbstractName.class.getName(), String.class.getName()});
522 }
523
524 public Object invoke(String shortName, String methodName) throws GBeanNotFoundException, NoSuchOperationException, InternalKernelException, Exception {
525 return invokeKernel("invoke", new Object[]{shortName, methodName}, new String[]{String.class.getName(), String.class.getName()});
526 }
527
528 public Object invoke(Class type, String methodName) throws GBeanNotFoundException, NoSuchOperationException, InternalKernelException, Exception {
529 return invokeKernel("invoke", new Object[]{type, methodName}, new String[]{Class.class.getName(), String.class.getName()});
530 }
531
532 public Object invoke(String shortName, Class type, String methodName) throws GBeanNotFoundException, NoSuchOperationException, InternalKernelException, Exception {
533 return invokeKernel("invoke", new Object[]{shortName, type, methodName}, new String[]{String.class.getName(), Class.class.getName(), String.class.getName()});
534 }
535
536 public Object invoke(ObjectName objectName, String methodName, Object[] args, String[] types) throws Exception {
537 return invokeKernel("invoke", new Object[]{objectName, methodName, args, types}, new String[]{ObjectName.class.getName(), String.class.getName(), Object[].class.getName(), String[].class.getName()});
538 }
539
540 public String getStateReason(AbstractName abstractName) {
541 try {
542 return ((String) invokeKernel("getStateReason", new Object[]{abstractName}, new String[]{AbstractName.class.getName()}));
543 } catch (RuntimeException e) {
544 throw e;
545 } catch (Exception e) {
546 throw new InternalKernelException(e);
547 }
548 }
549
550 public Object invoke(AbstractName abstractName, String methodName, Object[] args, String[] types) throws GBeanNotFoundException, NoSuchOperationException, InternalKernelException, Exception {
551 return invokeKernel("invoke", new Object[]{abstractName, methodName, args, types}, new String[]{AbstractName.class.getName(), String.class.getName(), Object[].class.getName(), String[].class.getName()});
552 }
553
554 public Object invoke(String shortName, String methodName, Object[] args, String[] types) throws GBeanNotFoundException, NoSuchOperationException, InternalKernelException, Exception {
555 return invokeKernel("invoke", new Object[]{shortName, methodName, args, types}, new String[]{String.class.getName(), String.class.getName(), Object[].class.getName(), String[].class.getName()});
556 }
557
558 public Object invoke(Class type, String methodName, Object[] args, String[] types) throws GBeanNotFoundException, NoSuchOperationException, InternalKernelException, Exception {
559 return invokeKernel("invoke", new Object[]{type, methodName, args, types}, new String[]{Class.class.getName(), String.class.getName(), Object[].class.getName(), String[].class.getName()});
560 }
561
562 public Object invoke(String shortName, Class type, String methodName, Object[] args, String[] types) throws GBeanNotFoundException, NoSuchOperationException, InternalKernelException, Exception {
563 return invokeKernel("invoke", new Object[]{shortName, type, methodName, args, types}, new String[]{String.class.getName(), Class.class.getName(), String.class.getName(), Object[].class.getName(), String[].class.getName()});
564 }
565
566 public boolean isLoaded(AbstractName name) {
567 try {
568 return ((Boolean) invokeKernel("isLoaded", new Object[]{name}, new String[]{AbstractName.class.getName()})).booleanValue();
569 } catch (RuntimeException e) {
570 throw e;
571 } catch (Exception e) {
572 throw new InternalKernelException(e);
573 }
574 }
575
576 public boolean isLoaded(String shortName) {
577 try {
578 return ((Boolean) invokeKernel("isLoaded", new Object[]{shortName}, new String[]{String.class.getName()})).booleanValue();
579 } catch (RuntimeException e) {
580 throw e;
581 } catch (Exception e) {
582 throw new InternalKernelException(e);
583 }
584 }
585
586 public boolean isLoaded(Class type) {
587 try {
588 return ((Boolean) invokeKernel("isLoaded", new Object[]{type}, new String[]{Class.class.getName()})).booleanValue();
589 } catch (RuntimeException e) {
590 throw e;
591 } catch (Exception e) {
592 throw new InternalKernelException(e);
593 }
594 }
595
596 public boolean isLoaded(String shortName, Class type) {
597 try {
598 return ((Boolean) invokeKernel("isLoaded", new Object[]{shortName, type}, new String[]{String.class.getName(), Class.class.getName()})).booleanValue();
599 } catch (RuntimeException e) {
600 throw e;
601 } catch (Exception e) {
602 throw new InternalKernelException(e);
603 }
604 }
605
606 public GBeanInfo getGBeanInfo(ObjectName name) throws GBeanNotFoundException {
607 try {
608 return (GBeanInfo) invokeKernel("getGBeanInfo", new Object[] {name}, new String[] {ObjectName.class.getName()});
609 } catch (GBeanNotFoundException e) {
610 throw e;
611 } catch (RuntimeException e) {
612 throw e;
613 } catch (Exception e) {
614 throw new InternalKernelException(e);
615 }
616 }
617
618 public GBeanInfo getGBeanInfo(AbstractName name) throws GBeanNotFoundException {
619 try {
620 return (GBeanInfo) invokeKernel("getGBeanInfo", new Object[] {name}, new String[] {AbstractName.class.getName()});
621 } catch (GBeanNotFoundException e) {
622 throw e;
623 } catch (RuntimeException e) {
624 throw e;
625 } catch (Exception e) {
626 throw new InternalKernelException(e);
627 }
628 }
629
630 public GBeanInfo getGBeanInfo(String shortName) throws GBeanNotFoundException {
631 try {
632 return (GBeanInfo) invokeKernel("getGBeanInfo", new Object[] {shortName}, new String[] {String.class.getName()});
633 } catch (GBeanNotFoundException e) {
634 throw e;
635 } catch (RuntimeException e) {
636 throw e;
637 } catch (Exception e) {
638 throw new InternalKernelException(e);
639 }
640 }
641
642 public GBeanInfo getGBeanInfo(Class type) throws GBeanNotFoundException {
643 try {
644 return (GBeanInfo) invokeKernel("getGBeanInfo", new Object[] {type}, new String[] {Class.class.getName()});
645 } catch (GBeanNotFoundException e) {
646 throw e;
647 } catch (RuntimeException e) {
648 throw e;
649 } catch (Exception e) {
650 throw new InternalKernelException(e);
651 }
652 }
653
654 public GBeanInfo getGBeanInfo(String shortName, Class type) throws GBeanNotFoundException {
655 try {
656 return (GBeanInfo) invokeKernel("getGBeanInfo", new Object[] {shortName, type}, new String[] {String.class.getName(), Class.class.getName()});
657 } catch (GBeanNotFoundException e) {
658 throw e;
659 } catch (RuntimeException e) {
660 throw e;
661 } catch (Exception e) {
662 throw new InternalKernelException(e);
663 }
664 }
665
666 public Set listGBeans(ObjectName pattern) {
667 try {
668 return (Set) invokeKernel("listGBeans", new Object[] {pattern}, new String[] {ObjectName.class.getName()});
669 } catch (RuntimeException e) {
670 throw e;
671 } catch (Exception e) {
672 throw new InternalKernelException(e);
673 }
674 }
675
676 public Set listGBeans(Set patterns) {
677 try {
678 return (Set) invokeKernel("listGBeans", new Object[] {patterns}, new String[] {Set.class.getName()});
679 } catch (RuntimeException e) {
680 throw e;
681 } catch (Exception e) {
682 throw new InternalKernelException(e);
683 }
684 }
685
686 public void registerShutdownHook(Runnable hook) {
687 try {
688 invokeKernel("registerShutdownHook", new Object[] {hook}, new String[] {Runnable.class.getName()});
689 } catch (RuntimeException e) {
690 throw e;
691 } catch (Exception e) {
692 throw new InternalKernelException(e);
693 }
694 }
695
696 public void unregisterShutdownHook(Runnable hook) {
697 try {
698 invokeKernel("unregisterShutdownHook", new Object[] {hook}, new String[] {Runnable.class.getName()});
699 } catch (RuntimeException e) {
700 throw e;
701 } catch (Exception e) {
702 throw new InternalKernelException(e);
703 }
704 }
705
706 public void shutdown() {
707 try {
708 invokeKernel("shutdown", new Object[] {}, new String[] {});
709 } catch (RuntimeException e) {
710 throw e;
711 } catch (Exception e) {
712 throw new InternalKernelException(e);
713 }
714 }
715
716 public ClassLoader getClassLoaderFor(AbstractName name) throws GBeanNotFoundException {
717 try {
718 return (ClassLoader) invokeKernel("getClassLoaderFor", new Object[] {name}, new String[] {AbstractName.class.getName()});
719 } catch (GBeanNotFoundException e) {
720 throw e;
721 } catch (RuntimeException e) {
722 throw e;
723 } catch (Exception e) {
724 throw new InternalKernelException(e);
725 }
726 }
727
728 public ClassLoader getClassLoaderFor(String shortName) throws GBeanNotFoundException {
729 try {
730 return (ClassLoader) invokeKernel("getClassLoaderFor", new Object[] {shortName}, new String[] {String.class.getName()});
731 } catch (GBeanNotFoundException e) {
732 throw e;
733 } catch (RuntimeException e) {
734 throw e;
735 } catch (Exception e) {
736 throw new InternalKernelException(e);
737 }
738 }
739
740 public ClassLoader getClassLoaderFor(Class type) throws GBeanNotFoundException {
741 try {
742 return (ClassLoader) invokeKernel("getClassLoaderFor", new Object[] {type}, new String[] {Class.class.getName()});
743 } catch (GBeanNotFoundException e) {
744 throw e;
745 } catch (RuntimeException e) {
746 throw e;
747 } catch (Exception e) {
748 throw new InternalKernelException(e);
749 }
750 }
751
752 public ClassLoader getClassLoaderFor(String shortName, Class type) throws GBeanNotFoundException {
753 try {
754 return (ClassLoader) invokeKernel("getClassLoaderFor", new Object[] {shortName, type}, new String[] {String.class.getName(), Class.class.getName()});
755 } catch (GBeanNotFoundException e) {
756 throw e;
757 } catch (RuntimeException e) {
758 throw e;
759 } catch (Exception e) {
760 throw new InternalKernelException(e);
761 }
762 }
763
764 public GBeanData getGBeanData(AbstractName name) throws GBeanNotFoundException, InternalKernelException {
765 try {
766 return (GBeanData) invokeKernel("getGBeanData", new Object[] {name}, new String[] {AbstractName.class.getName()});
767 } catch (GBeanNotFoundException e) {
768 throw e;
769 } catch (RuntimeException e) {
770 throw e;
771 } catch (Exception e) {
772 throw new InternalKernelException(e);
773 }
774 }
775
776 public GBeanData getGBeanData(String shortName) throws GBeanNotFoundException, InternalKernelException {
777 try {
778 return (GBeanData) invokeKernel("getGBeanData", new Object[] {shortName}, new String[] {String.class.getName()});
779 } catch (GBeanNotFoundException e) {
780 throw e;
781 } catch (RuntimeException e) {
782 throw e;
783 } catch (Exception e) {
784 throw new InternalKernelException(e);
785 }
786 }
787
788 public GBeanData getGBeanData(Class type) throws GBeanNotFoundException, InternalKernelException {
789 try {
790 return (GBeanData) invokeKernel("getGBeanData", new Object[] {type}, new String[] {Class.class.getName()});
791 } catch (GBeanNotFoundException e) {
792 throw e;
793 } catch (RuntimeException e) {
794 throw e;
795 } catch (Exception e) {
796 throw new InternalKernelException(e);
797 }
798 }
799
800 public GBeanData getGBeanData(String shortName, Class type) throws GBeanNotFoundException, InternalKernelException {
801 try {
802 return (GBeanData) invokeKernel("getGBeanData", new Object[] {shortName, type}, new String[] {String.class.getName(), Class.class.getName()});
803 } catch (GBeanNotFoundException e) {
804 throw e;
805 } catch (RuntimeException e) {
806 throw e;
807 } catch (Exception e) {
808 throw new InternalKernelException(e);
809 }
810 }
811
812 public AbstractName getAbstractNameFor(Object service) {
813 AbstractName name = proxyManager.getProxyTarget(service);
814 if (name != null) {
815 return name;
816 }
817 try {
818 return (AbstractName) invokeKernel("getAbstractNameFor", new Object[] {service}, new String[] {Object.class.getName()});
819 } catch (RuntimeException e) {
820 throw e;
821 } catch (Exception e) {
822 throw new InternalKernelException(e);
823 }
824 }
825
826 public String getShortNameFor(Object service) {
827 AbstractName name = getAbstractNameFor(service);
828 return (String) name.getName().get("name");
829 }
830
831 public boolean isRunning() {
832 return ((Boolean) getKernelAttribute("running")).booleanValue();
833 }
834
835 public Set listGBeans(AbstractNameQuery query) {
836 try {
837 return (Set) invokeKernel("listGBeans", new Object[] {query}, new String[] {AbstractNameQuery.class.getName()});
838 } catch (RuntimeException e) {
839 throw e;
840 } catch (Exception e) {
841 throw new InternalKernelException(e);
842 }
843 }
844
845 /**
846 * Throws UnsupportedOperationException. The dependency manager is not accesable over a remote connection.
847 */
848 public DependencyManager getDependencyManager() {
849 throw new UnsupportedOperationException("Dependency manager is not accessable by way of a remote connection");
850 }
851
852 /**
853 * Throws UnsupportedOperationException. The lifecycle monitor is not accesable over a remote connection.
854 */
855 public LifecycleMonitor getLifecycleMonitor() {
856 throw new UnsupportedOperationException("Lifecycle monitor is not accessable by way of a remote connection");
857 }
858
859 public ProxyManager getProxyManager() {
860 return proxyManager;
861 }
862
863 /**
864 * Throws UnsupportedOperationException. A remote kernel will alreayd be booted.
865 */
866 public void boot() throws Exception {
867 throw new UnsupportedOperationException("A remote kernel can not be booted");
868 }
869
870 private Object getKernelAttribute(String attributeName) {
871 try {
872 return mbeanServer.getAttribute(Kernel.KERNEL, attributeName);
873 } catch (Exception e) {
874 Throwable cause = unwrapJMException(e);
875 if (cause instanceof InstanceNotFoundException) {
876 throw new InternalKernelException("Kernel is not loaded", cause);
877 } else if (cause instanceof AttributeNotFoundException) {
878 throw new InternalKernelException("KernelDelegate is out of synch with Kernel", cause);
879 } else {
880 throw new InternalKernelException(cause);
881 }
882 }
883 }
884
885 private Object invokeKernel(String methodName, Object[] args, String[] types) throws Exception {
886 if(args != null && types != null && args.length != types.length) {
887 throw new IllegalArgumentException("Call to "+methodName+" has "+args.length+" arguments but "+types.length+" argument classes!");
888 }
889 try {
890 return mbeanServer.invoke(Kernel.KERNEL, methodName, args, types);
891 } catch (Exception e) {
892 Throwable cause = unwrapJMException(e);
893 if (cause instanceof InstanceNotFoundException) {
894 throw new InternalKernelException("Kernel is not loaded", cause);
895 } else if (cause instanceof NoSuchMethodException) {
896 StringBuffer buf = new StringBuffer("KernelDelegate is out of synch with Kernel on ");
897 buf.append(methodName).append("(");
898 if(types != null) {
899 for (int i = 0; i < types.length; i++) {
900 String type = types[i];
901 if(i>0) buf.append(",");
902 buf.append(type);
903 }
904 }
905 buf.append(")");
906 throw new InternalKernelException(buf.toString());
907 } else if (cause instanceof JMException) {
908 throw new InternalKernelException(cause);
909 } else if (cause instanceof JMRuntimeException) {
910 throw new InternalKernelException(cause);
911 } else if (cause instanceof Error) {
912 throw (Error) cause;
913 } else if (cause instanceof Exception) {
914 throw (Exception) cause;
915 } else {
916 throw new InternalKernelException("Unknown throwable", cause);
917 }
918 }
919 }
920
921 private Throwable unwrapJMException(Throwable cause) {
922 while ((cause instanceof JMException || cause instanceof JMRuntimeException) && cause.getCause() != null) {
923 cause = cause.getCause();
924 }
925 return cause;
926 }
927 }