001 /**
002 *
003 * Copyright 2004 The Apache Software Foundation
004 *
005 * Licensed under the Apache License, Version 2.0 (the "License");
006 * you may not use this file except in compliance with the License.
007 * 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: 396469 $ $Date: 2006-04-24 00:27:37 -0700 (Mon, 24 Apr 2006) $
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 Object invoke(AbstractName abstractName, String methodName, Object[] args, String[] types) throws GBeanNotFoundException, NoSuchOperationException, InternalKernelException, Exception {
541 return invokeKernel("invoke", new Object[]{abstractName, methodName, args, types}, new String[]{AbstractName.class.getName(), String.class.getName(), Object[].class.getName(), String[].class.getName()});
542 }
543
544 public Object invoke(String shortName, String methodName, Object[] args, String[] types) throws GBeanNotFoundException, NoSuchOperationException, InternalKernelException, Exception {
545 return invokeKernel("invoke", new Object[]{shortName, methodName, args, types}, new String[]{String.class.getName(), String.class.getName(), Object[].class.getName(), String[].class.getName()});
546 }
547
548 public Object invoke(Class type, String methodName, Object[] args, String[] types) throws GBeanNotFoundException, NoSuchOperationException, InternalKernelException, Exception {
549 return invokeKernel("invoke", new Object[]{type, methodName, args, types}, new String[]{Class.class.getName(), String.class.getName(), Object[].class.getName(), String[].class.getName()});
550 }
551
552 public Object invoke(String shortName, Class type, String methodName, Object[] args, String[] types) throws GBeanNotFoundException, NoSuchOperationException, InternalKernelException, Exception {
553 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()});
554 }
555
556 public boolean isLoaded(AbstractName name) {
557 try {
558 return ((Boolean) invokeKernel("isLoaded", new Object[]{name}, new String[]{AbstractName.class.getName()})).booleanValue();
559 } catch (RuntimeException e) {
560 throw e;
561 } catch (Exception e) {
562 throw new InternalKernelException(e);
563 }
564 }
565
566 public boolean isLoaded(String shortName) {
567 try {
568 return ((Boolean) invokeKernel("isLoaded", new Object[]{shortName}, new String[]{String.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(Class type) {
577 try {
578 return ((Boolean) invokeKernel("isLoaded", new Object[]{type}, new String[]{Class.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(String shortName, Class type) {
587 try {
588 return ((Boolean) invokeKernel("isLoaded", new Object[]{shortName, type}, new String[]{String.class.getName(), 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 GBeanInfo getGBeanInfo(ObjectName name) throws GBeanNotFoundException {
597 try {
598 return (GBeanInfo) invokeKernel("getGBeanInfo", new Object[] {name}, new String[] {ObjectName.class.getName()});
599 } catch (GBeanNotFoundException e) {
600 throw e;
601 } catch (RuntimeException e) {
602 throw e;
603 } catch (Exception e) {
604 throw new InternalKernelException(e);
605 }
606 }
607
608 public GBeanInfo getGBeanInfo(AbstractName name) throws GBeanNotFoundException {
609 try {
610 return (GBeanInfo) invokeKernel("getGBeanInfo", new Object[] {name}, new String[] {AbstractName.class.getName()});
611 } catch (GBeanNotFoundException e) {
612 throw e;
613 } catch (RuntimeException e) {
614 throw e;
615 } catch (Exception e) {
616 throw new InternalKernelException(e);
617 }
618 }
619
620 public GBeanInfo getGBeanInfo(String shortName) throws GBeanNotFoundException {
621 try {
622 return (GBeanInfo) invokeKernel("getGBeanInfo", new Object[] {shortName}, new String[] {String.class.getName()});
623 } catch (GBeanNotFoundException e) {
624 throw e;
625 } catch (RuntimeException e) {
626 throw e;
627 } catch (Exception e) {
628 throw new InternalKernelException(e);
629 }
630 }
631
632 public GBeanInfo getGBeanInfo(Class type) throws GBeanNotFoundException {
633 try {
634 return (GBeanInfo) invokeKernel("getGBeanInfo", new Object[] {type}, new String[] {Class.class.getName()});
635 } catch (GBeanNotFoundException e) {
636 throw e;
637 } catch (RuntimeException e) {
638 throw e;
639 } catch (Exception e) {
640 throw new InternalKernelException(e);
641 }
642 }
643
644 public GBeanInfo getGBeanInfo(String shortName, Class type) throws GBeanNotFoundException {
645 try {
646 return (GBeanInfo) invokeKernel("getGBeanInfo", new Object[] {shortName, type}, new String[] {String.class.getName(), Class.class.getName()});
647 } catch (GBeanNotFoundException e) {
648 throw e;
649 } catch (RuntimeException e) {
650 throw e;
651 } catch (Exception e) {
652 throw new InternalKernelException(e);
653 }
654 }
655
656 public Set listGBeans(ObjectName pattern) {
657 try {
658 return (Set) invokeKernel("listGBeans", new Object[] {pattern}, new String[] {ObjectName.class.getName()});
659 } catch (RuntimeException e) {
660 throw e;
661 } catch (Exception e) {
662 throw new InternalKernelException(e);
663 }
664 }
665
666 public Set listGBeans(Set patterns) {
667 try {
668 return (Set) invokeKernel("listGBeans", new Object[] {patterns}, new String[] {Set.class.getName()});
669 } catch (RuntimeException e) {
670 throw e;
671 } catch (Exception e) {
672 throw new InternalKernelException(e);
673 }
674 }
675
676 public void registerShutdownHook(Runnable hook) {
677 try {
678 invokeKernel("registerShutdownHook", new Object[] {hook}, new String[] {Runnable.class.getName()});
679 } catch (RuntimeException e) {
680 throw e;
681 } catch (Exception e) {
682 throw new InternalKernelException(e);
683 }
684 }
685
686 public void unregisterShutdownHook(Runnable hook) {
687 try {
688 invokeKernel("unregisterShutdownHook", 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 shutdown() {
697 try {
698 invokeKernel("shutdown", new Object[] {}, new String[] {});
699 } catch (RuntimeException e) {
700 throw e;
701 } catch (Exception e) {
702 throw new InternalKernelException(e);
703 }
704 }
705
706 public ClassLoader getClassLoaderFor(AbstractName name) throws GBeanNotFoundException {
707 try {
708 return (ClassLoader) invokeKernel("getClassLoaderFor", new Object[] {name}, new String[] {AbstractName.class.getName()});
709 } catch (GBeanNotFoundException e) {
710 throw e;
711 } catch (RuntimeException e) {
712 throw e;
713 } catch (Exception e) {
714 throw new InternalKernelException(e);
715 }
716 }
717
718 public ClassLoader getClassLoaderFor(String shortName) throws GBeanNotFoundException {
719 try {
720 return (ClassLoader) invokeKernel("getClassLoaderFor", new Object[] {shortName}, new String[] {String.class.getName()});
721 } catch (GBeanNotFoundException e) {
722 throw e;
723 } catch (RuntimeException e) {
724 throw e;
725 } catch (Exception e) {
726 throw new InternalKernelException(e);
727 }
728 }
729
730 public ClassLoader getClassLoaderFor(Class type) throws GBeanNotFoundException {
731 try {
732 return (ClassLoader) invokeKernel("getClassLoaderFor", new Object[] {type}, new String[] {Class.class.getName()});
733 } catch (GBeanNotFoundException e) {
734 throw e;
735 } catch (RuntimeException e) {
736 throw e;
737 } catch (Exception e) {
738 throw new InternalKernelException(e);
739 }
740 }
741
742 public ClassLoader getClassLoaderFor(String shortName, Class type) throws GBeanNotFoundException {
743 try {
744 return (ClassLoader) invokeKernel("getClassLoaderFor", new Object[] {shortName, type}, new String[] {String.class.getName(), Class.class.getName()});
745 } catch (GBeanNotFoundException e) {
746 throw e;
747 } catch (RuntimeException e) {
748 throw e;
749 } catch (Exception e) {
750 throw new InternalKernelException(e);
751 }
752 }
753
754 public GBeanData getGBeanData(AbstractName name) throws GBeanNotFoundException, InternalKernelException {
755 try {
756 return (GBeanData) invokeKernel("getGBeanData", new Object[] {name}, new String[] {AbstractName.class.getName()});
757 } catch (GBeanNotFoundException e) {
758 throw e;
759 } catch (RuntimeException e) {
760 throw e;
761 } catch (Exception e) {
762 throw new InternalKernelException(e);
763 }
764 }
765
766 public GBeanData getGBeanData(String shortName) throws GBeanNotFoundException, InternalKernelException {
767 try {
768 return (GBeanData) invokeKernel("getGBeanData", new Object[] {shortName}, new String[] {String.class.getName()});
769 } catch (GBeanNotFoundException e) {
770 throw e;
771 } catch (RuntimeException e) {
772 throw e;
773 } catch (Exception e) {
774 throw new InternalKernelException(e);
775 }
776 }
777
778 public GBeanData getGBeanData(Class type) throws GBeanNotFoundException, InternalKernelException {
779 try {
780 return (GBeanData) invokeKernel("getGBeanData", new Object[] {type}, new String[] {Class.class.getName()});
781 } catch (GBeanNotFoundException e) {
782 throw e;
783 } catch (RuntimeException e) {
784 throw e;
785 } catch (Exception e) {
786 throw new InternalKernelException(e);
787 }
788 }
789
790 public GBeanData getGBeanData(String shortName, Class type) throws GBeanNotFoundException, InternalKernelException {
791 try {
792 return (GBeanData) invokeKernel("getGBeanData", new Object[] {shortName, type}, new String[] {String.class.getName(), Class.class.getName()});
793 } catch (GBeanNotFoundException e) {
794 throw e;
795 } catch (RuntimeException e) {
796 throw e;
797 } catch (Exception e) {
798 throw new InternalKernelException(e);
799 }
800 }
801
802 public AbstractName getAbstractNameFor(Object service) {
803 AbstractName name = proxyManager.getProxyTarget(service);
804 if (name != null) {
805 return name;
806 }
807 try {
808 return (AbstractName) invokeKernel("getAbstractNameFor", new Object[] {service}, new String[] {Object.class.getName()});
809 } catch (RuntimeException e) {
810 throw e;
811 } catch (Exception e) {
812 throw new InternalKernelException(e);
813 }
814 }
815
816 public String getShortNameFor(Object service) {
817 AbstractName name = getAbstractNameFor(service);
818 return (String) name.getName().get("name");
819 }
820
821 public boolean isRunning() {
822 return ((Boolean) getKernelAttribute("running")).booleanValue();
823 }
824
825 public Set listGBeans(AbstractNameQuery query) {
826 try {
827 return (Set) invokeKernel("listGBeans", new Object[] {query}, new String[] {AbstractNameQuery.class.getName()});
828 } catch (RuntimeException e) {
829 throw e;
830 } catch (Exception e) {
831 throw new InternalKernelException(e);
832 }
833 }
834
835 /**
836 * Throws UnsupportedOperationException. The dependency manager is not accesable over a remote connection.
837 */
838 public DependencyManager getDependencyManager() {
839 throw new UnsupportedOperationException("Dependency manager is not accessable by way of a remote connection");
840 }
841
842 /**
843 * Throws UnsupportedOperationException. The lifecycle monitor is not accesable over a remote connection.
844 */
845 public LifecycleMonitor getLifecycleMonitor() {
846 throw new UnsupportedOperationException("Lifecycle monitor is not accessable by way of a remote connection");
847 }
848
849 public ProxyManager getProxyManager() {
850 return proxyManager;
851 }
852
853 /**
854 * Throws UnsupportedOperationException. A remote kernel will alreayd be booted.
855 */
856 public void boot() throws Exception {
857 throw new UnsupportedOperationException("A remote kernel can not be booted");
858 }
859
860 private Object getKernelAttribute(String attributeName) {
861 try {
862 return mbeanServer.getAttribute(Kernel.KERNEL, attributeName);
863 } catch (Exception e) {
864 Throwable cause = unwrapJMException(e);
865 if (cause instanceof InstanceNotFoundException) {
866 throw new InternalKernelException("Kernel is not loaded");
867 } else if (cause instanceof AttributeNotFoundException) {
868 throw new InternalKernelException("KernelDelegate is out of synch with Kernel");
869 } else {
870 throw new InternalKernelException(cause);
871 }
872 }
873 }
874
875 private Object invokeKernel(String methodName, Object[] args, String[] types) throws Exception {
876 if(args != null && types != null && args.length != types.length) {
877 throw new IllegalArgumentException("Call to "+methodName+" has "+args.length+" arguments but "+types.length+" argument classes!");
878 }
879 try {
880 return mbeanServer.invoke(Kernel.KERNEL, methodName, args, types);
881 } catch (Exception e) {
882 Throwable cause = unwrapJMException(e);
883 if (cause instanceof InstanceNotFoundException) {
884 throw new InternalKernelException("Kernel is not loaded");
885 } else if (cause instanceof NoSuchMethodException) {
886 StringBuffer buf = new StringBuffer("KernelDelegate is out of synch with Kernel on ");
887 buf.append(methodName).append("(");
888 if(types != null) {
889 for (int i = 0; i < types.length; i++) {
890 String type = types[i];
891 if(i>0) buf.append(",");
892 buf.append(type);
893 }
894 }
895 buf.append(")");
896 throw new InternalKernelException(buf.toString());
897 } else if (cause instanceof JMException) {
898 throw new InternalKernelException(cause);
899 } else if (cause instanceof JMRuntimeException) {
900 throw new InternalKernelException(cause);
901 } else if (cause instanceof Error) {
902 throw (Error) cause;
903 } else if (cause instanceof Exception) {
904 throw (Exception) cause;
905 } else {
906 throw new InternalKernelException("Unknown throwable", cause);
907 }
908 }
909 }
910
911 private Throwable unwrapJMException(Throwable cause) {
912 while ((cause instanceof JMException || cause instanceof JMRuntimeException) && cause.getCause() != null) {
913 cause = cause.getCause();
914 }
915 return cause;
916 }
917 }