01: /*****************************************************************************
02: * Copyright (C) NanoContainer Organization. All rights reserved. *
03: * ------------------------------------------------------------------------- *
04: * The software in this package is published under the terms of the BSD *
05: * style license a copy of which has been included with this distribution in *
06: * the LICENSE.txt file. *
07: * *
08: * Original code by Joerg Schaible *
09: *****************************************************************************/package org.picocontainer.gems.jmx;
10:
11: import javax.management.MBeanInfo;
12:
13: import org.picocontainer.ComponentAdapter;
14: import org.picocontainer.PicoContainer;
15:
16: /**
17: * A MBeanInfoProvider that searches for a MBeanInfo instance in the PicoContainer. Keys of both components follow
18: * naming conventions.
19: * @author Jörg Schaible
20: */
21: public class ComponentKeyConventionMBeanInfoProvider extends
22: AbstractNamingConventionMBeanInfoProvider {
23:
24: /**
25: * Use the key of the component to search for a MBeanInfo in the PicoContainer. The matching MBeanInfo must be
26: * stored in the PicoContainer. The key of the MBeanInfo follows the naming scheme
27: * "<ComponentKey>MBeanInfo". The the component's key is a type, the class name is used as prefix
28: * otherwise the string representation of the key. The key part may already end with "MBean" as it would
29: * for components registered with the management interface as key, that follow the JMX naming conventions. As last
30: * resort the calculated key of the MBeanInfo is turned into a type that is used again as lookup key.
31: * @see org.picocontainer.gems.jmx.MBeanInfoProvider#provide(org.picocontainer.PicoContainer,
32: * org.picocontainer.ComponentAdapter)
33: */
34: public MBeanInfo provide(final PicoContainer picoContainer,
35: final ComponentAdapter componentAdapter) {
36: final Object key = componentAdapter.getComponentKey();
37: final String prefix = key instanceof Class ? ((Class) key)
38: .getName() : key.toString();
39: final String mBeanInfoName = prefix
40: + (prefix.endsWith("MBean") ? "Info" : "MBeanInfo");
41: return instantiateMBeanInfo(mBeanInfoName, picoContainer,
42: componentAdapter.getComponentImplementation()
43: .getClassLoader());
44: }
45:
46: }
|