Information

2
Story Points

Technologies

Decompiled Java File
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;
      }
   }
}
Page generated: Oct 19, 2017 2:34:49 PM