[jboss-cvs] JBossAS SVN: r86444 - projects/spring-int/trunk/weaving/src/main/java/org/jboss/instrument/classloading.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Sat Mar 28 15:32:48 EDT 2009
Author: alesj
Date: 2009-03-28 15:32:48 -0400 (Sat, 28 Mar 2009)
New Revision: 86444
Modified:
projects/spring-int/trunk/weaving/src/main/java/org/jboss/instrument/classloading/JBoss5ClassLoader.java
Log:
Do in privileged code.
Modified: projects/spring-int/trunk/weaving/src/main/java/org/jboss/instrument/classloading/JBoss5ClassLoader.java
===================================================================
--- projects/spring-int/trunk/weaving/src/main/java/org/jboss/instrument/classloading/JBoss5ClassLoader.java 2009-03-28 19:09:19 UTC (rev 86443)
+++ projects/spring-int/trunk/weaving/src/main/java/org/jboss/instrument/classloading/JBoss5ClassLoader.java 2009-03-28 19:32:48 UTC (rev 86444)
@@ -23,6 +23,8 @@
import java.lang.instrument.ClassFileTransformer;
import java.lang.reflect.Method;
+import java.security.AccessController;
+import java.security.PrivilegedExceptionAction;
import org.jboss.classloader.spi.ClassLoaderPolicy;
import org.jboss.classloader.spi.ClassLoaderSystem;
@@ -46,11 +48,12 @@
private static Logger log = Logger.getLogger(JBoss5ClassLoader.class);
private final BaseClassLoader classLoader;
- private final ClassLoaderPolicy policy;
- private ClassLoaderSystem system;
+ private ClassLoaderPolicy policy;
private Method setTranslator;
+ private ClassLoaderSystem system;
+ @SuppressWarnings("unchecked")
public JBoss5ClassLoader(BaseClassLoader classLoader)
{
Assert.notNull(classLoader, "ClassLoader must not be null");
@@ -58,30 +61,11 @@
try
{
- Method getPolicy = getMethod(BaseClassLoader.class, "getPolicy");
- policy = invokeMethod(getPolicy, classLoader, ClassLoaderPolicy.class);
- try
- {
- // let's check if we have a patched policy, with translator per policy
- setTranslator = getMethod(BaseClassLoaderPolicy.class, "setTranslator");
- }
- catch (Exception ignored)
- {
- log.info("Policy doesn't have setTranslator, falling back to ClassLoaderSystem.");
-
- Method getClassLoaderDomain = getMethod(BaseClassLoaderPolicy.class, "getClassLoaderDomain");
- BaseClassLoaderDomain domain = invokeMethod(getClassLoaderDomain, policy, BaseClassLoaderDomain.class);
- Method getClassLoaderSystem = getMethod(BaseClassLoaderDomain.class, "getClassLoaderSystem");
- BaseClassLoaderSystem system = invokeMethod(getClassLoaderSystem, domain, BaseClassLoaderSystem.class);
- if (system instanceof ClassLoaderSystem)
- {
- this.system = ClassLoaderSystem.class.cast(system);
- }
- else
- {
- throw new IllegalArgumentException("ClassLoaderSyatem must be instance of [" + ClassLoaderSystem.class.getName() + "]");
- }
- }
+ SecurityManager sm = System.getSecurityManager();
+ if (sm != null)
+ AccessController.doPrivileged(new InstantiationAction());
+ else
+ doInstantiate();
}
catch (Exception e)
{
@@ -90,6 +74,39 @@
}
/**
+ * Do instantiate method, variables.
+ *
+ * @throws Exception for any error
+ */
+ private void doInstantiate() throws Exception
+ {
+ Method getPolicy = getMethod(BaseClassLoader.class, "getPolicy");
+ policy = invokeMethod(getPolicy, classLoader, ClassLoaderPolicy.class);
+ try
+ {
+ // let's check if we have a patched policy, with translator per policy
+ setTranslator = getMethod(BaseClassLoaderPolicy.class, "setTranslator");
+ }
+ catch (Exception ignored)
+ {
+ log.info("Policy doesn't have setTranslator, falling back to ClassLoaderSystem.");
+
+ Method getClassLoaderDomain = getMethod(BaseClassLoaderPolicy.class, "getClassLoaderDomain");
+ BaseClassLoaderDomain domain = invokeMethod(getClassLoaderDomain, policy, BaseClassLoaderDomain.class);
+ Method getClassLoaderSystem = getMethod(BaseClassLoaderDomain.class, "getClassLoaderSystem");
+ BaseClassLoaderSystem system = invokeMethod(getClassLoaderSystem, domain, BaseClassLoaderSystem.class);
+ if (system instanceof ClassLoaderSystem)
+ {
+ JBoss5ClassLoader.this.system = ClassLoaderSystem.class.cast(system);
+ }
+ else
+ {
+ throw new IllegalArgumentException("ClassLoaderSyatem must be instance of [" + ClassLoaderSystem.class.getName() + "]");
+ }
+ }
+ }
+
+ /**
* Get method from class.
*
* @param clazz the owner class
@@ -153,4 +170,16 @@
{
return new BaseClassLoader(policy);
}
+
+ /**
+ * Instantiation action.
+ */
+ private class InstantiationAction implements PrivilegedExceptionAction
+ {
+ public Object run() throws Exception
+ {
+ doInstantiate();
+ return null;
+ }
+ }
}
\ No newline at end of file
More information about the jboss-cvs-commits
mailing list