[jboss-cvs] JBossAS SVN: r86439 - in projects/spring-int/trunk: weaving and 8 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Sat Mar 28 11:12:06 EDT 2009
Author: alesj
Date: 2009-03-28 11:12:06 -0400 (Sat, 28 Mar 2009)
New Revision: 86439
Added:
projects/spring-int/trunk/weaving/
projects/spring-int/trunk/weaving/pom.xml
projects/spring-int/trunk/weaving/src/
projects/spring-int/trunk/weaving/src/main/
projects/spring-int/trunk/weaving/src/main/java/
projects/spring-int/trunk/weaving/src/main/java/org/
projects/spring-int/trunk/weaving/src/main/java/org/jboss/
projects/spring-int/trunk/weaving/src/main/java/org/jboss/classloader/
projects/spring-int/trunk/weaving/src/main/java/org/jboss/classloader/spi/
projects/spring-int/trunk/weaving/src/main/java/org/jboss/classloader/spi/base/
projects/spring-int/trunk/weaving/src/main/java/org/jboss/classloader/spi/base/ClassFileTransformer2Translator.java
projects/spring-int/trunk/weaving/src/main/java/org/jboss/classloader/spi/base/JBoss5LoadTimeWeaver.java
Log:
[JBSPRING-1]; add JBoss5 support for load time weaving.
Added: projects/spring-int/trunk/weaving/pom.xml
===================================================================
--- projects/spring-int/trunk/weaving/pom.xml (rev 0)
+++ projects/spring-int/trunk/weaving/pom.xml 2009-03-28 15:12:06 UTC (rev 86439)
@@ -0,0 +1,27 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <parent>
+ <groupId>org.jboss.spring-int</groupId>
+ <artifactId>jboss-spring-int-parent</artifactId>
+ <version>1.0.0-SNAPSHOT</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.jboss.spring-int</groupId>
+ <artifactId>jboss-spring-int-weaving</artifactId>
+ <packaging>jar</packaging>
+ <name>JBoss Spring Integration - Weaving</name>
+ <url>http://www.jboss.org/jbossmc</url>
+ <description>JBoss Spring Integration - Weaving</description>
+
+ <dependencies>
+ <!-- Compile (global dependencies) -->
+ <dependency>
+ <groupId>org.jboss.cl</groupId>
+ <artifactId>jboss-classloader</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-context</artifactId>
+ </dependency>
+ </dependencies>
+
+</project>
\ No newline at end of file
Added: projects/spring-int/trunk/weaving/src/main/java/org/jboss/classloader/spi/base/ClassFileTransformer2Translator.java
===================================================================
--- projects/spring-int/trunk/weaving/src/main/java/org/jboss/classloader/spi/base/ClassFileTransformer2Translator.java (rev 0)
+++ projects/spring-int/trunk/weaving/src/main/java/org/jboss/classloader/spi/base/ClassFileTransformer2Translator.java 2009-03-28 15:12:06 UTC (rev 86439)
@@ -0,0 +1,54 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.classloader.spi.base;
+
+import java.security.ProtectionDomain;
+import java.lang.instrument.ClassFileTransformer;
+
+import org.jboss.util.loading.Translator;
+
+/**
+ * ClassFileTransfomer to Translator bridge.
+ *
+ * @author <a href="mailto:ales.justin at jboss.org">Ales Justin</a>
+ */
+public class ClassFileTransformer2Translator implements Translator
+{
+ private ClassFileTransformer transformer;
+
+ public ClassFileTransformer2Translator(ClassFileTransformer transformer)
+ {
+ if (transformer == null)
+ throw new IllegalArgumentException("Null transformer");
+
+ this.transformer = transformer;
+ }
+
+ public byte[] transform(ClassLoader loader, String className, Class<?> classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer) throws Exception
+ {
+ return transformer.transform(loader, className, classBeingRedefined, protectionDomain, classfileBuffer);
+ }
+
+ public void unregisterClassLoader(ClassLoader loader)
+ {
+ }
+}
\ No newline at end of file
Added: projects/spring-int/trunk/weaving/src/main/java/org/jboss/classloader/spi/base/JBoss5LoadTimeWeaver.java
===================================================================
--- projects/spring-int/trunk/weaving/src/main/java/org/jboss/classloader/spi/base/JBoss5LoadTimeWeaver.java (rev 0)
+++ projects/spring-int/trunk/weaving/src/main/java/org/jboss/classloader/spi/base/JBoss5LoadTimeWeaver.java 2009-03-28 15:12:06 UTC (rev 86439)
@@ -0,0 +1,97 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.classloader.spi.base;
+
+import java.lang.instrument.ClassFileTransformer;
+
+import org.jboss.classloader.spi.ClassLoaderSystem;
+import org.jboss.logging.Logger;
+import org.springframework.instrument.classloading.LoadTimeWeaver;
+import org.springframework.util.Assert;
+import org.springframework.util.ClassUtils;
+
+/**
+ * {@link LoadTimeWeaver} implementation for JBoss5's instrumentable ClassLoader.
+ *
+ * @author <a href="mailto:ales.justin at jboss.org">Ales Justin</a>
+ */
+public class JBoss5LoadTimeWeaver implements LoadTimeWeaver
+{
+ private static Logger log = Logger.getLogger(JBoss5LoadTimeWeaver.class);
+ private BaseClassLoader classLoader;
+
+ public JBoss5LoadTimeWeaver()
+ {
+ this(ClassUtils.getDefaultClassLoader());
+ }
+
+ public JBoss5LoadTimeWeaver(ClassLoader classLoader)
+ {
+ Assert.notNull(classLoader, "ClassLoader must not be null");
+ BaseClassLoader bcl = determineClassLoader(classLoader);
+ if (bcl == null)
+ {
+ throw new IllegalArgumentException(classLoader + " and its parents are not suitable ClassLoaders: " +
+ "An [" + BaseClassLoader.class.getName() + "] implementation is required.");
+ }
+ this.classLoader = bcl;
+ }
+
+ private BaseClassLoader determineClassLoader(ClassLoader classLoader)
+ {
+ for (ClassLoader cl = classLoader; cl != null; cl = cl.getParent())
+ {
+ if (cl instanceof BaseClassLoader)
+ {
+ return (BaseClassLoader)cl;
+ }
+ }
+ return null;
+ }
+
+ public void addTransformer(ClassFileTransformer transformer)
+ {
+ BaseClassLoader bcl = classLoader;
+ BaseClassLoaderPolicy policy = bcl.getPolicy();
+ BaseClassLoaderDomain domain = policy.getClassLoaderDomain();
+ BaseClassLoaderSystem system = domain.getClassLoaderSystem();
+ if (system instanceof ClassLoaderSystem)
+ {
+ ClassLoaderSystem cls = (ClassLoaderSystem)system;
+ cls.setTranslator(new ClassFileTransformer2Translator(transformer));
+ }
+ else
+ {
+ log.warn("Cannot add ");
+ }
+ }
+
+ public ClassLoader getInstrumentableClassLoader()
+ {
+ return classLoader;
+ }
+
+ public ClassLoader getThrowawayClassLoader()
+ {
+ return new BaseClassLoader(classLoader.getPolicy());
+ }
+}
More information about the jboss-cvs-commits
mailing list