org.aspectj.weaver.tools.cache
Class DefaultCacheKeyResolver

java.lang.Object
  extended by org.aspectj.weaver.tools.cache.DefaultCacheKeyResolver
All Implemented Interfaces:
CacheKeyResolver

public class DefaultCacheKeyResolver
extends java.lang.Object
implements CacheKeyResolver

Naive default class and classloader hashing implementation useful for some multi-classloader environments.

This implementation creates classloader scopes of the form:
"ExampleClassLoaderName.[crc hash]"

And weaved class keys of the form:
"com.foo.BarClassName.[bytes len][crc].weaved"

And generated class keys of the form:
"com.foo.BarClassName$AjClosure.generated


Field Summary
static java.lang.String GENERATED_SUFFIX
           
static java.lang.String WEAVED_SUFFIX
           
 
Constructor Summary
DefaultCacheKeyResolver()
           
 
Method Summary
 java.lang.String createClassLoaderScope(java.lang.ClassLoader cl, java.util.List<java.lang.String> aspects)
          Create a scope from a set of urls and aspect urls.
 CachedClassReference generatedKey(java.lang.String className)
          Create a key for the given className from a class generated by the weaver such that:
 java.lang.String getGeneratedRegex()
          Return a regex which matches all generated keys
 java.lang.String getWeavedRegex()
          Return a regex which matches all weaved keys;
 java.lang.String keyToClass(java.lang.String key)
          Converts a cache key back to a className
 CachedClassReference weavedKey(java.lang.String className, byte[] original_bytes)
          Create a key for the given class name and byte array from the pre-weaved class such that
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

GENERATED_SUFFIX

public static final java.lang.String GENERATED_SUFFIX
See Also:
Constant Field Values

WEAVED_SUFFIX

public static final java.lang.String WEAVED_SUFFIX
See Also:
Constant Field Values
Constructor Detail

DefaultCacheKeyResolver

public DefaultCacheKeyResolver()
Method Detail

createClassLoaderScope

public java.lang.String createClassLoaderScope(java.lang.ClassLoader cl,
                                               java.util.List<java.lang.String> aspects)
Create a scope from a set of urls and aspect urls. Creates scope of the form "ExampleClassLoaderName.[md5sum]" or "ExampleClassLoaderName.[crc]"

Specified by:
createClassLoaderScope in interface CacheKeyResolver
Parameters:
cl - the classloader which uses the cache, can be null
aspects - the aspects
Returns:
a unique string for URLClassloaders, otherwise a non-unique classname

getGeneratedRegex

public java.lang.String getGeneratedRegex()
Description copied from interface: CacheKeyResolver
Return a regex which matches all generated keys

Specified by:
getGeneratedRegex in interface CacheKeyResolver
Returns:
string regex

getWeavedRegex

public java.lang.String getWeavedRegex()
Description copied from interface: CacheKeyResolver
Return a regex which matches all weaved keys;

Specified by:
getWeavedRegex in interface CacheKeyResolver
Returns:
string regex

keyToClass

public java.lang.String keyToClass(java.lang.String key)
Converts a cache key back to a className

Specified by:
keyToClass in interface CacheKeyResolver
Parameters:
key - to convert
Returns:
className, e.g. "com.foo.Bar"

weavedKey

public CachedClassReference weavedKey(java.lang.String className,
                                      byte[] original_bytes)
Description copied from interface: CacheKeyResolver
Create a key for the given class name and byte array from the pre-weaved class such that
    className == keyToClass(weavedKey(className, various_bytes)) holds
 and
    weavedKey(className, various_bytes).matches(getWeavedRegex()) == true
 

Specified by:
weavedKey in interface CacheKeyResolver
Parameters:
className - class to create a key for
original_bytes - bytes of the pre-weaved class
Returns:
key for the class, or null if no caching should be performed

generatedKey

public CachedClassReference generatedKey(java.lang.String className)
Description copied from interface: CacheKeyResolver
Create a key for the given className from a class generated by the weaver such that:
    className == keyToClass(generatedKey(className)) holds
 and
    generatedKey(className).matches(getGeneratedRegex()) == true
 

Specified by:
generatedKey in interface CacheKeyResolver
Parameters:
className - class to create a key for
Returns:
key for the class, or null if no caching should be performed