Class CachingParanamer

  • All Implemented Interfaces:
    Paranamer
    Direct Known Subclasses:
    CachingParanamer.WithoutWeakReferences

    public class CachingParanamer
    extends java.lang.Object
    implements Paranamer
    Implementation of Paranamer which delegate to another Paranamer implementation, adding caching functionality to speed up usage. It also uses a WeakHashmap as an implementation detail (wrapped in Collections.synchronizedMap(..)), to allow large usages to garbage collect things as big as whole classloaders (after working through all the refs that originated from that classloader). Tomcat and other 'containers' do this during hot application deployment, undeployment and most importantly for Paranamer redeployment. Basically, this will allow a perm-gen usage keeps growing scenario.
    Author:
    Paul Hammant, Mauro Talevi
    • Nested Class Summary

      Nested Classes 
      Modifier and Type Class Description
      static class  CachingParanamer.WithoutWeakReferences
      This implementation has a better concurrent design (ConcurrentHashMap) which has a better strategy to implement concurrency: segments instead of synchronized.
    • Constructor Summary

      Constructors 
      Constructor Description
      CachingParanamer​(Paranamer delegate)
      Specify a Paranamer instance to delegates to.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      java.lang.String[] lookupParameterNames​(java.lang.reflect.AccessibleObject methodOrConstructor)
      Lookup the parameter names of a given method.
      java.lang.String[] lookupParameterNames​(java.lang.reflect.AccessibleObject methodOrCtor, boolean throwExceptionIfMissing)
      Lookup the parameter names of a given method.
      protected java.util.Map<java.lang.reflect.AccessibleObject,​java.lang.String[]> makeMethodCache()  
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Constructor Detail

      • CachingParanamer

        public CachingParanamer​(Paranamer delegate)
        Specify a Paranamer instance to delegates to.
        Parameters:
        delegate - the paranamer instance to use
    • Method Detail

      • makeMethodCache

        protected java.util.Map<java.lang.reflect.AccessibleObject,​java.lang.String[]> makeMethodCache()
      • lookupParameterNames

        public java.lang.String[] lookupParameterNames​(java.lang.reflect.AccessibleObject methodOrConstructor)
        Description copied from interface: Paranamer
        Lookup the parameter names of a given method.
        Specified by:
        lookupParameterNames in interface Paranamer
        Parameters:
        methodOrConstructor - the Method or Constructor for which the parameter names are looked up.
        Returns:
        A list of the parameter names.
      • lookupParameterNames

        public java.lang.String[] lookupParameterNames​(java.lang.reflect.AccessibleObject methodOrCtor,
                                                       boolean throwExceptionIfMissing)
        Description copied from interface: Paranamer
        Lookup the parameter names of a given method.
        Specified by:
        lookupParameterNames in interface Paranamer
        Parameters:
        methodOrCtor - the Method or Constructor for which the parameter names are looked up.
        throwExceptionIfMissing - whether to throw an exception if no Paranamer data found (versus return null).
        Returns:
        A list of the parameter names.