KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > geronimo > console > util > KernelManagementHelper


1 /**
2  * Licensed to the Apache Software Foundation (ASF) under one or more
3  * contributor license agreements. See the NOTICE file distributed with
4  * this work for additional information regarding copyright ownership.
5  * The ASF licenses this file to You under the Apache License, Version 2.0
6  * (the "License"); you may not use this file except in compliance with
7  * the License. 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.console.util;
18
19 import java.lang.reflect.Array JavaDoc;
20 import java.util.ArrayList JavaDoc;
21 import java.util.Arrays JavaDoc;
22 import java.util.Collections JavaDoc;
23 import java.util.HashMap JavaDoc;
24 import java.util.Iterator JavaDoc;
25 import java.util.List JavaDoc;
26 import java.util.Map JavaDoc;
27 import java.util.Set JavaDoc;
28 import javax.security.auth.Subject JavaDoc;
29 import javax.security.auth.callback.Callback JavaDoc;
30 import javax.security.auth.callback.CallbackHandler JavaDoc;
31 import javax.security.auth.callback.NameCallback JavaDoc;
32 import javax.security.auth.callback.PasswordCallback JavaDoc;
33 import javax.security.auth.callback.UnsupportedCallbackException JavaDoc;
34 import javax.security.auth.login.LoginException JavaDoc;
35 import javax.security.auth.spi.LoginModule JavaDoc;
36
37 import org.apache.geronimo.gbean.AbstractName;
38 import org.apache.geronimo.gbean.AbstractNameQuery;
39 import org.apache.geronimo.gbean.GBeanData;
40 import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory;
41 import org.apache.geronimo.kernel.GBeanNotFoundException;
42 import org.apache.geronimo.kernel.Kernel;
43 import org.apache.geronimo.kernel.Naming;
44 import org.apache.geronimo.kernel.config.Configuration;
45 import org.apache.geronimo.kernel.config.ConfigurationInfo;
46 import org.apache.geronimo.kernel.config.ConfigurationManager;
47 import org.apache.geronimo.kernel.config.ConfigurationModuleType;
48 import org.apache.geronimo.kernel.config.ConfigurationUtil;
49 import org.apache.geronimo.kernel.config.EditableConfigurationManager;
50 import org.apache.geronimo.kernel.config.InvalidConfigException;
51 import org.apache.geronimo.kernel.config.NoSuchStoreException;
52 import org.apache.geronimo.kernel.management.State;
53 import org.apache.geronimo.kernel.proxy.ProxyManager;
54 import org.apache.geronimo.kernel.repository.Artifact;
55 import org.apache.geronimo.management.AppClientModule;
56 import org.apache.geronimo.management.EJB;
57 import org.apache.geronimo.management.EJBModule;
58 import org.apache.geronimo.management.J2EEDeployedObject;
59 import org.apache.geronimo.management.J2EEModule;
60 import org.apache.geronimo.management.J2EEResource;
61 import org.apache.geronimo.management.JDBCDataSource;
62 import org.apache.geronimo.management.JDBCDriver;
63 import org.apache.geronimo.management.JDBCResource;
64 import org.apache.geronimo.management.JMSResource;
65 import org.apache.geronimo.management.Servlet;
66 import org.apache.geronimo.management.geronimo.J2EEApplication;
67 import org.apache.geronimo.management.geronimo.J2EEDomain;
68 import org.apache.geronimo.management.geronimo.J2EEServer;
69 import org.apache.geronimo.management.geronimo.JCAAdminObject;
70 import org.apache.geronimo.management.geronimo.JCAConnectionFactory;
71 import org.apache.geronimo.management.geronimo.JCAManagedConnectionFactory;
72 import org.apache.geronimo.management.geronimo.JCAResource;
73 import org.apache.geronimo.management.geronimo.JVM;
74 import org.apache.geronimo.management.geronimo.ResourceAdapter;
75 import org.apache.geronimo.management.geronimo.ResourceAdapterModule;
76 import org.apache.geronimo.management.geronimo.WebModule;
77 import org.apache.geronimo.security.jaas.JaasLoginModuleUse;
78 import org.apache.geronimo.system.logging.SystemLog;
79
80 /**
81  * An implementation of the ManagementHelper interface that uses a Geronimo
82  * kernel. That must be an in-VM kernel.
83  *
84  * @version $Rev:386276 $ $Date: 2006-11-24 08:28:42 -0500 (Fri, 24 Nov 2006) $
85  */

86 public class KernelManagementHelper implements ManagementHelper {
87     private final Kernel kernel;
88
89     public KernelManagementHelper(Kernel kernel) {
90         this.kernel = kernel;
91     }
92
93     public J2EEDomain[] getDomains() {
94         Set JavaDoc domainNames = kernel.listGBeans(new AbstractNameQuery(J2EEDomain.class.getName()));
95         J2EEDomain[] result = new J2EEDomain[domainNames.size()];
96         int i = 0;
97         for (Iterator JavaDoc iterator = domainNames.iterator(); iterator.hasNext();) {
98             AbstractName domainName = (AbstractName) iterator.next();
99             result[i++] = (J2EEDomain) kernel.getProxyManager().createProxy(domainName, J2EEDomain.class);
100         }
101         return result;
102     }
103
104     public J2EEServer[] getServers(J2EEDomain domain) {
105         return domain.getServerInstances();
106     }
107
108     public J2EEDeployedObject[] getDeployedObjects(J2EEServer server) {
109         return server.getDeployedObjectInstances();
110     }
111
112     public J2EEApplication[] getApplications(J2EEServer server) {
113         return server.getApplications();
114     }
115
116     public AppClientModule[] getAppClients(J2EEServer server) {
117         return server.getAppClients();
118     }
119
120     public WebModule[] getWebModules(J2EEServer server) {
121         return server.getWebModules();
122     }
123
124     public EJBModule[] getEJBModules(J2EEServer server) {
125         return server.getEJBModules();
126     }
127
128     public ResourceAdapterModule[] getRAModules(J2EEServer server) {
129         return server.getResourceAdapterModules();
130     }
131
132     public JCAManagedConnectionFactory[] getOutboundFactories(J2EEServer server, String JavaDoc connectionFactoryInterface) {
133         List JavaDoc list = new ArrayList JavaDoc();
134         ResourceAdapterModule[] modules = server.getResourceAdapterModules();
135         for (int i = 0; i < modules.length; i++) {
136             ResourceAdapterModule module = modules[i];
137             ResourceAdapter[] adapters = module.getResourceAdapterInstances();
138             for (int j = 0; j < adapters.length; j++) {
139                 ResourceAdapter adapter = adapters[j];
140                 JCAResource[] resources = adapter.getJCAResourceImplementations();
141                 for (int k = 0; k < resources.length; k++) {
142                     JCAResource resource = resources[k];
143                     JCAManagedConnectionFactory[] outboundFactories = resource.getOutboundFactories();
144                     list.addAll(Arrays.asList(outboundFactories));
145                 }
146             }
147
148         }
149         return (JCAManagedConnectionFactory[]) list.toArray(new JCAManagedConnectionFactory[list.size()]);
150     }
151
152     public ResourceAdapterModule[] getOutboundRAModules(J2EEServer server, String JavaDoc connectionFactoryInterface) {
153         return getOutboundRAModules(server, new String JavaDoc[]{connectionFactoryInterface});
154     }
155
156     public ResourceAdapterModule[] getOutboundRAModules(J2EEServer server, String JavaDoc[] connectionFactoryInterfaces) {
157         List JavaDoc list = new ArrayList JavaDoc();
158
159         ResourceAdapterModule[] modules = server.getResourceAdapterModules();
160
161         outer:
162         for (int i = 0; i < modules.length; i++) {
163             ResourceAdapterModule module = modules[i];
164             ResourceAdapter[] adapters = module.getResourceAdapterInstances();
165             for (int j = 0; j < adapters.length; j++) {
166                 ResourceAdapter adapter = adapters[j];
167                 JCAResource[] resources = adapter.getJCAResourceImplementations();
168                 for (int k = 0; k < resources.length; k++) {
169                     JCAResource resource = resources[k];
170                     JCAManagedConnectionFactory[] outboundFactories = resource.getOutboundFactories(connectionFactoryInterfaces);
171                     if (outboundFactories.length > 0) {
172                         list.add(module);
173                         continue outer;
174                     }
175                 }
176             }
177
178         }
179         return (ResourceAdapterModule[]) list.toArray(new ResourceAdapterModule[list.size()]);
180     }
181
182     public ResourceAdapterModule[] getAdminObjectModules(J2EEServer server, String JavaDoc[] adminObjectInterfaces) {
183         List JavaDoc list = new ArrayList JavaDoc();
184
185         ResourceAdapterModule[] modules = server.getResourceAdapterModules();
186
187         outer:
188         for (int i = 0; i < modules.length; i++) {
189             ResourceAdapterModule module = modules[i];
190             ResourceAdapter[] adapters = module.getResourceAdapterInstances();
191             for (int j = 0; j < adapters.length; j++) {
192                 ResourceAdapter adapter = adapters[j];
193                 JCAResource[] resources = adapter.getJCAResourceImplementations();
194                 for (int k = 0; k < resources.length; k++) {
195                     JCAResource resource = resources[k];
196                     JCAAdminObject[] adminObjects = resource.getAdminObjectInstances(adminObjectInterfaces);
197                     if (adminObjects.length > 0) {
198                         list.add(module);
199                         continue outer;
200                     }
201                 }
202             }
203
204         }
205         return (ResourceAdapterModule[]) list.toArray(new ResourceAdapterModule[list.size()]);
206     }
207
208     public JCAManagedConnectionFactory[] getOutboundFactories(ResourceAdapterModule module) {
209         return getOutboundFactories(module, (String JavaDoc[]) null);
210     }
211
212     public JCAManagedConnectionFactory[] getOutboundFactories(ResourceAdapterModule module, String JavaDoc connectionFactoryInterface) {
213         return getOutboundFactories(module, new String JavaDoc[]{connectionFactoryInterface});
214     }
215
216     public JCAManagedConnectionFactory[] getOutboundFactories(ResourceAdapterModule module, String JavaDoc[] connectionFactoryInterfaces) {
217         List JavaDoc list = new ArrayList JavaDoc();
218
219         ResourceAdapter[] resourceAdapters = module.getResourceAdapterInstances();
220         for (int i = 0; i < resourceAdapters.length; i++) {
221             ResourceAdapter resourceAdapter = resourceAdapters[i];
222             JCAResource[] jcaResources = resourceAdapter.getJCAResourceImplementations();
223             for (int j = 0; j < jcaResources.length; j++) {
224                 JCAResource jcaResource = jcaResources[j];
225                 JCAManagedConnectionFactory[] outboundFactories = jcaResource.getOutboundFactories(connectionFactoryInterfaces);
226                 list.addAll(Arrays.asList(outboundFactories));
227             }
228         }
229
230         return (JCAManagedConnectionFactory[]) list.toArray(new JCAManagedConnectionFactory[list.size()]);
231     }
232
233     public JCAAdminObject[] getAdminObjects(ResourceAdapterModule module, String JavaDoc[] adminObjectInterfaces) {
234         List JavaDoc list = new ArrayList JavaDoc();
235         ResourceAdapter[] resourceAdapters = module.getResourceAdapterInstances();
236         for (int i = 0; i < resourceAdapters.length; i++) {
237             ResourceAdapter resourceAdapter = resourceAdapters[i];
238             JCAResource[] jcaResources = resourceAdapter.getJCAResourceImplementations();
239             for (int j = 0; j < jcaResources.length; j++) {
240                 JCAResource jcaResource = jcaResources[j];
241                 JCAAdminObject[] adminObjects = jcaResource.getAdminObjectInstances(adminObjectInterfaces);
242                 list.addAll(Arrays.asList(adminObjects));
243             }
244         }
245
246         return (JCAAdminObject[]) list.toArray(new JCAAdminObject[list.size()]);
247     }
248
249     public J2EEResource[] getResources(J2EEServer server) {
250         return server.getResourceInstances();
251     }
252
253     public JCAResource[] getJCAResources(J2EEServer server) {
254         List JavaDoc list = new ArrayList JavaDoc();
255         ResourceAdapterModule[] modules = server.getResourceAdapterModules();
256         for (int i = 0; i < modules.length; i++) {
257             ResourceAdapterModule module = modules[i];
258             ResourceAdapter[] adapters = module.getResourceAdapterInstances();
259             for (int j = 0; j < adapters.length; j++) {
260                 ResourceAdapter adapter = adapters[j];
261                 JCAResource[] resources = adapter.getJCAResourceImplementations();
262                 list.addAll(Arrays.asList(resources));
263             }
264
265         }
266         return (JCAResource[]) list.toArray(new JCAResource[list.size()]);
267     }
268
269     public JDBCResource[] getJDBCResources(J2EEServer server) {
270         return new JDBCResource[0]; // Geronimo uses JCA resources for this
271
}
272
273     public JMSResource[] getJMSResources(J2EEServer server) {
274         return new JMSResource[0]; // Geronimo uses JCA resources for this
275
}
276
277     public JVM[] getJavaVMs(J2EEServer server) {
278         return server.getJavaVMInstances();
279     }
280
281     public SystemLog getSystemLog(JVM jvm) {
282         return jvm.getSystemLog();
283     }
284
285     // application properties
286
public J2EEModule[] getModules(J2EEApplication application) {
287         return application.getModulesInstances();
288     }
289
290     public AppClientModule[] getAppClients(J2EEApplication application) {
291         return application.getClientModules();
292     }
293
294     public WebModule[] getWebModules(J2EEApplication application) {
295         return application.getWebModules();
296     }
297
298     public EJBModule[] getEJBModules(J2EEApplication application) {
299         return application.getEJBModules();
300     }
301
302     public ResourceAdapterModule[] getRAModules(J2EEApplication application) {
303         return application.getRAModules();
304     }
305
306
307     public JCAResource[] getJCAResources(J2EEApplication application) {
308         List JavaDoc list = new ArrayList JavaDoc();
309         ResourceAdapterModule[] modules = application.getRAModules();
310         for (int i = 0; i < modules.length; i++) {
311             ResourceAdapterModule module = modules[i];
312             ResourceAdapter[] adapters = module.getResourceAdapterInstances();
313             for (int j = 0; j < adapters.length; j++) {
314                 ResourceAdapter adapter = adapters[j];
315                 JCAResource[] resources = adapter.getJCAResourceImplementations();
316                 list.addAll(Arrays.asList(resources));
317             }
318
319         }
320         return (JCAResource[]) list.toArray(new JCAResource[list.size()]);
321     }
322
323     public JDBCResource[] getJDBCResources(J2EEApplication application) {
324         return new JDBCResource[0]; // Geronimo uses JCAResources for this
325
}
326
327     public JMSResource[] getJMSResources(J2EEApplication application) {
328         return new JMSResource[0]; // Geronimo uses JCAResources for this
329
}
330
331     // module properties
332
public EJB[] getEJBs(EJBModule module) {
333         return new EJB[0]; //todo
334
}
335
336     public Servlet[] getServlets(WebModule module) {
337         return new Servlet[0]; //todo
338
}
339
340     public ResourceAdapter[] getResourceAdapters(ResourceAdapterModule module) {
341         return module.getResourceAdapterInstances();
342     }
343
344     // resource adapter properties
345
public JCAResource[] getRAResources(ResourceAdapter adapter) {
346         return adapter.getJCAResourceImplementations();
347     }
348
349     // resource properties
350
public JDBCDataSource[] getDataSource(JDBCResource resource) {
351         return new JDBCDataSource[0]; //todo
352
}
353
354     public JDBCDriver[] getDriver(JDBCDataSource dataSource) {
355         return new JDBCDriver[0]; //todo
356
}
357
358     public JCAConnectionFactory[] getConnectionFactories(JCAResource resource) {
359         return resource.getConnectionFactoryInstances();
360     }
361
362     public JCAAdminObject[] getAdminObjects(JCAResource resource) {
363         return resource.getAdminObjectInstances();
364     }
365
366     public JCAManagedConnectionFactory getManagedConnectionFactory(JCAConnectionFactory factory) {
367         return factory.getManagedConnectionFactoryInstance();
368     }
369
370     public Object JavaDoc getObject(AbstractName objectName) {
371         ClassLoader JavaDoc cl = null;
372         try {
373             cl = kernel.getClassLoaderFor(objectName);
374         } catch(GBeanNotFoundException e) {
375             cl = KernelManagementHelper.class.getClassLoader();
376         }
377         return kernel.getProxyManager().createProxy(objectName, cl);
378     }
379
380     public Artifact getConfigurationNameFor(AbstractName abstractName) {
381         return abstractName.getArtifact();
382     }
383
384     public String JavaDoc getGBeanDescription(AbstractName abstractName) {
385         try {
386             return kernel.getGBeanInfo(abstractName).getName();
387         } catch (GBeanNotFoundException e) {
388             return null;
389         }
390     }
391
392     public void testLoginModule(J2EEServer server, LoginModule JavaDoc module, Map JavaDoc options) {
393         options.put(JaasLoginModuleUse.KERNEL_NAME_LM_OPTION, kernel.getKernelName());
394         options.put(JaasLoginModuleUse.SERVERINFO_LM_OPTION, server.getServerInfo());
395         if (!options.containsKey(JaasLoginModuleUse.CLASSLOADER_LM_OPTION)) {
396             options.put(JaasLoginModuleUse.CLASSLOADER_LM_OPTION, module.getClass().getClassLoader());
397         }
398         module.initialize(null, null, new HashMap JavaDoc(), options);
399     }
400
401     public Subject JavaDoc testLoginModule(final J2EEServer server, final LoginModule JavaDoc module, final Map JavaDoc options, final String JavaDoc username, final String JavaDoc password) throws LoginException JavaDoc {
402         options.put(JaasLoginModuleUse.KERNEL_NAME_LM_OPTION, kernel.getKernelName());
403         if (!options.containsKey(JaasLoginModuleUse.CLASSLOADER_LM_OPTION)) {
404             options.put(JaasLoginModuleUse.CLASSLOADER_LM_OPTION, module.getClass().getClassLoader());
405         }
406         options.put(JaasLoginModuleUse.SERVERINFO_LM_OPTION, server.getServerInfo());
407         Subject JavaDoc sub = new Subject JavaDoc();
408         CallbackHandler JavaDoc handler = new CallbackHandler JavaDoc() {
409             public void handle(Callback JavaDoc[] callbacks) throws UnsupportedCallbackException JavaDoc {
410                 for (int i = 0; i < callbacks.length; i++) {
411                     Callback JavaDoc callback = callbacks[i];
412                     if (callback instanceof PasswordCallback JavaDoc) {
413                         ((PasswordCallback JavaDoc) callback).setPassword(password.toCharArray());
414                     } else if (callback instanceof NameCallback JavaDoc) {
415                         ((NameCallback JavaDoc) callback).setName(username);
416                     } else {
417                         throw new UnsupportedCallbackException JavaDoc(callback);
418                     }
419                 }
420             }
421         };
422         module.initialize(sub, handler, new HashMap JavaDoc(), options);
423         if (module.login() && module.commit()) {
424             return sub;
425         } else {
426             module.abort();
427         }
428         return null;
429     }
430
431     public Object JavaDoc[] findByInterface(Class JavaDoc iface) {
432         Set JavaDoc set = kernel.listGBeans(new AbstractNameQuery(iface.getName()));
433         Object JavaDoc[] result = new Object JavaDoc[set.size()];
434         int i = 0;
435         for (Iterator JavaDoc it = set.iterator(); it.hasNext();) {
436             AbstractName name = (AbstractName) it.next();
437             result[i++] = kernel.getProxyManager().createProxy(name, iface.getClassLoader());
438         }
439         return result;
440     }
441
442     public AbstractName getNameFor(Object JavaDoc component) {
443         return kernel.getAbstractNameFor(component);
444     }
445
446     public ConfigurationData[] getConfigurations(ConfigurationModuleType type, boolean includeChildModules) {
447         ConfigurationManager mgr = ConfigurationUtil.getConfigurationManager(kernel);
448         List JavaDoc stores = mgr.listStores();
449         List JavaDoc results = new ArrayList JavaDoc();
450         for (Iterator JavaDoc i = stores.iterator(); i.hasNext();) {
451             AbstractName storeName = (AbstractName) i.next();
452             try {
453                 List JavaDoc infos = mgr.listConfigurations(storeName);
454                 for (Iterator JavaDoc j = infos.iterator(); j.hasNext();) {
455                     ConfigurationInfo info = (ConfigurationInfo) j.next();
456                     AbstractName configuration = Configuration.getConfigurationAbstractName(info.getConfigID());
457                     if (type == null || type.getValue() == info.getType().getValue()) {
458                         J2EEDeployedObject module = getModuleForConfiguration(info.getConfigID());
459                         results.add(new ConfigurationData(info.getConfigID(), configuration, null, info.getState(), info.getType(), module == null ? null : kernel.getAbstractNameFor(module)));
460                     }
461                     if (includeChildModules && info.getType().getValue() == ConfigurationModuleType.EAR.getValue() && info.getState().toInt() == State.RUNNING_INDEX)
462                     {
463                         J2EEApplication app = (J2EEApplication) getModuleForConfiguration(info.getConfigID());
464                         if (app == null) {
465                             throw new IllegalStateException JavaDoc("Unable to load children for J2EE Application '" + info.getConfigID() + "' (no J2EEApplication found)");
466                         }
467                         Object JavaDoc[] modules = null;
468                         if (type == null) {
469                             modules = app.getModulesInstances();
470                         } else if (type.equals(ConfigurationModuleType.CAR)) {
471                             modules = app.getClientModules();
472                         } else if (type.equals(ConfigurationModuleType.EJB)) {
473                             modules = app.getEJBModules();
474                         } else if (type.equals(ConfigurationModuleType.RAR)) {
475                             modules = app.getRAModules();
476                         } else if (type.equals(ConfigurationModuleType.WAR)) {
477                             modules = app.getWebModules();
478                         } //todo: handle dynamically registered module types, etc.
479
if (modules == null) continue;
480                         for (int k = 0; k < modules.length; k++) {
481                             Object JavaDoc module = modules[k];
482                             ConfigurationModuleType moduleType = type;
483                             if (moduleType == null) {
484                                 if (module instanceof WebModule) {
485                                     moduleType = ConfigurationModuleType.WAR;
486                                 } else if (module instanceof EJBModule) {
487                                     moduleType = ConfigurationModuleType.EJB;
488                                 } else if (module instanceof ResourceAdapterModule) {
489                                     moduleType = ConfigurationModuleType.RAR;
490                                 } else if (module instanceof AppClientModule) moduleType = ConfigurationModuleType.CAR;
491                             }
492                             String JavaDoc moduleName;
493                             if (type != null && type.equals(ConfigurationModuleType.WAR)) {
494                                 moduleName = ((WebModule) module).getWARName();
495                             } else {
496                                 //todo: solutions for other module types
497
moduleName = (String JavaDoc) kernel.getAbstractNameFor(module).getName().get(NameFactory.J2EE_NAME);
498                             }
499                             results.add(new ConfigurationData(info.getConfigID(), configuration, moduleName, info.getState(), moduleType, kernel.getAbstractNameFor(module)));
500                         }
501                     }
502                 }
503             } catch (NoSuchStoreException e) {
504                 // we just got this list so this should not happen
505
// in the unlikely event it does, just continue
506
} catch (InvalidConfigException e) {
507                 throw new RuntimeException JavaDoc("Bad configID; should never happen");
508             }
509         }
510         Collections.sort(results);
511         return (ConfigurationData[]) results.toArray(new ConfigurationData[results.size()]);
512     }
513
514     /**
515      * Gets a JSR-77 Module (WebModule, EJBModule, etc.) for the specified configuration.
516      * Note: this only works if the configuration is running at the time you ask.
517      *
518      * @return The Module, or null if the configuration is not running.
519      */

520     public J2EEDeployedObject getModuleForConfiguration(Artifact configuration) {
521         ConfigurationManager manager = ConfigurationUtil.getConfigurationManager(kernel);
522         Configuration config = manager.getConfiguration(configuration);
523         if (config == null || !manager.isRunning(configuration)) {
524             return null; // The configuration is not running, so we can't get its contents
525
}
526         ConfigurationModuleType type = config.getModuleType();
527         AbstractName result;
528         try {
529             if (type.equals(ConfigurationModuleType.CAR)) {
530                 result = config.findGBean(new AbstractNameQuery(AppClientModule.class.getName()));
531             } else if (type.equals(ConfigurationModuleType.EAR)) {
532                 result = config.findGBean(new AbstractNameQuery(J2EEApplication.class.getName()));
533             } else if (type.equals(ConfigurationModuleType.EJB)) {
534                 result = config.findGBean(new AbstractNameQuery(EJBModule.class.getName()));
535             } else if (type.equals(ConfigurationModuleType.RAR)) {
536                 result = config.findGBean(new AbstractNameQuery(ResourceAdapterModule.class.getName()));
537             } else if (type.equals(ConfigurationModuleType.WAR)) {
538                 result = config.findGBean(new AbstractNameQuery(WebModule.class.getName()));
539             } else {
540                 return null;
541             }
542             return (J2EEDeployedObject) kernel.getProxyManager().createProxy(result, getClass().getClassLoader());
543         } catch (GBeanNotFoundException e) {
544             throw new IllegalStateException JavaDoc("Bad config ID: " + e.getMessage());
545         }
546     }
547
548     public Object JavaDoc[] getGBeansImplementing(Class JavaDoc iface) {
549         Set JavaDoc set = kernel.listGBeans(new AbstractNameQuery(iface.getName()));
550         Object JavaDoc[] result = (Object JavaDoc[]) Array.newInstance(iface, set.size());
551         int index = 0;
552         ProxyManager mgr = kernel.getProxyManager();
553         for (Iterator JavaDoc it = set.iterator(); it.hasNext();) {
554             AbstractName name = (AbstractName) it.next();
555             result[index++] = mgr.createProxy(name, iface);
556         }
557         return result;
558     }
559     
560     /**
561      * Adds a new GBean to an existing Configuration.
562      * @param configID The configuration to add the GBean to.
563      * @param gbean The data representing the GBean to add.
564      * @param start If true, the GBean should be started as part of this call.
565      */

566     public void addGBeanToConfiguration(Artifact configID, GBeanData gbean, boolean start) {
567         EditableConfigurationManager mgr = ConfigurationUtil.getEditableConfigurationManager(kernel);
568         try {
569             mgr.addGBeanToConfiguration(configID, gbean, start);
570         } catch (InvalidConfigException e) {
571             throw new RuntimeException JavaDoc("Bad configID. configID = "+configID, e);
572         } finally {
573             ConfigurationUtil.releaseConfigurationManager(kernel, mgr);
574         }
575     }
576
577     /**
578      * This method returns the Naming object of the kernel.
579      */

580     public Naming getNaming() {
581         return kernel.getNaming();
582     }
583
584     /**
585      * Helper method to connect to a remote kernel.
586      */

587     public static KernelManagementHelper getRemoteKernelManager(String JavaDoc host, String JavaDoc user, String JavaDoc password) throws java.io.IOException JavaDoc {
588         String JavaDoc uri = "jmx:rmi://" + host + "/jndi/rmi:/JMXConnector";
589         java.util.Map JavaDoc environment = new java.util.HashMap JavaDoc();
590         String JavaDoc[] credentials = new String JavaDoc[]{user, password};
591         environment.put(javax.management.remote.JMXConnector.CREDENTIALS, credentials);
592         javax.management.remote.JMXServiceURL JavaDoc address = new javax.management.remote.JMXServiceURL JavaDoc("service:" + uri);
593         javax.management.remote.JMXConnector JavaDoc jmxConnector = javax.management.remote.JMXConnectorFactory.connect(address, environment);
594         javax.management.MBeanServerConnection JavaDoc mbServerConnection = jmxConnector.getMBeanServerConnection();
595         Kernel kernel = new org.apache.geronimo.system.jmx.KernelDelegate(mbServerConnection);
596         return new KernelManagementHelper(kernel);
597     }
598 }
599
Popular Tags