6857358: Two testcases are failing in jdk7 b64 pit build with java.security.AccessControlException
authorrkennke
Wed Jul 22 15:52:41 2009 +0200 (7 months ago)
changeset 1683a0b315ecdc78
parent 1682837bb8760bad
child 16849fa696ed1f38
6857358: Two testcases are failing in jdk7 b64 pit build with java.security.AccessControlException
Summary: Try to load GraphicsEnvironment with bootclassloader first, only then try app classloader.
Reviewed-by: prr, tdv, igor
src/share/classes/java/awt/GraphicsEnvironment.java
--- a/src/share/classes/java/awt/GraphicsEnvironment.java Mon Jul 13 09:37:50 2009 -0700
+++ b/src/share/classes/java/awt/GraphicsEnvironment.java Wed Jul 22 15:52:41 2009 +0200
@@ -27,9 +27,11 @@ package java.awt;
package java.awt;
import java.awt.image.BufferedImage;
+import java.security.AccessController;
import java.util.Locale;
import sun.java2d.HeadlessGraphicsEnvironment;
import sun.java2d.SunGraphicsEnvironment;
+import sun.security.action.GetPropertyAction;
/**
*
@@ -73,32 +75,50 @@ public abstract class GraphicsEnvironmen
*/
public static synchronized GraphicsEnvironment getLocalGraphicsEnvironment() {
if (localEnv == null) {
- String nm = (String) java.security.AccessController.doPrivileged
- (new sun.security.action.GetPropertyAction
- ("java.awt.graphicsenv", null));
-
+ localEnv = createGE();
+ }
+
+ return localEnv;
+ }
+
+ /**
+ * Creates and returns the GraphicsEnvironment, according to the
+ * system property 'java.awt.graphicsenv'.
+ *
+ * @return the graphics environment
+ */
+ private static GraphicsEnvironment createGE() {
+ GraphicsEnvironment ge;
+ String nm = AccessController.doPrivileged(new GetPropertyAction("java.awt.graphicsenv", null));
+ try {
+// long t0 = System.currentTimeMillis();
+ Class geCls;
try {
-// long t0 = System.currentTimeMillis();
+ // First we try if the bootclassloader finds the requested
+ // class. This way we can avoid to run in a privileged block.
+ geCls = Class.forName(nm);
+ } catch (ClassNotFoundException ex) {
+ // If the bootclassloader fails, we try again with the
+ // application classloader.
ClassLoader cl = ClassLoader.getSystemClassLoader();
- Class geCls = Class.forName(nm, true, cl);
- localEnv = (GraphicsEnvironment)geCls.newInstance();
-// long t1 = System.currentTimeMillis();
-// System.out.println("GE creation took " + (t1-t0)+ "ms.");
- if (isHeadless()) {
- localEnv = new HeadlessGraphicsEnvironment(localEnv);
- }
- } catch (ClassNotFoundException e) {
- throw new Error("Could not find class: "+nm);
- } catch (InstantiationException e) {
- throw new Error("Could not instantiate Graphics Environment: "
- + nm);
- } catch (IllegalAccessException e) {
- throw new Error ("Could not access Graphics Environment: "
- + nm);
+ geCls = Class.forName(nm, true, cl);
}
- }
-
- return localEnv;
+ ge = (GraphicsEnvironment) geCls.newInstance();
+// long t1 = System.currentTimeMillis();
+// System.out.println("GE creation took " + (t1-t0)+ "ms.");
+ if (isHeadless()) {
+ localEnv = new HeadlessGraphicsEnvironment(localEnv);
+ }
+ } catch (ClassNotFoundException e) {
+ throw new Error("Could not find class: "+nm);
+ } catch (InstantiationException e) {
+ throw new Error("Could not instantiate Graphics Environment: "
+ + nm);
+ } catch (IllegalAccessException e) {
+ throw new Error ("Could not access Graphics Environment: "
+ + nm);
+ }
+ return ge;
}
/**