001    /*****************************************************************************
002     * Copyright (C) NanoContainer Organization. All rights reserved.            *
003     * ------------------------------------------------------------------------- *
004     * The software in this package is published under the terms of the BSD      *
005     * style license a copy of which has been included with this distribution in *
006     * the LICENSE.txt file.                                                     *
007     *                                                                           *
008     * Original code by Joerg Schaible                                           *
009     *****************************************************************************/
010    
011    package org.picocontainer.gems.jmx;
012    
013    import javax.management.MBeanInfo;
014    
015    import org.picocontainer.ComponentAdapter;
016    import org.picocontainer.PicoContainer;
017    
018    
019    /**
020     * A MBeanInfoProvider that searches for a MBeanInfo instance in the PicoContainer. The key of the MBeanInfo is
021     * calculated from the component type following naming conventions.
022     * @author Jörg Schaible
023     */
024    public class ComponentTypeConventionMBeanInfoProvider extends AbstractNamingConventionMBeanInfoProvider {
025    
026        /**
027         * Use the key of the component to search for a MBeanInfo in the PicoContainer. The matching MBeanInfo must be
028         * stored in the PicoContainer. The key of the MBeanInfo follows the naming scheme
029         * "<ComponentKey>MBeanInfo". The the component's key is a type, the class name is used as prefix
030         * otherwise the string representation of the key. The key part may already end with "MBean" as it would
031         * for components registered with the management interface as key, that follow the JMX naming conventions. As last
032         * resort the calculated key of the MBeanInfo is turned into a type that is used again as lookup key.
033         * @see org.picocontainer.gems.jmx.MBeanInfoProvider#provide(org.picocontainer.PicoContainer,
034         *      org.picocontainer.ComponentAdapter)
035         */
036        public MBeanInfo provide(final PicoContainer picoContainer, final ComponentAdapter componentAdapter) {
037            final Class mBeanType = componentAdapter.getComponentImplementation();
038            final String mBeanInfoName = mBeanType.getName() + "MBeanInfo";
039            return instantiateMBeanInfo(mBeanInfoName, picoContainer, mBeanType.getClassLoader());
040        }
041    
042    }