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.console.util;
018
019 import java.lang.reflect.Array;
020 import java.util.ArrayList;
021 import java.util.Arrays;
022 import java.util.Collections;
023 import java.util.HashMap;
024 import java.util.Iterator;
025 import java.util.List;
026 import java.util.Map;
027 import java.util.Set;
028 import javax.security.auth.Subject;
029 import javax.security.auth.callback.Callback;
030 import javax.security.auth.callback.CallbackHandler;
031 import javax.security.auth.callback.NameCallback;
032 import javax.security.auth.callback.PasswordCallback;
033 import javax.security.auth.callback.UnsupportedCallbackException;
034 import javax.security.auth.login.LoginException;
035 import javax.security.auth.spi.LoginModule;
036
037 import org.apache.geronimo.gbean.AbstractName;
038 import org.apache.geronimo.gbean.AbstractNameQuery;
039 import org.apache.geronimo.gbean.GBeanData;
040 import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory;
041 import org.apache.geronimo.kernel.GBeanNotFoundException;
042 import org.apache.geronimo.kernel.Kernel;
043 import org.apache.geronimo.kernel.Naming;
044 import org.apache.geronimo.kernel.config.Configuration;
045 import org.apache.geronimo.kernel.config.ConfigurationInfo;
046 import org.apache.geronimo.kernel.config.ConfigurationManager;
047 import org.apache.geronimo.kernel.config.ConfigurationModuleType;
048 import org.apache.geronimo.kernel.config.ConfigurationUtil;
049 import org.apache.geronimo.kernel.config.EditableConfigurationManager;
050 import org.apache.geronimo.kernel.config.InvalidConfigException;
051 import org.apache.geronimo.kernel.config.NoSuchStoreException;
052 import org.apache.geronimo.kernel.management.State;
053 import org.apache.geronimo.kernel.proxy.ProxyManager;
054 import org.apache.geronimo.kernel.repository.Artifact;
055 import org.apache.geronimo.management.AppClientModule;
056 import org.apache.geronimo.management.EJB;
057 import org.apache.geronimo.management.EJBModule;
058 import org.apache.geronimo.management.J2EEDeployedObject;
059 import org.apache.geronimo.management.J2EEModule;
060 import org.apache.geronimo.management.J2EEResource;
061 import org.apache.geronimo.management.JDBCDataSource;
062 import org.apache.geronimo.management.JDBCDriver;
063 import org.apache.geronimo.management.JDBCResource;
064 import org.apache.geronimo.management.JMSResource;
065 import org.apache.geronimo.management.Servlet;
066 import org.apache.geronimo.management.geronimo.J2EEApplication;
067 import org.apache.geronimo.management.geronimo.J2EEDomain;
068 import org.apache.geronimo.management.geronimo.J2EEServer;
069 import org.apache.geronimo.management.geronimo.JCAAdminObject;
070 import org.apache.geronimo.management.geronimo.JCAConnectionFactory;
071 import org.apache.geronimo.management.geronimo.JCAManagedConnectionFactory;
072 import org.apache.geronimo.management.geronimo.JCAResource;
073 import org.apache.geronimo.management.geronimo.JVM;
074 import org.apache.geronimo.management.geronimo.ResourceAdapter;
075 import org.apache.geronimo.management.geronimo.ResourceAdapterModule;
076 import org.apache.geronimo.management.geronimo.WebModule;
077 import org.apache.geronimo.security.jaas.JaasLoginModuleUse;
078 import org.apache.geronimo.system.logging.SystemLog;
079
080 /**
081 * An implementation of the ManagementHelper interface that uses a Geronimo
082 * kernel. That must be an in-VM kernel.
083 *
084 * @version $Rev:386276 $ $Date: 2007-06-14 15:38:13 -0400 (Thu, 14 Jun 2007) $
085 */
086 public class KernelManagementHelper implements ManagementHelper {
087 private final Kernel kernel;
088
089 public KernelManagementHelper(Kernel kernel) {
090 this.kernel = kernel;
091 }
092
093 public J2EEDomain[] getDomains() {
094 Set domainNames = kernel.listGBeans(new AbstractNameQuery(J2EEDomain.class.getName()));
095 J2EEDomain[] result = new J2EEDomain[domainNames.size()];
096 int i = 0;
097 for (Iterator iterator = domainNames.iterator(); iterator.hasNext();) {
098 AbstractName domainName = (AbstractName) iterator.next();
099 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 connectionFactoryInterface) {
133 List list = new ArrayList();
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 connectionFactoryInterface) {
153 return getOutboundRAModules(server, new String[]{connectionFactoryInterface});
154 }
155
156 public ResourceAdapterModule[] getOutboundRAModules(J2EEServer server, String[] connectionFactoryInterfaces) {
157 List list = new ArrayList();
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[] adminObjectInterfaces) {
183 List list = new ArrayList();
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[]) null);
210 }
211
212 public JCAManagedConnectionFactory[] getOutboundFactories(ResourceAdapterModule module, String connectionFactoryInterface) {
213 return getOutboundFactories(module, new String[]{connectionFactoryInterface});
214 }
215
216 public JCAManagedConnectionFactory[] getOutboundFactories(ResourceAdapterModule module, String[] connectionFactoryInterfaces) {
217 List list = new ArrayList();
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[] adminObjectInterfaces) {
234 List list = new ArrayList();
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 list = new ArrayList();
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 list = new ArrayList();
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 getObject(AbstractName objectName) {
371 ClassLoader 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 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 module, Map 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(), options);
399 }
400
401 public Subject testLoginModule(final J2EEServer server, final LoginModule module, final Map options, final String username, final String password) throws LoginException {
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 sub = new Subject();
408 CallbackHandler handler = new CallbackHandler() {
409 public void handle(Callback[] callbacks) throws UnsupportedCallbackException {
410 for (int i = 0; i < callbacks.length; i++) {
411 Callback callback = callbacks[i];
412 if (callback instanceof PasswordCallback) {
413 ((PasswordCallback) callback).setPassword(password.toCharArray());
414 } else if (callback instanceof NameCallback) {
415 ((NameCallback) callback).setName(username);
416 } else {
417 throw new UnsupportedCallbackException(callback);
418 }
419 }
420 }
421 };
422 module.initialize(sub, handler, new HashMap(), options);
423 if (module.login() && module.commit()) {
424 return sub;
425 } else {
426 module.abort();
427 }
428 return null;
429 }
430
431 public Object[] findByInterface(Class iface) {
432 Set set = kernel.listGBeans(new AbstractNameQuery(iface.getName()));
433 Object[] result = new Object[set.size()];
434 int i = 0;
435 for (Iterator 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 component) {
443 return kernel.getAbstractNameFor(component);
444 }
445
446 public ConfigurationData[] getConfigurations(ConfigurationModuleType type, boolean includeChildModules) {
447 ConfigurationManager mgr = ConfigurationUtil.getConfigurationManager(kernel);
448 List stores = mgr.listStores();
449 List results = new ArrayList();
450 for (Iterator i = stores.iterator(); i.hasNext();) {
451 AbstractName storeName = (AbstractName) i.next();
452 try {
453 List infos = mgr.listConfigurations(storeName);
454 for (Iterator 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("Unable to load children for J2EE Application '" + info.getConfigID() + "' (no J2EEApplication found)");
466 }
467 Object[] 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 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 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) 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("Bad configID; should never happen", e);
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("Bad config ID: " + e.getMessage(), e);
545 }
546 }
547
548 public Object[] getGBeansImplementing(Class iface) {
549 Set set = kernel.listGBeans(new AbstractNameQuery(iface.getName()));
550 Object[] result = (Object[]) Array.newInstance(iface, set.size());
551 int index = 0;
552 ProxyManager mgr = kernel.getProxyManager();
553 for (Iterator 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("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 host, String user, String password) throws java.io.IOException {
588 String uri = "jmx:rmi://" + host + "/jndi/rmi:/JMXConnector";
589 java.util.Map environment = new java.util.HashMap();
590 String[] credentials = new String[]{user, password};
591 environment.put(javax.management.remote.JMXConnector.CREDENTIALS, credentials);
592 javax.management.remote.JMXServiceURL address = new javax.management.remote.JMXServiceURL("service:" + uri);
593 javax.management.remote.JMXConnector jmxConnector = javax.management.remote.JMXConnectorFactory.connect(address, environment);
594 javax.management.MBeanServerConnection mbServerConnection = jmxConnector.getMBeanServerConnection();
595 Kernel kernel = new org.apache.geronimo.system.jmx.KernelDelegate(mbServerConnection);
596 return new KernelManagementHelper(kernel);
597 }
598 }