From: <hib...@li...> - 2006-08-03 20:43:22
|
Author: ste...@jb... Date: 2006-08-03 16:42:49 -0400 (Thu, 03 Aug 2006) New Revision: 10210 Removed: branches/Branch_3_2/Hibernate3/test/org/hibernate/test/instrument/runtime/InstrumentedClassLoader.java Modified: branches/Branch_3_2/Hibernate3/test/org/hibernate/test/instrument/runtime/AbstractTransformingClassLoaderInstrumentTestCase.java Log: ported fix forHHH-1968 to 3.2 branch Modified: branches/Branch_3_2/Hibernate3/test/org/hibernate/test/instrument/runtime/AbstractTransformingClassLoaderInstrumentTestCase.java =================================================================== --- branches/Branch_3_2/Hibernate3/test/org/hibernate/test/instrument/runtime/AbstractTransformingClassLoaderInstrumentTestCase.java 2006-08-03 20:35:26 UTC (rev 10209) +++ branches/Branch_3_2/Hibernate3/test/org/hibernate/test/instrument/runtime/AbstractTransformingClassLoaderInstrumentTestCase.java 2006-08-03 20:42:49 UTC (rev 10210) @@ -4,6 +4,9 @@ import org.hibernate.HibernateException; import org.hibernate.bytecode.BytecodeProvider; +import org.hibernate.bytecode.InstrumentedClassLoader; +import org.hibernate.bytecode.util.BasicClassFilter; +import org.hibernate.bytecode.util.FieldFilter; import org.hibernate.test.AbstractClassLoaderIsolatedTestCase; /** @@ -11,25 +14,26 @@ */ public abstract class AbstractTransformingClassLoaderInstrumentTestCase extends AbstractClassLoaderIsolatedTestCase { - private BytecodeProvider provider; - protected ClassLoader buildIsolatedClassLoader(ClassLoader parent) { -// String myFileName = AbstractTransformingClassLoaderInstrumentTestCase.class.getName().replace( '.', '/' ) + ".class"; -// URL fileURL = this.getClass().getClassLoader().getResource( myFileName ); -// String filePath = fileURL.getPath(); -// String classPath = filePath.substring( 0, filePath.length() - myFileName.length() ); - provider = buildBytecodeProvider(); + BytecodeProvider provider = buildBytecodeProvider(); return new InstrumentedClassLoader( parent, - provider.getEntityClassTransformer( - new String[] { "org.hibernate.test.instrument" }, - null) ); + provider.getTransformer( + new BasicClassFilter( new String[] { "org.hibernate.test.instrument" }, null ), + new FieldFilter() { + public boolean shouldInstrumentField(String className, String fieldName) { + return true; + } + public boolean shouldTransformFieldAccess(String transformingClassName, String fieldOwnerClassName, String fieldName) { + return true; + } + } + ) + ); } protected void releaseIsolatedClassLoader(ClassLoader isolatedLoader) { - provider.releaseDynamicFieldInterceptionClassLoader( isolatedLoader ); - provider = null; } protected abstract BytecodeProvider buildBytecodeProvider(); Deleted: branches/Branch_3_2/Hibernate3/test/org/hibernate/test/instrument/runtime/InstrumentedClassLoader.java =================================================================== --- branches/Branch_3_2/Hibernate3/test/org/hibernate/test/instrument/runtime/InstrumentedClassLoader.java 2006-08-03 20:35:26 UTC (rev 10209) +++ branches/Branch_3_2/Hibernate3/test/org/hibernate/test/instrument/runtime/InstrumentedClassLoader.java 2006-08-03 20:42:49 UTC (rev 10210) @@ -1,80 +0,0 @@ -//$Id: $ -package org.hibernate.test.instrument.runtime; - -import java.io.IOException; -import java.io.InputStream; - -import org.hibernate.HibernateException; -import org.hibernate.bytecode.ClassTransformer; - -/** - * @author Emmanuel Bernard - */ -public class InstrumentedClassLoader extends ClassLoader { - - private ClassTransformer classTransformer; - - public InstrumentedClassLoader(ClassLoader parent, ClassTransformer classTransformer) { - super( parent ); - this.classTransformer = classTransformer; - } - - public Class loadClass(String name) throws ClassNotFoundException { - if ( name.startsWith( "java" ) ) return getParent().loadClass( name ); - Class c = findLoadedClass( name ); - if ( c != null ) return c; - InputStream is = this.getResourceAsStream( name.replace( '.', '/' ) + ".class" ); - if ( is == null ) throw new ClassNotFoundException( name ); - byte[] buffer = new byte[409600]; - byte[] originalClass = new byte[0]; - int r = 0; - try { - r = is.read( buffer ); - } - catch (IOException e) { - throw new ClassNotFoundException( name + " not found", e ); - } - while ( r >= buffer.length ) { - byte[] temp = new byte[ originalClass.length + buffer.length ]; - System.arraycopy( originalClass, 0, temp, 0, originalClass.length ); - System.arraycopy( buffer, 0, temp, originalClass.length, buffer.length ); - originalClass = temp; - } - if ( r != -1 ) { - byte[] temp = new byte[ originalClass.length + r ]; - System.arraycopy( originalClass, 0, temp, 0, originalClass.length ); - System.arraycopy( buffer, 0, temp, originalClass.length, r ); - originalClass = temp; - } - try { - is.close(); - } - catch (IOException e) { - throw new ClassNotFoundException( name + " not found", e ); - } - if (classTransformer != null) { - byte[] transformed = new byte[0]; - try { - transformed = classTransformer.transform( - getParent(), - name, - null, - null, - originalClass - ); - if ( originalClass == transformed) { - return getParent().loadClass(name); - } - else { - return defineClass( name, transformed, 0, transformed.length ); - } - } - catch (HibernateException e) { - throw new ClassNotFoundException( name + " not found", e ); - } - } - else { - return getParent().loadClass(name); - } - } -} |