From c0e429a9a50622de1d07a02e4c6475e10ddb0bbc Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Fri, 15 Jul 2011 14:48:51 +0000 Subject: [PATCH] polishing --- .../WebSphereClassLoaderAdapter.java | 26 ++++++---- .../WebSphereClassPreDefinePlugin.java | 49 +++++++++++-------- .../websphere/WebSphereLoadTimeWeaver.java | 11 +++-- 3 files changed, 51 insertions(+), 35 deletions(-) diff --git a/org.springframework.context/src/main/java/org/springframework/instrument/classloading/websphere/WebSphereClassLoaderAdapter.java b/org.springframework.context/src/main/java/org/springframework/instrument/classloading/websphere/WebSphereClassLoaderAdapter.java index 234b4c77b1..cc0a051e43 100644 --- a/org.springframework.context/src/main/java/org/springframework/instrument/classloading/websphere/WebSphereClassLoaderAdapter.java +++ b/org.springframework.context/src/main/java/org/springframework/instrument/classloading/websphere/WebSphereClassLoaderAdapter.java @@ -1,5 +1,5 @@ /* - * Copyright 2011 the original author or authors. + * Copyright 2002-2011 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -34,6 +34,7 @@ import org.springframework.util.Assert; * called through reflection) from the load-time weaver. * * @author Costin Leau + * @since 3.1 */ class WebSphereClassLoaderAdapter { @@ -58,14 +59,14 @@ class WebSphereClassLoaderAdapter { addPreDefinePlugin = classLoader.getClass().getMethod("addPreDefinePlugin", wsPreProcessorClass); transformerList = wsCompoundClassLoaderClass.getDeclaredField(PLUGINS_FIELD); transformerList.setAccessible(true); - - } catch (Exception ex) { + } + catch (Exception ex) { throw new IllegalStateException( "Could not initialize WebSphere LoadTimeWeaver because WebSphere 7 API classes are not available", ex); } - Assert.isInstanceOf(wsCompoundClassLoaderClass, classLoader, "ClassLoader must be instance of [" - + COMPOUND_CLASS_LOADER_NAME + "]"); + Assert.isInstanceOf(wsCompoundClassLoaderClass, classLoader, + "ClassLoader must be instance of [" + COMPOUND_CLASS_LOADER_NAME + "]"); this.classLoader = classLoader; } @@ -81,9 +82,11 @@ class WebSphereClassLoaderAdapter { new Class[] { this.wsPreProcessorClass }, adapter); this.addPreDefinePlugin.invoke(this.classLoader, adapterInstance); - } catch (InvocationTargetException ex) { + } + catch (InvocationTargetException ex) { throw new IllegalStateException("WebSphere addPreDefinePlugin method threw exception", ex.getCause()); - } catch (Exception ex) { + } + catch (Exception ex) { throw new IllegalStateException("Could not invoke WebSphere addPreDefinePlugin method", ex); } } @@ -96,10 +99,13 @@ class WebSphereClassLoaderAdapter { List list = (List) transformerList.get(loader); list.clear(); return loader; - } catch (InvocationTargetException ex) { + } + catch (InvocationTargetException ex) { throw new IllegalStateException("WebSphere CompoundClassLoader constructor failed", ex.getCause()); - } catch (Exception ex) { + } + catch (Exception ex) { throw new IllegalStateException("Could not construct WebSphere CompoundClassLoader", ex); } } -} \ No newline at end of file + +} diff --git a/org.springframework.context/src/main/java/org/springframework/instrument/classloading/websphere/WebSphereClassPreDefinePlugin.java b/org.springframework.context/src/main/java/org/springframework/instrument/classloading/websphere/WebSphereClassPreDefinePlugin.java index 5cf576d3c6..b4d70120e6 100644 --- a/org.springframework.context/src/main/java/org/springframework/instrument/classloading/websphere/WebSphereClassPreDefinePlugin.java +++ b/org.springframework.context/src/main/java/org/springframework/instrument/classloading/websphere/WebSphereClassPreDefinePlugin.java @@ -1,5 +1,5 @@ /* - * Copyright 2011 the original author or authors. + * Copyright 2002-2011 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -23,26 +23,24 @@ import java.security.CodeSource; import org.springframework.util.FileCopyUtils; /** - * Adapter that implements WebSphere 7.0 ClassPreProcessPlugin interface, delegating to a - * standard JDK {@link ClassFileTransformer} underneath. + * Adapter that implements WebSphere 7.0 ClassPreProcessPlugin interface, + * delegating to a standard JDK {@link ClassFileTransformer} underneath. * *

To avoid compile time checks again the vendor API, a dynamic proxy is * being used. * * @author Costin Leau + * @since 3.1 */ class WebSphereClassPreDefinePlugin implements InvocationHandler { private final ClassFileTransformer transformer; - private class Dummy { - } /** - * Creates a new {@link WebSphereClassPreDefinePlugin}. - * - * @param transformer the {@link ClassFileTransformer} to be adapted (must - * not be null) + * Create a new {@link WebSphereClassPreDefinePlugin}. + * @param transformer the {@link ClassFileTransformer} to be adapted + * (must not be null) */ public WebSphereClassPreDefinePlugin(ClassFileTransformer transformer) { this.transformer = transformer; @@ -53,33 +51,37 @@ class WebSphereClassPreDefinePlugin implements InvocationHandler { String dummyClass = Dummy.class.getName().replace('.', '/'); byte[] bytes = FileCopyUtils.copyToByteArray(classLoader.getResourceAsStream(dummyClass + ".class")); transformer.transform(classLoader, dummyClass, null, null, bytes); - } catch (Throwable ex) { + } + catch (Throwable ex) { throw new IllegalArgumentException("Cannot load transformer", ex); } } + public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { String name = method.getName(); - if ("equals".equals(name)) { - return (Boolean.valueOf(proxy == args[0])); - } else if ("hashCode".equals(name)) { + return (proxy == args[0]); + } + else if ("hashCode".equals(name)) { return hashCode(); - } else if ("toString".equals(name)) { + } + else if ("toString".equals(name)) { return toString(); - } else if ("transformClass".equals(name)) { + } + else if ("transformClass".equals(name)) { return transform((String) args[0], (byte[]) args[1], (CodeSource) args[2], (ClassLoader) args[3]); - } else { + } + else { throw new IllegalArgumentException("Unknown method: " + method); } } - public byte[] transform(String className, byte[] classfileBuffer, CodeSource codeSource, ClassLoader classLoader) + protected byte[] transform(String className, byte[] classfileBuffer, CodeSource codeSource, ClassLoader classLoader) throws Exception { - // NB: WebSphere passes className as "." without class while the - // transformer expects a VM, "/" format - byte[] result = transformer.transform(classLoader, className.replace('.', '/'), null, null, classfileBuffer); + // NB: WebSphere passes className as "." without class while the transformer expects a VM, "/" format + byte[] result = transformer.transform(classLoader, className.replace('.', '/'), null, null, classfileBuffer); return (result != null ? result : classfileBuffer); } @@ -90,4 +92,9 @@ class WebSphereClassPreDefinePlugin implements InvocationHandler { builder.append(this.transformer); return builder.toString(); } -} \ No newline at end of file + + + private static class Dummy { + } + +} diff --git a/org.springframework.context/src/main/java/org/springframework/instrument/classloading/websphere/WebSphereLoadTimeWeaver.java b/org.springframework.context/src/main/java/org/springframework/instrument/classloading/websphere/WebSphereLoadTimeWeaver.java index 9d51d4adb5..a4df2427fa 100644 --- a/org.springframework.context/src/main/java/org/springframework/instrument/classloading/websphere/WebSphereLoadTimeWeaver.java +++ b/org.springframework.context/src/main/java/org/springframework/instrument/classloading/websphere/WebSphereLoadTimeWeaver.java @@ -1,5 +1,5 @@ /* - * Copyright 2011 the original author or authors. + * Copyright 2002-2011 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -34,6 +34,7 @@ public class WebSphereLoadTimeWeaver implements LoadTimeWeaver { private final WebSphereClassLoaderAdapter classLoader; + /** * Create a new instance of the {@link WebSphereLoadTimeWeaver} class using * the default {@link ClassLoader class loader}. @@ -46,14 +47,15 @@ public class WebSphereLoadTimeWeaver implements LoadTimeWeaver { /** * Create a new instance of the {@link WebSphereLoadTimeWeaver} class using * the supplied {@link ClassLoader}. - * @param classLoader the ClassLoader to delegate to for - * weaving (must not be null) + * @param classLoader the ClassLoader to delegate to for weaving + * (must not be null) */ public WebSphereLoadTimeWeaver(ClassLoader classLoader) { Assert.notNull(classLoader, "ClassLoader must not be null"); this.classLoader = new WebSphereClassLoaderAdapter(classLoader); } + public void addTransformer(ClassFileTransformer transformer) { this.classLoader.addTransformer(transformer); } @@ -65,4 +67,5 @@ public class WebSphereLoadTimeWeaver implements LoadTimeWeaver { public ClassLoader getThrowawayClassLoader() { return this.classLoader.getThrowawayClassLoader(); } -} \ No newline at end of file + +}