package org.neo4j.kernel.impl.management; import javax.management.DynamicMBean; import javax.management.NotCompliantMBeanException; import javax.management.ObjectName; import org.neo4j.helpers.Service; import org.neo4j.kernel.KernelExtension.KernelData; public abstract class ManagementBeanProvider extends Service { final Class<?> beanInterface; private final String beanName; protected ManagementBeanProvider( Class<?> beanInterface ) { this( beanName( beanInterface ), beanInterface ); } ManagementBeanProvider( String beanName ) { this( beanName, DynamicMBean.class ); } private ManagementBeanProvider( String beanName, Class<?> beanInterface ) { super( beanName ); this.beanName = beanName; this.beanInterface = beanInterface; } private static String beanName( Class<?> iface ) { if ( iface.isInterface() ) { try { return (String) iface.getField( "NAME" ).get( null ); } catch ( Exception fallthrough ) { } } throw new IllegalArgumentException( iface + " is not a Neo4j Management Been interface" ); } protected abstract Neo4jMBean createMBean( KernelData kernel ) throws NotCompliantMBeanException; protected Neo4jMBean createMXBean( KernelData kernel ) throws NotCompliantMBeanException { return createMBean( kernel ); } Neo4jMBean loadBeen( KernelData kernel ) { try { if ( BeanProxy.supportsMxBeans() ) { return createMXBean( kernel ); } else { return createMBean( kernel ); } } catch ( Exception e ) { return null; } } ObjectName getObjectName( KernelData kernel ) { ObjectName name = JmxExtension.getObjectName( kernel, beanInterface, beanName ); if ( name == null ) { throw new IllegalArgumentException( beanInterface + " is not a Neo4j Management Bean interface" ); } return name; } }