Coverage Report - argos.proxy.DynamicProxyUtil
 
Classes in this File Line Coverage Branch Coverage Complexity
DynamicProxyUtil
0%
0/37
0%
0/6
0
 
 1  
 package argos.proxy;
 2  
 
 3  
 import java.io.File;
 4  
 import java.lang.management.ManagementFactory;
 5  
 import java.net.MalformedURLException;
 6  
 import java.net.URL;
 7  
 import java.util.Hashtable;
 8  
 import java.util.logging.Level;
 9  
 import java.util.logging.Logger;
 10  
 
 11  
 import javax.management.MBeanServer;
 12  
 import javax.management.MalformedObjectNameException;
 13  
 import javax.management.ObjectName;
 14  
 
 15  
 import argos.config.Config;
 16  
 import argos.deploy.JarClassloader;
 17  
 
 18  0
 public class DynamicProxyUtil {
 19  0
         private static final Logger logger = Logger.getLogger(DynamicProxyUtil.class.getName());
 20  
         private static ObjectName dynamicProxyLoaderName;
 21  
         private static JarClassloader dynamicProxyLoader;
 22  0
         private static long counter = 0;
 23  
         
 24  
         public static synchronized ObjectName instrument(String domain, String name,
 25  
                         Object object, Boolean verbose, Boolean increment, ObjectName classLoader) {
 26  0
                 MBeanServer server = ManagementFactory.getPlatformMBeanServer();
 27  
                 try {
 28  0
                         String mbeanName = name;
 29  0
                         if(increment) {
 30  0
                                 mbeanName = mbeanName + counter++;
 31  
                         }
 32  0
                         ObjectName objectName = createObjectName(domain, mbeanName);
 33  
                         
 34  0
                         if(classLoader == null) {
 35  0
                                 getDynamicProClassloader();
 36  0
                                 server.createMBean("argos.proxy.DynamicProxy", objectName, dynamicProxyLoaderName, new Object[] {
 37  
                                                 name, object, verbose }, new String[] { String.class.getName(),
 38  
                                                 Object.class.getName(), Boolean.class.getName() });
 39  
                         }
 40  
                         else {
 41  0
                                 server.createMBean("argos.proxy.DynamicProxy", objectName, classLoader, new Object[] {
 42  
                                                 name, object, verbose }, new String[] { String.class.getName(),
 43  
                                                 Object.class.getName(), Boolean.class.getName() });
 44  
                         }
 45  
                         
 46  
                         
 47  0
                         return objectName;
 48  
                         
 49  
                 }
 50  0
                 catch(Exception e) {
 51  0
                         logger.log(Level.WARNING, "Unable to instrument " + name, e);
 52  0
                         return null;
 53  
                 }
 54  
         }
 55  
         
 56  
         public synchronized static ObjectName instrument(String name, Object object) {
 57  0
                 return instrument(Config.get(Config.DEFAULT_ARGOS_DOMAIN), name, object, true, false, null);
 58  
         }
 59  
         
 60  
         public synchronized static ObjectName instrument(String domain, String name,
 61  
                         Object object, ObjectName classLoader) {
 62  0
                 return instrument(domain, name, object, true, false, classLoader);
 63  
         }
 64  
         
 65  
         public synchronized static ObjectName instrument(String name, Object object,
 66  
                         boolean verbose) {
 67  0
                 return instrument(Config.get(Config.DEFAULT_ARGOS_DOMAIN), name, object, verbose, false, null);
 68  
         }
 69  
         
 70  
         public static ObjectName createObjectName(String domain, String name)
 71  
                         throws MalformedObjectNameException {
 72  0
                 Hashtable<String, String> table = new Hashtable<String, String>();
 73  0
                 table.put("name", name);
 74  0
                 return new ObjectName(domain, table);
 75  
         }
 76  
         
 77  
         public static synchronized JarClassloader getDynamicProClassloader() {
 78  0
                 if(dynamicProxyLoader == null) {
 79  0
                         URL[] url = new URL[1];
 80  
                         try {
 81  0
                                 url[0] = new URL("file:" + (new File("DynamicProxy.jar")).getAbsolutePath());
 82  
                         }
 83  0
                         catch (MalformedURLException e) {
 84  0
                                 logger.log(Level.SEVERE, "Unable to create DynamicProxy classloader.", e);
 85  0
                         }
 86  0
                         dynamicProxyLoader = new JarClassloader(url);
 87  0
                         MBeanServer server = ManagementFactory.getPlatformMBeanServer();
 88  
                         try {
 89  0
                                 dynamicProxyLoaderName = new ObjectName("Classloaders:name=DynamicProxyClassLoader");
 90  0
                                 server.registerMBean(dynamicProxyLoader, dynamicProxyLoaderName);
 91  0
                                 logger.info("DynamicProxy's classloader registered.");
 92  
                         }
 93  0
                         catch(Exception e) {
 94  0
                                 logger.log(Level.SEVERE, "Unable to register DynamicProxy classloader.", e);
 95  0
                         }
 96  
                         
 97  
                 }
 98  0
                 return dynamicProxyLoader;
 99  
         }
 100  
 }