All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.hornetq.utils.ClassloadingUtil Maven / Gradle / Ivy

There is a newer version: 2.5.0.Beta1
Show newest version
package org.hornetq.utils;

import java.net.URL;

/**
* This class will be used to perform generic class-loader operations,
* such as load a class first using TCCL, and then the classLoader used by HornetQ (ClassloadingUtil.getClass().getClassLoader()).
*
* Is't required to use a Security Block on any calls to this class.
*
* @author Howard Gao
*/

public final class ClassloadingUtil
{
   private static final String INSTANTIATION_EXCEPTION_MESSAGE =
            "Your class must have a constructor without arguments. If it is an inner class, it must be static!";

   public static final Object newInstanceFromClassLoader(final String className)
   {
      ClassLoader loader = ClassloadingUtil.class.getClassLoader();
      try
      {
         Class clazz = loader.loadClass(className);
         return clazz.newInstance();
      }
      catch (Throwable t)
      {
         if (t instanceof InstantiationException)
         {
            System.out.println(INSTANTIATION_EXCEPTION_MESSAGE);
         }
         loader = Thread.currentThread().getContextClassLoader();
         if (loader == null)
            throw new RuntimeException("No local context classloader", t);

         try
         {
            return loader.loadClass(className).newInstance();
         }
         catch (InstantiationException e)
         {
            throw new RuntimeException(INSTANTIATION_EXCEPTION_MESSAGE + " " + className, e);
         }
         catch (ClassNotFoundException e)
         {
            throw new IllegalStateException(e);
         }
         catch (IllegalAccessException e)
         {
            throw new RuntimeException(e);
         }
      }
   }

   public static Object newInstanceFromClassLoader(final String className, Object... objs)
   {
      ClassLoader loader = ClassloadingUtil.class.getClassLoader();
      try
      {
         Class[] parametersType  = new Class[objs.length];
         for (int i = 0 ; i < objs.length; i++)
         {
            parametersType[i] = objs[i].getClass();
         }
         Class clazz = loader.loadClass(className);
         return clazz.getConstructor(parametersType).newInstance(objs);
      }
      catch (Throwable t)
      {
         if (t instanceof InstantiationException)
         {
            System.out.println(INSTANTIATION_EXCEPTION_MESSAGE);
         }
         loader = Thread.currentThread().getContextClassLoader();
         if (loader == null)
            throw new RuntimeException("No local context classloader", t);

         try
         {
            return loader.loadClass(className).newInstance();
         }
         catch (InstantiationException e)
         {
            throw new RuntimeException(INSTANTIATION_EXCEPTION_MESSAGE + " " + className, e);
         }
         catch (ClassNotFoundException e)
         {
            throw new IllegalStateException(e);
         }
         catch (IllegalAccessException e)
         {
            throw new RuntimeException(e);
         }
      }
   }

   public static URL findResource(final String resourceName)
   {
      ClassLoader loader = ClassloadingUtil.class.getClassLoader();
      try
      {
         URL resource = loader.getResource(resourceName);
         if (resource != null)
            return resource;
      }
      catch (Throwable t)
      {
      }

      loader = Thread.currentThread().getContextClassLoader();
      if (loader == null)
         return null;

      return loader.getResource(resourceName);
   }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy