com.tc.object.bytecode.hook.impl
Class ClassProcessorHelper

java.lang.Object
  extended by com.tc.object.bytecode.hook.impl.ClassProcessorHelper

public class ClassProcessorHelper
extends java.lang.Object

Helper class called by the modified version of java.lang.ClassLoader


Nested Class Summary
static class ClassProcessorHelper.State
          ClassProcessorHelper initialization state
static class ClassProcessorHelper.TcCommonLibQualifier
          File filter for lib/*.jar files and lib/resources directory
 
Field Summary
static boolean USE_GLOBAL_CONTEXT
           
 
Constructor Summary
ClassProcessorHelper()
           
 
Method Summary
static java.lang.String computeAppName(java.lang.String context)
          Given a context path, trim and condition it to be usable by methods such as #isDSOSessions(String)
static void defineClass0Post(java.lang.Class clazz, java.lang.ClassLoader caller)
          Post process class during definition
static byte[] defineClass0Pre(java.lang.ClassLoader caller, java.lang.String name, byte[] b, int off, int len, java.security.ProtectionDomain pd)
          byte code instrumentation of class loaded
XXX::NOTE:: Do NOT optimize to return same input byte array if the class was instrumented (I can't imagine why we would).
static DSOContext getContext(java.lang.ClassLoader cl)
          Get the DSOContext for this classloader
static Manager getGlobalManager()
           
static Manager getManager(java.lang.ClassLoader caller)
          WARNING: used by test framework only
static java.net.URL getTCResource(java.lang.String name, java.lang.ClassLoader cl)
          Get resource URL
static void initialize()
           
static boolean isAWDependency(java.lang.String className)
          Check whether this is an AspectWerkz dependency
static byte[] loadClassInternalHook(java.lang.String name, java.lang.ClassLoader cl)
          Get the exported class if defined.
static void registerGlobalLoader(NamedClassLoader loader)
          Deprecated. here so that old code is not broken. New classloader adapters should be registered with registerGlobalLoader(NamedClassLoader, String) to support classloader app-group substitution.
static void registerGlobalLoader(NamedClassLoader loader, java.lang.String webAppName)
          Register a named classloader.
static void setContext(java.lang.ClassLoader loader, DSOContext context)
          WARNING: Used by test framework only
static void shutdown()
          Shut down the ClassProcessorHelper
static byte[] systemLoaderFindClassHook(java.lang.String name, java.lang.ClassLoader loader)
           
static void systemLoaderInitialized()
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

USE_GLOBAL_CONTEXT

public static final boolean USE_GLOBAL_CONTEXT
Constructor Detail

ClassProcessorHelper

public ClassProcessorHelper()
Method Detail

getTCResource

public static java.net.URL getTCResource(java.lang.String name,
                                         java.lang.ClassLoader cl)
Get resource URL

Parameters:
name - Resource name
cl - Loading classloader
Returns:
URL to load resource from

loadClassInternalHook

public static byte[] loadClassInternalHook(java.lang.String name,
                                           java.lang.ClassLoader cl)
                                    throws java.lang.ClassNotFoundException
Get the exported class if defined. This method is called from java.lang.ClassLoader.loadClassInternal()

Parameters:
name - Class name
cl - Classloader
Returns:
Class bytes
Throws:
java.lang.ClassNotFoundException - If class not found

systemLoaderFindClassHook

public static byte[] systemLoaderFindClassHook(java.lang.String name,
                                               java.lang.ClassLoader loader)
                                        throws java.lang.ClassNotFoundException
Throws:
java.lang.ClassNotFoundException

initialize

public static void initialize()

registerGlobalLoader

@Deprecated
public static void registerGlobalLoader(NamedClassLoader loader)
Deprecated. here so that old code is not broken. New classloader adapters should be registered with registerGlobalLoader(NamedClassLoader, String) to support classloader app-group substitution.


registerGlobalLoader

public static void registerGlobalLoader(NamedClassLoader loader,
                                        java.lang.String webAppName)
Register a named classloader.

Parameters:
webAppName - the name of a web application that this is the loader for; or null if this is not a web application classloader.

shutdown

public static void shutdown()
Shut down the ClassProcessorHelper


computeAppName

public static java.lang.String computeAppName(java.lang.String context)
Given a context path, trim and condition it to be usable by methods such as #isDSOSessions(String)

Parameters:
context - a servlet context path, as from HttpServletContext#getPath(); null, "", "/", or "//" will be interpreted as ROOT context.
Returns:
a non-null, non-empty string

setContext

public static void setContext(java.lang.ClassLoader loader,
                              DSOContext context)
WARNING: Used by test framework only

Parameters:
loader - Loader
context - DSOContext

getManager

public static Manager getManager(java.lang.ClassLoader caller)
WARNING: used by test framework only


getContext

public static DSOContext getContext(java.lang.ClassLoader cl)
Get the DSOContext for this classloader

Parameters:
cl - Loader
Returns:
Context

defineClass0Pre

public static byte[] defineClass0Pre(java.lang.ClassLoader caller,
                                     java.lang.String name,
                                     byte[] b,
                                     int off,
                                     int len,
                                     java.security.ProtectionDomain pd)
byte code instrumentation of class loaded
XXX::NOTE:: Do NOT optimize to return same input byte array if the class was instrumented (I can't imagine why we would). Our instrumentation in java.lang.ClassLoader checks the returned byte array to see if the class is instrumented or not to maintain the array offset.

Parameters:
caller - Loader defining class
name - Class name
b - Data
off - Offset into b
len - Length of class data
pd - Protection domain for class
Returns:
Modified class array
See Also:
ClassLoaderPreProcessorImpl

defineClass0Post

public static void defineClass0Post(java.lang.Class clazz,
                                    java.lang.ClassLoader caller)
Post process class during definition

Parameters:
clazz - Class being defined
caller - Classloader doing definition

getGlobalManager

public static Manager getGlobalManager()
Returns:
Global Manager

isAWDependency

public static boolean isAWDependency(java.lang.String className)
Check whether this is an AspectWerkz dependency

Parameters:
className - Class name
Returns:
True if AspectWerkz dependency

systemLoaderInitialized

public static void systemLoaderInitialized()


Copyright © 2010 Terracotta, Inc.. All Rights Reserved.