org.jboss.aop
Class AspectManager

java.lang.Object
  extended by org.jboss.aop.AspectManager
All Implemented Interfaces:
org.jboss.util.loading.Translator
Direct Known Subclasses:
Domain

public class AspectManager
extends Object
implements org.jboss.util.loading.Translator

This singleton class manages all pointcuts and metadata. Coders can access it via the AspectManager.instance() method.

It is also the middle man between the ClassLoader and the actual class instrumentation as well.

App Developers that want to create and apply, interceptors, pointcuts, or metadata at runtime can also use this object to do that.

Version:
$Revision: 79046 $
Author:
Bill Burke, adrian@jboss.org

Field Summary
protected  WeakHashMap<Class<?>,WeakReference<Advisor>> advisors
          Advisors registered with this manager/domain
protected  LinkedHashMap<String,AnnotationIntroduction> annotationIntroductions
           
protected  LinkedHashMap<String,AnnotationIntroduction> annotationOverrides
           
protected  LinkedHashMap<String,ArrayBinding> arrayBindings
           
protected  LinkedHashMap<String,ArrayReplacement> arrayReplacements
           
protected  ConcurrentHashMap<String,AspectDefinition> aspectDefinitions
           
protected  ClassifiedBindingAndPointcutCollection bindingCollection
           
protected  LinkedHashMap<String,AdviceBinding> bindings
          Deprecated. 
protected  ConcurrentHashMap<String,CFlowStack> cflowStacks
           
static boolean classicOrder
           
static ClassLoaderValidation classLoaderValidator
           
protected  LinkedHashMap<String,ClassMetaDataBinding> classMetaData
           
protected  HashMap<String,ClassMetaDataLoader> classMetaDataLoaders
           
protected  HashMap<String,DomainDefinition> containers
           
static boolean debugClasses
           
protected  HashMap<String,DeclareDef> declares
           
protected  ConcurrentHashMap<String,DynamicCFlowDefinition> dynamicCFlows
           
protected  DynamicAOPStrategy dynamicStrategy
           
protected  ArrayList<String> exclude
          class name prefixes to explicitly exclude unless contained in include.
protected  ArrayList<String> ignore
          A set of wildcard enabled classnames that will be ignored no matter if they have been included.
protected  ClassExpression[] ignoreExpressions
          ClassExpressions built from ignore.
protected  ArrayList<String> include
          class name prefixes to explicitly include, this overrides whatever was set in exclude.
protected  List<String> includeInvisibleAnnotations
          A set of annotation names that will be included even though they are invisible.
protected static Map<ClassLoader,InterceptionMarkers> interceptionMarkers
           
protected  HashMap<String,InterceptorFactory> interceptorFactories
           
protected  HashMap<String,AdviceStack> interceptorStacks
           
protected  LinkedHashMap<String,InterfaceIntroduction> interfaceIntroductions
           
 LifecycleManager lifecycleManager
           
protected static AOPLock lock
           
static boolean maintainAdvisorMethodInterceptors
          Whether or not we should maintain the deprecated Advisor.methodInterceptors field This is required in jboss 4.x for backwards compatibility with EJB 3 See JBAOP-517
protected static AspectManager manager
           
static AspectNotificationHandler notificationHandler
          This is a callback object that receives events about new pointcuts, interceptors and metadata.
static boolean optimize
           
protected  ConcurrentHashMap<String,Object> perVMAspects
           
protected  LinkedHashMap<String,PrecedenceDef> precedenceDefs
           
protected  PrecedenceDefEntry[] sortedPrecedenceDefEntries
           
protected  org.jboss.util.collection.WeakValueHashMap<String,Domain> subDomainsByName
          A map of domains by name
protected  WeakHashMap<Class<?>,WeakReference<Domain>> subDomainsPerClass
          A map of domains by class, maintaned by the top level AspectManager
protected  int subscribedDomainQueueRef
           
protected  WeakHashMap<Domain,Object> subscribedSubDomains
          Each domain may have sub domains interested in changes happening in this manager/domain
protected  WeakHashMap<Domain,Object> subscribedSubDomainsQueue
          A queue for adding new subscribed subdomains to
static boolean suppressReferenceErrors
          Suppress when a class cannot be found that a class references This may happen if code in a class references something and the class is not in the classpath.
static boolean suppressTransformationErrors
           
protected  LinkedHashMap<String,Typedef> typedefs
           
static boolean verbose
          logging switch.
protected  WeavingStrategy weavingStrategy
           
 
Constructor Summary
AspectManager()
          Called by subclasses
 
Method Summary
 void addAdviceStack(AdviceStack stack)
          Add a referencable InterceptorStack( <stack> )
protected  void addAdvisorToClassMetaDataBinding(ClassMetaDataBinding meta, Class<?> clazz, Advisor advisor, Class<?> advisedClass)
           
 void addAnnotationIntroduction(AnnotationIntroduction pointcut)
          Register an annotation introduction
 void addAnnotationOverride(AnnotationIntroduction pointcut)
          Register an annotation introduction
 void addArrayBinding(ArrayBinding binding)
          Register an introduction pointcut
 void addArrayReplacement(ArrayReplacement pointcut)
          Register an introduction pointcut
 void addAspectDefinition(AspectDefinition def)
           
 void addBinding(AdviceBinding binding)
          Add an interceptor pointcut with a given name
 void addCFlowStack(CFlowStack stack)
           
 void addClassMetaData(ClassMetaDataBinding meta)
           
 void addClassMetaDataLoader(String group, ClassMetaDataLoader loader)
          Every <class-metadata> tag corresponds to a ClassMetaDataLoader.
 void addContainer(DomainDefinition def)
           
 void addDeclare(DeclareDef declare)
           
 void addDynamicCFlow(String name, DynamicCFlowDefinition cflow)
           
 void addInterceptorFactory(String name, InterceptorFactory factory)
          Add an interceptor factory that can be referenced by name.
 void addInterfaceIntroduction(InterfaceIntroduction pointcut)
          Register an introduction pointcut
 void addLifecycleBinding(LifecycleCallbackBinding lifecycleBinding)
           
 void addLifecycleDefinition(AspectDefinition def)
           
 void addPointcut(Pointcut pointcut)
          Add an interceptor pointcut with a given name
 void addPrecedence(PrecedenceDef precedenceDef)
           
protected  void addSubDomainByName(Domain domain)
           
 void addSubDomainPerClass(Class<?> clazz, Domain domain)
           
 void addTypedef(Typedef def)
           
protected  void applyInterfaceIntroductions(Advisor advisor, Class<?> clazz)
           
protected  void applyInterfaceIntroductions(ClassAdvisor advisor, javassist.CtClass clazz)
           
protected  void attachMetaData(Advisor advisor, Class<?> clazz)
           
protected  boolean attachMetaData(ClassAdvisor advisor, javassist.CtClass clazz, boolean addAdvisor)
           
static void clearUnregisteredClassLoaders()
          This method will check to see if a register classloader has been undeployed (as in JBoss)
protected  ClassifiedBindingAndPointcutCollection createBindingCollection()
          Creates the binding collection
protected  Object createPerVmAspect(String def, AspectDefinition adef, ClassLoader scopedClassLoader)
           
 boolean excludeClass(String classname)
           
 Advisor findAdvisor(Class<?> clazz)
           
 ClassMetaDataLoader findClassMetaDataLoader(String group)
          Every <class-metadata> tag corresponds to a ClassMetaDataLoader.
 javassist.ClassPool findClassPool(ClassLoader cl)
           
 AspectManager findManagerByName(String fqn)
          Takes a string of the form /sub1/sub2/sub3 of subdomains by name, where the leading "/" is the main AspectManager.
protected  void forceResortPrecedenceDefs()
           
 AdviceStack getAdviceStack(String name)
          Find an interceptor stack referenced by name ( <stack> )
 ClassAdvisor getAdvisor(Class<?> clazz)
          This method is called by the aspectized class when it is loaded This causes all initialization of interceptors for ClassAdvisor
 Advisor getAdvisor(String name)
           
 ClassAdvisor getAdvisorIfAdvised(Class<?> clazz)
           
 Map<Class<?>,WeakReference<Advisor>> getAdvisors()
           
 List<AnnotationIntroduction> getAnnotationIntroductions()
           
 List<AnnotationIntroduction> getAnnotationOverrides()
           
 Advisor getAnyAdvisorIfAdvised(Class<?> clazz)
          Take into account that an advisor may be a container
 ArrayBinding getArrayBinding(String name)
          Retrieve an introduction pointcut of a certain name
 ArrayReplacement getArrayReplacement(String name)
          Retrieve an introduction pointcut of a certain name
 Map<String,ArrayReplacement> getArrayReplacements()
           
 AspectDefinition getAspectDefinition(String name)
           
 Map<String,AspectDefinition> getAspectDefinitions()
           
 ClassifiedBindingAndPointcutCollection getBindingCollection()
          Returns the classified binding collection.
 LinkedHashMap<String,AdviceBinding> getBindings()
          Returns the binding map.
 CFlowStack getCFlowStack(String name)
           
 Map<String,CFlowStack> getCflowStacks()
           
static AOPClassLoaderScopingPolicy getClassLoaderScopingPolicy()
          Get the classLoaderScopingPolicy.
 Map<String,ClassMetaDataBinding> getClassMetaData()
           
 Map<String,ClassMetaDataLoader> getClassMetaDataLoaders()
           
static javassist.scopedpool.ScopedClassPoolFactory getClassPoolFactory()
           
 DomainDefinition getContainer(String name)
           
 Iterator<DeclareDef> getDeclares()
           
 DynamicAOPStrategy getDynamicAOPStrategy()
          Returns the dynamic aop strategy to be used.
 DynamicCFlow getDynamicCFlow(String name)
          Deprecated. 
 DynamicCFlow getDynamicCFlow(String name, ClassLoader cl)
           
 Map<String,DynamicCFlowDefinition> getDynamicCFlows()
           
 ArrayList<String> getExclude()
           
 ArrayList<String> getIgnore()
           
 ClassExpression[] getIgnoreExpressions()
           
 ArrayList<String> getInclude()
           
 List<String> getIncludedInvisibleAnnotations()
           
 InterceptionMarkers getInterceptionMarkers(ClassLoader loader)
           
 Map<String,InterceptorFactory> getInterceptorFactories()
           
 InterceptorFactory getInterceptorFactory(String name)
          Find the interceptor factory that can be referenced by name.
 Map<String,AdviceStack> getInterceptorStacks()
           
 InterfaceIntroduction getInterfaceIntroduction(String name)
          Retrieve an introduction pointcut of a certain name
 Map<String,InterfaceIntroduction> getInterfaceIntroductions()
           
 Map<String,LifecycleCallbackBinding> getLifecycleBindings()
           
 String getManagerFQN()
           
 Object getPerVMAspect(AspectDefinition def)
           
 Object getPerVMAspect(String def)
           
 Map<String,Object> getPerVMAspects()
           
 Pointcut getPointcut(String name)
          Find a pointcut of with a given name
 LinkedHashMap<String,PointcutInfo> getPointcutInfos()
           
 LinkedHashMap<String,Pointcut> getPointcuts()
           
 LinkedHashMap<String,PrecedenceDef> getPrecedenceDefs()
           
static boolean getPrune()
           
protected  javassist.ClassPool getRegisteredClassPool(ClassLoader cl)
           
static Map<ClassLoader,javassist.ClassPool> getRegisteredCLs()
           
 PrecedenceDefEntry[] getSortedPrecedenceDefEntries()
           
protected  Map<Class<?>,WeakReference<Domain>> getSubDomainsPerClass()
           
 Map<Domain,Object> getSubscribedSubDomains()
           
 ClassAdvisor getTempClassAdvisor(javassist.CtClass clazz)
           
 Advisor getTempClassAdvisorIfNotExist(Class<?> clazz)
           
static AspectManager getTopLevelAspectManager()
          Get the top level aspect manager
 Typedef getTypedef(String name)
           
 Map<String,Typedef> getTypedefs()
           
static boolean hasTransformationStarted()
           
 boolean ignoreClass(String classname)
           
 boolean includeClass(String classname)
           
protected  void initAnnotationIntroductionsMap()
           
protected  void initAnnotationOverridesMap()
           
protected  void initArrayBindingMap()
           
protected  void initArrayReplacementMap()
           
protected  void initAspectDefintitionsMap()
           
protected  void initCflowStacksMap()
           
protected  void initClassMetaDataLoadersMap()
           
protected  void initClassMetaDataMap()
           
protected  void initContainersMap()
           
protected  void initDeclaresMap()
           
protected  void initDynamicCflowsMap()
           
 void initialiseClassAdvisor(Class<?> clazz, ClassAdvisor advisor)
           
protected  void initInerceptorStacksMap()
           
protected  void initInterceptorFactoriesMap()
           
protected  void initInterfaceIntroductionsMap()
           
protected  void initPerVMAspectsMap()
           
protected  void initPrecedenceDefsMap()
           
protected  void initSubDomainsByNameMap()
           
protected  void initSubscribedSubDomainsMap()
           
protected  void initSubscribedSubDomainsQueueMap()
           
protected  void initTypedefsMap()
           
static AspectManager instance()
           
static AspectManager instance(ClassLoader loadingClassLoader)
          Get the aspect manager for a classloader
protected  AspectDefinition internalRemoveAspectDefintion(String name)
           
 void internalRemoveClassMetaData(String name)
           
 boolean isAdvisorRegistered(Advisor advisor)
          Checks to see if an Advisor represents a class that should have been undeployed.
 boolean isCall()
           
 boolean isConstruction()
           
 boolean isExecution()
           
 boolean isGet()
           
 boolean isNonAdvisableClassName(String classname)
           
 boolean isSet()
           
 boolean isWithin()
           
 boolean isWithincode()
           
protected  void registerClass(Class<?> clazz)
           
 javassist.ClassPool registerClassLoader(ClassLoader ucl)
           
 void removeAnnotationIntroduction(AnnotationIntroduction pointcut)
          remove an annotation pointcut
 void removeAnnotationOverride(AnnotationIntroduction pointcut)
          remove an annotation pointcut
 void removeArrayBinding(String name)
          remove an introduction pointcut of a certain name
 void removeArrayReplacement(String name)
          remove an introduction pointcut of a certain name
 void removeAspectDefinition(String name)
           
 void removeBinding(String name)
          Remove an interceptor pointcut with a given name
 void removeBindings(ArrayList<String> binds)
           
 void removeCFlowStack(String name)
           
 void removeClassMetaData(String name)
           
 void removeClassMetaDataLoader(String group)
          Remove a loader for a given group
 void removeContainer(String name)
           
 void removeDeclare(String name)
           
 void removeDynamicCFlow(String name)
           
 void removeInterceptorFactory(String name)
          Remove an interceptor factory that can be referenced by name.
 void removeInterceptorStack(String name)
          Remove a referencable InterceptorStack( <stack> )
 void removeInterfaceIntroduction(String name)
          remove an introduction pointcut of a certain name
 void removeLifecycleBinding(String name)
           
 void removeLifecycleDefinition(String name)
           
 void removePointcut(String name)
          Remove an interceptor pointcut with a given name
 void removePrecedence(String name)
           
 void removeTypedef(String name)
           
static void setClassLoaderScopingPolicy(AOPClassLoaderScopingPolicy classLoaderScopingPolicy)
          Set the classLoaderScopingPolicy.
static void setClassPoolFactory(javassist.scopedpool.ScopedClassPoolFactory factory)
           
 void setDynamicAOPStrategy(DynamicAOPStrategy strategy)
          Sets the dynamic aop strategy to be used.
 void setExclude(ArrayList<String> exclude)
           
 void setIgnore(ArrayList<String> ignore)
           
 void setInclude(ArrayList<String> include)
           
 void setIncludedInvisibleAnnotations(List<String> ia)
           
static void setPrune(boolean prune)
           
 void subscribeSubDomain(Domain domain)
          Add subscriber to queue
 byte[] transform(ClassLoader loader, String className, Class classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer)
          This is the hook for ClassLoaders that want to instrument their classes with AOP

This would be called during a findClass or loadClass call.

 byte[] translate(String className, ClassLoader loader)
          This is to be backward compatible with JBoss 3.2.3 Translator interface
 byte[] translate(String className, ClassLoader loader, byte[] classfileBuffer)
          This is to be backward compatible with JBoss 3.2.3 Translator interface TODO: stalep, added a synchronized block for the entire method to prevent a deadlock.
 void unregisterClassLoader(ClassLoader cl)
           
 void unsubscribeSubDomain(Domain domain)
           
 void updateAdvisorsForAddedAnnotationOverride(AnnotationIntroduction introduction)
           
protected  void updateAdvisorsForAddedBinding(AdviceBinding binding, Set<Advisor> handledAdvisors)
           
protected  void updateAdvisorsForAddedClassMetaData(ClassMetaDataBinding meta)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

advisors

protected final WeakHashMap<Class<?>,WeakReference<Advisor>> advisors
Advisors registered with this manager/domain


subDomainsPerClass

protected volatile WeakHashMap<Class<?>,WeakReference<Domain>> subDomainsPerClass
A map of domains by class, maintaned by the top level AspectManager


subDomainsByName

protected volatile org.jboss.util.collection.WeakValueHashMap<String,Domain> subDomainsByName
A map of domains by name


subscribedSubDomains

protected volatile WeakHashMap<Domain,Object> subscribedSubDomains
Each domain may have sub domains interested in changes happening in this manager/domain


subscribedSubDomainsQueue

protected volatile WeakHashMap<Domain,Object> subscribedSubDomainsQueue
A queue for adding new subscribed subdomains to


subscribedDomainQueueRef

protected int subscribedDomainQueueRef

interfaceIntroductions

protected volatile LinkedHashMap<String,InterfaceIntroduction> interfaceIntroductions

arrayReplacements

protected volatile LinkedHashMap<String,ArrayReplacement> arrayReplacements

arrayBindings

protected volatile LinkedHashMap<String,ArrayBinding> arrayBindings

annotationIntroductions

protected volatile LinkedHashMap<String,AnnotationIntroduction> annotationIntroductions

annotationOverrides

protected volatile LinkedHashMap<String,AnnotationIntroduction> annotationOverrides

bindings

@Deprecated
protected volatile LinkedHashMap<String,AdviceBinding> bindings
Deprecated. 

bindingCollection

protected final ClassifiedBindingAndPointcutCollection bindingCollection

typedefs

protected volatile LinkedHashMap<String,Typedef> typedefs

interceptorFactories

protected volatile HashMap<String,InterceptorFactory> interceptorFactories

classMetaDataLoaders

protected volatile HashMap<String,ClassMetaDataLoader> classMetaDataLoaders

interceptorStacks

protected volatile HashMap<String,AdviceStack> interceptorStacks

declares

protected volatile HashMap<String,DeclareDef> declares

cflowStacks

protected volatile ConcurrentHashMap<String,CFlowStack> cflowStacks

dynamicCFlows

protected volatile ConcurrentHashMap<String,DynamicCFlowDefinition> dynamicCFlows

aspectDefinitions

protected volatile ConcurrentHashMap<String,AspectDefinition> aspectDefinitions

perVMAspects

protected volatile ConcurrentHashMap<String,Object> perVMAspects

exclude

protected volatile ArrayList<String> exclude
class name prefixes to explicitly exclude unless contained in include. Maintained by top-level AspectManager


include

protected volatile ArrayList<String> include
class name prefixes to explicitly include, this overrides whatever was set in exclude. Maintained by top-level AspectManager


ignore

protected volatile ArrayList<String> ignore
A set of wildcard enabled classnames that will be ignored no matter if they have been included. Maintained by top-level AspectManager


includeInvisibleAnnotations

protected List<String> includeInvisibleAnnotations
A set of annotation names that will be included even though they are invisible.


ignoreExpressions

protected ClassExpression[] ignoreExpressions
ClassExpressions built from ignore. Maintained by top-level AspectManager


lock

protected static AOPLock lock

classicOrder

public static boolean classicOrder

classMetaData

protected volatile LinkedHashMap<String,ClassMetaDataBinding> classMetaData

containers

protected volatile HashMap<String,DomainDefinition> containers

precedenceDefs

protected volatile LinkedHashMap<String,PrecedenceDef> precedenceDefs

sortedPrecedenceDefEntries

protected PrecedenceDefEntry[] sortedPrecedenceDefEntries

weavingStrategy

protected WeavingStrategy weavingStrategy

dynamicStrategy

protected DynamicAOPStrategy dynamicStrategy

interceptionMarkers

protected static Map<ClassLoader,InterceptionMarkers> interceptionMarkers

manager

protected static AspectManager manager

optimize

public static boolean optimize

debugClasses

public static boolean debugClasses

classLoaderValidator

public static ClassLoaderValidation classLoaderValidator

lifecycleManager

public LifecycleManager lifecycleManager

verbose

public static boolean verbose
logging switch. We don't use log4j to avoid another heavy library


maintainAdvisorMethodInterceptors

public static boolean maintainAdvisorMethodInterceptors
Whether or not we should maintain the deprecated Advisor.methodInterceptors field This is required in jboss 4.x for backwards compatibility with EJB 3 See JBAOP-517


notificationHandler

public static AspectNotificationHandler notificationHandler
This is a callback object that receives events about new pointcuts, interceptors and metadata. The Aspect Management console hooks into this listener


suppressTransformationErrors

public static boolean suppressTransformationErrors

suppressReferenceErrors

public static boolean suppressReferenceErrors
Suppress when a class cannot be found that a class references This may happen if code in a class references something and the class is not in the classpath.

Constructor Detail

AspectManager

public AspectManager()
Called by subclasses

Method Detail

getTopLevelAspectManager

public static AspectManager getTopLevelAspectManager()
Get the top level aspect manager

Returns:
the top level aspect manager

instance

public static AspectManager instance()

instance

public static AspectManager instance(ClassLoader loadingClassLoader)
Get the aspect manager for a classloader

Parameters:
loadingClassLoader - the classloader
Returns:
the aspect manager

getClassLoaderScopingPolicy

public static AOPClassLoaderScopingPolicy getClassLoaderScopingPolicy()
Get the classLoaderScopingPolicy.

Returns:
the classLoaderScopingPolicy.

setClassLoaderScopingPolicy

public static void setClassLoaderScopingPolicy(AOPClassLoaderScopingPolicy classLoaderScopingPolicy)
Set the classLoaderScopingPolicy. TODO does it make sense for this to be modified once it has been set?

Parameters:
classLoaderScopingPolicy - the classLoaderScopingPolicy.

getInterceptionMarkers

public InterceptionMarkers getInterceptionMarkers(ClassLoader loader)

getPointcuts

public LinkedHashMap<String,Pointcut> getPointcuts()

getPointcutInfos

public LinkedHashMap<String,PointcutInfo> getPointcutInfos()

getCFlowStack

public CFlowStack getCFlowStack(String name)

addCFlowStack

public void addCFlowStack(CFlowStack stack)

removeCFlowStack

public void removeCFlowStack(String name)

getDynamicCFlow

@Deprecated
public DynamicCFlow getDynamicCFlow(String name)
Deprecated. 


getDynamicCFlow

public DynamicCFlow getDynamicCFlow(String name,
                                    ClassLoader cl)

addDynamicCFlow

public void addDynamicCFlow(String name,
                            DynamicCFlowDefinition cflow)

removeDynamicCFlow

public void removeDynamicCFlow(String name)

createBindingCollection

protected ClassifiedBindingAndPointcutCollection createBindingCollection()
Creates the binding collection

Returns:
a ClassifiedBindingAndPointcutCollection
See Also:
Domain#ini

findClassMetaDataLoader

public ClassMetaDataLoader findClassMetaDataLoader(String group)
Every <class-metadata> tag corresponds to a ClassMetaDataLoader. The ClassMetaDataLoader knows how to take arbitrary XML and apply it to SimpleMetaData.

Given a group, return the loader for that group


addClassMetaDataLoader

public void addClassMetaDataLoader(String group,
                                   ClassMetaDataLoader loader)
Every <class-metadata> tag corresponds to a ClassMetaDataLoader. The ClassMetaDataLoader knows how to take arbitrary XML and apply it to SimpleMetaData.

Add a loader for a given group


removeClassMetaDataLoader

public void removeClassMetaDataLoader(String group)
Remove a loader for a given group


getAdvisors

public Map<Class<?>,WeakReference<Advisor>> getAdvisors()

getAdvisor

public Advisor getAdvisor(String name)

getBindings

public LinkedHashMap<String,AdviceBinding> getBindings()
Returns the binding map.

The returned map must be used for read purposes only. To edit the binding collection, call addBinding(AdviceBinding) and removeBinding(String) instead.

Returns:
the map containing all advice bindings indexed by their names

getBindingCollection

public ClassifiedBindingAndPointcutCollection getBindingCollection()
Returns the classified binding collection.

Attention: this collection is not supposed to be edited. Hence, only get methods can be called by clients.

Returns:
the classified binding collection

getSubDomainsPerClass

protected Map<Class<?>,WeakReference<Domain>> getSubDomainsPerClass()

findAdvisor

public Advisor findAdvisor(Class<?> clazz)

findManagerByName

public AspectManager findManagerByName(String fqn)
Takes a string of the form /sub1/sub2/sub3 of subdomains by name, where the leading "/" is the main AspectManager. The main user of the naming of domains is (un)serialization of advisors/containers

Parameters:
The - FQN of the domain
Returns:
the domain referenced by the FQN or null if it does not exist

addSubDomainByName

protected void addSubDomainByName(Domain domain)

getManagerFQN

public String getManagerFQN()

getAdvisorIfAdvised

public ClassAdvisor getAdvisorIfAdvised(Class<?> clazz)

getAnyAdvisorIfAdvised

public Advisor getAnyAdvisorIfAdvised(Class<?> clazz)
Take into account that an advisor may be a container


getAdvisor

public ClassAdvisor getAdvisor(Class<?> clazz)
This method is called by the aspectized class when it is loaded This causes all initialization of interceptors for ClassAdvisor

Parameters:
clazz -
Returns:

initialiseClassAdvisor

public void initialiseClassAdvisor(Class<?> clazz,
                                   ClassAdvisor advisor)

getRegisteredCLs

public static Map<ClassLoader,javassist.ClassPool> getRegisteredCLs()

clearUnregisteredClassLoaders

public static void clearUnregisteredClassLoaders()
This method will check to see if a register classloader has been undeployed (as in JBoss)


isAdvisorRegistered

public boolean isAdvisorRegistered(Advisor advisor)
Checks to see if an Advisor represents a class that should have been undeployed.

Parameters:
advisor -
Returns:

findClassPool

public javassist.ClassPool findClassPool(ClassLoader cl)

getRegisteredClassPool

protected javassist.ClassPool getRegisteredClassPool(ClassLoader cl)

registerClassLoader

public javassist.ClassPool registerClassLoader(ClassLoader ucl)

registerClass

protected void registerClass(Class<?> clazz)

unregisterClassLoader

public void unregisterClassLoader(ClassLoader cl)
Specified by:
unregisterClassLoader in interface org.jboss.util.loading.Translator

getExclude

public ArrayList<String> getExclude()

setExclude

public void setExclude(ArrayList<String> exclude)

getInclude

public ArrayList<String> getInclude()

setInclude

public void setInclude(ArrayList<String> include)

getIgnore

public ArrayList<String> getIgnore()

getIncludedInvisibleAnnotations

public List<String> getIncludedInvisibleAnnotations()

setIncludedInvisibleAnnotations

public void setIncludedInvisibleAnnotations(List<String> ia)

getIgnoreExpressions

public ClassExpression[] getIgnoreExpressions()

setIgnore

public void setIgnore(ArrayList<String> ignore)

ignoreClass

public boolean ignoreClass(String classname)

includeClass

public boolean includeClass(String classname)

excludeClass

public boolean excludeClass(String classname)

getPrune

public static boolean getPrune()

setPrune

public static void setPrune(boolean prune)

setClassPoolFactory

public static void setClassPoolFactory(javassist.scopedpool.ScopedClassPoolFactory factory)

getClassPoolFactory

public static javassist.scopedpool.ScopedClassPoolFactory getClassPoolFactory()

isNonAdvisableClassName

public boolean isNonAdvisableClassName(String classname)

transform

public byte[] transform(ClassLoader loader,
                        String className,
                        Class classBeingRedefined,
                        ProtectionDomain protectionDomain,
                        byte[] classfileBuffer)
                 throws Exception
This is the hook for ClassLoaders that want to instrument their classes with AOP

This would be called during a findClass or loadClass call. The return value is used by defineClass to create the class from bytecode

Specified by:
transform in interface org.jboss.util.loading.Translator
Throws:
Exception

translate

public byte[] translate(String className,
                        ClassLoader loader)
                 throws Exception
This is to be backward compatible with JBoss 3.2.3 Translator interface

Parameters:
className -
loader -
Returns:
Throws:
Exception

translate

public byte[] translate(String className,
                        ClassLoader loader,
                        byte[] classfileBuffer)
                 throws Exception
This is to be backward compatible with JBoss 3.2.3 Translator interface TODO: stalep, added a synchronized block for the entire method to prevent a deadlock. its not optimal and should be further reviewed. (commented out sync block inside the method)

Parameters:
className -
loader -
Returns:
Throws:
Exception

addInterceptorFactory

public void addInterceptorFactory(String name,
                                  InterceptorFactory factory)
Add an interceptor factory that can be referenced by name.


removeInterceptorFactory

public void removeInterceptorFactory(String name)
Remove an interceptor factory that can be referenced by name.


getInterceptorFactories

public Map<String,InterceptorFactory> getInterceptorFactories()

getInterceptorFactory

public InterceptorFactory getInterceptorFactory(String name)
Find the interceptor factory that can be referenced by name.


addPrecedence

public void addPrecedence(PrecedenceDef precedenceDef)

removePrecedence

public void removePrecedence(String name)

forceResortPrecedenceDefs

protected void forceResortPrecedenceDefs()

getPrecedenceDefs

public LinkedHashMap<String,PrecedenceDef> getPrecedenceDefs()

getSortedPrecedenceDefEntries

public PrecedenceDefEntry[] getSortedPrecedenceDefEntries()

addAdviceStack

public void addAdviceStack(AdviceStack stack)
Add a referencable InterceptorStack( <stack> )


removeInterceptorStack

public void removeInterceptorStack(String name)
Remove a referencable InterceptorStack( <stack> )


getAdviceStack

public AdviceStack getAdviceStack(String name)
Find an interceptor stack referenced by name ( <stack> )


attachMetaData

protected boolean attachMetaData(ClassAdvisor advisor,
                                 javassist.CtClass clazz,
                                 boolean addAdvisor)
                          throws Exception
Throws:
Exception

attachMetaData

protected void attachMetaData(Advisor advisor,
                              Class<?> clazz)

getTempClassAdvisor

public ClassAdvisor getTempClassAdvisor(javassist.CtClass clazz)
                                 throws Exception
Throws:
Exception

getTempClassAdvisorIfNotExist

public Advisor getTempClassAdvisorIfNotExist(Class<?> clazz)

getContainer

public DomainDefinition getContainer(String name)

addContainer

public void addContainer(DomainDefinition def)

removeContainer

public void removeContainer(String name)

getPointcut

public Pointcut getPointcut(String name)
Find a pointcut of with a given name


removePointcut

public void removePointcut(String name)
Remove an interceptor pointcut with a given name


addPointcut

public void addPointcut(Pointcut pointcut)
Add an interceptor pointcut with a given name


isExecution

public boolean isExecution()

isConstruction

public boolean isConstruction()

isCall

public boolean isCall()

isWithin

public boolean isWithin()

isWithincode

public boolean isWithincode()

isGet

public boolean isGet()

isSet

public boolean isSet()

removeBinding

public void removeBinding(String name)
Remove an interceptor pointcut with a given name


removeBindings

public void removeBindings(ArrayList<String> binds)

addBinding

public void addBinding(AdviceBinding binding)
Add an interceptor pointcut with a given name


updateAdvisorsForAddedBinding

protected void updateAdvisorsForAddedBinding(AdviceBinding binding,
                                             Set<Advisor> handledAdvisors)

removeClassMetaData

public void removeClassMetaData(String name)

internalRemoveClassMetaData

public void internalRemoveClassMetaData(String name)

addClassMetaData

public void addClassMetaData(ClassMetaDataBinding meta)

updateAdvisorsForAddedClassMetaData

protected void updateAdvisorsForAddedClassMetaData(ClassMetaDataBinding meta)

addAdvisorToClassMetaDataBinding

protected void addAdvisorToClassMetaDataBinding(ClassMetaDataBinding meta,
                                                Class<?> clazz,
                                                Advisor advisor,
                                                Class<?> advisedClass)

getInterfaceIntroduction

public InterfaceIntroduction getInterfaceIntroduction(String name)
Retrieve an introduction pointcut of a certain name


addInterfaceIntroduction

public void addInterfaceIntroduction(InterfaceIntroduction pointcut)
Register an introduction pointcut


removeInterfaceIntroduction

public void removeInterfaceIntroduction(String name)
remove an introduction pointcut of a certain name


getArrayReplacement

public ArrayReplacement getArrayReplacement(String name)
Retrieve an introduction pointcut of a certain name


addArrayReplacement

public void addArrayReplacement(ArrayReplacement pointcut)
Register an introduction pointcut


removeArrayReplacement

public void removeArrayReplacement(String name)
remove an introduction pointcut of a certain name


getArrayBinding

public ArrayBinding getArrayBinding(String name)
Retrieve an introduction pointcut of a certain name


addArrayBinding

public void addArrayBinding(ArrayBinding binding)
Register an introduction pointcut


removeArrayBinding

public void removeArrayBinding(String name)
remove an introduction pointcut of a certain name


addAnnotationIntroduction

public void addAnnotationIntroduction(AnnotationIntroduction pointcut)
Register an annotation introduction


removeAnnotationIntroduction

public void removeAnnotationIntroduction(AnnotationIntroduction pointcut)
remove an annotation pointcut


getAnnotationIntroductions

public List<AnnotationIntroduction> getAnnotationIntroductions()

addDeclare

public void addDeclare(DeclareDef declare)

removeDeclare

public void removeDeclare(String name)

getDeclares

public Iterator<DeclareDef> getDeclares()

applyInterfaceIntroductions

protected void applyInterfaceIntroductions(Advisor advisor,
                                           Class<?> clazz)

applyInterfaceIntroductions

protected void applyInterfaceIntroductions(ClassAdvisor advisor,
                                           javassist.CtClass clazz)
                                    throws Exception
Throws:
Exception

addAnnotationOverride

public void addAnnotationOverride(AnnotationIntroduction pointcut)
Register an annotation introduction


updateAdvisorsForAddedAnnotationOverride

public void updateAdvisorsForAddedAnnotationOverride(AnnotationIntroduction introduction)

removeAnnotationOverride

public void removeAnnotationOverride(AnnotationIntroduction pointcut)
remove an annotation pointcut


getAnnotationOverrides

public List<AnnotationIntroduction> getAnnotationOverrides()

getPerVMAspect

public Object getPerVMAspect(AspectDefinition def)

getPerVMAspect

public Object getPerVMAspect(String def)

createPerVmAspect

protected Object createPerVmAspect(String def,
                                   AspectDefinition adef,
                                   ClassLoader scopedClassLoader)

addAspectDefinition

public void addAspectDefinition(AspectDefinition def)

removeAspectDefinition

public void removeAspectDefinition(String name)

internalRemoveAspectDefintion

protected AspectDefinition internalRemoveAspectDefintion(String name)

getAspectDefinitions

public Map<String,AspectDefinition> getAspectDefinitions()

getAspectDefinition

public AspectDefinition getAspectDefinition(String name)

addTypedef

public void addTypedef(Typedef def)
                throws Exception
Throws:
Exception

removeTypedef

public void removeTypedef(String name)

getTypedef

public Typedef getTypedef(String name)

getInterfaceIntroductions

public Map<String,InterfaceIntroduction> getInterfaceIntroductions()

getArrayReplacements

public Map<String,ArrayReplacement> getArrayReplacements()

getTypedefs

public Map<String,Typedef> getTypedefs()

getInterceptorStacks

public Map<String,AdviceStack> getInterceptorStacks()

getClassMetaDataLoaders

public Map<String,ClassMetaDataLoader> getClassMetaDataLoaders()

getCflowStacks

public Map<String,CFlowStack> getCflowStacks()

getDynamicCFlows

public Map<String,DynamicCFlowDefinition> getDynamicCFlows()

getPerVMAspects

public Map<String,Object> getPerVMAspects()

getClassMetaData

public Map<String,ClassMetaDataBinding> getClassMetaData()

getDynamicAOPStrategy

public DynamicAOPStrategy getDynamicAOPStrategy()
Returns the dynamic aop strategy to be used.


setDynamicAOPStrategy

public void setDynamicAOPStrategy(DynamicAOPStrategy strategy)
Sets the dynamic aop strategy to be used. Should be called only before any class is transformed.

Parameters:
strategy - the new dynamic aop strategy.

addSubDomainPerClass

public void addSubDomainPerClass(Class<?> clazz,
                                 Domain domain)

subscribeSubDomain

public void subscribeSubDomain(Domain domain)
Add subscriber to queue

See Also:
copySubDomainsFromQueue(boolean)

unsubscribeSubDomain

public void unsubscribeSubDomain(Domain domain)

getSubscribedSubDomains

public Map<Domain,Object> getSubscribedSubDomains()

addLifecycleDefinition

public void addLifecycleDefinition(AspectDefinition def)

removeLifecycleDefinition

public void removeLifecycleDefinition(String name)

addLifecycleBinding

public void addLifecycleBinding(LifecycleCallbackBinding lifecycleBinding)

getLifecycleBindings

public Map<String,LifecycleCallbackBinding> getLifecycleBindings()

removeLifecycleBinding

public void removeLifecycleBinding(String name)

hasTransformationStarted

public static boolean hasTransformationStarted()

initSubDomainsByNameMap

protected void initSubDomainsByNameMap()

initSubscribedSubDomainsMap

protected void initSubscribedSubDomainsMap()

initSubscribedSubDomainsQueueMap

protected void initSubscribedSubDomainsQueueMap()

initInterfaceIntroductionsMap

protected void initInterfaceIntroductionsMap()

initArrayReplacementMap

protected void initArrayReplacementMap()

initArrayBindingMap

protected void initArrayBindingMap()

initAnnotationIntroductionsMap

protected void initAnnotationIntroductionsMap()

initAnnotationOverridesMap

protected void initAnnotationOverridesMap()

initTypedefsMap

protected void initTypedefsMap()

initInterceptorFactoriesMap

protected void initInterceptorFactoriesMap()

initClassMetaDataLoadersMap

protected void initClassMetaDataLoadersMap()

initInerceptorStacksMap

protected void initInerceptorStacksMap()

initDeclaresMap

protected void initDeclaresMap()

initCflowStacksMap

protected void initCflowStacksMap()

initDynamicCflowsMap

protected void initDynamicCflowsMap()

initAspectDefintitionsMap

protected void initAspectDefintitionsMap()

initPerVMAspectsMap

protected void initPerVMAspectsMap()

initClassMetaDataMap

protected void initClassMetaDataMap()

initContainersMap

protected void initContainersMap()

initPrecedenceDefsMap

protected void initPrecedenceDefsMap()


Copyright © 2008 JBoss, a division of Red Hat, Inc.. All Rights Reserved.