org.jboss.aop
Class AspectManager
java.lang.Object
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
|
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 |
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.
AspectManager
public AspectManager()
- Called by subclasses
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.