[mod_cluster-commits] mod_cluster SVN: r788 - in trunk/container: catalina-standalone/src/main/java/org/jboss/modcluster/container/catalina/standalone and 1 other directory.

do-not-reply at jboss.org do-not-reply at jboss.org
Wed Apr 4 12:11:41 EDT 2012


Author: pferraro
Date: 2012-04-04 12:11:40 -0400 (Wed, 04 Apr 2012)
New Revision: 788

Modified:
   trunk/container/catalina-standalone/src/main/java/org/jboss/modcluster/container/catalina/standalone/ModClusterListener.java
   trunk/container/catalina/src/main/java/org/jboss/modcluster/container/catalina/ServiceLoaderCatalinaFactory.java
Log:
Use privileged actions where appropriate.

Modified: trunk/container/catalina/src/main/java/org/jboss/modcluster/container/catalina/ServiceLoaderCatalinaFactory.java
===================================================================
--- trunk/container/catalina/src/main/java/org/jboss/modcluster/container/catalina/ServiceLoaderCatalinaFactory.java	2012-04-04 15:55:11 UTC (rev 787)
+++ trunk/container/catalina/src/main/java/org/jboss/modcluster/container/catalina/ServiceLoaderCatalinaFactory.java	2012-04-04 16:11:40 UTC (rev 788)
@@ -1,5 +1,7 @@
 package org.jboss.modcluster.container.catalina;
 
+import java.security.AccessController;
+import java.security.PrivilegedAction;
 import java.util.ServiceLoader;
 
 import org.jboss.modcluster.container.Context;
@@ -15,15 +17,21 @@
     private final ConnectorFactory connectorFactory;
     private final ProxyConnectorProvider provider;
 
-    private static <T> T load(Class<T> targetClass, Class<? extends T> defaultClass) {
-        for (T value : ServiceLoader.load(targetClass, targetClass.getClassLoader())) {
-            return value;
-        }
-        try {
-            return defaultClass.newInstance();
-        } catch (Exception e) {
-            throw new IllegalStateException(e);
-        }
+    private static <T> T load(final Class<T> targetClass, final Class<? extends T> defaultClass) {
+        PrivilegedAction<T> action = new PrivilegedAction<T>() {
+            @Override
+            public T run() {
+                for (T value : ServiceLoader.load(targetClass, targetClass.getClassLoader())) {
+                    return value;
+                }
+                try {
+                    return defaultClass.newInstance();
+                } catch (Exception e) {
+                    throw new IllegalStateException(e);
+                }
+            }
+        };
+        return AccessController.doPrivileged(action);
     }
 
     public ServiceLoaderCatalinaFactory(ProxyConnectorProvider provider) {

Modified: trunk/container/catalina-standalone/src/main/java/org/jboss/modcluster/container/catalina/standalone/ModClusterListener.java
===================================================================
--- trunk/container/catalina-standalone/src/main/java/org/jboss/modcluster/container/catalina/standalone/ModClusterListener.java	2012-04-04 15:55:11 UTC (rev 787)
+++ trunk/container/catalina-standalone/src/main/java/org/jboss/modcluster/container/catalina/standalone/ModClusterListener.java	2012-04-04 16:11:40 UTC (rev 788)
@@ -23,6 +23,8 @@
 
 import java.lang.management.ManagementFactory;
 import java.net.InetSocketAddress;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
 import java.util.Collections;
 import java.util.Map;
 import java.util.ServiceConfigurationError;
@@ -78,7 +80,7 @@
     private final ModClusterServiceMBean service;
     private final LifecycleListener listener;
 
-    private Class<? extends LoadMetric> loadMetricClass = BusyConnectorsLoadMetric.class;
+    Class<? extends LoadMetric> loadMetricClass = BusyConnectorsLoadMetric.class;
     private int decayFactor = DynamicLoadBalanceFactorProvider.DEFAULT_DECAY_FACTOR;
     private int history = DynamicLoadBalanceFactorProvider.DEFAULT_HISTORY;
     private double capacity = LoadMetric.DEFAULT_CAPACITY;
@@ -94,10 +96,16 @@
     }
 
     private LifecycleListenerFactory loadFactory() {
-        for (LifecycleListenerFactory factory: ServiceLoader.load(LifecycleListenerFactory.class, LifecycleListenerFactory.class.getClassLoader())) {
-            return factory;
-        }
-        throw new ServiceConfigurationError(String.format("No %s service provider found.", LifecycleListenerFactory.class.getName()));
+        PrivilegedAction<LifecycleListenerFactory> action = new PrivilegedAction<LifecycleListenerFactory>() {
+            @Override
+            public LifecycleListenerFactory run() {
+                for (LifecycleListenerFactory factory: ServiceLoader.load(LifecycleListenerFactory.class, LifecycleListenerFactory.class.getClassLoader())) {
+                    return factory;
+                }
+                throw new ServiceConfigurationError(String.format("No %s service provider found.", LifecycleListenerFactory.class.getName()));
+            }
+        };
+        return AccessController.doPrivileged(action);
     }
 
     protected ModClusterListener(ModClusterServiceMBean mbean, LifecycleListener listener) {
@@ -111,22 +119,28 @@
      */
     @Override
     public LoadBalanceFactorProvider createLoadBalanceFactorProvider() {
-        try {
-            LoadMetric metric = this.loadMetricClass.newInstance();
+        PrivilegedAction<LoadMetric> action = new PrivilegedAction<LoadMetric>() {
+            @Override
+            public LoadMetric run() {
+                try {
+                    return ModClusterListener.this.loadMetricClass.newInstance();
+                } catch (IllegalAccessException e) {
+                    throw new IllegalArgumentException(e);
+                } catch (InstantiationException e) {
+                    throw new IllegalArgumentException(e);
+                }
+            }
+        };
+        LoadMetric metric = AccessController.doPrivileged(action);
 
-            metric.setCapacity(this.capacity);
+        metric.setCapacity(this.capacity);
 
-            DynamicLoadBalanceFactorProvider provider = new DynamicLoadBalanceFactorProvider(Collections.singleton(metric));
+        DynamicLoadBalanceFactorProvider provider = new DynamicLoadBalanceFactorProvider(Collections.singleton(metric));
 
-            provider.setDecayFactor(this.decayFactor);
-            provider.setHistory(this.history);
+        provider.setDecayFactor(this.decayFactor);
+        provider.setHistory(this.history);
 
-            return provider;
-        } catch (IllegalAccessException e) {
-            throw new IllegalArgumentException(e);
-        } catch (InstantiationException e) {
-            throw new IllegalArgumentException(e);
-        }
+        return provider;
     }
 
     /**
@@ -174,9 +188,20 @@
         return this.getJvmRouteFactory().getClass();
     }
 
-    public void setJvmRouteFactoryClass(Class<? extends JvmRouteFactory> factoryClass) throws InstantiationException,
-            IllegalAccessException {
-        this.setJvmRouteFactory(factoryClass.newInstance());
+    public void setJvmRouteFactoryClass(final Class<? extends JvmRouteFactory> factoryClass) {
+        PrivilegedAction<JvmRouteFactory> action = new PrivilegedAction<JvmRouteFactory>() {
+            @Override
+            public JvmRouteFactory run() {
+                try {
+                    return factoryClass.newInstance();
+                } catch (IllegalAccessException e) {
+                    throw new IllegalArgumentException(e);
+                } catch (InstantiationException e) {
+                    throw new IllegalArgumentException(e);
+                }
+            }
+        };
+        this.setJvmRouteFactory(AccessController.doPrivileged(action));
     }
 
     /**
@@ -194,8 +219,18 @@
      * @param loadMetricClass a class implementing {@link LoadMetric}
      * @throws ClassNotFoundException
      */
-    public void setLoadMetricClass(String loadMetricClass) throws ClassNotFoundException {
-        this.loadMetricClass = Class.forName(loadMetricClass).asSubclass(LoadMetric.class);
+    public void setLoadMetricClass(final String loadMetricClass) {
+        PrivilegedAction<Class<? extends LoadMetric>> action = new PrivilegedAction<Class<? extends LoadMetric>>() {
+            @Override
+            public Class<? extends LoadMetric> run() {
+                try {
+                    return ModClusterListener.class.getClassLoader().loadClass(loadMetricClass).asSubclass(LoadMetric.class);
+                } catch (ClassNotFoundException e) {
+                    throw new IllegalArgumentException(e);
+                }
+            }
+        };
+        this.loadMetricClass = AccessController.doPrivileged(action);
     }
 
     /**



More information about the mod_cluster-commits mailing list