1 16 17 package org.springframework.instrument.classloading.glassfish; 18 19 import java.lang.instrument.ClassFileTransformer ; 20 21 import com.sun.enterprise.loader.InstrumentableClassLoader; 22 23 import org.springframework.instrument.classloading.LoadTimeWeaver; 24 import org.springframework.util.Assert; 25 import org.springframework.util.ClassUtils; 26 27 35 public class GlassFishLoadTimeWeaver implements LoadTimeWeaver { 36 37 private final InstrumentableClassLoader classLoader; 38 39 40 public GlassFishLoadTimeWeaver() { 41 this(ClassUtils.getDefaultClassLoader()); 42 } 43 44 public GlassFishLoadTimeWeaver(ClassLoader classLoader) { 45 Assert.notNull(classLoader, "ClassLoader must not be null"); 46 InstrumentableClassLoader icl = determineClassLoader(classLoader); 47 if (icl == null) { 48 throw new IllegalArgumentException (classLoader + " and its parents are not suitable ClassLoaders: " + 49 "An [" + InstrumentableClassLoader.class.getName() + "] implementation is required."); 50 } 51 this.classLoader = icl; 52 } 53 54 59 protected InstrumentableClassLoader determineClassLoader(ClassLoader classLoader) { 60 for (ClassLoader cl = classLoader; cl != null; cl = cl.getParent()) { 63 if (cl instanceof InstrumentableClassLoader) { 64 return (InstrumentableClassLoader) cl; 65 } 66 } 67 return null; 68 } 69 70 71 public void addTransformer(ClassFileTransformer transformer) { 72 this.classLoader.addTransformer(new ClassTransformerAdapter(transformer)); 73 } 74 75 public ClassLoader getInstrumentableClassLoader() { 76 return (ClassLoader ) this.classLoader; 77 } 78 79 public ClassLoader getThrowawayClassLoader() { 80 return this.classLoader.copy(); 81 } 82 83 } 84 | Popular Tags |