package camelinaction; import java.lang.management.ManagementFactory; import java.util.List; import javax.management.InstanceAlreadyExistsException; import javax.management.MBeanServer; import javax.management.ObjectName; import camelinaction.old.DeprecatedValidator; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class CamelComponentDeprecated implements CamelComponentDeprecatedMBean { private static final Logger LOG = LoggerFactory.getLogger(CamelComponentDeprecated.class); private MBeanServer mBeanServer; private ObjectName objectName; private DeprecatedValidator validator; public CamelComponentDeprecated() { validator = new DeprecatedValidator(); } public void init() { if (objectName == null) { try { objectName = getObjectName(); } catch (Exception e) { LOG.warn("Failed to create object name: ", e); throw new RuntimeException("Failed to create object name: ", e); } } if (mBeanServer == null) { mBeanServer = ManagementFactory.getPlatformMBeanServer(); } if (mBeanServer != null) { try { mBeanServer.registerMBean(this, objectName); } catch(InstanceAlreadyExistsException iaee) { // Try to remove and re-register try { mBeanServer.unregisterMBean(objectName); mBeanServer.registerMBean(this, objectName); } catch (Exception e) { LOG.warn("Failed to register mbean: ", e); throw new RuntimeException("Failed to register mbean: ", e); } } catch (Exception e) { LOG.warn("Failed to register mbean: ", e); throw new RuntimeException("Failed to register mbean: ", e); } } } public void destroy() { if (mBeanServer != null && objectName != null) { try { mBeanServer.unregisterMBean(objectName); } catch (Exception e) { LOG.warn("Failed to unregister mbean: ", e); throw new RuntimeException("Failed to unregister mbean: ", e); } } } protected ObjectName getObjectName() throws Exception { return new ObjectName("hawtio:type=CamelComponentDeprecated"); } @Override public List<String> findDeprecatedComponents() { try { return validator.findDeprecatedComponents(); } catch (Exception e) { LOG.warn("Error finding deprecated Camel components", e); } return null; } }