• Ehcache(2.9.x)


    About Class Loading

    Class loading, within the plethora of environments that Ehcache can be running, could be complex. But with Ehcache, all class loading is done in a standard way in one utility class: ClassLoaderUtil.

    Plugin Class Loading

    Ehcache allows plugins for events and distribution. These are loaded and created as follows:

    /** 
     * Creates a new class instance. Logs errors along the way. Classes are loaded 
     * using the Ehcache standard classloader. 
     * 
     * @param className a fully qualified class name 
     * @return null if the instance cannot be loaded 
     */ 
    public static Object createNewInstance(String className) throws CacheException { 
        Class clazz; 
        Object newInstance; 
        try { 
          clazz = Class.forName(className, true, getStandardClassLoader()); 
        } catch (ClassNotFoundException e) { 
          //try fallback 
          try { 
              clazz = Class.forName(className, true, getFallbackClassLoader()); 
          } catch (ClassNotFoundException ex) { 
              throw new CacheException("Unable to load class " + className + 
                         ". Initial cause was " + e.getMessage(), e); 
          } 
        } 
        try { 
          newInstance = clazz.newInstance(); 
        } catch (IllegalAccessException e) { 
          throw new CacheException("Unable to load class " + className + 
                     ". Initial cause was " + e.getMessage(), e); 
        } catch (InstantiationException e) { 
          throw new CacheException("Unable to load class " + className + 
                     ". Initial cause was " + e.getMessage(), e); 
        } 
        return newInstance; 
    } 
    /** 
     * Gets the ClassLoader that all classes in ehcache, and extensions, 
     * should use for classloading. All ClassLoading in Ehcache should use this 
     * one. This is the only thing that seems to work for all of the class 
     * loading situations found in the wild. 
     * @return the thread context class loader. 
     */ 
    public static ClassLoader getStandardClassLoader() { 
        return Thread.currentThread().getContextClassLoader(); 
    } 
    /** 
     * Gets a fallback ClassLoader that all classes in ehcache, and 
     * extensions, should use for classloading. This is used if the  
     * context class loader does not work. 
     * @return the ClassLoaderUtil.class.getClassLoader(); */ 
    public static ClassLoader getFallbackClassLoader() { 
        return ClassLoaderUtil.class.getClassLoader(); 
    }

    If this does not work for some reason, a CacheException is thrown with a detailed error message.

    Loading of ehcache.xml Resources

    If the configuration is otherwise unspecified, Ehcache looks for a configuration in the following order:

    • Thread.currentThread().getContextClassLoader().getResource("/ehcache.xml")
    • ConfigurationFactory.class.getResource("/ehcache.xml")
    • ConfigurationFactory.class.getResource("/ehcache-failsafe.xml")

    Ehcache uses the first configuration found. Note the use of “/ehcache.xml”, which requires that ehcache.xml be placed at the root of the classpath (i.e., not in any package).

  • 相关阅读:
    java 三目运算符
    增强for 可以用于ArrayList
    shell SORT
    BASH if/while/until loop
    设置临时环境变量
    2015年创业中遇到的技术问题:121-130
    2015年创业中遇到的技术问题:121-130
    JDK8新特性之Lambda表达式
    使用Html5开发Android和iOS应用:HBuilder、Html5Plus、MUI
    使用Html5开发Android和iOS应用:HBuilder、Html5Plus、MUI
  • 原文地址:https://www.cnblogs.com/huey/p/5847310.html
Copyright © 2020-2023  润新知