Red Hat Application Migration Toolkit
package com.googlecode.arit.mbeans; import com.googlecode.arit.Messages; import com.googlecode.arit.mbeans.MBeanAccessor; import com.googlecode.arit.mbeans.MBeanServerInspector; import com.googlecode.arit.resource.CleanerPlugin; import com.googlecode.arit.resource.ResourceScanner; import com.googlecode.arit.resource.ResourceType; import com.googlecode.arit.resource.SimpleResource; import com.googlecode.arit.resource.ResourceScanner.ResourceListener; import java.util.ArrayList; import java.util.Iterator; import java.util.Set; import javax.management.JMException; import javax.management.MBeanServer; import javax.management.MBeanServerFactory; import javax.management.MalformedObjectNameException; import javax.management.ObjectName; import javax.management.QueryExp; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; public class MBeanScanner implements ResourceScanner, CleanerPlugin { private static final Log LOG = LogFactory.getLog(MBeanScanner.class); @Autowired @Qualifier("mbean") private ResourceType resourceType; @Autowired private MBeanServerInspector mbsInspector; @Autowired( required = false ) private Messages messages; public boolean isAvailable() { return this.mbsInspector.isAvailable(); } public String getDescription() { return "MBeans"; } public void scanForResources(ResourceListener resourceEventListener) { ArrayList mbeanServers = MBeanServerFactory.findMBeanServer((String)null); Iterator var3 = mbeanServers.iterator(); while(true) { while(var3.hasNext()) { MBeanServer mbs = (MBeanServer)var3.next(); MBeanAccessor mbeanAccessor = this.mbsInspector.inspect(mbs); if(mbeanAccessor == null) { String mbeans1 = "Unable to inspect MBeanServer of type " + mbs.getClass().getName(); LOG.error(mbeans1); if(this.messages != null) { this.messages.addMessage(mbeans1); } } else { Set mbeans; try { mbeans = mbs.queryNames(new ObjectName("*:*"), (QueryExp)null); } catch (MalformedObjectNameException var11) { throw new Error(var11); } Iterator ex = mbeans.iterator(); while(ex.hasNext()) { ObjectName name = (ObjectName)ex.next(); Object mbean = mbeanAccessor.retrieve(name); SimpleResource mbeanResource = new SimpleResource(this.resourceType, mbean, "MBean: " + name); mbeanResource.addClassloaderReference(mbean.getClass().getClassLoader(), "Implementation class: " + mbean.getClass().getName()); resourceEventListener.onResourceFound(mbeanResource); } } } return; } } public void clean(ClassLoader classLoader) { ArrayList mbeanServers = MBeanServerFactory.findMBeanServer((String)null); Iterator var3 = mbeanServers.iterator(); while(true) { label46: while(var3.hasNext()) { MBeanServer mbs = (MBeanServer)var3.next(); MBeanAccessor mbeanAccessor = this.mbsInspector.inspect(mbs); if(mbeanAccessor == null) { String mbeans1 = "Unable to inspect MBeanServer of type " + mbs.getClass().getName(); LOG.error(mbeans1); if(this.messages != null) { this.messages.addMessage(mbeans1); } } else { Set mbeans; try { mbeans = mbs.queryNames(new ObjectName("*:*"), (QueryExp)null); } catch (MalformedObjectNameException var12) { throw new Error(var12); } Iterator ex = mbeans.iterator(); while(true) { ObjectName name; Object mbean; do { if(!ex.hasNext()) { continue label46; } name = (ObjectName)ex.next(); mbean = mbeanAccessor.retrieve(name); } while(!mbean.getClass().getClassLoader().equals(classLoader)); try { mbs.unregisterMBean(name); } catch (JMException var13) { String errorMsg = "Error during cleanup of mbean - unregistration of mbean " + name.toString() + " failed"; LOG.error(errorMsg, var13); if(this.messages != null) { this.messages.addMessage(errorMsg); } } } } } return; } } }