[jboss-cvs] JBossAS SVN: r111074 - in projects/jboss-cl/trunk: classloader/src/test/java/org/jboss/test/classloader/transform and 3 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Thu Mar 31 08:41:57 EDT 2011
Author: alesj
Date: 2011-03-31 08:41:56 -0400 (Thu, 31 Mar 2011)
New Revision: 111074
Added:
projects/jboss-cl/trunk/classloader/src/test/java/org/jboss/test/classloader/transform/support/DomainTester.java
projects/jboss-cl/trunk/classloader/src/test/java/org/jboss/test/classloader/transform/support/YearTranslator.java
projects/jboss-cl/trunk/classloader/src/test/java/org/jboss/test/classloader/transform/test/DomainTransformUnitTestCase.java
Modified:
projects/jboss-cl/trunk/classloader/src/main/java/org/jboss/classloader/spi/base/BaseClassLoaderDomain.java
projects/jboss-cl/trunk/classloader/src/test/java/org/jboss/test/classloader/transform/TransformTestSuite.java
projects/jboss-cl/trunk/classloader/src/test/java/org/jboss/test/classloader/transform/support/MethodHelper.java
projects/jboss-cl/trunk/classloader/src/test/java/org/jboss/test/classloader/transform/test/MixedTransformUnitTestCase.java
projects/jboss-cl/trunk/classloader/src/test/java/org/jboss/test/classloader/transform/test/PolicyTransformUnitTestCase.java
projects/jboss-cl/trunk/classloader/src/test/java/org/jboss/test/classloader/transform/test/SystemTransformUnitTestCase.java
projects/jboss-cl/trunk/classloader/src/test/java/org/jboss/test/classloader/transform/test/TransformTest.java
projects/jboss-cl/trunk/classloading/src/main/java/org/jboss/classloading/spi/metadata/TranslatorScope.java
Log:
[JBCL-178]; add translator support to CL domain.
Modified: projects/jboss-cl/trunk/classloader/src/main/java/org/jboss/classloader/spi/base/BaseClassLoaderDomain.java
===================================================================
--- projects/jboss-cl/trunk/classloader/src/main/java/org/jboss/classloader/spi/base/BaseClassLoaderDomain.java 2011-03-31 12:04:36 UTC (rev 111073)
+++ projects/jboss-cl/trunk/classloader/src/main/java/org/jboss/classloader/spi/base/BaseClassLoaderDomain.java 2011-03-31 12:41:56 UTC (rev 111074)
@@ -24,15 +24,29 @@
import java.io.IOException;
import java.net.URL;
import java.security.ProtectionDomain;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
import java.util.Map.Entry;
+import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArrayList;
import org.jboss.classloader.plugins.ClassLoaderUtils;
-import org.jboss.classloader.spi.*;
+import org.jboss.classloader.spi.CacheLoader;
+import org.jboss.classloader.spi.ClassLoaderCache;
+import org.jboss.classloader.spi.ClassLoaderPolicy;
+import org.jboss.classloader.spi.DelegateLoader;
+import org.jboss.classloader.spi.ImportType;
+import org.jboss.classloader.spi.Loader;
+import org.jboss.classloader.spi.ShutdownPolicy;
+import org.jboss.classloader.spi.translator.TranslatorUtils;
import org.jboss.logging.Logger;
import org.jboss.util.collection.ConcurrentSet;
+import org.jboss.util.loading.Translator;
/**
* BaseClassLoaderDomain.<p>
@@ -52,6 +66,9 @@
/** The classloader system to which we belong */
private BaseClassLoaderSystem system;
+ /** The translators */
+ private List<Translator> translators;
+
/** The classloaders in the order they were registered */
private List<ClassLoaderInformation> classLoaders = new CopyOnWriteArrayList<ClassLoaderInformation>();
@@ -217,10 +234,13 @@
*/
protected byte[] transform(ClassLoader classLoader, String className, byte[] byteCode, ProtectionDomain protectionDomain) throws Exception
{
+ byte[] result = byteCode;
+
BaseClassLoaderSystem system = getClassLoaderSystem();
if (system != null)
- return system.transform(classLoader, className, byteCode, protectionDomain);
- return byteCode;
+ result = system.transform(classLoader, className, result, protectionDomain);
+
+ return TranslatorUtils.applyTranslatorsOnTransform(getTranslators(), classLoader, className, result, protectionDomain);
}
/**
@@ -1712,8 +1732,63 @@
for (ClassLoaderInformation info : infos)
info.clearBlackList(name);
}
-
+
/**
+ * Get the policy's translators.
+ *
+ * @return the translators
+ */
+ public synchronized List<Translator> getTranslators()
+ {
+ if (translators == null || translators.isEmpty())
+ return Collections.emptyList();
+ else
+ return Collections.unmodifiableList(translators);
+ }
+
+ /**
+ * Set the translators.
+ *
+ * @param translators the translators
+ */
+ public synchronized void setTranslators(List<Translator> translators)
+ {
+ this.translators = translators;
+ }
+
+ /**
+ * Add the translator.
+ *
+ * @param translator the translator to add
+ * @throws IllegalArgumentException for null translator
+ */
+ public synchronized void addTranslator(Translator translator)
+ {
+ if (translator == null)
+ throw new IllegalArgumentException("Null translator");
+
+ if (translators == null)
+ translators = new ArrayList<Translator>();
+
+ translators.add(translator);
+ }
+
+ /**
+ * Remove the translator.
+ *
+ * @param translator the translator to remove
+ * @throws IllegalArgumentException for null translator
+ */
+ public synchronized void removeTranslator(Translator translator)
+ {
+ if (translator == null)
+ throw new IllegalArgumentException("Null translator");
+
+ if (translators != null)
+ translators.remove(translator);
+ }
+
+ /**
* ClassCacheItem.
*/
static class ClassCacheItem
Modified: projects/jboss-cl/trunk/classloader/src/test/java/org/jboss/test/classloader/transform/TransformTestSuite.java
===================================================================
--- projects/jboss-cl/trunk/classloader/src/test/java/org/jboss/test/classloader/transform/TransformTestSuite.java 2011-03-31 12:04:36 UTC (rev 111073)
+++ projects/jboss-cl/trunk/classloader/src/test/java/org/jboss/test/classloader/transform/TransformTestSuite.java 2011-03-31 12:41:56 UTC (rev 111074)
@@ -24,6 +24,7 @@
import junit.framework.Test;
import junit.framework.TestSuite;
import junit.textui.TestRunner;
+import org.jboss.test.classloader.transform.test.DomainTransformUnitTestCase;
import org.jboss.test.classloader.transform.test.MixedTransformUnitTestCase;
import org.jboss.test.classloader.transform.test.PolicyTransformUnitTestCase;
import org.jboss.test.classloader.transform.test.SystemTransformUnitTestCase;
@@ -55,6 +56,7 @@
TestSuite suite = new TestSuite("Transform Tests");
suite.addTest(PolicyTransformUnitTestCase.suite());
+ suite.addTest(DomainTransformUnitTestCase.suite());
suite.addTest(SystemTransformUnitTestCase.suite());
suite.addTest(MixedTransformUnitTestCase.suite());
Copied: projects/jboss-cl/trunk/classloader/src/test/java/org/jboss/test/classloader/transform/support/DomainTester.java (from rev 110962, projects/jboss-cl/trunk/classloader/src/test/java/org/jboss/test/classloader/transform/support/PolicyTester.java)
===================================================================
--- projects/jboss-cl/trunk/classloader/src/test/java/org/jboss/test/classloader/transform/support/DomainTester.java (rev 0)
+++ projects/jboss-cl/trunk/classloader/src/test/java/org/jboss/test/classloader/transform/support/DomainTester.java 2011-03-31 12:41:56 UTC (rev 111074)
@@ -0,0 +1,29 @@
+/*
+ * 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.test.classloader.transform.support;
+
+/**
+ * @author <a href="mailto:ales.justin at jboss.org">Ales Justin</a>
+ */
+public class DomainTester
+{
+}
Modified: projects/jboss-cl/trunk/classloader/src/test/java/org/jboss/test/classloader/transform/support/MethodHelper.java
===================================================================
--- projects/jboss-cl/trunk/classloader/src/test/java/org/jboss/test/classloader/transform/support/MethodHelper.java 2011-03-31 12:04:36 UTC (rev 111073)
+++ projects/jboss-cl/trunk/classloader/src/test/java/org/jboss/test/classloader/transform/support/MethodHelper.java 2011-03-31 12:41:56 UTC (rev 111074)
@@ -33,6 +33,11 @@
return System.getProperty("user.name", "Ales");
}
+ public static int year()
+ {
+ return 2011;
+ }
+
public static Locale locale()
{
return Locale.getDefault();
Copied: projects/jboss-cl/trunk/classloader/src/test/java/org/jboss/test/classloader/transform/support/YearTranslator.java (from rev 110962, projects/jboss-cl/trunk/classloader/src/test/java/org/jboss/test/classloader/transform/support/AuthorTranslator.java)
===================================================================
--- projects/jboss-cl/trunk/classloader/src/test/java/org/jboss/test/classloader/transform/support/YearTranslator.java (rev 0)
+++ projects/jboss-cl/trunk/classloader/src/test/java/org/jboss/test/classloader/transform/support/YearTranslator.java 2011-03-31 12:41:56 UTC (rev 111074)
@@ -0,0 +1,35 @@
+/*
+ * 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.test.classloader.transform.support;
+
+import javassist.CtClass;
+
+/**
+ * @author <a href="mailto:ales.justin at jboss.org">Ales Justin</a>
+ */
+public class YearTranslator extends JavassistTranslator
+{
+ protected void addMethods(CtClass ctClass) throws Exception
+ {
+ addMethod(ctClass, "year");
+ }
+}
Copied: projects/jboss-cl/trunk/classloader/src/test/java/org/jboss/test/classloader/transform/test/DomainTransformUnitTestCase.java (from rev 110962, projects/jboss-cl/trunk/classloader/src/test/java/org/jboss/test/classloader/transform/test/PolicyTransformUnitTestCase.java)
===================================================================
--- projects/jboss-cl/trunk/classloader/src/test/java/org/jboss/test/classloader/transform/test/DomainTransformUnitTestCase.java (rev 0)
+++ projects/jboss-cl/trunk/classloader/src/test/java/org/jboss/test/classloader/transform/test/DomainTransformUnitTestCase.java 2011-03-31 12:41:56 UTC (rev 111074)
@@ -0,0 +1,73 @@
+/*
+ * 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.test.classloader.transform.test;
+
+import java.lang.reflect.Method;
+
+import junit.framework.Test;
+import org.jboss.classloader.spi.ClassLoaderDomain;
+import org.jboss.classloader.spi.ClassLoaderPolicy;
+import org.jboss.classloader.spi.ClassLoaderSystem;
+import org.jboss.test.classloader.transform.support.YearTranslator;
+
+/**
+ * Per policy transformation tests.
+ *
+ * @author <a href="mailto:ales.justin at jboss.org">Ales Justin</a>
+ */
+public class DomainTransformUnitTestCase extends TransformTest
+{
+ public DomainTransformUnitTestCase(String name)
+ {
+ super(name);
+ }
+
+ public static Test suite()
+ {
+ return suite(DomainTransformUnitTestCase.class);
+ }
+
+ protected void prepareTransform(ClassLoaderSystem system, ClassLoaderDomain domain, ClassLoaderPolicy policy)
+ {
+ domain.addTranslator(new YearTranslator());
+ }
+
+ protected String getClassName()
+ {
+ return "org.jboss.test.classloader.transform.support.DomainTester";
+ }
+
+ protected void testInstance(Object instance) throws Exception
+ {
+ Method author = instance.getClass().getDeclaredMethod("year");
+ assertNotNull(author.invoke(instance));
+
+ try
+ {
+ instance.getClass().getDeclaredMethod("locale");
+ fail("Should not be here.");
+ }
+ catch (Exception ignored)
+ {
+ }
+ }
+}
\ No newline at end of file
Modified: projects/jboss-cl/trunk/classloader/src/test/java/org/jboss/test/classloader/transform/test/MixedTransformUnitTestCase.java
===================================================================
--- projects/jboss-cl/trunk/classloader/src/test/java/org/jboss/test/classloader/transform/test/MixedTransformUnitTestCase.java 2011-03-31 12:04:36 UTC (rev 111073)
+++ projects/jboss-cl/trunk/classloader/src/test/java/org/jboss/test/classloader/transform/test/MixedTransformUnitTestCase.java 2011-03-31 12:41:56 UTC (rev 111074)
@@ -24,10 +24,12 @@
import java.lang.reflect.Method;
import junit.framework.Test;
+import org.jboss.classloader.spi.ClassLoaderDomain;
import org.jboss.classloader.spi.ClassLoaderPolicy;
import org.jboss.classloader.spi.ClassLoaderSystem;
import org.jboss.test.classloader.transform.support.AuthorTranslator;
import org.jboss.test.classloader.transform.support.LocaleTranslator;
+import org.jboss.test.classloader.transform.support.YearTranslator;
/**
* Mixed transformation tests.
@@ -46,9 +48,10 @@
return suite(MixedTransformUnitTestCase.class);
}
- protected void prepareTransform(ClassLoaderSystem system, ClassLoaderPolicy policy)
+ protected void prepareTransform(ClassLoaderSystem system, ClassLoaderDomain domain, ClassLoaderPolicy policy)
{
policy.addTranslator(new AuthorTranslator());
+ domain.addTranslator(new YearTranslator());
system.addTranslator(new LocaleTranslator());
}
@@ -62,6 +65,9 @@
Method author = instance.getClass().getDeclaredMethod("author");
assertNotNull(author.invoke(instance));
+ Method year = instance.getClass().getDeclaredMethod("year");
+ assertNotNull(year.invoke(instance));
+
Method locale = instance.getClass().getDeclaredMethod("locale");
assertNotNull(locale.invoke(instance));
}
Modified: projects/jboss-cl/trunk/classloader/src/test/java/org/jboss/test/classloader/transform/test/PolicyTransformUnitTestCase.java
===================================================================
--- projects/jboss-cl/trunk/classloader/src/test/java/org/jboss/test/classloader/transform/test/PolicyTransformUnitTestCase.java 2011-03-31 12:04:36 UTC (rev 111073)
+++ projects/jboss-cl/trunk/classloader/src/test/java/org/jboss/test/classloader/transform/test/PolicyTransformUnitTestCase.java 2011-03-31 12:41:56 UTC (rev 111074)
@@ -24,6 +24,7 @@
import java.lang.reflect.Method;
import junit.framework.Test;
+import org.jboss.classloader.spi.ClassLoaderDomain;
import org.jboss.classloader.spi.ClassLoaderPolicy;
import org.jboss.classloader.spi.ClassLoaderSystem;
import org.jboss.test.classloader.transform.support.AuthorTranslator;
@@ -45,7 +46,7 @@
return suite(PolicyTransformUnitTestCase.class);
}
- protected void prepareTransform(ClassLoaderSystem system, ClassLoaderPolicy policy)
+ protected void prepareTransform(ClassLoaderSystem system, ClassLoaderDomain domain, ClassLoaderPolicy policy)
{
policy.addTranslator(new AuthorTranslator());
}
Modified: projects/jboss-cl/trunk/classloader/src/test/java/org/jboss/test/classloader/transform/test/SystemTransformUnitTestCase.java
===================================================================
--- projects/jboss-cl/trunk/classloader/src/test/java/org/jboss/test/classloader/transform/test/SystemTransformUnitTestCase.java 2011-03-31 12:04:36 UTC (rev 111073)
+++ projects/jboss-cl/trunk/classloader/src/test/java/org/jboss/test/classloader/transform/test/SystemTransformUnitTestCase.java 2011-03-31 12:41:56 UTC (rev 111074)
@@ -24,6 +24,7 @@
import java.lang.reflect.Method;
import junit.framework.Test;
+import org.jboss.classloader.spi.ClassLoaderDomain;
import org.jboss.classloader.spi.ClassLoaderPolicy;
import org.jboss.classloader.spi.ClassLoaderSystem;
import org.jboss.test.classloader.transform.support.LocaleTranslator;
@@ -45,7 +46,7 @@
return suite(SystemTransformUnitTestCase.class);
}
- protected void prepareTransform(ClassLoaderSystem system, ClassLoaderPolicy policy)
+ protected void prepareTransform(ClassLoaderSystem system, ClassLoaderDomain domain, ClassLoaderPolicy policy)
{
system.addTranslator(new LocaleTranslator());
}
Modified: projects/jboss-cl/trunk/classloader/src/test/java/org/jboss/test/classloader/transform/test/TransformTest.java
===================================================================
--- projects/jboss-cl/trunk/classloader/src/test/java/org/jboss/test/classloader/transform/test/TransformTest.java 2011-03-31 12:04:36 UTC (rev 111073)
+++ projects/jboss-cl/trunk/classloader/src/test/java/org/jboss/test/classloader/transform/test/TransformTest.java 2011-03-31 12:41:56 UTC (rev 111074)
@@ -21,6 +21,7 @@
*/
package org.jboss.test.classloader.transform.test;
+import org.jboss.classloader.spi.ClassLoaderDomain;
import org.jboss.classloader.spi.ClassLoaderPolicy;
import org.jboss.classloader.spi.ClassLoaderSystem;
import org.jboss.classloader.test.support.MockClassLoaderPolicy;
@@ -41,9 +42,10 @@
public void testTransform() throws Exception
{
ClassLoaderSystem system = createClassLoaderSystemWithModifiedBootstrap();
+ ClassLoaderDomain domain = system.getDefaultDomain();
MockClassLoaderPolicy policy = createMockClassLoaderPolicy();
policy.setPaths("org/jboss/test/classloader/transform/support");
- prepareTransform(system, policy);
+ prepareTransform(system, domain, policy);
ClassLoader cl = system.registerClassLoaderPolicy(policy);
Class<?> clazz = cl.loadClass(getClassName());
@@ -51,7 +53,7 @@
testInstance(instance);
}
- protected abstract void prepareTransform(ClassLoaderSystem system, ClassLoaderPolicy policy);
+ protected abstract void prepareTransform(ClassLoaderSystem system, ClassLoaderDomain domain, ClassLoaderPolicy policy);
protected abstract String getClassName();
Modified: projects/jboss-cl/trunk/classloading/src/main/java/org/jboss/classloading/spi/metadata/TranslatorScope.java
===================================================================
--- projects/jboss-cl/trunk/classloading/src/main/java/org/jboss/classloading/spi/metadata/TranslatorScope.java 2011-03-31 12:04:36 UTC (rev 111073)
+++ projects/jboss-cl/trunk/classloading/src/main/java/org/jboss/classloading/spi/metadata/TranslatorScope.java 2011-03-31 12:41:56 UTC (rev 111074)
@@ -21,14 +21,76 @@
*/
package org.jboss.classloading.spi.metadata;
+import org.jboss.classloader.spi.ClassLoaderDomain;
+import org.jboss.classloader.spi.ClassLoaderPolicy;
+import org.jboss.classloader.spi.ClassLoaderSystem;
+import org.jboss.util.loading.Translator;
+
/**
* TranslatorScope.
- *
+ *
* @author <a href="ales.justin at jboss.org">Ales Justin</a>
*/
public enum TranslatorScope
{
- SYSTEM,
- DOMAIN,
+ SYSTEM
+ {
+ @Override
+ public void addTranslator(ClassLoaderSystem system, ClassLoaderDomain domain, ClassLoaderPolicy policy, Translator translator)
+ {
+ system.addTranslator(translator);
+ }
+
+ @Override
+ public void removeTranslator(ClassLoaderSystem system, ClassLoaderDomain domain, ClassLoaderPolicy policy, Translator translator)
+ {
+ system.removeTranslator(translator);
+ }
+ },
+ DOMAIN
+ {
+ @Override
+ public void addTranslator(ClassLoaderSystem system, ClassLoaderDomain domain, ClassLoaderPolicy policy, Translator translator)
+ {
+ }
+
+ @Override
+ public void removeTranslator(ClassLoaderSystem system, ClassLoaderDomain domain, ClassLoaderPolicy policy, Translator translator)
+ {
+ }
+ },
POLICY
+ {
+ @Override
+ public void addTranslator(ClassLoaderSystem system, ClassLoaderDomain domain, ClassLoaderPolicy policy, Translator translator)
+ {
+ policy.addTranslator(translator);
+ }
+
+ @Override
+ public void removeTranslator(ClassLoaderSystem system, ClassLoaderDomain domain, ClassLoaderPolicy policy, Translator translator)
+ {
+ policy.removeTranslator(translator);
+ }
+ };
+
+ /**
+ * Add translator.
+ *
+ * @param system the CL system
+ * @param domain the CL domain
+ * @param policy the CL policy
+ * @param translator the trsnslator
+ */
+ public abstract void addTranslator(ClassLoaderSystem system, ClassLoaderDomain domain, ClassLoaderPolicy policy, Translator translator);
+
+ /**
+ * Remove translator.
+ *
+ * @param system the CL system
+ * @param domain the CL domain
+ * @param policy the CL policy
+ * @param translator the trsnslator
+ */
+ public abstract void removeTranslator(ClassLoaderSystem system, ClassLoaderDomain domain, ClassLoaderPolicy policy, Translator translator);
}
\ No newline at end of file
More information about the jboss-cvs-commits
mailing list