SPR-6333
+ eliminated compile-time dependency on GlassFish custom API for the GlassFish LTW
+ added support for GlassFish 3
This commit is contained in:
Costin Leau
2009-11-20 17:48:13 +00:00
parent 5a158fb76f
commit 6653f25e81
8 changed files with 159 additions and 84 deletions

View File

@@ -16,7 +16,8 @@
package org.springframework.instrument.classloading.glassfish;
import static org.junit.Assert.*;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.fail;
import java.lang.instrument.ClassFileTransformer;
import java.net.URL;
@@ -32,20 +33,22 @@ import org.easymock.ArgumentsMatcher;
import org.easymock.MockControl;
import org.junit.After;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.springframework.instrument.classloading.LoadTimeWeaver;
import com.sun.enterprise.loader.InstrumentableClassLoader;
// converting away from old-style EasyMock APIs was problematic with this class
@SuppressWarnings("deprecation")
@Ignore
public class GlassFishLoadTimeWeaverTests {
private MockControl<InstrumentableClassLoader> loaderCtrl;
private InstrumentableClassLoader loader;
private MockControl loaderCtrl;
private GlassFishClassLoaderAdapter loader;
private LoadTimeWeaver ltw;
private class DummyInstrumentableClassLoader extends SecureClassLoader implements InstrumentableClassLoader {
private class DummyInstrumentableClassLoader extends SecureClassLoader {
static String INSTR_CL_NAME = GlassFishClassLoaderAdapter.INSTRUMENTABLE_CLASSLOADER_GLASSFISH_V2;
public DummyInstrumentableClassLoader() {
super();
@@ -55,29 +58,34 @@ public class GlassFishLoadTimeWeaverTests {
super(parent);
}
private List<ClassTransformer> transformers = new ArrayList<ClassTransformer>();
private List<ClassTransformer> v2Transformers = new ArrayList<ClassTransformer>();
private List<ClassFileTransformer> v3Transformers = new ArrayList<ClassFileTransformer>();
public void addTransformer(ClassTransformer transformer) {
transformers.add(transformer);
v2Transformers.add(transformer);
}
public void addTransformer(ClassFileTransformer transformer) {
v3Transformers.add(transformer);
}
public ClassLoader copy() {
return new DummyInstrumentableClassLoader();
}
@Override
public Class<?> loadClass(String name) throws ClassNotFoundException {
if (INSTR_CL_NAME.equals(name)) {
return this.getClass();
}
return getClass().getClassLoader().loadClass(name);
}
}
@Before
public void setUp() throws Exception {
loaderCtrl = MockControl.createControl(InstrumentableClassLoader.class);
loader = loaderCtrl.getMock();
loaderCtrl.replay();
ltw = new GlassFishLoadTimeWeaver() {
@Override
protected InstrumentableClassLoader determineClassLoader(ClassLoader cl) {
return loader;
}
};
ltw = new GlassFishLoadTimeWeaver(new DummyInstrumentableClassLoader());
}
@After
@@ -91,8 +99,7 @@ public class GlassFishLoadTimeWeaverTests {
try {
ltw = new GlassFishLoadTimeWeaver();
fail("expected exception");
}
catch (IllegalArgumentException ex) {
} catch (IllegalArgumentException ex) {
// expected
}
@@ -103,8 +110,7 @@ public class GlassFishLoadTimeWeaverTests {
try {
ltw = new GlassFishLoadTimeWeaver(null);
fail("expected exception");
}
catch (RuntimeException e) {
} catch (RuntimeException e) {
// expected
}
@@ -127,10 +133,9 @@ public class GlassFishLoadTimeWeaverTests {
@Test
public void testAddTransformer() {
ClassFileTransformer transformer = MockControl.createNiceControl(
ClassFileTransformer.class).getMock();
ClassFileTransformer transformer = MockControl.createNiceControl(ClassFileTransformer.class).getMock();
loaderCtrl.reset();
loader.addTransformer(new ClassTransformerAdapter(transformer));
loader.addTransformer(transformer);
loaderCtrl.setMatcher(new ArgumentsMatcher() {
public boolean matches(Object[] arg0, Object[] arg1) {
@@ -156,10 +161,9 @@ public class GlassFishLoadTimeWeaverTests {
public void testGetThrowawayClassLoader() {
loaderCtrl.reset();
ClassLoader cl = new URLClassLoader(new URL[0]);
loaderCtrl.expectAndReturn(loader.copy(), cl);
loaderCtrl.expectAndReturn(loader.getClassLoader(), cl);
loaderCtrl.replay();
assertSame(ltw.getThrowawayClassLoader(), cl);
}
}
}