|
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||
java.lang.Objectjava.lang.ClassLoader
java.security.SecureClassLoader
java.net.URLClassLoader
org.apache.catalina.loader.WebappClassLoader
org.springframework.instrument.classloading.tomcat.TomcatInstrumentableClassLoader
public class TomcatInstrumentableClassLoader
Extension of Tomcat's default class loader which adds instrumentation to loaded classes without the need to use a VM-wide agent.
To be registered using a
Loader tag
in Tomcat's Context
definition in the server.xml file, with the Spring-provided
"spring-tomcat-weaver.jar" file deployed into Tomcat's "server/lib" (for Tomcat 5.x) or "lib" (for Tomcat 6.x) directory.
The required configuration tag looks as follows:
<Loader loaderClass="org.springframework.instrument.classloading.tomcat.TomcatInstrumentableClassLoader"/>
Typically used in combination with a
ReflectiveLoadTimeWeaver
defined in the Spring application context. The addTransformer and
getThrowawayClassLoader methods mirror the corresponding methods
in the LoadTimeWeaver interface, as expected by ReflectiveLoadTimeWeaver.
See the PetClinic sample application for a full example of this ClassLoader in action.
NOTE: Requires Apache Tomcat version 5.0 or higher.
addTransformer(java.lang.instrument.ClassFileTransformer),
getThrowawayClassLoader(),
ReflectiveLoadTimeWeaver| Nested Class Summary |
|---|
| Nested classes/interfaces inherited from class org.apache.catalina.loader.WebappClassLoader |
|---|
org.apache.catalina.loader.WebappClassLoader.PrivilegedFindResource, org.apache.catalina.loader.WebappClassLoader.PrivilegedFindResourceByName, org.apache.catalina.loader.WebappClassLoader.PrivilegedGetClassLoader |
| Field Summary | |
|---|---|
private static java.lang.String |
CLASS_SUFFIX
|
private WeavingTransformer |
weavingTransformer
Use an internal WeavingTransformer |
| Fields inherited from class org.apache.catalina.loader.WebappClassLoader |
|---|
allPermission, canonicalLoaderDir, delegate, ENABLE_CLEAR_REFERENCES, files, hasExternalRepositories, jarFiles, jarNames, jarPath, jarRealFiles, lastJarAccessed, lastModifiedDates, loaderDir, loaderPC, log, needConvert, notFoundResources, packageTriggers, parent, paths, permissionList, repositories, repositoryURLs, resourceEntries, resources, searchExternalFirst, securityManager, sm, started, system, triggers |
| Fields inherited from interface org.apache.catalina.Lifecycle |
|---|
AFTER_START_EVENT, AFTER_STOP_EVENT, BEFORE_START_EVENT, BEFORE_STOP_EVENT, DESTROY_EVENT, INIT_EVENT, PERIODIC_EVENT, START_EVENT, STOP_EVENT |
| Constructor Summary | |
|---|---|
TomcatInstrumentableClassLoader()
Create a new TomcatInstrumentableClassLoader using the
current context class loader. |
|
TomcatInstrumentableClassLoader(java.lang.ClassLoader parent)
Create a new TomcatInstrumentableClassLoader with the
supplied class loader as parent. |
|
| Method Summary | |
|---|---|
void |
addTransformer(java.lang.instrument.ClassFileTransformer transformer)
Delegate for LoadTimeWeaver's addTransformer method. |
private static java.lang.Class |
findCommonAncestor(java.lang.Class one,
java.lang.Class two)
|
protected org.apache.catalina.loader.ResourceEntry |
findResourceInternal(java.lang.String name,
java.lang.String path)
|
java.lang.ClassLoader |
getThrowawayClassLoader()
Delegate for LoadTimeWeaver's getThrowawayClassLoader method. |
private static void |
shallowCopyFieldState(java.lang.Object src,
java.lang.Object dest)
Given the source object and the destination, which must be the same class or a subclass, copy all fields, including inherited fields. |
java.lang.String |
toString()
|
| Methods inherited from class org.apache.catalina.loader.WebappClassLoader |
|---|
addLifecycleListener, addPermission, addPermission, addPermission, addRepository, addURL, clearReferences, closeJARs, deleteDir, filter, findClass, findClassInternal, findLifecycleListeners, findLoadedClass0, findLoadedResource, findRepositories, findResource, findResourceInternal, findResources, getAntiJARLocking, getClearReferencesHttpClientKeepAliveThread, getClearReferencesLogFactoryRelease, getClearReferencesStopThreads, getClearReferencesStopTimerThreads, getClearReferencesThreadLocals, getContextName, getDelegate, getJarPath, getPermissions, getResource, getResourceAsStream, getResources, getSearchExternalFirst, getURI, getURL, getURLs, isPackageSealed, isStarted, loadClass, loadClass, loadedByThisOrChild, modified, openJARs, refreshPolicy, removeLifecycleListener, setAntiJARLocking, setClearReferencesHttpClientKeepAliveThread, setClearReferencesLogFactoryRelease, setClearReferencesStopThreads, setClearReferencesStopTimerThreads, setClearReferencesThreadLocals, setDelegate, setJarPath, setParentClassLoader, setResources, setSearchExternalFirst, setWorkDir, start, stop, validate, validateJarFile |
| Methods inherited from class java.net.URLClassLoader |
|---|
definePackage, newInstance, newInstance |
| Methods inherited from class java.security.SecureClassLoader |
|---|
defineClass, defineClass |
| Methods inherited from class java.lang.ClassLoader |
|---|
clearAssertionStatus, defineClass, defineClass, defineClass, defineClass, definePackage, findLibrary, findLoadedClass, findSystemClass, getPackage, getPackages, getParent, getResources, getSystemClassLoader, getSystemResource, getSystemResourceAsStream, getSystemResources, resolveClass, setClassAssertionStatus, setDefaultAssertionStatus, setPackageAssertionStatus, setSigners |
| Methods inherited from class java.lang.Object |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
| Field Detail |
|---|
private static final java.lang.String CLASS_SUFFIX
private final WeavingTransformer weavingTransformer
| Constructor Detail |
|---|
public TomcatInstrumentableClassLoader()
TomcatInstrumentableClassLoader using the
current context class loader.
TomcatInstrumentableClassLoader(ClassLoader)public TomcatInstrumentableClassLoader(java.lang.ClassLoader parent)
TomcatInstrumentableClassLoader with the
supplied class loader as parent.
parent - the parent ClassLoader to be used| Method Detail |
|---|
public void addTransformer(java.lang.instrument.ClassFileTransformer transformer)
addTransformer method.
Typically called through ReflectiveLoadTimeWeaver.
LoadTimeWeaver.addTransformer(java.lang.instrument.ClassFileTransformer),
ReflectiveLoadTimeWeaverpublic java.lang.ClassLoader getThrowawayClassLoader()
getThrowawayClassLoader method.
Typically called through ReflectiveLoadTimeWeaver.
LoadTimeWeaver.getThrowawayClassLoader(),
ReflectiveLoadTimeWeaver
protected org.apache.catalina.loader.ResourceEntry findResourceInternal(java.lang.String name,
java.lang.String path)
findResourceInternal in class org.apache.catalina.loader.WebappClassLoaderpublic java.lang.String toString()
toString in class org.apache.catalina.loader.WebappClassLoader
private static void shallowCopyFieldState(java.lang.Object src,
java.lang.Object dest)
throws java.lang.IllegalArgumentException
java.lang.IllegalArgumentException - if arguments are incompatible or either
is null
private static java.lang.Class findCommonAncestor(java.lang.Class one,
java.lang.Class two)
throws java.lang.IllegalArgumentException
java.lang.IllegalArgumentException
|
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||