diff --git a/jdk/src/share/classes/com/sun/servicetag/Installer.java b/jdk/src/share/classes/com/sun/servicetag/Installer.java index 0cda7afe3d6..17555b913e9 100644 --- a/jdk/src/share/classes/com/sun/servicetag/Installer.java +++ b/jdk/src/share/classes/com/sun/servicetag/Installer.java @@ -475,7 +475,7 @@ public class Installer { String filename = "/com/sun/servicetag/resources/javase_" + version + "_swordfish.properties"; - InputStream in = Installer.class.getClass().getResourceAsStream(filename); + InputStream in = Installer.class.getResourceAsStream(filename); if (in == null) { return null; } @@ -813,7 +813,7 @@ public class Installer { locale, String.valueOf(version)).toString(); try { - in = Installer.class.getClass().getResourceAsStream(resource + ".html"); + in = Installer.class.getResourceAsStream(resource + ".html"); if (in == null) { // if the resource file is missing if (isVerbose()) { @@ -825,34 +825,39 @@ public class Installer { System.out.println("Generating " + f + " from " + resource + ".html"); } - br = new BufferedReader(new InputStreamReader(in, "UTF-8")); - pw = new PrintWriter(f, "UTF-8"); - String line = null; - while ((line = br.readLine()) != null) { - String output = line; - if (line.contains(JDK_VERSION_KEY)) { - output = line.replace(JDK_VERSION_KEY, jdkVersion); - } else if (line.contains(JDK_HEADER_PNG_KEY)) { - output = line.replace(JDK_HEADER_PNG_KEY, headerImageSrc); - } else if (line.contains(REGISTRATION_URL_KEY)) { - output = line.replace(REGISTRATION_URL_KEY, registerURL); - } else if (line.contains(REGISTRATION_PAYLOAD_KEY)) { - output = line.replace(REGISTRATION_PAYLOAD_KEY, payload.toString()); + try { + br = new BufferedReader(new InputStreamReader(in, "UTF-8")); + pw = new PrintWriter(f, "UTF-8"); + String line = null; + while ((line = br.readLine()) != null) { + String output = line; + if (line.contains(JDK_VERSION_KEY)) { + output = line.replace(JDK_VERSION_KEY, jdkVersion); + } else if (line.contains(JDK_HEADER_PNG_KEY)) { + output = line.replace(JDK_HEADER_PNG_KEY, headerImageSrc); + } else if (line.contains(REGISTRATION_URL_KEY)) { + output = line.replace(REGISTRATION_URL_KEY, registerURL); + } else if (line.contains(REGISTRATION_PAYLOAD_KEY)) { + output = line.replace(REGISTRATION_PAYLOAD_KEY, payload.toString()); + } + pw.println(output); + } + f.setReadOnly(); + pw.flush(); + } finally { + // It's safe for this finally block to have two close statements + // consecutively as PrintWriter.close doesn't throw IOException. + if (pw != null) { + pw.close(); + } + if (br!= null) { + br.close(); } - pw.println(output); } - f.setReadOnly(); - pw.flush(); } finally { - if (pw != null) { - pw.close(); - } if (in != null) { in.close(); } - if (br!= null) { - br.close(); - } } } } diff --git a/jdk/src/share/classes/com/sun/servicetag/SolarisSystemEnvironment.java b/jdk/src/share/classes/com/sun/servicetag/SolarisSystemEnvironment.java index f9f10684fdd..877fe039349 100644 --- a/jdk/src/share/classes/com/sun/servicetag/SolarisSystemEnvironment.java +++ b/jdk/src/share/classes/com/sun/servicetag/SolarisSystemEnvironment.java @@ -62,8 +62,8 @@ class SolarisSystemEnvironment extends SystemEnvironment { return "Sun Microsystems, Inc"; } - // if we're here, then we'll try smbios (type 3) - return getSmbiosData("3", "Manufacturer: "); + // if we're here, then we'll try smbios (type 4) + return getSmbiosData("4", "Manufacturer: "); } /** diff --git a/jdk/src/share/classes/com/sun/servicetag/SunConnection.java b/jdk/src/share/classes/com/sun/servicetag/SunConnection.java index 8bcddbe9714..b05657866a5 100644 --- a/jdk/src/share/classes/com/sun/servicetag/SunConnection.java +++ b/jdk/src/share/classes/com/sun/servicetag/SunConnection.java @@ -213,10 +213,16 @@ class SunConnection { con.setRequestProperty("Content-Type", "text/xml;charset=\"utf-8\""); con.connect(); - OutputStream out = con.getOutputStream(); - registration.storeToXML(out); - out.flush(); - out.close(); + OutputStream out = null; + try { + out = con.getOutputStream(); + registration.storeToXML(out); + out.flush(); + } finally { + if (out != null) { + out.close(); + } + } int returnCode = con.getResponseCode(); if (Util.isVerbose()) { diff --git a/jdk/src/share/classes/com/sun/servicetag/Util.java b/jdk/src/share/classes/com/sun/servicetag/Util.java index 9e32111a2fc..7d58d116e44 100644 --- a/jdk/src/share/classes/com/sun/servicetag/Util.java +++ b/jdk/src/share/classes/com/sun/servicetag/Util.java @@ -140,11 +140,14 @@ class Util { } return e.getMessage(); } finally { - if (r != null) { - r.close(); - } - if (err != null) { - err.close(); + try { + if (r != null) { + r.close(); + } + } finally { + if (err != null) { + err.close(); + } } } } diff --git a/jdk/src/share/classes/com/sun/servicetag/WindowsSystemEnvironment.java b/jdk/src/share/classes/com/sun/servicetag/WindowsSystemEnvironment.java index 1fff0ea7df7..aa9b83cdb6c 100644 --- a/jdk/src/share/classes/com/sun/servicetag/WindowsSystemEnvironment.java +++ b/jdk/src/share/classes/com/sun/servicetag/WindowsSystemEnvironment.java @@ -107,11 +107,17 @@ class WindowsSystemEnvironment extends SystemEnvironment { Process p = pb.start(); // need this for executing windows commands (at least // needed for executing wmic command) - BufferedWriter bw = new BufferedWriter( - new OutputStreamWriter(p.getOutputStream())); - bw.write(13); - bw.flush(); - bw.close(); + BufferedWriter bw = null; + try { + bw = new BufferedWriter( + new OutputStreamWriter(p.getOutputStream())); + bw.write(13); + bw.flush(); + } finally { + if (bw != null) { + bw.close(); + } + } p.waitFor(); if (p.exitValue() == 0) { diff --git a/jdk/src/share/classes/javax/crypto/Cipher.java b/jdk/src/share/classes/javax/crypto/Cipher.java index f99a43cf511..899b3523312 100644 --- a/jdk/src/share/classes/javax/crypto/Cipher.java +++ b/jdk/src/share/classes/javax/crypto/Cipher.java @@ -2377,7 +2377,7 @@ public class Cipher { * For more information on default key size in JCE jurisdiction * policy files, please see Appendix E in the * + * "{@docRoot}/../technotes/guides/security/crypto/CryptoSpec.html#AppC"> * Java Cryptography Architecture Reference Guide. * * @param transformation the cipher transformation. diff --git a/jdk/src/share/classes/javax/management/MBeanServerNotification.java b/jdk/src/share/classes/javax/management/MBeanServerNotification.java index d19c73a555a..e9fe12ad9d6 100644 --- a/jdk/src/share/classes/javax/management/MBeanServerNotification.java +++ b/jdk/src/share/classes/javax/management/MBeanServerNotification.java @@ -57,15 +57,55 @@ package javax.management; * what = "Unknown type " + n.getType(); * System.out.println("Received MBean Server notification: " + what + ": " + * mbsn.getMBeanName()); + * } * }; * * ... * mbeanServer.addNotificationListener( * MBeanServerDelegate.DELEGATE_NAME, printListener, null, null); * - * - *
The following code prints a message every time an MBean is registered - * or unregistered in the MBean Server {@code mbeanServer}:
+ *
+ * An MBean which is not an {@link MBeanServerDelegate} may also emit
+ * MBeanServerNotifications. In particular, a custom subclass of the
+ * {@link javax.management.namespace.JMXDomain JMXDomain} MBean or a custom
+ * subclass of the {@link javax.management.namespace.JMXNamespace JMXNamespace}
+ * MBean may emit an MBeanServerNotification for a group of MBeans.
+ * An MBeanServerNotification emitted to denote the registration or
+ * unregistration of a group of MBeans has the following characteristics:
+ *
+ * MBeans which emit these group registration/unregistration notifications will + * declare them in their {@link MBeanInfo#getNotifications() + * MBeanNotificationInfo}. + *
+ *+ * To receive a group MBeanServerNotification, you need to register a listener + * with the MBean that emits it. For instance, assuming that the {@link + * javax.management.namespace.JMXNamespace JMXNamespace} MBean handling + * namespace {@code "foo"} has declared that it emits such a notification, + * you will need to register your notification listener with that MBean, which + * will be named {@link + * javax.management.namespace.JMXNamespaces#getNamespaceObjectName(java.lang.String) + * foo//:type=JMXNamespace}. + *
+ *The following code prints a message every time a group of MBean is + * registered or unregistered in the namespace {@code "foo"}, assumimg its + * {@link javax.management.namespace.JMXNamespace handler} supports + * group MBeanServerNotifications:
* ** private static final NotificationListener printListener = new NotificationListener() { @@ -76,19 +116,33 @@ package javax.management; * } * MBeanServerNotification mbsn = (MBeanServerNotification) n; * String what; - * if (n.getType().equals(MBeanServerNotification.REGISTRATION_NOTIFICATION)) + * ObjectName[] names = null; + * if (n.getType().equals(MBeanServerNotification.REGISTRATION_NOTIFICATION)) { * what = "MBean registered"; - * else if (n.getType().equals(MBeanServerNotification.UNREGISTRATION_NOTIFICATION)) + * } else if (n.getType().equals(MBeanServerNotification.UNREGISTRATION_NOTIFICATION)) { * what = "MBean unregistered"; - * else + * } else if (n.getType().equals(MBeanServerNotification.REGISTRATION_NOTIFICATION+".group")) { + * what = "Group of MBeans registered matching"; + * if (mbsn.getUserData() instanceof ObjectName[]) + * names = (ObjectName[]) mbsn.getUserData(); + * } else if (n.getType().equals(MBeanServerNotification.UNREGISTRATION_NOTIFICATION+".group")) { + * what = "Group of MBeans unregistered matching"; + * if (mbsn.getUserData() instanceof ObjectName[]) + * names = (ObjectName[]) mbsn.getUserData(); + * } else * what = "Unknown type " + n.getType(); * System.out.println("Received MBean Server notification: " + what + ": " + * mbsn.getMBeanName()); + * if (names != null) { + * for (ObjectName mb : names) + * System.out.println("\t"+mb); + * } + * } * }; * * ... * mbeanServer.addNotificationListener( - * MBeanServerDelegate.DELEGATE_NAME, printListener, null, null); + * JMXNamespaces.getNamespaceObjectName("foo"), printListener, null, null); ** * @since 1.5