2010-05-13 16 views
1

J'ai un tas de MBeans standards que j'ai besoin de convertir en MBeans dynamiques (le but principal est d'ajouter des descriptions conviviales aux attributs, aux opérations et aux paramètres d'opération). Je me demandais s'il y a un outil qui peut faciliter mon travail en générant du code squelette pour les MBeans dynamiques à partir des MBeans standards existants.Conversion de mbeans standard en mbeans dynamiques/Génération de code

Répondre

0

Je n'ai rien trouvé. Voici une petite méthode utilitaire qui génère le MBeanInfo pour les opérations uniquement. Remplacez ThreadMXBean avec votre propre interface. Attention: Il ne prend pas en charge l'héritage, les méthodes non publiques, les attributs, etc. Il est limité aux opérations. À utiliser à vos risques et périls.

import java.lang.management.ThreadMXBean; 
import java.lang.reflect.Method; 
import java.util.ArrayList; 
import java.util.List; 


public class Gen { 

    public static void main(String[] args) { 
     List<Class> intfc = new ArrayList<Class>(); 
     intfc.add(ThreadMXBean.class); 
     for(Class c:intfc) 
      System.out.println(gen(c)); 
    } 

    private static String gen(Class c) { 
     StringBuilder sb = new StringBuilder(); 
     sb.append("return new MBeanInfo(\""); 
     sb.append(c.getName()); 
     sb.append("\","); 
     sb.append("\n\"Desc\",\r\n" + 
       "    null,null, \r\n" + 
       "    new MBeanOperationInfo[]{"); 
     boolean first = true; 
     for(Method m:c.getDeclaredMethods()){ 
      if(!first) 
       sb.append(","); 
      first = false; 
      sb.append("\nnew MBeanOperationInfo("); 
      sb.append("\""+m.getName()+"\",\""+m.getName()+"\", new MBeanParameterInfo[]{"); 
      boolean firstparam = true; 
      for(Class param:m.getParameterTypes()){ 
       if(!firstparam) 
        sb.append(","); 
       firstparam = false; 
       sb.append("new MBeanParameterInfo(\"ParamName\",\""); 
       sb.append(param.getName()).append("\","); 
       sb.append("\"Description\")"); 
      } 
      sb.append("},\""+m.getReturnType().getName()+"\",0)"); 
      sb.append("\n"); 
     } 

     sb.append("}\n,null);"); 
     return sb.toString(); 
    } 
}