Merge
authorlana
Thu, 11 Jun 2015 20:18:55 -0700
changeset 31086 d24a2c340a47
parent 31056 07cd15548b1b (current diff)
parent 31085 9bde92d55eae (diff)
child 31087 59d2a5d94dd6
Merge
jdk/src/java.base/share/classes/sun/misc/ExtensionDependency.java
jdk/src/java.base/share/classes/sun/misc/ExtensionInfo.java
jdk/src/java.base/share/classes/sun/misc/ExtensionInstallationException.java
jdk/src/java.base/share/classes/sun/misc/ExtensionInstallationProvider.java
jdk/test/sun/tools/jmap/heapconfig/LingeredApp.java
jdk/test/sun/tools/jmap/heapconfig/LingeredAppTest.java
--- a/jdk/make/lib/Lib-java.instrument.gmk	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/make/lib/Lib-java.instrument.gmk	Thu Jun 11 20:18:55 2015 -0700
@@ -61,7 +61,7 @@
     OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \
     SRC := $(LIBINSTRUMENT_SRC), \
     OPTIMIZATION := LOW, \
-    CFLAGS := $(LIBINSTRUMENT_CFLAGS) $(CFLAGS_WARNINGS_ARE_ERRORS), \
+    CFLAGS := $(LIBINSTRUMENT_CFLAGS), \
     CFLAGS_debug := -DJPLIS_LOGGING, \
     CFLAGS_release := -DNO_JPLIS_LOGGING, \
     MAPFILE := $(JDK_TOPDIR)/make/mapfiles/libinstrument/mapfile-vers, \
--- a/jdk/make/lib/Lib-java.management.gmk	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/make/lib/Lib-java.management.gmk	Thu Jun 11 20:18:55 2015 -0700
@@ -50,7 +50,7 @@
     OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \
     SRC := $(LIBMANAGEMENT_SRC), \
     OPTIMIZATION := $(LIBMANAGEMENT_OPTIMIZATION), \
-    CFLAGS := $(CFLAGS_JDKLIB) $(CFLAGS_WARNINGS_ARE_ERRORS) $(LIBMANAGEMENT_CFLAGS), \
+    CFLAGS := $(CFLAGS_JDKLIB) $(LIBMANAGEMENT_CFLAGS), \
     MAPFILE := $(JDK_TOPDIR)/make/mapfiles/libmanagement/mapfile-vers, \
     LDFLAGS := $(LDFLAGS_JDKLIB) \
         $(call SET_SHARED_LIBRARY_ORIGIN), \
--- a/jdk/make/lib/Lib-jdk.attach.gmk	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/make/lib/Lib-jdk.attach.gmk	Thu Jun 11 20:18:55 2015 -0700
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 #
 # This code is free software; you can redistribute it and/or modify it
@@ -39,7 +39,7 @@
     OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \
     SRC := $(call FindSrcDirsForLib, jdk.attach, attach), \
     OPTIMIZATION := LOW, \
-    CFLAGS := $(CFLAGS_JDKLIB) $(CFLAGS_WARNINGS_ARE_ERRORS) \
+    CFLAGS := $(CFLAGS_JDKLIB) \
         -I$(SUPPORT_OUTPUTDIR)/headers/jdk.attach \
         $(LIBJAVA_HEADER_FLAGS) $(LIBATTACH_CFLAGS), \
     CFLAGS_windows := /Gy, \
--- a/jdk/make/lib/Lib-jdk.hprof.agent.gmk	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/make/lib/Lib-jdk.hprof.agent.gmk	Thu Jun 11 20:18:55 2015 -0700
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 #
 # This code is free software; you can redistribute it and/or modify it
@@ -31,7 +31,7 @@
 
 BUILD_LIBHPROF_CFLAGS := $(addprefix -I, $(BUILD_LIBHPROF_SRC)) \
     -I$(JDK_TOPDIR)/src/demo/share/jvmti/java_crw_demo
-    
+
 BUILD_LIBHPROF_LDFLAGS :=
 
 LIBHPROF_OPTIMIZATION := HIGHEST
@@ -46,7 +46,7 @@
     OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \
     SRC := $(BUILD_LIBHPROF_SRC), \
     OPTIMIZATION := $(LIBHPROF_OPTIMIZATION), \
-    CFLAGS := $(CFLAGS_JDKLIB) $(CFLAGS_WARNINGS_ARE_ERRORS) \
+    CFLAGS := $(CFLAGS_JDKLIB) \
         $(BUILD_LIBHPROF_CFLAGS), \
     CFLAGS_debug := -DHPROF_LOGGING, \
     MAPFILE := $(JDK_TOPDIR)/make/mapfiles/libhprof/mapfile-vers, \
@@ -75,7 +75,7 @@
     OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \
     SRC := $(LIBJAVA_CRW_DEMO_SRC), \
     OPTIMIZATION := LOW, \
-    CFLAGS := $(CFLAGS_JDKLIB) $(CFLAGS_WARNINGS_ARE_ERRORS) \
+    CFLAGS := $(CFLAGS_JDKLIB) \
         $(addprefix -I, $(LIBJAVA_CRW_DEMO_SRC)), \
     MAPFILE := $(JDK_TOPDIR)/make/mapfiles/libjava_crw_demo/mapfile-vers, \
     LDFLAGS := $(LDFLAGS_JDKLIB) \
--- a/jdk/make/lib/Lib-jdk.jdi.gmk	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/make/lib/Lib-jdk.jdi.gmk	Thu Jun 11 20:18:55 2015 -0700
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 #
 # This code is free software; you can redistribute it and/or modify it
@@ -44,7 +44,7 @@
       OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \
       SRC := $(LIBDT_SHMEM_SRC), \
       OPTIMIZATION := LOW, \
-      CFLAGS := $(CFLAGS_JDKLIB) $(CFLAGS_WARNINGS_ARE_ERRORS) -DUSE_MMAP \
+      CFLAGS := $(CFLAGS_JDKLIB) -DUSE_MMAP \
           $(LIBDT_SHMEM_CPPFLAGS), \
       LDFLAGS := $(LDFLAGS_JDKLIB), \
       LDFLAGS_windows := -export:jdwpTransport_OnLoad, \
--- a/jdk/make/lib/Lib-jdk.jdwp.agent.gmk	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/make/lib/Lib-jdk.jdwp.agent.gmk	Thu Jun 11 20:18:55 2015 -0700
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 #
 # This code is free software; you can redistribute it and/or modify it
@@ -41,7 +41,7 @@
     OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \
     SRC := $(LIBDT_SOCKET_SRC), \
     OPTIMIZATION := LOW, \
-    CFLAGS := $(CFLAGS_JDKLIB) $(CFLAGS_CFLAGS_WARNINGS_ARE_ERRORS) -DUSE_MMAP \
+    CFLAGS := $(CFLAGS_JDKLIB) -DUSE_MMAP \
         $(LIBDT_SOCKET_CPPFLAGS), \
     MAPFILE := $(JDK_TOPDIR)/make/mapfiles/libdt_socket/mapfile-vers, \
     LDFLAGS := $(LDFLAGS_JDKLIB) \
@@ -77,7 +77,7 @@
     OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \
     SRC := $(LIBJDWP_SRC), \
     OPTIMIZATION := LOW, \
-    CFLAGS := $(CFLAGS_JDKLIB) $(CFLAGS_WARNINGS_ARE_ERRORS) -DJDWP_LOGGING \
+    CFLAGS := $(CFLAGS_JDKLIB) -DJDWP_LOGGING \
         $(LIBJDWP_CPPFLAGS) \
         -I$(SUPPORT_OUTPUTDIR)/headers/jdk.jdwp.agent, \
     MAPFILE := $(JDK_TOPDIR)/make/mapfiles/libjdwp/mapfile-vers, \
--- a/jdk/make/lib/Lib-jdk.management.gmk	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/make/lib/Lib-jdk.management.gmk	Thu Jun 11 20:18:55 2015 -0700
@@ -59,7 +59,7 @@
     SRC := $(LIBMANAGEMENT_EXT_SRC), \
     LANG := C, \
     OPTIMIZATION := $(LIBMANAGEMENT_EXT_OPTIMIZATION), \
-    CFLAGS := $(CFLAGS_JDKLIB) $(CFLAGS_WARNINGS_ARE_ERRORS) $(LIBMANAGEMENT_EXT_CFLAGS), \
+    CFLAGS := $(CFLAGS_JDKLIB) $(LIBMANAGEMENT_EXT_CFLAGS), \
     MAPFILE := $(JDK_TOPDIR)/make/mapfiles/libmanagement_ext/mapfile-vers, \
     LDFLAGS := $(LDFLAGS_JDKLIB) \
         $(call SET_SHARED_LIBRARY_ORIGIN), \
--- a/jdk/make/lib/Lib-jdk.sctp.gmk	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/make/lib/Lib-jdk.sctp.gmk	Thu Jun 11 20:18:55 2015 -0700
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 #
 # This code is free software; you can redistribute it and/or modify it
@@ -30,12 +30,8 @@
 ifeq ($(OPENJDK_TARGET_OS_TYPE), unix)
 
   ifeq (, $(filter $(OPENJDK_TARGET_OS), macosx aix))
-
-    # Suppress unused parameters required by exported JNI functions.
-    SCTP_WERROR := -Werror -Wno-error=unused-parameter
-    ifeq ($(OPENJDK_TARGET_CPU_ARCH), ppc)
-      SCTP_WERROR :=
-    endif
+    # DISABLED_WARNINGS_gcc := unused-parameter needed to
+    # suppress unused parameters required by exported JNI functions.
 
     $(eval $(call SetupNativeCompilation,BUILD_LIBSCTP, \
         LIBRARY := sctp, \
@@ -49,7 +45,7 @@
             $(LIBJAVA_HEADER_FLAGS) \
             -I$(SUPPORT_OUTPUTDIR)/headers/jdk.sctp \
             -I$(SUPPORT_OUTPUTDIR)/headers/java.base, \
-        CFLAGS_linux := $(SCTP_WERROR), \
+        DISABLED_WARNINGS_gcc := unused-parameter, \
         MAPFILE := $(JDK_TOPDIR)/make/mapfiles/libsctp/mapfile-vers, \
         LDFLAGS := $(LDFLAGS_JDKLIB) \
             $(call SET_SHARED_LIBRARY_ORIGIN), \
--- a/jdk/make/mapfiles/libjava/mapfile-vers	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/make/mapfiles/libjava/mapfile-vers	Thu Jun 11 20:18:55 2015 -0700
@@ -129,11 +129,11 @@
 		Java_java_lang_ClassLoader_defineClass0;
 		Java_java_lang_ClassLoader_defineClass1;
 		Java_java_lang_ClassLoader_defineClass2;
+		Java_java_lang_ClassLoader_findBuiltinLib;
 		Java_java_lang_ClassLoader_findLoadedClass0;
 		Java_java_lang_ClassLoader_00024NativeLibrary_find;
 		Java_java_lang_ClassLoader_00024NativeLibrary_load;
 		Java_java_lang_ClassLoader_00024NativeLibrary_unload;
-		Java_java_lang_ClassLoader_00024NativeLibrary_findBuiltinLib;
 		Java_java_lang_ClassLoader_registerNatives;
 		Java_java_lang_Double_longBitsToDouble;
 		Java_java_lang_Double_doubleToRawLongBits;
--- a/jdk/src/java.base/share/classes/com/sun/net/ssl/SSLContext.java	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/src/java.base/share/classes/com/sun/net/ssl/SSLContext.java	Thu Jun 11 20:18:55 2015 -0700
@@ -58,7 +58,7 @@
      *
      * @param contextSpi the delegate
      * @param provider the provider
-     * @param algorithm the algorithm
+     * @param protocol the protocol
      */
     protected SSLContext(SSLContextSpi contextSpi, Provider provider,
         String protocol) {
--- a/jdk/src/java.base/share/classes/com/sun/net/ssl/SSLContextSpi.java	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/src/java.base/share/classes/com/sun/net/ssl/SSLContextSpi.java	Thu Jun 11 20:18:55 2015 -0700
@@ -49,9 +49,9 @@
     /**
      * Initializes this context.
      *
-     * @param km the sources of authentication keys
-     * @param tm the sources of peer authentication trust decisions
-     * @param random the source of randomness for this generator
+     * @param ah the sources of authentication keys
+     * @param th the sources of peer authentication trust decisions
+     * @param sr the source of randomness for this generator
      */
     protected abstract void engineInit(KeyManager[] ah, TrustManager[] th,
         SecureRandom sr) throws KeyManagementException;
--- a/jdk/src/java.base/share/classes/com/sun/net/ssl/SSLPermission.java	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/src/java.base/share/classes/com/sun/net/ssl/SSLPermission.java	Thu Jun 11 20:18:55 2015 -0700
@@ -52,7 +52,6 @@
  * The following table lists all the possible SSLPermission target names,
  * and for each provides a description of what the permission allows
  * and a discussion of the risks of granting code the permission.
- * <P>
  *
  * <table border=1 cellpadding=5>
  * <tr>
--- a/jdk/src/java.base/share/classes/java/io/File.java	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/src/java.base/share/classes/java/io/File.java	Thu Jun 11 20:18:55 2015 -0700
@@ -2148,7 +2148,7 @@
      * WriteObject is called to save this filename.
      * The separator character is saved also so it can be replaced
      * in case the path is reconstituted on a different host type.
-     * <p>
+     *
      * @serialData  Default fields followed by separator character.
      */
     private synchronized void writeObject(java.io.ObjectOutputStream s)
--- a/jdk/src/java.base/share/classes/java/io/FilePermission.java	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/src/java.base/share/classes/java/io/FilePermission.java	Thu Jun 11 20:18:55 2015 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -27,11 +27,9 @@
 
 import java.security.*;
 import java.util.Enumeration;
-import java.util.List;
-import java.util.ArrayList;
+import java.util.StringJoiner;
 import java.util.Vector;
-import java.util.Collections;
-import java.util.StringJoiner;
+import java.util.concurrent.ConcurrentHashMap;
 import sun.security.util.SecurityConstants;
 
 /**
@@ -288,7 +286,6 @@
      * @param path the pathname of the file/directory.
      * @param mask the action mask to use.
      */
-
     // package private for use by the FilePermissionCollection add method
     FilePermission(String path, int mask) {
         super(path);
@@ -315,6 +312,7 @@
      *                  <code>null</code> and is implied by this object,
      *                  <code>false</code> otherwise.
      */
+    @Override
     public boolean implies(Permission p) {
         if (!(p instanceof FilePermission))
             return false;
@@ -387,6 +385,7 @@
      *          pathname and actions as this FilePermission object,
      *          <code>false</code> otherwise.
      */
+    @Override
     public boolean equals(Object obj) {
         if (obj == this)
             return true;
@@ -407,6 +406,7 @@
      *
      * @return a hash code value for this object.
      */
+    @Override
     public int hashCode() {
         return 0;
     }
@@ -587,6 +587,7 @@
      *
      * @return the canonical string representation of the actions.
      */
+    @Override
     public String getActions() {
         if (actions == null)
             actions = getActions(this.mask);
@@ -625,6 +626,7 @@
      * @return a new PermissionCollection object suitable for storing
      * FilePermissions.
      */
+    @Override
     public PermissionCollection newPermissionCollection() {
         return new FilePermissionCollection();
     }
@@ -689,13 +691,13 @@
     implements Serializable
 {
     // Not serialized; see serialization section at end of class
-    private transient List<Permission> perms;
+    private transient ConcurrentHashMap<String, Permission> perms;
 
     /**
      * Create an empty FilePermissionCollection object.
      */
     public FilePermissionCollection() {
-        perms = new ArrayList<>();
+        perms = new ConcurrentHashMap<>();
     }
 
     /**
@@ -710,6 +712,7 @@
      * @exception SecurityException - if this FilePermissionCollection object
      *                                has been marked readonly
      */
+    @Override
     public void add(Permission permission) {
         if (! (permission instanceof FilePermission))
             throw new IllegalArgumentException("invalid permission: "+
@@ -718,9 +721,31 @@
             throw new SecurityException(
                 "attempt to add a Permission to a readonly PermissionCollection");
 
-        synchronized (this) {
-            perms.add(permission);
-        }
+        FilePermission fp = (FilePermission)permission;
+
+        // Add permission to map if it is absent, or replace with new
+        // permission if applicable. NOTE: cannot use lambda for
+        // remappingFunction parameter until JDK-8076596 is fixed.
+        perms.merge(fp.getName(), fp,
+            new java.util.function.BiFunction<>() {
+                @Override
+                public Permission apply(Permission existingVal,
+                                        Permission newVal) {
+                    int oldMask = ((FilePermission)existingVal).getMask();
+                    int newMask = ((FilePermission)newVal).getMask();
+                    if (oldMask != newMask) {
+                        int effective = oldMask | newMask;
+                        if (effective == newMask) {
+                            return newVal;
+                        }
+                        if (effective != oldMask) {
+                            return new FilePermission(fp.getName(), effective);
+                        }
+                    }
+                    return existingVal;
+                }
+            }
+        );
     }
 
     /**
@@ -732,26 +757,25 @@
      * @return true if "permission" is a proper subset of a permission in
      * the set, false if not.
      */
+    @Override
     public boolean implies(Permission permission) {
         if (! (permission instanceof FilePermission))
             return false;
 
-        FilePermission fp = (FilePermission) permission;
+        FilePermission fperm = (FilePermission) permission;
 
-        int desired = fp.getMask();
+        int desired = fperm.getMask();
         int effective = 0;
         int needed = desired;
 
-        synchronized (this) {
-            int len = perms.size();
-            for (int i = 0; i < len; i++) {
-                FilePermission x = (FilePermission) perms.get(i);
-                if (((needed & x.getMask()) != 0) && x.impliesIgnoreMask(fp)) {
-                    effective |=  x.getMask();
-                    if ((effective & desired) == desired)
-                        return true;
-                    needed = (desired ^ effective);
+        for (Permission perm : perms.values()) {
+            FilePermission fp = (FilePermission)perm;
+            if (((needed & fp.getMask()) != 0) && fp.impliesIgnoreMask(fperm)) {
+                effective |= fp.getMask();
+                if ((effective & desired) == desired) {
+                    return true;
                 }
+                needed = (desired ^ effective);
             }
         }
         return false;
@@ -763,11 +787,9 @@
      *
      * @return an enumeration of all the FilePermission objects.
      */
+    @Override
     public Enumeration<Permission> elements() {
-        // Convert Iterator into Enumeration
-        synchronized (this) {
-            return Collections.enumeration(perms);
-        }
+        return perms.elements();
     }
 
     private static final long serialVersionUID = 2202956749081564585L;
@@ -795,10 +817,7 @@
         // Don't call out.defaultWriteObject()
 
         // Write out Vector
-        Vector<Permission> permissions = new Vector<>(perms.size());
-        synchronized (this) {
-            permissions.addAll(perms);
-        }
+        Vector<Permission> permissions = new Vector<>(perms.values());
 
         ObjectOutputStream.PutField pfields = out.putFields();
         pfields.put("permissions", permissions);
@@ -819,7 +838,9 @@
         // Get the one we want
         @SuppressWarnings("unchecked")
         Vector<Permission> permissions = (Vector<Permission>)gfields.get("permissions", null);
-        perms = new ArrayList<>(permissions.size());
-        perms.addAll(permissions);
+        perms = new ConcurrentHashMap<>(permissions.size());
+        for (Permission perm : permissions) {
+            perms.put(perm.getName(), perm);
+        }
     }
 }
--- a/jdk/src/java.base/share/classes/java/lang/ClassLoader.java	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/src/java.base/share/classes/java/lang/ClassLoader.java	Thu Jun 11 20:18:55 2015 -0700
@@ -1702,7 +1702,6 @@
 
         native long find(String name);
         native void unload(String name, boolean isBuiltin);
-        static native String findBuiltinLib(String name);
 
         public NativeLibrary(Class<?> fromClass, String name, boolean isBuiltin) {
             this.name = name;
@@ -1861,9 +1860,11 @@
         throw new UnsatisfiedLinkError("no " + name + " in java.library.path");
     }
 
+    static native String findBuiltinLib(String name);
+
     private static boolean loadLibrary0(Class<?> fromClass, final File file) {
         // Check to see if we're attempting to access a static library
-        String name = NativeLibrary.findBuiltinLib(file.getName());
+        String name = findBuiltinLib(file.getName());
         boolean isBuiltin = (name != null);
         if (!isBuiltin) {
             name = AccessController.doPrivileged(
--- a/jdk/src/java.base/share/classes/java/lang/Process.java	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/src/java.base/share/classes/java/lang/Process.java	Thu Jun 11 20:18:55 2015 -0700
@@ -368,7 +368,7 @@
      * Processes returned from {@link ProcessBuilder#start} override the
      * default implementation to provide an efficient mechanism to wait
      * for process exit.
-     * <p>
+     *
      * @apiNote
      * Using {@link #onExit() onExit} is an alternative to
      * {@link #waitFor() waitFor} that enables both additional concurrency
--- a/jdk/src/java.base/share/classes/java/lang/ProcessHandle.java	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/src/java.base/share/classes/java/lang/ProcessHandle.java	Thu Jun 11 20:18:55 2015 -0700
@@ -71,7 +71,7 @@
  * The ability to control processes is also restricted by the native system,
  * ProcessHandle provides no more access to, or control over, the native process
  * than would be allowed by a native application.
- * <p>
+ *
  * @implSpec
  * In the case where ProcessHandles cannot be supported then the factory
  * methods must consistently throw {@link java.lang.UnsupportedOperationException}.
--- a/jdk/src/java.base/share/classes/java/lang/invoke/CallSite.java	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/src/java.base/share/classes/java/lang/invoke/CallSite.java	Thu Jun 11 20:18:55 2015 -0700
@@ -27,8 +27,6 @@
 
 import static java.lang.invoke.MethodHandleStatics.*;
 import static java.lang.invoke.MethodHandles.Lookup.IMPL_LOOKUP;
-import java.lang.reflect.Field;
-import sun.misc.Cleaner;
 
 /**
  * A {@code CallSite} is a holder for a variable {@link MethodHandle},
@@ -138,47 +136,9 @@
 
     /**
      * {@code CallSite} dependency context.
-     * VM uses context class to store nmethod dependencies on the call site target.
-     * Can be in 2 states: (a) null; or (b) {@code Cleaner} instance pointing to some Class instance.
-     * Lazily initialized when CallSite instance is linked to some indy call site or VM needs
-     * it to store dependencies. As a corollary, "null" context means there are no dependencies
-     * registered yet. {@code Cleaner} is used in 2 roles:
-     *   (a) context class access for VM;
-     *   (b) stale context class cleanup.
-     * {@code Cleaner} holds the context class until cleanup action is finished (see {@code PhantomReference}).
-     * Though it's impossible to get the context class using {@code Reference.get()}, VM extracts it directly
-     * from {@code Reference.referent} field.
-     */
-    private volatile Cleaner context = null;
-
-    /**
-     * Default context.
-     * VM uses it to initialize non-linked CallSite context.
+     * JVM uses CallSite.context to store nmethod dependencies on the call site target.
      */
-    private static class DefaultContext {}
-    private static final Cleaner DEFAULT_CONTEXT = makeContext(DefaultContext.class, null);
-
-    private static Cleaner makeContext(Class<?> referent, final CallSite holder) {
-        return Cleaner.create(referent,
-                new Runnable() {
-                    @Override public void run() {
-                        MethodHandleNatives.invalidateDependentNMethods(holder);
-                    }
-                });
-    }
-
-    /** Initialize context class used for nmethod dependency tracking */
-    /*package-private*/
-    void initContext(Class<?> newContext) {
-        // If there are concurrent actions, exactly one succeeds.
-        if (context == null) {
-            UNSAFE.compareAndSwapObject(this, CONTEXT_OFFSET, /*expected=*/null, makeContext(newContext, this));
-            // No need to care about failed CAS attempt.
-            // Since initContext is called from indy call site linkage in newContext class, there's no risk
-            // that the context class becomes dead while corresponding context cleaner is alive (causing cleanup
-            // action in the wrong context).
-        }
-    }
+    private final MethodHandleNatives.CallSiteContext context = MethodHandleNatives.CallSiteContext.make(this);
 
     /**
      * Returns the type of this call site's target.
--- a/jdk/src/java.base/share/classes/java/lang/invoke/MethodHandleNatives.java	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/src/java.base/share/classes/java/lang/invoke/MethodHandleNatives.java	Thu Jun 11 20:18:55 2015 -0700
@@ -30,6 +30,7 @@
 import static java.lang.invoke.MethodHandleNatives.Constants.*;
 import static java.lang.invoke.MethodHandleStatics.*;
 import static java.lang.invoke.MethodHandles.Lookup.IMPL_LOOKUP;
+import sun.misc.Cleaner;
 
 /**
  * The JVM interface for the method handles package is all here.
@@ -61,8 +62,27 @@
     static native void setCallSiteTargetNormal(CallSite site, MethodHandle target);
     static native void setCallSiteTargetVolatile(CallSite site, MethodHandle target);
 
-    /** Invalidate CallSite context: clean up dependent nmethods and reset call site context to initial state (null). */
-    static native void invalidateDependentNMethods(CallSite site);
+    /** Represents a context to track nmethod dependencies on CallSite instance target. */
+    static class CallSiteContext implements Runnable {
+        //@Injected JVM_nmethodBucket* vmdependencies;
+
+        static CallSiteContext make(CallSite cs) {
+            final CallSiteContext newContext = new CallSiteContext();
+            // Cleaner is attached to CallSite instance and it clears native structures allocated for CallSite context.
+            // Though the CallSite can become unreachable, its Context is retained by the Cleaner instance (which is
+            // referenced from Cleaner class) until cleanup is performed.
+            Cleaner.create(cs, newContext);
+            return newContext;
+        }
+
+        @Override
+        public void run() {
+            MethodHandleNatives.clearCallSiteContext(this);
+        }
+    }
+
+    /** Invalidate all recorded nmethods. */
+    private static native void clearCallSiteContext(CallSiteContext context);
 
     private static native void registerNatives();
     static {
@@ -235,7 +255,6 @@
             return Invokers.linkToTargetMethod(type);
         } else {
             appendixResult[0] = callSite;
-            callSite.initContext(caller);
             return Invokers.linkToCallSiteMethod(type);
         }
     }
--- a/jdk/src/java.base/share/classes/java/net/SocketPermission.java	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/src/java.base/share/classes/java/net/SocketPermission.java	Thu Jun 11 20:18:55 2015 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,24 +25,24 @@
 
 package java.net;
 
-import java.util.Enumeration;
-import java.util.Vector;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.StringJoiner;
-import java.util.StringTokenizer;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.ObjectStreamField;
+import java.io.Serializable;
 import java.net.InetAddress;
+import java.security.AccessController;
 import java.security.Permission;
 import java.security.PermissionCollection;
 import java.security.PrivilegedAction;
-import java.security.AccessController;
 import java.security.Security;
-import java.io.Serializable;
-import java.io.ObjectStreamField;
-import java.io.ObjectOutputStream;
-import java.io.ObjectInputStream;
-import java.io.IOException;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Enumeration;
+import java.util.Vector;
+import java.util.StringJoiner;
+import java.util.StringTokenizer;
+import java.util.concurrent.ConcurrentSkipListMap;
 import sun.net.util.IPAddressUtil;
 import sun.net.RegisteredDomain;
 import sun.net.PortConfig;
@@ -832,6 +832,7 @@
      * @return true if the specified permission is implied by this object,
      * false if not.
      */
+    @Override
     public boolean implies(Permission p) {
         int i,j;
 
@@ -1010,6 +1011,7 @@
      *  SocketPermission object. However, port range will be ignored
      *  in the comparison if <i>obj</i> only contains the action, 'resolve'.
      */
+    @Override
     public boolean equals(Object obj) {
         if (obj == this)
             return true;
@@ -1069,7 +1071,7 @@
      *
      * @return a hash code value for this object.
      */
-
+    @Override
     public int hashCode() {
         /*
          * If this SocketPermission was initialized with an IP address
@@ -1137,6 +1139,7 @@
      *
      * @return the canonical string representation of the actions.
      */
+    @Override
     public String getActions()
     {
         if (actions == null)
@@ -1156,7 +1159,7 @@
      *
      * @return a new PermissionCollection object suitable for storing SocketPermissions.
      */
-
+    @Override
     public PermissionCollection newPermissionCollection() {
         return new SocketPermissionCollection();
     }
@@ -1320,15 +1323,16 @@
     implements Serializable
 {
     // Not serialized; see serialization section at end of class
-    private transient List<SocketPermission> perms;
+    // A ConcurrentSkipListMap is used to preserve order, so that most
+    // recently added permissions are checked first (see JDK-4301064).
+    private transient ConcurrentSkipListMap<String, SocketPermission> perms;
 
     /**
      * Create an empty SocketPermissions object.
      *
      */
-
     public SocketPermissionCollection() {
-        perms = new ArrayList<>();
+        perms = new ConcurrentSkipListMap<>(new SPCComparator());
     }
 
     /**
@@ -1343,6 +1347,7 @@
      * @exception SecurityException - if this SocketPermissionCollection object
      *                                has been marked readonly
      */
+    @Override
     public void add(Permission permission) {
         if (! (permission instanceof SocketPermission))
             throw new IllegalArgumentException("invalid permission: "+
@@ -1351,11 +1356,32 @@
             throw new SecurityException(
                 "attempt to add a Permission to a readonly PermissionCollection");
 
-        // optimization to ensure perms most likely to be tested
-        // show up early (4301064)
-        synchronized (this) {
-            perms.add(0, (SocketPermission)permission);
-        }
+        SocketPermission sp = (SocketPermission)permission;
+
+        // Add permission to map if it is absent, or replace with new
+        // permission if applicable. NOTE: cannot use lambda for
+        // remappingFunction parameter until JDK-8076596 is fixed.
+        perms.merge(sp.getName(), sp,
+            new java.util.function.BiFunction<>() {
+                @Override
+                public SocketPermission apply(SocketPermission existingVal,
+                                              SocketPermission newVal) {
+                    int oldMask = existingVal.getMask();
+                    int newMask = newVal.getMask();
+                    if (oldMask != newMask) {
+                        int effective = oldMask | newMask;
+                        if (effective == newMask) {
+                            return newVal;
+                        }
+                        if (effective != oldMask) {
+                            return new SocketPermission(sp.getName(),
+                                                        effective);
+                        }
+                    }
+                    return existingVal;
+                }
+            }
+        );
     }
 
     /**
@@ -1367,7 +1393,7 @@
      * @return true if "permission" is a proper subset of a permission in
      * the collection, false if not.
      */
-
+    @Override
     public boolean implies(Permission permission)
     {
         if (! (permission instanceof SocketPermission))
@@ -1379,18 +1405,15 @@
         int effective = 0;
         int needed = desired;
 
-        synchronized (this) {
-            int len = perms.size();
-            //System.out.println("implies "+np);
-            for (int i = 0; i < len; i++) {
-                SocketPermission x = perms.get(i);
-                //System.out.println("  trying "+x);
-                if (((needed & x.getMask()) != 0) && x.impliesIgnoreMask(np)) {
-                    effective |=  x.getMask();
-                    if ((effective & desired) == desired)
-                        return true;
-                    needed = (desired ^ effective);
+        //System.out.println("implies "+np);
+        for (SocketPermission x : perms.values()) {
+            //System.out.println("  trying "+x);
+            if (((needed & x.getMask()) != 0) && x.impliesIgnoreMask(np)) {
+                effective |=  x.getMask();
+                if ((effective & desired) == desired) {
+                    return true;
                 }
+                needed = (desired ^ effective);
             }
         }
         return false;
@@ -1402,13 +1425,10 @@
      *
      * @return an enumeration of all the SocketPermission objects.
      */
-
+    @Override
     @SuppressWarnings("unchecked")
     public Enumeration<Permission> elements() {
-        // Convert Iterator into Enumeration
-        synchronized (this) {
-            return Collections.enumeration((List<Permission>)(List)perms);
-        }
+        return (Enumeration)Collections.enumeration(perms.values());
     }
 
     private static final long serialVersionUID = 2787186408602843674L;
@@ -1441,11 +1461,7 @@
         // Don't call out.defaultWriteObject()
 
         // Write out Vector
-        Vector<SocketPermission> permissions = new Vector<>(perms.size());
-
-        synchronized (this) {
-            permissions.addAll(perms);
-        }
+        Vector<SocketPermission> permissions = new Vector<>(perms.values());
 
         ObjectOutputStream.PutField pfields = out.putFields();
         pfields.put("permissions", permissions);
@@ -1466,7 +1482,22 @@
         // Get the one we want
         @SuppressWarnings("unchecked")
         Vector<SocketPermission> permissions = (Vector<SocketPermission>)gfields.get("permissions", null);
-        perms = new ArrayList<>(permissions.size());
-        perms.addAll(permissions);
+        perms = new ConcurrentSkipListMap<>(new SPCComparator());
+        for (SocketPermission sp : permissions) {
+            perms.put(sp.getName(), sp);
+        }
+    }
+
+    /**
+     * A simple comparator that orders new non-equal entries at the beginning.
+     */
+    private static class SPCComparator implements Comparator<String> {
+        @Override
+        public int compare(String s1, String s2) {
+            if (s1.equals(s2)) {
+                return 0;
+            }
+            return -1;
+        }
     }
 }
--- a/jdk/src/java.base/share/classes/java/security/BasicPermission.java	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/src/java.base/share/classes/java/security/BasicPermission.java	Thu Jun 11 20:18:55 2015 -0700
@@ -25,15 +25,13 @@
 
 package java.security;
 
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.ObjectStreamField;
 import java.util.Enumeration;
-import java.util.Map;
-import java.util.HashMap;
 import java.util.Hashtable;
-import java.util.Collections;
-import java.io.ObjectStreamField;
-import java.io.ObjectOutputStream;
-import java.io.ObjectInputStream;
-import java.io.IOException;
+import java.util.concurrent.ConcurrentHashMap;
 
 /**
  * The BasicPermission class extends the Permission class, and
@@ -165,6 +163,7 @@
      * @return true if the passed permission is equal to or
      * implied by this permission, false otherwise.
      */
+    @Override
     public boolean implies(Permission p) {
         if ((p == null) || (p.getClass() != getClass()))
             return false;
@@ -200,6 +199,7 @@
      * @return true if {@code obj}'s class is the same as this object's class
      *  and has the same name as this BasicPermission object, false otherwise.
      */
+    @Override
     public boolean equals(Object obj) {
         if (obj == this)
             return true;
@@ -221,6 +221,7 @@
      *
      * @return a hash code value for this object.
      */
+    @Override
     public int hashCode() {
         return this.getName().hashCode();
     }
@@ -232,6 +233,7 @@
      *
      * @return the empty string "".
      */
+    @Override
     public String getActions() {
         return "";
     }
@@ -248,6 +250,7 @@
      * @return a new PermissionCollection object suitable for
      * storing BasicPermissions.
      */
+    @Override
     public PermissionCollection newPermissionCollection() {
         return new BasicPermissionCollection(this.getClass());
     }
@@ -308,7 +311,7 @@
       * collection must be of the same type.
       * Not serialized; see serialization section at end of class.
       */
-    private transient Map<String, Permission> perms;
+    private transient ConcurrentHashMap<String, Permission> perms;
 
     /**
      * This is set to {@code true} if this BasicPermissionCollection
@@ -320,7 +323,7 @@
 
     /**
      * The class to which all BasicPermissions in this
-     * BasicPermissionCollection belongs.
+     * BasicPermissionCollection belong.
      *
      * @see #serialPersistentFields
      */
@@ -330,9 +333,8 @@
      * Create an empty BasicPermissionCollection object.
      *
      */
-
     public BasicPermissionCollection(Class<?> clazz) {
-        perms = new HashMap<>(11);
+        perms = new ConcurrentHashMap<>(11);
         all_allowed = false;
         permClass = clazz;
     }
@@ -352,6 +354,7 @@
      * @exception SecurityException - if this BasicPermissionCollection object
      *                                has been marked readonly
      */
+    @Override
     public void add(Permission permission) {
         if (! (permission instanceof BasicPermission))
             throw new IllegalArgumentException("invalid permission: "+
@@ -373,13 +376,12 @@
                                                 permission);
         }
 
-        synchronized (this) {
-            perms.put(bp.getCanonicalName(), permission);
-        }
+        String canonName = bp.getCanonicalName();
+        perms.put(canonName, permission);
 
         // No sync on all_allowed; staleness OK
         if (!all_allowed) {
-            if (bp.getCanonicalName().equals("*"))
+            if (canonName.equals("*"))
                 all_allowed = true;
         }
     }
@@ -393,6 +395,7 @@
      * @return true if "permission" is a proper subset of a permission in
      * the set, false if not.
      */
+    @Override
     public boolean implies(Permission permission) {
         if (! (permission instanceof BasicPermission))
             return false;
@@ -414,11 +417,7 @@
         String path = bp.getCanonicalName();
         //System.out.println("check "+path);
 
-        Permission x;
-
-        synchronized (this) {
-            x = perms.get(path);
-        }
+        Permission x = perms.get(path);
 
         if (x != null) {
             // we have a direct hit!
@@ -435,9 +434,7 @@
             path = path.substring(0, last+1) + "*";
             //System.out.println("check "+path);
 
-            synchronized (this) {
-                x = perms.get(path);
-            }
+            x = perms.get(path);
 
             if (x != null) {
                 return x.implies(permission);
@@ -456,11 +453,9 @@
      *
      * @return an enumeration of all the BasicPermission objects.
      */
+    @Override
     public Enumeration<Permission> elements() {
-        // Convert Iterator of Map values into an Enumeration
-        synchronized (this) {
-            return Collections.enumeration(perms.values());
-        }
+        return perms.elements();
     }
 
     // Need to maintain serialization interoperability with earlier releases,
@@ -503,9 +498,7 @@
         Hashtable<String, Permission> permissions =
                 new Hashtable<>(perms.size()*2);
 
-        synchronized (this) {
-            permissions.putAll(perms);
-        }
+        permissions.putAll(perms);
 
         // Write out serializable fields
         ObjectOutputStream.PutField pfields = out.putFields();
@@ -533,7 +526,7 @@
         @SuppressWarnings("unchecked")
         Hashtable<String, Permission> permissions =
                 (Hashtable<String, Permission>)gfields.get("permissions", null);
-        perms = new HashMap<>(permissions.size()*2);
+        perms = new ConcurrentHashMap<>(permissions.size()*2);
         perms.putAll(permissions);
 
         // Get all_allowed
--- a/jdk/src/java.base/share/classes/java/security/Permissions.java	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/src/java.base/share/classes/java/security/Permissions.java	Thu Jun 11 20:18:55 2015 -0700
@@ -33,6 +33,7 @@
 import java.util.List;
 import java.util.Iterator;
 import java.util.Collections;
+import java.util.concurrent.ConcurrentHashMap;
 import java.io.Serializable;
 import java.io.ObjectStreamField;
 import java.io.ObjectOutputStream;
@@ -85,7 +86,7 @@
      * Key is permissions Class, value is PermissionCollection for that class.
      * Not serialized; see serialization section at end of class.
      */
-    private transient Map<Class<?>, PermissionCollection> permsMap;
+    private transient ConcurrentHashMap<Class<?>, PermissionCollection> permsMap;
 
     // optimization. keep track of whether unresolved permissions need to be
     // checked
@@ -99,7 +100,7 @@
      * Creates a new Permissions object containing no PermissionCollections.
      */
     public Permissions() {
-        permsMap = new HashMap<>(11);
+        permsMap = new ConcurrentHashMap<>(11);
         allPermission = null;
     }
 
@@ -120,18 +121,14 @@
      *
      * @see PermissionCollection#isReadOnly()
      */
-
+    @Override
     public void add(Permission permission) {
         if (isReadOnly())
             throw new SecurityException(
               "attempt to add a Permission to a readonly Permissions object");
 
-        PermissionCollection pc;
-
-        synchronized (this) {
-            pc = getPermissionCollection(permission, true);
-            pc.add(permission);
-        }
+        PermissionCollection pc = getPermissionCollection(permission, true);
+        pc.add(permission);
 
         // No sync; staleness -> optimizations delayed, which is OK
         if (permission instanceof AllPermission) {
@@ -169,21 +166,19 @@
      * PermissionCollection it
      * belongs to, false if not.
      */
-
+    @Override
     public boolean implies(Permission permission) {
         // No sync; staleness -> skip optimization, which is OK
         if (allPermission != null) {
             return true; // AllPermission has already been added
         } else {
-            synchronized (this) {
-                PermissionCollection pc = getPermissionCollection(permission,
-                    false);
-                if (pc != null) {
-                    return pc.implies(permission);
-                } else {
-                    // none found
-                    return false;
-                }
+            PermissionCollection pc = getPermissionCollection(permission,
+                false);
+            if (pc != null) {
+                return pc.implies(permission);
+            } else {
+                // none found
+                return false;
             }
         }
     }
@@ -194,14 +189,12 @@
      *
      * @return an enumeration of all the Permissions.
      */
-
+    @Override
     public Enumeration<Permission> elements() {
         // go through each Permissions in the hash table
         // and call their elements() function.
 
-        synchronized (this) {
-            return new PermissionsEnumerator(permsMap.values().iterator());
-        }
+        return new PermissionsEnumerator(permsMap.values().iterator());
     }
 
     /**
@@ -236,34 +229,39 @@
      * It should be set to true when invoked from add().
      */
     private PermissionCollection getPermissionCollection(Permission p,
-        boolean createEmpty) {
+                                                         boolean createEmpty) {
         Class<?> c = p.getClass();
 
-        PermissionCollection pc = permsMap.get(c);
-
         if (!hasUnresolved && !createEmpty) {
-            return pc;
-        } else if (pc == null) {
+            return permsMap.get(c);
+        }
 
-            // Check for unresolved permissions
-            pc = (hasUnresolved ? getUnresolvedPermissions(p) : null);
-
-            // if still null, create a new collection
-            if (pc == null && createEmpty) {
-
-                pc = p.newPermissionCollection();
+        // Create and add permission collection to map if it is absent.
+        // NOTE: cannot use lambda for mappingFunction parameter until
+        // JDK-8076596 is fixed.
+        return permsMap.computeIfAbsent(c,
+            new java.util.function.Function<>() {
+                @Override
+                public PermissionCollection apply(Class<?> k) {
+                    // Check for unresolved permissions
+                    PermissionCollection pc =
+                        (hasUnresolved ? getUnresolvedPermissions(p) : null);
 
-                // still no PermissionCollection?
-                // We'll give them a PermissionsHash.
-                if (pc == null)
-                    pc = new PermissionsHash();
-            }
+                    // if still null, create a new collection
+                    if (pc == null && createEmpty) {
+
+                        pc = p.newPermissionCollection();
 
-            if (pc != null) {
-                permsMap.put(c, pc);
+                        // still no PermissionCollection?
+                        // We'll give them a PermissionsHash.
+                        if (pc == null) {
+                            pc = new PermissionsHash();
+                        }
+                    }
+                    return pc;
+                }
             }
-        }
-        return pc;
+        );
     }
 
     /**
@@ -277,8 +275,6 @@
      */
     private PermissionCollection getUnresolvedPermissions(Permission p)
     {
-        // Called from within synchronized method so permsMap doesn't need lock
-
         UnresolvedPermissionCollection uc =
         (UnresolvedPermissionCollection) permsMap.get(UnresolvedPermission.class);
 
@@ -362,9 +358,7 @@
         // Copy perms into a Hashtable
         Hashtable<Class<?>, PermissionCollection> perms =
             new Hashtable<>(permsMap.size()*2); // no sync; estimate
-        synchronized (this) {
-            perms.putAll(permsMap);
-        }
+        perms.putAll(permsMap);
 
         // Write out serializable fields
         ObjectOutputStream.PutField pfields = out.putFields();
@@ -394,7 +388,7 @@
         @SuppressWarnings("unchecked")
         Hashtable<Class<?>, PermissionCollection> perms =
             (Hashtable<Class<?>, PermissionCollection>)gfields.get("perms", null);
-        permsMap = new HashMap<>(perms.size()*2);
+        permsMap = new ConcurrentHashMap<>(perms.size()*2);
         permsMap.putAll(perms);
 
         // Set hasUnresolved
@@ -481,14 +475,13 @@
      * Key and value are (same) permissions objects.
      * Not serialized; see serialization section at end of class.
      */
-    private transient Map<Permission, Permission> permsMap;
+    private transient ConcurrentHashMap<Permission, Permission> permsMap;
 
     /**
      * Create an empty PermissionsHash object.
      */
-
     PermissionsHash() {
-        permsMap = new HashMap<>(11);
+        permsMap = new ConcurrentHashMap<>(11);
     }
 
     /**
@@ -496,11 +489,9 @@
      *
      * @param permission the Permission object to add.
      */
-
+    @Override
     public void add(Permission permission) {
-        synchronized (this) {
-            permsMap.put(permission, permission);
-        }
+        permsMap.put(permission, permission);
     }
 
     /**
@@ -512,23 +503,21 @@
      * @return true if "permission" is a proper subset of a permission in
      * the set, false if not.
      */
-
+    @Override
     public boolean implies(Permission permission) {
         // attempt a fast lookup and implies. If that fails
         // then enumerate through all the permissions.
-        synchronized (this) {
-            Permission p = permsMap.get(permission);
+        Permission p = permsMap.get(permission);
 
-            // If permission is found, then p.equals(permission)
-            if (p == null) {
-                for (Permission p_ : permsMap.values()) {
-                    if (p_.implies(permission))
-                        return true;
-                }
-                return false;
-            } else {
-                return true;
+        // If permission is found, then p.equals(permission)
+        if (p == null) {
+            for (Permission p_ : permsMap.values()) {
+                if (p_.implies(permission))
+                    return true;
             }
+            return false;
+        } else {
+            return true;
         }
     }
 
@@ -537,12 +526,9 @@
      *
      * @return an enumeration of all the Permissions.
      */
-
+    @Override
     public Enumeration<Permission> elements() {
-        // Convert Iterator of Map values into an Enumeration
-        synchronized (this) {
-            return Collections.enumeration(permsMap.values());
-        }
+        return permsMap.elements();
     }
 
     private static final long serialVersionUID = -8491988220802933440L;
@@ -570,9 +556,7 @@
         // Copy perms into a Hashtable
         Hashtable<Permission, Permission> perms =
                 new Hashtable<>(permsMap.size()*2);
-        synchronized (this) {
-            perms.putAll(permsMap);
-        }
+        perms.putAll(permsMap);
 
         // Write out serializable fields
         ObjectOutputStream.PutField pfields = out.putFields();
@@ -597,7 +581,7 @@
         @SuppressWarnings("unchecked")
         Hashtable<Permission, Permission> perms =
                 (Hashtable<Permission, Permission>)gfields.get("perms", null);
-        permsMap = new HashMap<>(perms.size()*2);
+        permsMap = new ConcurrentHashMap<>(perms.size()*2);
         permsMap.putAll(perms);
     }
 }
--- a/jdk/src/java.base/share/classes/java/security/UnresolvedPermissionCollection.java	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/src/java.base/share/classes/java/security/UnresolvedPermissionCollection.java	Thu Jun 11 20:18:55 2015 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,11 +25,13 @@
 
 package java.security;
 
-import java.util.*;
-import java.io.ObjectStreamField;
+import java.io.IOException;
+import java.io.ObjectInputStream;
 import java.io.ObjectOutputStream;
-import java.io.ObjectInputStream;
-import java.io.IOException;
+import java.io.ObjectStreamField;
+import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.CopyOnWriteArrayList;
 
 /**
  * A UnresolvedPermissionCollection stores a collection
@@ -54,14 +56,14 @@
      * of the same type.
      * Not serialized; see serialization section at end of class.
      */
-    private transient Map<String, List<UnresolvedPermission>> perms;
+    private transient ConcurrentHashMap<String, List<UnresolvedPermission>> perms;
 
     /**
      * Create an empty UnresolvedPermissionCollection object.
      *
      */
     public UnresolvedPermissionCollection() {
-        perms = new HashMap<>(11);
+        perms = new ConcurrentHashMap<>(11);
     }
 
     /**
@@ -70,25 +72,32 @@
      *
      * @param permission the Permission object to add.
      */
-
-    public void add(Permission permission)
-    {
+    @Override
+    public void add(Permission permission) {
         if (! (permission instanceof UnresolvedPermission))
             throw new IllegalArgumentException("invalid permission: "+
                                                permission);
         UnresolvedPermission up = (UnresolvedPermission) permission;
 
-        List<UnresolvedPermission> v;
-        synchronized (this) {
-            v = perms.get(up.getName());
-            if (v == null) {
-                v = new ArrayList<>();
-                perms.put(up.getName(), v);
+        // Add permission to map. NOTE: cannot use lambda for
+        // remappingFunction parameter until JDK-8076596 is fixed.
+        perms.compute(up.getName(),
+            new java.util.function.BiFunction<>() {
+                @Override
+                public List<UnresolvedPermission> apply(String key,
+                                        List<UnresolvedPermission> oldValue) {
+                    if (oldValue == null) {
+                        List<UnresolvedPermission> v =
+                            new CopyOnWriteArrayList<>();
+                        v.add(up);
+                        return v;
+                    } else {
+                        oldValue.add(up);
+                        return oldValue;
+                    }
+                }
             }
-        }
-        synchronized (v) {
-            v.add(up);
-        }
+        );
     }
 
     /**
@@ -96,17 +105,15 @@
      * and return the List containing them.
      */
     List<UnresolvedPermission> getUnresolvedPermissions(Permission p) {
-        synchronized (this) {
-            return perms.get(p.getClass().getName());
-        }
+        return perms.get(p.getClass().getName());
     }
 
     /**
      * always returns false for unresolved permissions
      *
      */
-    public boolean implies(Permission permission)
-    {
+    @Override
+    public boolean implies(Permission permission) {
         return false;
     }
 
@@ -116,18 +123,14 @@
      *
      * @return an enumeration of all the UnresolvedPermission objects.
      */
-
+    @Override
     public Enumeration<Permission> elements() {
         List<Permission> results =
             new ArrayList<>(); // where results are stored
 
         // Get iterator of Map values (which are lists of permissions)
-        synchronized (this) {
-            for (List<UnresolvedPermission> l : perms.values()) {
-                synchronized (l) {
-                    results.addAll(l);
-                }
-            }
+        for (List<UnresolvedPermission> l : perms.values()) {
+            results.addAll(l);
         }
 
         return Collections.enumeration(results);
@@ -164,19 +167,14 @@
             new Hashtable<>(perms.size()*2);
 
         // Convert each entry (List) into a Vector
-        synchronized (this) {
-            Set<Map.Entry<String, List<UnresolvedPermission>>> set = perms.entrySet();
-            for (Map.Entry<String, List<UnresolvedPermission>> e : set) {
-                // Convert list into Vector
-                List<UnresolvedPermission> list = e.getValue();
-                Vector<UnresolvedPermission> vec = new Vector<>(list.size());
-                synchronized (list) {
-                    vec.addAll(list);
-                }
+        Set<Map.Entry<String, List<UnresolvedPermission>>> set = perms.entrySet();
+        for (Map.Entry<String, List<UnresolvedPermission>> e : set) {
+            // Convert list into Vector
+            List<UnresolvedPermission> list = e.getValue();
+            Vector<UnresolvedPermission> vec = new Vector<>(list);
 
-                // Add to Hashtable being serialized
-                permissions.put(e.getKey(), vec);
-            }
+            // Add to Hashtable being serialized
+            permissions.put(e.getKey(), vec);
         }
 
         // Write out serializable fields
@@ -203,15 +201,14 @@
         Hashtable<String, Vector<UnresolvedPermission>> permissions =
                 (Hashtable<String, Vector<UnresolvedPermission>>)
                 gfields.get("permissions", null);
-        perms = new HashMap<>(permissions.size()*2);
+        perms = new ConcurrentHashMap<>(permissions.size()*2);
 
         // Convert each entry (Vector) into a List
         Set<Map.Entry<String, Vector<UnresolvedPermission>>> set = permissions.entrySet();
         for (Map.Entry<String, Vector<UnresolvedPermission>> e : set) {
             // Convert Vector into ArrayList
             Vector<UnresolvedPermission> vec = e.getValue();
-            List<UnresolvedPermission> list = new ArrayList<>(vec.size());
-            list.addAll(vec);
+            List<UnresolvedPermission> list = new CopyOnWriteArrayList<>(vec);
 
             // Add to Hashtable being serialized
             perms.put(e.getKey(), list);
--- a/jdk/src/java.base/share/classes/java/text/SimpleDateFormat.java	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/src/java.base/share/classes/java/text/SimpleDateFormat.java	Thu Jun 11 20:18:55 2015 -0700
@@ -2374,7 +2374,7 @@
     /**
      * After reading an object from the input stream, the format
      * pattern in the object is verified.
-     * <p>
+     *
      * @exception InvalidObjectException if the pattern is invalid
      */
     private void readObject(ObjectInputStream stream)
--- a/jdk/src/java.base/share/classes/java/util/DualPivotQuicksort.java	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/src/java.base/share/classes/java/util/DualPivotQuicksort.java	Thu Jun 11 20:18:55 2015 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2009, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2009, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -61,11 +61,6 @@
     private static final int MAX_RUN_COUNT = 67;
 
     /**
-     * The maximum length of run in merge sort.
-     */
-    private static final int MAX_RUN_LENGTH = 33;
-
-    /**
      * If the length of an array to be sorted is less than this
      * constant, Quicksort is used in preference to merge sort.
      */
@@ -121,20 +116,24 @@
 
         // Check if the array is nearly sorted
         for (int k = left; k < right; run[count] = k) {
+            // Equal items in the beginning of the sequence
+            while (k < right && a[k] == a[k + 1])
+                k++;
+            if (k == right) break;  // Sequence finishes with equal items
             if (a[k] < a[k + 1]) { // ascending
                 while (++k <= right && a[k - 1] <= a[k]);
             } else if (a[k] > a[k + 1]) { // descending
                 while (++k <= right && a[k - 1] >= a[k]);
+                // Transform into an ascending sequence
                 for (int lo = run[count] - 1, hi = k; ++lo < --hi; ) {
                     int t = a[lo]; a[lo] = a[hi]; a[hi] = t;
                 }
-            } else { // equal
-                for (int m = MAX_RUN_LENGTH; ++k <= right && a[k - 1] == a[k]; ) {
-                    if (--m == 0) {
-                        sort(a, left, right, true);
-                        return;
-                    }
-                }
+            }
+
+            // Merge a transformed descending sequence followed by an
+            // ascending sequence
+            if (run[count] > left && a[run[count]] >= a[run[count] - 1]) {
+                count--;
             }
 
             /*
@@ -151,7 +150,7 @@
         // Implementation note: variable "right" is increased by 1.
         if (run[count] == right++) { // The last run contains one element
             run[++count] = right;
-        } else if (count == 1) { // The array is already sorted
+        } else if (count <= 1) { // The array is already sorted
             return;
         }
 
@@ -569,20 +568,24 @@
 
         // Check if the array is nearly sorted
         for (int k = left; k < right; run[count] = k) {
+            // Equal items in the beginning of the sequence
+            while (k < right && a[k] == a[k + 1])
+                k++;
+            if (k == right) break;  // Sequence finishes with equal items
             if (a[k] < a[k + 1]) { // ascending
                 while (++k <= right && a[k - 1] <= a[k]);
             } else if (a[k] > a[k + 1]) { // descending
                 while (++k <= right && a[k - 1] >= a[k]);
+                // Transform into an ascending sequence
                 for (int lo = run[count] - 1, hi = k; ++lo < --hi; ) {
                     long t = a[lo]; a[lo] = a[hi]; a[hi] = t;
                 }
-            } else { // equal
-                for (int m = MAX_RUN_LENGTH; ++k <= right && a[k - 1] == a[k]; ) {
-                    if (--m == 0) {
-                        sort(a, left, right, true);
-                        return;
-                    }
-                }
+            }
+
+            // Merge a transformed descending sequence followed by an
+            // ascending sequence
+            if (run[count] > left && a[run[count]] >= a[run[count] - 1]) {
+                count--;
             }
 
             /*
@@ -599,7 +602,7 @@
         // Implementation note: variable "right" is increased by 1.
         if (run[count] == right++) { // The last run contains one element
             run[++count] = right;
-        } else if (count == 1) { // The array is already sorted
+        } else if (count <= 1) { // The array is already sorted
             return;
         }
 
@@ -1053,20 +1056,24 @@
 
         // Check if the array is nearly sorted
         for (int k = left; k < right; run[count] = k) {
+            // Equal items in the beginning of the sequence
+            while (k < right && a[k] == a[k + 1])
+                k++;
+            if (k == right) break;  // Sequence finishes with equal items
             if (a[k] < a[k + 1]) { // ascending
                 while (++k <= right && a[k - 1] <= a[k]);
             } else if (a[k] > a[k + 1]) { // descending
                 while (++k <= right && a[k - 1] >= a[k]);
+                // Transform into an ascending sequence
                 for (int lo = run[count] - 1, hi = k; ++lo < --hi; ) {
                     short t = a[lo]; a[lo] = a[hi]; a[hi] = t;
                 }
-            } else { // equal
-                for (int m = MAX_RUN_LENGTH; ++k <= right && a[k - 1] == a[k]; ) {
-                    if (--m == 0) {
-                        sort(a, left, right, true);
-                        return;
-                    }
-                }
+            }
+
+            // Merge a transformed descending sequence followed by an
+            // ascending sequence
+            if (run[count] > left && a[run[count]] >= a[run[count] - 1]) {
+                count--;
             }
 
             /*
@@ -1083,7 +1090,7 @@
         // Implementation note: variable "right" is increased by 1.
         if (run[count] == right++) { // The last run contains one element
             run[++count] = right;
-        } else if (count == 1) { // The array is already sorted
+        } else if (count <= 1) { // The array is already sorted
             return;
         }
 
@@ -1537,20 +1544,24 @@
 
         // Check if the array is nearly sorted
         for (int k = left; k < right; run[count] = k) {
+            // Equal items in the beginning of the sequence
+            while (k < right && a[k] == a[k + 1])
+                k++;
+            if (k == right) break;  // Sequence finishes with equal items
             if (a[k] < a[k + 1]) { // ascending
                 while (++k <= right && a[k - 1] <= a[k]);
             } else if (a[k] > a[k + 1]) { // descending
                 while (++k <= right && a[k - 1] >= a[k]);
+                // Transform into an ascending sequence
                 for (int lo = run[count] - 1, hi = k; ++lo < --hi; ) {
                     char t = a[lo]; a[lo] = a[hi]; a[hi] = t;
                 }
-            } else { // equal
-                for (int m = MAX_RUN_LENGTH; ++k <= right && a[k - 1] == a[k]; ) {
-                    if (--m == 0) {
-                        sort(a, left, right, true);
-                        return;
-                    }
-                }
+            }
+
+            // Merge a transformed descending sequence followed by an
+            // ascending sequence
+            if (run[count] > left && a[run[count]] >= a[run[count] - 1]) {
+                count--;
             }
 
             /*
@@ -1567,7 +1578,7 @@
         // Implementation note: variable "right" is increased by 1.
         if (run[count] == right++) { // The last run contains one element
             run[++count] = right;
-        } else if (count == 1) { // The array is already sorted
+        } else if (count <= 1) { // The array is already sorted
             return;
         }
 
@@ -2117,20 +2128,24 @@
 
         // Check if the array is nearly sorted
         for (int k = left; k < right; run[count] = k) {
+            // Equal items in the beginning of the sequence
+            while (k < right && a[k] == a[k + 1])
+                k++;
+            if (k == right) break;  // Sequence finishes with equal items
             if (a[k] < a[k + 1]) { // ascending
                 while (++k <= right && a[k - 1] <= a[k]);
             } else if (a[k] > a[k + 1]) { // descending
                 while (++k <= right && a[k - 1] >= a[k]);
+                // Transform into an ascending sequence
                 for (int lo = run[count] - 1, hi = k; ++lo < --hi; ) {
                     float t = a[lo]; a[lo] = a[hi]; a[hi] = t;
                 }
-            } else { // equal
-                for (int m = MAX_RUN_LENGTH; ++k <= right && a[k - 1] == a[k]; ) {
-                    if (--m == 0) {
-                        sort(a, left, right, true);
-                        return;
-                    }
-                }
+            }
+
+            // Merge a transformed descending sequence followed by an
+            // ascending sequence
+            if (run[count] > left && a[run[count]] >= a[run[count] - 1]) {
+                count--;
             }
 
             /*
@@ -2147,7 +2162,7 @@
         // Implementation note: variable "right" is increased by 1.
         if (run[count] == right++) { // The last run contains one element
             run[++count] = right;
-        } else if (count == 1) { // The array is already sorted
+        } else if (count <= 1) { // The array is already sorted
             return;
         }
 
@@ -2656,20 +2671,24 @@
 
         // Check if the array is nearly sorted
         for (int k = left; k < right; run[count] = k) {
+            // Equal items in the beginning of the sequence
+            while (k < right && a[k] == a[k + 1])
+                k++;
+            if (k == right) break;  // Sequence finishes with equal items
             if (a[k] < a[k + 1]) { // ascending
                 while (++k <= right && a[k - 1] <= a[k]);
             } else if (a[k] > a[k + 1]) { // descending
                 while (++k <= right && a[k - 1] >= a[k]);
+                // Transform into an ascending sequence
                 for (int lo = run[count] - 1, hi = k; ++lo < --hi; ) {
                     double t = a[lo]; a[lo] = a[hi]; a[hi] = t;
                 }
-            } else { // equal
-                for (int m = MAX_RUN_LENGTH; ++k <= right && a[k - 1] == a[k]; ) {
-                    if (--m == 0) {
-                        sort(a, left, right, true);
-                        return;
-                    }
-                }
+            }
+
+            // Merge a transformed descending sequence followed by an
+            // ascending sequence
+            if (run[count] > left && a[run[count]] >= a[run[count] - 1]) {
+                count--;
             }
 
             /*
@@ -2686,7 +2705,7 @@
         // Implementation note: variable "right" is increased by 1.
         if (run[count] == right++) { // The last run contains one element
             run[++count] = right;
-        } else if (count == 1) { // The array is already sorted
+        } else if (count <= 1) { // The array is already sorted
             return;
         }
 
--- a/jdk/src/java.base/share/classes/java/util/PropertyPermission.java	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/src/java.base/share/classes/java/util/PropertyPermission.java	Thu Jun 11 20:18:55 2015 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,18 +25,15 @@
 
 package java.util;
 
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.ObjectStreamField;
 import java.io.Serializable;
-import java.io.IOException;
 import java.security.*;
-import java.util.Map;
-import java.util.HashMap;
 import java.util.Enumeration;
 import java.util.Hashtable;
-import java.util.Collections;
-import java.io.ObjectStreamField;
-import java.io.ObjectOutputStream;
-import java.io.ObjectInputStream;
-import java.io.IOException;
+import java.util.concurrent.ConcurrentHashMap;
 import sun.security.util.SecurityConstants;
 
 /**
@@ -162,6 +159,16 @@
     }
 
     /**
+     * Creates a PropertyPermission object with the specified name and
+     * a pre-calculated mask. Avoids the overhead of re-computing the mask.
+     * Called by PropertyPermissionCollection.
+     */
+    PropertyPermission(String name, int mask) {
+        super(name, getActions(mask));
+        this.mask = mask;
+    }
+
+    /**
      * Checks if this PropertyPermission object "implies" the specified
      * permission.
      * <P>
@@ -178,6 +185,7 @@
      * @return true if the specified permission is implied by this object,
      * false if not.
      */
+    @Override
     public boolean implies(Permission p) {
         if (!(p instanceof PropertyPermission))
             return false;
@@ -198,6 +206,7 @@
      * @return true if obj is a PropertyPermission, and has the same name and
      * actions as this PropertyPermission object.
      */
+    @Override
     public boolean equals(Object obj) {
         if (obj == this)
             return true;
@@ -219,6 +228,7 @@
      *
      * @return a hash code value for this object.
      */
+    @Override
     public int hashCode() {
         return this.getName().hashCode();
     }
@@ -345,6 +355,7 @@
      *
      * @return the canonical string representation of the actions.
      */
+    @Override
     public String getActions() {
         if (actions == null)
             actions = getActions(this.mask);
@@ -369,6 +380,7 @@
      * @return a new PermissionCollection object suitable for storing
      * PropertyPermissions.
      */
+    @Override
     public PermissionCollection newPermissionCollection() {
         return new PropertyPermissionCollection();
     }
@@ -425,7 +437,7 @@
      * Key is property name; value is PropertyPermission.
      * Not serialized; see serialization section at end of class.
      */
-    private transient Map<String, PropertyPermission> perms;
+    private transient ConcurrentHashMap<String, PropertyPermission> perms;
 
     /**
      * Boolean saying if "*" is in the collection.
@@ -439,7 +451,7 @@
      * Create an empty PropertyPermissionCollection object.
      */
     public PropertyPermissionCollection() {
-        perms = new HashMap<>(32);     // Capacity for default policy
+        perms = new ConcurrentHashMap<>(32);     // Capacity for default policy
         all_allowed = false;
     }
 
@@ -455,6 +467,7 @@
      * @exception SecurityException - if this PropertyPermissionCollection
      *                                object has been marked readonly
      */
+    @Override
     public void add(Permission permission) {
         if (! (permission instanceof PropertyPermission))
             throw new IllegalArgumentException("invalid permission: "+
@@ -466,21 +479,30 @@
         PropertyPermission pp = (PropertyPermission) permission;
         String propName = pp.getName();
 
-        synchronized (this) {
-            PropertyPermission existing = perms.get(propName);
+        // Add permission to map if it is absent, or replace with new
+        // permission if applicable. NOTE: cannot use lambda for
+        // remappingFunction parameter until JDK-8076596 is fixed.
+        perms.merge(propName, pp,
+            new java.util.function.BiFunction<>() {
+                @Override
+                public PropertyPermission apply(PropertyPermission existingVal,
+                                                PropertyPermission newVal) {
 
-            if (existing != null) {
-                int oldMask = existing.getMask();
-                int newMask = pp.getMask();
-                if (oldMask != newMask) {
-                    int effective = oldMask | newMask;
-                    String actions = PropertyPermission.getActions(effective);
-                    perms.put(propName, new PropertyPermission(propName, actions));
+                    int oldMask = existingVal.getMask();
+                    int newMask = newVal.getMask();
+                    if (oldMask != newMask) {
+                        int effective = oldMask | newMask;
+                        if (effective == newMask) {
+                            return newVal;
+                        }
+                        if (effective != oldMask) {
+                            return new PropertyPermission(propName, effective);
+                        }
+                    }
+                    return existingVal;
                 }
-            } else {
-                perms.put(propName, pp);
             }
-        }
+        );
 
         if (!all_allowed) {
             if (propName.equals("*"))
@@ -497,9 +519,10 @@
      * @return true if "permission" is a proper subset of a permission in
      * the set, false if not.
      */
+    @Override
     public boolean implies(Permission permission) {
         if (! (permission instanceof PropertyPermission))
-                return false;
+            return false;
 
         PropertyPermission pp = (PropertyPermission) permission;
         PropertyPermission x;
@@ -509,9 +532,7 @@
 
         // short circuit if the "*" Permission was added
         if (all_allowed) {
-            synchronized (this) {
-                x = perms.get("*");
-            }
+            x = perms.get("*");
             if (x != null) {
                 effective |= x.getMask();
                 if ((effective & desired) == desired)
@@ -526,9 +547,7 @@
         String name = pp.getName();
         //System.out.println("check "+name);
 
-        synchronized (this) {
-            x = perms.get(name);
-        }
+        x = perms.get(name);
 
         if (x != null) {
             // we have a direct hit!
@@ -546,9 +565,7 @@
 
             name = name.substring(0, last+1) + "*";
             //System.out.println("check "+name);
-            synchronized (this) {
-                x = perms.get(name);
-            }
+            x = perms.get(name);
 
             if (x != null) {
                 effective |= x.getMask();
@@ -569,16 +586,14 @@
      *
      * @return an enumeration of all the PropertyPermission objects.
      */
+    @Override
     @SuppressWarnings("unchecked")
     public Enumeration<Permission> elements() {
-        // Convert Iterator of Map values into an Enumeration
-        synchronized (this) {
-            /**
-             * Casting to rawtype since Enumeration<PropertyPermission>
-             * cannot be directly cast to Enumeration<Permission>
-             */
-            return (Enumeration)Collections.enumeration(perms.values());
-        }
+        /**
+         * Casting to rawtype since Enumeration<PropertyPermission>
+         * cannot be directly cast to Enumeration<Permission>
+         */
+        return (Enumeration)perms.elements();
     }
 
     private static final long serialVersionUID = 7015263904581634791L;
@@ -616,9 +631,7 @@
         // Copy perms into a Hashtable
         Hashtable<String, Permission> permissions =
             new Hashtable<>(perms.size()*2);
-        synchronized (this) {
-            permissions.putAll(perms);
-        }
+        permissions.putAll(perms);
 
         // Write out serializable fields
         ObjectOutputStream.PutField pfields = out.putFields();
@@ -646,7 +659,7 @@
         @SuppressWarnings("unchecked")
         Hashtable<String, PropertyPermission> permissions =
             (Hashtable<String, PropertyPermission>)gfields.get("permissions", null);
-        perms = new HashMap<>(permissions.size()*2);
+        perms = new ConcurrentHashMap<>(permissions.size()*2);
         perms.putAll(permissions);
     }
 }
--- a/jdk/src/java.base/share/classes/javax/security/auth/Subject.java	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/src/java.base/share/classes/javax/security/auth/Subject.java	Thu Jun 11 20:18:55 2015 -0700
@@ -1401,8 +1401,6 @@
         /**
          * Writes this object out to a stream (i.e., serializes it).
          *
-         * <p>
-         *
          * @serialData If this is a private credential set,
          *      a security check is performed to ensure that
          *      the caller has permission to access each credential
--- a/jdk/src/java.base/share/classes/jdk/internal/org/objectweb/asm/util/TraceClassVisitor.java	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/src/java.base/share/classes/jdk/internal/org/objectweb/asm/util/TraceClassVisitor.java	Thu Jun 11 20:18:55 2015 -0700
@@ -74,36 +74,34 @@
  * visitor chain to trace the class that is visited at a given point in this
  * chain. This may be useful for debugging purposes.
  * <p>
- * The trace printed when visiting the <tt>Hello</tt> class is the following:
- * <p>
+ * The trace printed when visiting the {@code Hello} class is the following:
  * <blockquote>
  *
- * <pre>
+ * <pre>{@code
  * // class version 49.0 (49) // access flags 0x21 public class Hello {
  *
  * // compiled from: Hello.java
  *
- * // access flags 0x1 public &lt;init&gt; ()V ALOAD 0 INVOKESPECIAL
- * java/lang/Object &lt;init&gt; ()V RETURN MAXSTACK = 1 MAXLOCALS = 1
+ * // access flags 0x1 public <init> ()V ALOAD 0 INVOKESPECIAL
+ * java/lang/Object <init> ()V RETURN MAXSTACK = 1 MAXLOCALS = 1
  *
  * // access flags 0x9 public static main ([Ljava/lang/String;)V GETSTATIC
- * java/lang/System out Ljava/io/PrintStream; LDC &quot;hello&quot;
+ * java/lang/System out Ljava/io/PrintStream; LDC "hello"
  * INVOKEVIRTUAL java/io/PrintStream println (Ljava/lang/String;)V RETURN
  * MAXSTACK = 2 MAXLOCALS = 1 }
- * </pre>
+ * }</pre>
  *
- * </blockquote> where <tt>Hello</tt> is defined by:
- * <p>
+ * </blockquote> where {@code Hello} is defined by:
  * <blockquote>
  *
- * <pre>
+ * <pre>{@code
  * public class Hello {
  *
  *     public static void main(String[] args) {
- *         System.out.println(&quot;hello&quot;);
+ *         System.out.println("hello");
  *     }
  * }
- * </pre>
+ * }</pre>
  *
  * </blockquote>
  *
@@ -137,7 +135,7 @@
      *
      * @param cv
      *            the {@link ClassVisitor} to which this visitor delegates
-     *            calls. May be <tt>null</tt>.
+     *            calls. May be {@code null}.
      * @param pw
      *            the print writer to be used to print the class.
      */
@@ -150,7 +148,7 @@
      *
      * @param cv
      *            the {@link ClassVisitor} to which this visitor delegates
-     *            calls. May be <tt>null</tt>.
+     *            calls. May be {@code null}.
      * @param p
      *            the object that actually converts visit events into text.
      * @param pw
--- a/jdk/src/java.base/share/classes/sun/invoke/util/BytecodeName.java	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/src/java.base/share/classes/sun/invoke/util/BytecodeName.java	Thu Jun 11 20:18:55 2015 -0700
@@ -464,7 +464,7 @@
      * Report whether a character is safe in a bytecode name.
      * This is true of any unicode character except the following
      * <em>dangerous characters</em>: {@code ".;:$[]<>/"}.
-     * @param s the proposed character
+     * @param c the proposed character
      * @return true if the character is safe to use in classfiles
      */
     public static boolean isSafeBytecodeChar(char c) {
--- a/jdk/src/java.base/share/classes/sun/misc/ExtensionDependency.java	Thu Jun 11 10:44:14 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,554 +0,0 @@
-/*
- * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code 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 General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.misc;
-
-import java.io.File;
-import java.io.FilenameFilter;
-import java.io.IOException;
-import java.io.FileNotFoundException;
-import java.util.StringTokenizer;
-import java.util.Vector;
-import java.util.Enumeration;
-import java.util.jar.JarFile;
-import java.util.jar.Manifest;
-import java.util.jar.Attributes;
-import java.util.jar.Attributes.Name;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import java.security.PrivilegedExceptionAction;
-import java.security.PrivilegedActionException;
-import java.net.URL;
-import java.net.MalformedURLException;
-import sun.net.www.ParseUtil;
-
-/**
- * This class checks dependent extensions a particular jar file may have
- * declared through its manifest attributes.
- * <p>
- * Jar file declared dependent extensions through the extension-list
- * attribute. The extension-list contains a list of keys used to
- * fetch the other attributes describing the required extension.
- * If key is the extension key declared in the extension-list
- * attribute, the following describing attribute can be found in
- * the manifest:
- * <ul>
- * <li>key-Extension-Name:  (Specification package name)</li>
- * <li>key-Specification-Version: (Specification-Version)</li>
- * <li>key-Implementation-Version: (Implementation-Version)</li>
- * <li>key-Implementation-Vendor-Id: (Imlementation-Vendor-Id)</li>
- * <li>key-Implementation-Version: (Implementation version)</li>
- * <li>key-Implementation-URL: (URL to download the requested extension)</li>
- * </ul>
- * <p>
- * This class also maintain versioning consistency of installed
- * extensions dependencies declared in jar file manifest.
- *
- * @deprecated this class will be removed in a future release.
- * @author  Jerome Dochez
- */
-@Deprecated
-public class ExtensionDependency {
-
-    /* Callbak interfaces to delegate installation of missing extensions */
-    private static Vector<ExtensionInstallationProvider> providers;
-
-    /**
-     * Register an ExtensionInstallationProvider. The provider is responsible
-     * for handling the installation (upgrade) of any missing extensions.
-     *
-     * @param eip ExtensionInstallationProvider implementation
-     */
-    public synchronized static void addExtensionInstallationProvider
-        (ExtensionInstallationProvider eip)
-    {
-        if (providers == null) {
-            providers = new Vector<>();
-        }
-        providers.add(eip);
-    }
-
-    /**
-     * Unregister a previously installed installation provider
-     */
-    public synchronized static void removeExtensionInstallationProvider
-        (ExtensionInstallationProvider eip)
-    {
-        providers.remove(eip);
-    }
-
-    /**
-     * Checks the dependencies of the jar file on installed extension.
-     *
-     * @param jar containing the attributes declaring the dependencies
-     */
-    public static boolean checkExtensionsDependencies(JarFile jar)
-    {
-        if (providers == null) {
-            // no need to bother, nobody is registered to install missing
-            // extensions
-            return true;
-        }
-
-        try {
-            ExtensionDependency extDep = new ExtensionDependency();
-            return extDep.checkExtensions(jar);
-        } catch (ExtensionInstallationException e) {
-            debug(e.getMessage());
-        }
-        return false;
-    }
-
-    /*
-     * Check for all declared required extensions in the jar file
-     * manifest.
-     */
-    protected boolean checkExtensions(JarFile jar)
-        throws ExtensionInstallationException
-    {
-        Manifest man;
-        try {
-            man = jar.getManifest();
-        } catch (IOException e) {
-            return false;
-        }
-
-        if (man == null) {
-            // The applet does not define a manifest file, so
-            // we just assume all dependencies are satisfied.
-            return true;
-        }
-
-        boolean result = true;
-        Attributes attr = man.getMainAttributes();
-        if (attr != null) {
-            // Let's get the list of declared dependencies
-            String value = attr.getValue(Name.EXTENSION_LIST);
-            if (value != null) {
-                StringTokenizer st = new StringTokenizer(value);
-                // Iterate over all declared dependencies
-                while (st.hasMoreTokens()) {
-                    String extensionName = st.nextToken();
-                    debug("The file " + jar.getName() +
-                          " appears to depend on " + extensionName);
-                    // Sanity Check
-                    String extName = extensionName + "-" +
-                        Name.EXTENSION_NAME.toString();
-                    if (attr.getValue(extName) == null) {
-                        debug("The jar file " + jar.getName() +
-                              " appers to depend on "
-                              + extensionName + " but does not define the " +
-                              extName + " attribute in its manifest ");
-
-                    } else {
-                        if (!checkExtension(extensionName, attr)) {
-                            debug("Failed installing " + extensionName);
-                            result = false;
-                        }
-                    }
-                }
-            } else {
-                debug("No dependencies for " + jar.getName());
-            }
-        }
-        return result;
-    }
-
-
-    /*
-     * Check that a particular dependency on an extension is satisfied.
-     *
-     * @param extensionName is the key used for the attributes in the manifest
-     * @param attr is the attributes of the manifest file
-     *
-     * @return true if the dependency is satisfied by the installed extensions
-     */
-    protected synchronized boolean checkExtension(final String extensionName,
-                                     final Attributes attr)
-        throws ExtensionInstallationException
-    {
-        debug("Checking extension " + extensionName);
-        if (checkExtensionAgainstInstalled(extensionName, attr))
-            return true;
-
-        debug("Extension not currently installed ");
-        ExtensionInfo reqInfo = new ExtensionInfo(extensionName, attr);
-        return installExtension(reqInfo, null);
-    }
-
-    /*
-     * Check if a particular extension is part of the currently installed
-     * extensions.
-     *
-     * @param extensionName is the key for the attributes in the manifest
-     * @param attr is the attributes of the manifest
-     *
-     * @return true if the requested extension is already installed
-     */
-    boolean checkExtensionAgainstInstalled(String extensionName,
-                                           Attributes attr)
-        throws ExtensionInstallationException
-    {
-        File fExtension = checkExtensionExists(extensionName);
-
-        if (fExtension != null) {
-        // Extension already installed, just check against this one
-            try {
-                if (checkExtensionAgainst(extensionName, attr, fExtension))
-                    return true;
-            } catch (FileNotFoundException e) {
-                debugException(e);
-            } catch (IOException e) {
-                debugException(e);
-            }
-            return false;
-
-        } else {
-        // Not sure if extension is already installed, so check all the
-        // installed extension jar files to see if we get a match
-
-            File[] installedExts;
-
-            try {
-            // Get the list of installed extension jar files so we can
-            // compare the installed versus the requested extension
-                installedExts = getInstalledExtensions();
-            } catch(IOException e) {
-                debugException(e);
-                return false;
-            }
-
-            for (int i=0;i<installedExts.length;i++) {
-                try {
-                    if (checkExtensionAgainst(extensionName, attr, installedExts[i]))
-                        return true;
-                } catch (FileNotFoundException e) {
-                    debugException(e);
-                } catch (IOException e) {
-                    debugException(e);
-                    // let's continue with the next installed extension
-                }
-            }
-        }
-        return false;
-    }
-
-    /*
-     * Check if the requested extension described by the attributes
-     * in the manifest under the key extensionName is compatible with
-     * the jar file.
-     *
-     * @param extensionName key in the attribute list
-     * @param attr manifest file attributes
-     * @param file installed extension jar file to compare the requested
-     * extension against.
-     */
-    protected boolean checkExtensionAgainst(String extensionName,
-                                            Attributes attr,
-                                            final File file)
-        throws IOException,
-               FileNotFoundException,
-               ExtensionInstallationException
-    {
-
-        debug("Checking extension " + extensionName +
-              " against " + file.getName());
-
-        // Load the jar file ...
-        Manifest man;
-        try {
-            man = AccessController.doPrivileged(
-                new PrivilegedExceptionAction<Manifest>() {
-                    public Manifest run()
-                            throws IOException, FileNotFoundException {
-                         if (!file.exists())
-                             throw new FileNotFoundException(file.getName());
-                         JarFile jarFile =  new JarFile(file);
-                         return jarFile.getManifest();
-                     }
-                 });
-        } catch(PrivilegedActionException e) {
-            if (e.getException() instanceof FileNotFoundException)
-                throw (FileNotFoundException) e.getException();
-            throw (IOException) e.getException();
-        }
-
-        // Construct the extension information object
-        ExtensionInfo reqInfo = new ExtensionInfo(extensionName, attr);
-        debug("Requested Extension : " + reqInfo);
-
-        int isCompatible = ExtensionInfo.INCOMPATIBLE;
-        ExtensionInfo instInfo = null;
-
-        if (man != null) {
-            Attributes instAttr = man.getMainAttributes();
-            if (instAttr != null) {
-                instInfo = new ExtensionInfo(null, instAttr);
-                debug("Extension Installed " + instInfo);
-                isCompatible = instInfo.isCompatibleWith(reqInfo);
-                switch(isCompatible) {
-                case ExtensionInfo.COMPATIBLE:
-                    debug("Extensions are compatible");
-                    return true;
-
-                case ExtensionInfo.INCOMPATIBLE:
-                    debug("Extensions are incompatible");
-                    return false;
-
-                default:
-                    // everything else
-                    debug("Extensions require an upgrade or vendor switch");
-                    return installExtension(reqInfo, instInfo);
-
-                }
-            }
-        }
-        return false;
-    }
-
-    /*
-     * An required extension is missing, if an ExtensionInstallationProvider is
-     * registered, delegate the installation of that particular extension to it.
-     *
-     * @param reqInfo Missing extension information
-     * @param instInfo Older installed version information
-     *
-     * @return true if the installation is successful
-     */
-    protected boolean installExtension(ExtensionInfo reqInfo,
-                                       ExtensionInfo instInfo)
-        throws ExtensionInstallationException
-    {
-        Vector<ExtensionInstallationProvider> currentProviders;
-        synchronized(providers) {
-            @SuppressWarnings("unchecked")
-            Vector<ExtensionInstallationProvider> tmp =
-                (Vector<ExtensionInstallationProvider>) providers.clone();
-            currentProviders = tmp;
-        }
-        for (Enumeration<ExtensionInstallationProvider> e = currentProviders.elements();
-                e.hasMoreElements();) {
-            ExtensionInstallationProvider eip = e.nextElement();
-
-            if (eip!=null) {
-                // delegate the installation to the provider
-                if (eip.installExtension(reqInfo, instInfo)) {
-                    debug(reqInfo.name + " installation successful");
-                    Launcher.ExtClassLoader cl = (Launcher.ExtClassLoader)
-                        Launcher.getLauncher().getClassLoader().getParent();
-                    addNewExtensionsToClassLoader(cl);
-                    return true;
-                }
-            }
-        }
-        // We have tried all of our providers, noone could install this
-        // extension, we just return failure at this point
-        debug(reqInfo.name + " installation failed");
-        return false;
-    }
-
-    /**
-     * Checks if the extension, that is specified in the extension-list in
-     * the applet jar manifest, is already installed (i.e. exists in the
-     * extension directory).
-     *
-     * @param extensionName extension name in the extension-list
-     *
-     * @return the extension if it exists in the extension directory
-     */
-    private File checkExtensionExists(String extensionName) {
-        // Function added to fix bug 4504166
-        final String extName = extensionName;
-        final String[] fileExt = {".jar", ".zip"};
-
-        return AccessController.doPrivileged(
-            new PrivilegedAction<File>() {
-                public File run() {
-                    try {
-                        File fExtension;
-                        File[] dirs = getExtDirs();
-
-                        // Search the extension directories for the extension that is specified
-                        // in the attribute extension-list in the applet jar manifest
-                        for (int i=0;i<dirs.length;i++) {
-                            for (int j=0;j<fileExt.length;j++) {
-                                if (extName.toLowerCase().endsWith(fileExt[j])) {
-                                    fExtension = new File(dirs[i], extName);
-                                } else {
-                                    fExtension = new File(dirs[i], extName+fileExt[j]);
-                                }
-                                debug("checkExtensionExists:fileName " + fExtension.getName());
-                                if (fExtension.exists()) {
-                                    return fExtension;
-                                }
-                            }
-                        }
-                        return null;
-
-                    } catch(Exception e) {
-                         debugException(e);
-                         return null;
-                    }
-                }
-            });
-    }
-
-    /**
-     * @return the java.ext.dirs property as a list of directory
-     */
-    private static File[] getExtDirs() {
-        String s = java.security.AccessController.doPrivileged(
-                new sun.security.action.GetPropertyAction("java.ext.dirs"));
-
-        File[] dirs;
-        if (s != null) {
-            StringTokenizer st =
-                new StringTokenizer(s, File.pathSeparator);
-            int count = st.countTokens();
-            debug("getExtDirs count " + count);
-            dirs = new File[count];
-            for (int i = 0; i < count; i++) {
-                dirs[i] = new File(st.nextToken());
-                debug("getExtDirs dirs["+i+"] "+ dirs[i]);
-            }
-        } else {
-            dirs = new File[0];
-            debug("getExtDirs dirs " + dirs);
-        }
-        debug("getExtDirs dirs.length " + dirs.length);
-        return dirs;
-    }
-
-    /*
-     * Scan the directories and return all files installed in those
-     *
-     * @param dirs list of directories to scan
-     *
-     * @return the list of files installed in all the directories
-     */
-    private static File[] getExtFiles(File[] dirs) throws IOException {
-        Vector<File> urls = new Vector<File>();
-        for (int i = 0; i < dirs.length; i++) {
-            String[] files = dirs[i].list(new JarFilter());
-            if (files != null) {
-                debug("getExtFiles files.length " + files.length);
-                for (int j = 0; j < files.length; j++) {
-                    File f = new File(dirs[i], files[j]);
-                    urls.add(f);
-                    debug("getExtFiles f["+j+"] "+ f);
-                }
-            }
-        }
-        File[] ua = new File[urls.size()];
-        urls.copyInto(ua);
-        debug("getExtFiles ua.length " + ua.length);
-        return ua;
-    }
-
-    /*
-     * @return the list of installed extensions jar files
-     */
-    private File[] getInstalledExtensions() throws IOException {
-        return AccessController.doPrivileged(
-            new PrivilegedAction<File[]>() {
-                public File[] run() {
-                     try {
-                         return getExtFiles(getExtDirs());
-                     } catch(IOException e) {
-                         debug("Cannot get list of installed extensions");
-                         debugException(e);
-                        return new File[0];
-                     }
-                 }
-            });
-    }
-
-    /*
-     * Add the newly installed jar file to the extension class loader.
-     *
-     * @param cl the current installed extension class loader
-     *
-     * @return true if successful
-     */
-    private Boolean addNewExtensionsToClassLoader(Launcher.ExtClassLoader cl) {
-        try {
-            File[] installedExts = getInstalledExtensions();
-            for (int i=0;i<installedExts.length;i++) {
-                final File instFile = installedExts[i];
-                URL instURL = AccessController.doPrivileged(
-                    new PrivilegedAction<URL>() {
-                        public URL run() {
-                            try {
-                                return ParseUtil.fileToEncodedURL(instFile);
-                            } catch (MalformedURLException e) {
-                                debugException(e);
-                                return null;
-                            }
-                        }
-                    });
-                if (instURL != null) {
-                    URL[] urls = cl.getURLs();
-                    boolean found=false;
-                    for (int j = 0; j<urls.length; j++) {
-                        debug("URL["+j+"] is " + urls[j] + " looking for "+
-                                           instURL);
-                        if (urls[j].toString().compareToIgnoreCase(
-                                    instURL.toString())==0) {
-                            found=true;
-                            debug("Found !");
-                        }
-                    }
-                    if (!found) {
-                        debug("Not Found ! adding to the classloader " +
-                              instURL);
-                        cl.addExtURL(instURL);
-                    }
-                }
-            }
-        } catch (MalformedURLException e) {
-            e.printStackTrace();
-        } catch (IOException e) {
-            e.printStackTrace();
-            // let's continue with the next installed extension
-        }
-        return Boolean.TRUE;
-    }
-
-    // True to display all debug and trace messages
-    static final boolean DEBUG = false;
-
-    private static void debug(String s) {
-        if (DEBUG) {
-            System.err.println(s);
-        }
-    }
-
-    private void debugException(Throwable e) {
-        if (DEBUG) {
-            e.printStackTrace();
-        }
-    }
-
-}
--- a/jdk/src/java.base/share/classes/sun/misc/ExtensionInfo.java	Thu Jun 11 10:44:14 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,407 +0,0 @@
-/*
- * Copyright (c) 1999, 2004, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code 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 General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.misc;
-
-import java.util.StringTokenizer;
-import java.util.jar.Attributes;
-import java.util.jar.Attributes.Name;
-import java.util.ResourceBundle;
-import java.util.MissingResourceException;
-import java.text.MessageFormat;
-import java.lang.Character.*;
-
-
-/**
- * This class holds all necessary information to install or
- * upgrade a extension on the user's disk
- *
- * @deprecated this class will be removed in a future release.
- * @author  Jerome Dochez
- */
-@Deprecated
-public class ExtensionInfo {
-
-    /**
-     * public static values returned by the isCompatible method
-     */
-    public static final int COMPATIBLE = 0;
-    public static final int REQUIRE_SPECIFICATION_UPGRADE = 1;
-    public static final int REQUIRE_IMPLEMENTATION_UPGRADE = 2;
-    public static final int REQUIRE_VENDOR_SWITCH = 3;
-    public static final int INCOMPATIBLE = 4;
-
-    /**
-     * attributes fully describer an extension. The underlying described
-     * extension may be installed and requested.
-     */
-    public String title;
-    public String name;
-    public String specVersion;
-    public String specVendor;
-    public String implementationVersion;
-    public String vendor;
-    public String vendorId;
-    public String url;
-
-    // For I18N support
-    private static final ResourceBundle rb =
-        ResourceBundle.getBundle("sun.misc.resources.Messages");
-
-
-    /**
-     * Create a new uninitialized extension information object
-     */
-    public ExtensionInfo() {
-    }
-
-    /**
-     * Create and initialize an extension information object.
-     * The initialization uses the attributes passed as being
-     * the content of a manifest file to load the extension
-     * information from.
-     * Since manifest file may contain information on several
-     * extension they may depend on, the extension key parameter
-     * is prepanded to the attribute name to make the key used
-     * to retrieve the attribute from the manifest file
-     *
-     * @param extensionKey unique extension key in the manifest
-     * @param attr Attributes of a manifest file
-     */
-    public ExtensionInfo(String extensionKey, Attributes attr)
-        throws NullPointerException
-    {
-        String s;
-        if (extensionKey!=null) {
-            s = extensionKey + "-";
-        } else {
-            s ="";
-        }
-
-        String attrKey = s + Name.EXTENSION_NAME.toString();
-        name = attr.getValue(attrKey);
-        if (name != null)
-            name = name.trim();
-
-        attrKey = s + Name.SPECIFICATION_TITLE.toString();
-        title = attr.getValue(attrKey);
-        if (title != null)
-            title = title.trim();
-
-        attrKey = s + Name.SPECIFICATION_VERSION.toString();
-        specVersion = attr.getValue(attrKey);
-        if (specVersion != null)
-            specVersion = specVersion.trim();
-
-        attrKey = s + Name.SPECIFICATION_VENDOR.toString();
-        specVendor = attr.getValue(attrKey);
-        if (specVendor != null)
-            specVendor = specVendor.trim();
-
-        attrKey = s + Name.IMPLEMENTATION_VERSION.toString();
-        implementationVersion = attr.getValue(attrKey);
-        if (implementationVersion != null)
-            implementationVersion = implementationVersion.trim();
-
-        attrKey = s + Name.IMPLEMENTATION_VENDOR.toString();
-        vendor = attr.getValue(attrKey);
-        if (vendor != null)
-            vendor = vendor.trim();
-
-        attrKey = s + Name.IMPLEMENTATION_VENDOR_ID.toString();
-        vendorId = attr.getValue(attrKey);
-        if (vendorId != null)
-            vendorId = vendorId.trim();
-
-        attrKey =s + Name.IMPLEMENTATION_URL.toString();
-        url = attr.getValue(attrKey);
-        if (url != null)
-            url = url.trim();
-    }
-
-    /**
-     * @return true if the extension described by this extension information
-     * is compatible with the extension described by the extension
-     * information passed as a parameter
-     *
-     * @param ei the requested extension information to compare to
-     */
-    public int isCompatibleWith(ExtensionInfo ei) {
-
-        if (name == null || ei.name == null)
-            return INCOMPATIBLE;
-        if (name.compareTo(ei.name)==0) {
-            // is this true, if not spec version is specified, we consider
-            // the value as being "any".
-            if (specVersion == null || ei.specVersion == null)
-                return COMPATIBLE;
-
-            int version = compareExtensionVersion(specVersion, ei.specVersion);
-            if (version<0) {
-                // this extension specification is "older"
-                if (vendorId != null && ei.vendorId !=null) {
-                    if (vendorId.compareTo(ei.vendorId)!=0) {
-                        return REQUIRE_VENDOR_SWITCH;
-                    }
-                }
-                return REQUIRE_SPECIFICATION_UPGRADE;
-            } else {
-                // the extension spec is compatible, let's look at the
-                // implementation attributes
-                if (vendorId != null && ei.vendorId != null) {
-                    // They care who provides the extension
-                    if (vendorId.compareTo(ei.vendorId)!=0) {
-                        // They want to use another vendor implementation
-                        return REQUIRE_VENDOR_SWITCH;
-                    } else {
-                        // Vendor matches, let's see the implementation version
-                        if (implementationVersion != null && ei.implementationVersion != null) {
-                            // they care about the implementation version
-                            version = compareExtensionVersion(implementationVersion, ei.implementationVersion);
-                            if (version<0) {
-                                // This extension is an older implementation
-                                return REQUIRE_IMPLEMENTATION_UPGRADE;
-                            }
-                        }
-                    }
-                }
-                // All othe cases, we consider the extensions to be compatible
-                return COMPATIBLE;
-            }
-        }
-        return INCOMPATIBLE;
-    }
-
-    /**
-     * helper method to print sensible information on the undelying described
-     * extension
-     */
-    public String toString() {
-        return "Extension : title(" + title + "), name(" + name + "), spec vendor(" +
-            specVendor + "), spec version(" + specVersion + "), impl vendor(" +
-            vendor + "), impl vendor id(" + vendorId + "), impl version(" +
-            implementationVersion + "), impl url(" + url + ")";
-    }
-
-    /*
-     * helper method to compare two versions.
-     * version are in the x.y.z.t pattern.
-     *
-     * @param source version to compare to
-     * @param target version used to compare against
-     * @return <pre>{@code
-     *   < 0 if source < version
-     *   > 0 if source > version
-     *   = 0 if source = version}</pre>
-     */
-    private int compareExtensionVersion(String source, String target)
-        throws NumberFormatException
-    {
-        source = source.toLowerCase();
-        target = target.toLowerCase();
-
-        return strictCompareExtensionVersion(source, target);
-    }
-
-
-    /*
-     * helper method to compare two versions.
-     * version are in the x.y.z.t pattern.
-     *
-     * @param source version to compare to
-     * @param target version used to compare against
-     * @return <pre>{@code
-     *   < 0 if source < version
-     *   > 0 if source > version
-     *   = 0 if source = version}</pre>
-     */
-    private int strictCompareExtensionVersion(String source, String target)
-        throws NumberFormatException
-    {
-        if (source.equals(target))
-            return 0;
-
-        StringTokenizer stk = new StringTokenizer(source, ".,");
-        StringTokenizer ttk = new StringTokenizer(target, ".,");
-
-        // Compare number
-        int n = 0, m = 0, result = 0;
-
-        // Convert token into meaning number for comparision
-        if (stk.hasMoreTokens())
-            n = convertToken(stk.nextToken().toString());
-
-        // Convert token into meaning number for comparision
-        if (ttk.hasMoreTokens())
-            m = convertToken(ttk.nextToken().toString());
-
-        if (n > m)
-            return 1;
-        else if (m > n)
-            return -1;
-        else
-        {
-            // Look for index of "." in the string
-            int sIdx = source.indexOf('.');
-            int tIdx = target.indexOf('.');
-
-            if (sIdx == -1)
-                sIdx = source.length() - 1;
-
-            if (tIdx == -1)
-                tIdx = target.length() - 1;
-
-            return strictCompareExtensionVersion(source.substring(sIdx + 1),
-                                                 target.substring(tIdx + 1));
-        }
-    }
-
-    private int convertToken(String token)
-    {
-        if (token == null || token.equals(""))
-            return 0;
-
-        int charValue = 0;
-        int charVersion = 0;
-        int patchVersion = 0;
-        int strLength = token.length();
-        int endIndex = strLength;
-        char lastChar;
-
-        Object[] args = {name};
-        MessageFormat mf = new MessageFormat(rb.getString("optpkg.versionerror"));
-        String versionError = mf.format(args);
-
-        // Look for "-" for pre-release
-        int prIndex = token.indexOf('-');
-
-        // Look for "_" for patch release
-        int patchIndex = token.indexOf('_');
-
-        if (prIndex == -1 && patchIndex == -1)
-        {
-            // This is a FCS release
-            try {
-                return Integer.parseInt(token) * 100;
-            } catch (NumberFormatException e) {
-                System.out.println(versionError);
-                return 0;
-            }
-        }
-        else if (patchIndex != -1)
-        {
-            // This is a patch (update) release
-            int prversion;
-            try {
-                // Obtain the version
-                prversion = Integer.parseInt(token.substring(0, patchIndex));
-
-                // Check to see if the patch version is in the n.n.n_nnl format (special release)
-                lastChar = token.charAt(strLength-1);
-                if (Character.isLetter(lastChar)) {
-                    // letters a-z have values from 10-35
-                    charValue = Character.getNumericValue(lastChar);
-                    endIndex = strLength-1;
-
-                    // Obtain the patch version id
-                    patchVersion = Integer.parseInt(token.substring(patchIndex+1, endIndex));
-
-                    if (charValue >= Character.getNumericValue('a') && charValue <= Character.getNumericValue('z')) {
-                        // This is a special release
-                        charVersion = (patchVersion * 100) + charValue;
-                    } else {
-                        // character is not a a-z letter, ignore
-                        charVersion = 0;
-                        System.out.println(versionError);
-                    }
-                } else {
-                    // This is a regular update release. Obtain the patch version id
-                    patchVersion = Integer.parseInt(token.substring(patchIndex+1, endIndex));
-                }
-            } catch (NumberFormatException e) {
-                System.out.println(versionError);
-                return 0;
-            }
-            return prversion * 100 + (patchVersion + charVersion);
-        }
-        else
-        {
-            //This is a milestone release, either a early access, alpha, beta, or RC
-
-            // Obtain the version
-            int mrversion;
-            try {
-                mrversion = Integer.parseInt(token.substring(0, prIndex));
-            } catch (NumberFormatException e) {
-                System.out.println(versionError);
-                return 0;
-            }
-
-            // Obtain the patch version string, including the milestone + version
-            String prString = token.substring(prIndex + 1);
-
-            // Milestone version
-            String msVersion = "";
-            int delta = 0;
-
-            if (prString.indexOf("ea") != -1)
-            {
-                msVersion = prString.substring(2);
-                delta = 50;
-            }
-            else if (prString.indexOf("alpha") != -1)
-            {
-                msVersion = prString.substring(5);
-                delta = 40;
-            }
-            else if (prString.indexOf("beta") != -1)
-            {
-                msVersion = prString.substring(4);
-                delta = 30;
-            }
-            else if (prString.indexOf("rc") != -1)
-            {
-                msVersion = prString.substring(2);
-                delta = 20;
-            }
-
-            if (msVersion == null || msVersion.equals(""))
-            {
-                // No version after the milestone, assume 0
-                return mrversion * 100 - delta ;
-            }
-            else
-            {
-                // Convert the milestone version
-                try {
-                    return mrversion * 100 - delta + Integer.parseInt(msVersion);
-                } catch (NumberFormatException e) {
-                    System.out.println(versionError);
-                    return 0;
-                }
-            }
-        }
-    }
-}
--- a/jdk/src/java.base/share/classes/sun/misc/ExtensionInstallationException.java	Thu Jun 11 10:44:14 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code 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 General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.misc;
-
-/*
- * Exception when installation of an extension has failed for
- * any reason
- *
- * @deprecated this class will be removed in a future release.
- * @author  Jerome Dochez
- */
-@Deprecated
-public class ExtensionInstallationException extends Exception {
-
-    static final long serialVersionUID = 3139688306909345924L;
-
-    /*
-     * <p>
-     * Construct a new exception with an exception reason
-     * </p>
-     */
-    public ExtensionInstallationException(String s) {
-        super(s);
-    }
-}
--- a/jdk/src/java.base/share/classes/sun/misc/ExtensionInstallationProvider.java	Thu Jun 11 10:44:14 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,56 +0,0 @@
-/*
- * Copyright (c) 1999, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code 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 General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.misc;
-
-/**
- * This interface defines the contract a extension installation capable
- * provided to the extension installation dependency mechanism to
- * install new extensions on the user's disk
- *
- * @deprecated this class will be removed in a future release.
- * @author  Jerome Dochez
- */
-@Deprecated
-public interface ExtensionInstallationProvider {
-
-    /*
-     * <p>
-     * Request the installation of an extension in the extension directory
-     * </p>
-     *
-     * @param requestExtInfo information on the extension that need to be
-     * installed
-     * @param installedExtInfo information on the current compatible installed
-     * extension. Can be null if no current installation has been found.
-     * @return true if the installation is successful, false if the
-     * installation could not be attempted.
-     * @exception ExtensionInstallationException if an installation was
-     * attempted but did not succeed.
-     */
-    boolean installExtension(ExtensionInfo requestExtInfo,
-                             ExtensionInfo installedExtInfo)
-        throws ExtensionInstallationException;
-}
--- a/jdk/src/java.base/share/classes/sun/net/TelnetInputStream.java	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/src/java.base/share/classes/sun/net/TelnetInputStream.java	Thu Jun 11 20:18:55 2015 -0700
@@ -31,7 +31,7 @@
  * This class provides input and output streams for telnet clients.
  * This class overrides read to do CRLF processing as specified in
  * RFC 854. The class assumes it is running on a system where lines
- * are terminated with a single newline <LF> character.
+ * are terminated with a single newline {@literal <LF>} character.
  *
  * This is the relevant section of RFC 824 regarding CRLF processing:
  *
--- a/jdk/src/java.base/share/classes/sun/net/TelnetOutputStream.java	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/src/java.base/share/classes/sun/net/TelnetOutputStream.java	Thu Jun 11 20:18:55 2015 -0700
@@ -31,7 +31,7 @@
  * This class provides input and output streams for telnet clients.
  * This class overrides write to do CRLF processing as specified in
  * RFC 854. The class assumes it is running on a system where lines
- * are terminated with a single newline <LF> character.
+ * are terminated with a single newline {@literal <LF>} character.
  *
  * This is the relevant section of RFC 824 regarding CRLF processing:
  *
--- a/jdk/src/java.base/share/classes/sun/net/URLCanonicalizer.java	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/src/java.base/share/classes/sun/net/URLCanonicalizer.java	Thu Jun 11 20:18:55 2015 -0700
@@ -28,10 +28,12 @@
 /**
  * Helper class to map URL "abbreviations" to real URLs.
  * The default implementation supports the following mappings:
+ * <pre>{@code
  *   ftp.mumble.bar/... => ftp://ftp.mumble.bar/...
  *   gopher.mumble.bar/... => gopher://gopher.mumble.bar/...
  *   other.name.dom/... => http://other.name.dom/...
  *   /foo/... => file:/foo/...
+ * }</pre>
  *
  * Full URLs (those including a protocol name) are passed through unchanged.
  *
--- a/jdk/src/java.base/share/classes/sun/net/ftp/impl/FtpClient.java	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/src/java.base/share/classes/sun/net/ftp/impl/FtpClient.java	Thu Jun 11 20:18:55 2015 -0700
@@ -1211,7 +1211,7 @@
      * The <code>OutputStream</code> is not closed by this method at the end
      * of the transfer.
      *
-     * @param name a <code>String<code> containing the name of the file to
+     * @param name a {@code String} containing the name of the file to
      *        retreive from the server.
      * @param local the <code>OutputStream</code> the file should be written to.
      * @throws IOException if the transfer fails.
--- a/jdk/src/java.base/share/classes/sun/net/www/MessageHeader.java	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/src/java.base/share/classes/sun/net/www/MessageHeader.java	Thu Jun 11 20:18:55 2015 -0700
@@ -411,7 +411,7 @@
     }
 
     /** Convert a message-id string to canonical form (strips off
-        leading and trailing <>s) */
+        leading and trailing {@literal <>s}) */
     public static String canonicalID(String id) {
         if (id == null)
             return "";
--- a/jdk/src/java.base/share/classes/sun/net/www/http/HttpClient.java	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/src/java.base/share/classes/sun/net/www/http/HttpClient.java	Thu Jun 11 20:18:55 2015 -0700
@@ -625,7 +625,7 @@
     }
 
     /** Parse the first line of the HTTP request.  It usually looks
-        something like: "HTTP/1.0 <number> comment\r\n". */
+        something like: {@literal "HTTP/1.0 <number> comment\r\n"}. */
 
     public boolean parseHTTP(MessageHeader responses, ProgressSource pi, HttpURLConnection httpuc)
     throws IOException {
--- a/jdk/src/java.base/share/classes/sun/net/www/protocol/ftp/FtpURLConnection.java	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/src/java.base/share/classes/sun/net/www/protocol/ftp/FtpURLConnection.java	Thu Jun 11 20:18:55 2015 -0700
@@ -68,13 +68,14 @@
  * <LI>Disconnect</LI>
  * </UL>
  * You should not have to use it directly in most cases because all will be handled
- * in a abstract layer. Here is an example of how to use the class :
- * <P>
- * <code>URL url = new URL("ftp://ftp.sun.com/pub/test.txt");<p>
- * UrlConnection con = url.openConnection();<p>
- * InputStream is = con.getInputStream();<p>
- * ...<p>
- * is.close();</code>
+ * in a abstract layer. Here is an example of how to use the class:
+ * <pre>{@code
+ * URL url = new URL("ftp://ftp.sun.com/pub/test.txt");
+ * UrlConnection con = url.openConnection();
+ * InputStream is = con.getInputStream();
+ * ...
+ * is.close();
+ * }</pre>
  *
  * @see sun.net.ftp.FtpClient
  */
@@ -158,7 +159,7 @@
     /**
      * Creates an FtpURLConnection from a URL.
      *
-     * @param   url     The <code>URL</code> to retrieve or store.
+     * @param   url     The {@code URL} to retrieve or store.
      */
     public FtpURLConnection(URL url) {
         this(url, null);
@@ -382,7 +383,7 @@
      * Get the InputStream to retreive the remote file. It will issue the
      * "get" (or "dir") command to the ftp server.
      *
-     * @return  the <code>InputStream</code> to the connection.
+     * @return  the {@code InputStream} to the connection.
      *
      * @throws  IOException if already opened for output
      * @throws  FtpProtocolException if errors occur during the transfert.
@@ -495,7 +496,7 @@
      * Get the OutputStream to store the remote file. It will issue the
      * "put" command to the ftp server.
      *
-     * @return  the <code>OutputStream</code> to the connection.
+     * @return  the {@code OutputStream} to the connection.
      *
      * @throws  IOException if already opened for input or the URL
      *          points to a directory
@@ -548,9 +549,9 @@
     }
 
     /**
-     * Gets the <code>Permission</code> associated with the host & port.
+     * Gets the {@code Permission} associated with the host and port.
      *
-     * @return  The <code>Permission</code> object.
+     * @return  The {@code Permission} object.
      */
     @Override
     public Permission getPermission() {
@@ -568,7 +569,7 @@
      * exists, overwrite its value with the new value.
      *
      * @param   key     the keyword by which the request is known
-     *                  (e.g., "<code>accept</code>").
+     *                  (e.g., "{@code accept}").
      * @param   value   the value associated with it.
      * @throws IllegalStateException if already connected
      * @see #getRequestProperty(java.lang.String)
--- a/jdk/src/java.base/share/classes/sun/net/www/protocol/http/HttpAuthenticator.java	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/src/java.base/share/classes/sun/net/www/protocol/http/HttpAuthenticator.java	Thu Jun 11 20:18:55 2015 -0700
@@ -59,6 +59,7 @@
      * supplied or could be found.
      * <P>
      * Example:
+     * <pre>{@code
      * --> GET http://www.authorization-required.com/ HTTP/1.0
      * <-- HTTP/1.0 403 Unauthorized
      * <-- WWW-Authenticate: Basic realm="WallyWorld"
@@ -67,8 +68,9 @@
      *   return "QWadhgWERghghWERfdfQ=="
      * --> GET http://www.authorization-required.com/ HTTP/1.0
      * --> Authorization: Basic QWadhgWERghghWERfdfQ==
-     * <-- HTTP/1.0 200 OK
+     * <-- HTTP/1.0 200 OK}
      * <B> YAY!!!</B>
+     * </pre>
      */
 
     public String authString (URL u, String scheme, String realm);
--- a/jdk/src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java	Thu Jun 11 20:18:55 2015 -0700
@@ -1954,7 +1954,7 @@
     /**
      * Set the tunneling status.
      *
-     * @param  the state
+     * @param tunnelState the state
      */
     public void setTunnelState(TunnelState tunnelState) {
         this.tunnelState = tunnelState;
--- a/jdk/src/java.base/share/classes/sun/net/www/protocol/jar/JarURLConnection.java	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/src/java.base/share/classes/sun/net/www/protocol/jar/JarURLConnection.java	Thu Jun 11 20:18:55 2015 -0700
@@ -338,7 +338,7 @@
      * Sets the value of the <code>ifModifiedSince</code> field of
      * this <code>URLConnection</code> to the specified value.
      *
-     * @param   value   the new value.
+     * @param   ifmodifiedsince   the new value.
      * @see     java.net.URLConnection#ifModifiedSince
      */
     public void setIfModifiedSince(long ifmodifiedsince) {
--- a/jdk/src/java.base/share/classes/sun/reflect/annotation/AnnotationParser.java	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/src/java.base/share/classes/sun/reflect/annotation/AnnotationParser.java	Thu Jun 11 20:18:55 2015 -0700
@@ -295,7 +295,7 @@
 
     /**
      * Returns an annotation of the given type backed by the given
-     * member -> value map.
+     * member {@literal ->} value map.
      */
     public static Annotation annotationForMap(final Class<? extends Annotation> type,
                                               final Map<String, Object> memberValues)
--- a/jdk/src/java.base/share/classes/sun/reflect/annotation/AnnotationType.java	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/src/java.base/share/classes/sun/reflect/annotation/AnnotationType.java	Thu Jun 11 20:18:55 2015 -0700
@@ -73,8 +73,8 @@
     /**
      * Returns an AnnotationType instance for the specified annotation type.
      *
-     * @throw IllegalArgumentException if the specified class object for
-     *     does not represent a valid annotation type
+     * @throws IllegalArgumentException if the specified class object
+     *         does not represent a valid annotation type
      */
     public static AnnotationType getInstance(
         Class<? extends Annotation> annotationClass)
@@ -183,7 +183,7 @@
 
     /**
      * Returns member types for this annotation type
-     * (member name -> type mapping).
+     * (member name {@literal ->} type mapping).
      */
     public Map<String, Class<?>> memberTypes() {
         return memberTypes;
@@ -191,7 +191,7 @@
 
     /**
      * Returns members of this annotation type
-     * (member name -> associated Method object mapping).
+     * (member name {@literal ->} associated Method object mapping).
      */
     public Map<String, Method> members() {
         return members;
@@ -199,7 +199,7 @@
 
     /**
      * Returns the default values for this annotation type
-     * (Member name -> default value mapping).
+     * (Member name {@literal ->} default value mapping).
      */
     public Map<String, Object> memberDefaults() {
         return memberDefaults;
--- a/jdk/src/java.base/share/classes/sun/reflect/annotation/TypeAnnotationParser.java	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/src/java.base/share/classes/sun/reflect/annotation/TypeAnnotationParser.java	Thu Jun 11 20:18:55 2015 -0700
@@ -199,7 +199,7 @@
      * Regular Annotations on TypeVariables are stored in the type
      * annotation byte[] in the class file.
      *
-     * @param genericsDecl the declaration declaring the type variable
+     * @param genericDecl the declaration declaring the type variable
      * @param typeVarIndex the 0-based index of this type variable in the declaration
      */
     public static <D extends GenericDeclaration> Annotation[] parseTypeVariableAnnotations(D genericDecl,
--- a/jdk/src/java.base/share/classes/sun/reflect/generics/reflectiveObjects/ParameterizedTypeImpl.java	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/src/java.base/share/classes/sun/reflect/generics/reflectiveObjects/ParameterizedTypeImpl.java	Thu Jun 11 20:18:55 2015 -0700
@@ -73,17 +73,17 @@
      * <p> This method throws a MalformedParameterizedTypeException
      * under the following circumstances:
      * If the number of actual type arguments (i.e., the size of the
-     * array <tt>typeArgs</tt>) does not correspond to the number of
+     * array {@code typeArgs}) does not correspond to the number of
      * formal type arguments.
      * If any of the actual type arguments is not an instance of the
      * bounds on the corresponding formal.
      * @param rawType the Class representing the generic type declaration being
      * instantiated
-     * @param actualTypeArguments - a (possibly empty) array of types
+     * @param actualTypeArguments a (possibly empty) array of types
      * representing the actual type arguments to the parameterized type
-     * @param ownerType - the enclosing type, if known.
-     * @return An instance of <tt>ParameterizedType</tt>
-     * @throws MalformedParameterizedTypeException - if the instantiation
+     * @param ownerType the enclosing type, if known.
+     * @return An instance of {@code ParameterizedType}
+     * @throws MalformedParameterizedTypeException if the instantiation
      * is invalid
      */
     public static ParameterizedTypeImpl make(Class<?> rawType,
@@ -95,18 +95,18 @@
 
 
     /**
-     * Returns an array of <tt>Type</tt> objects representing the actual type
+     * Returns an array of {@code Type} objects representing the actual type
      * arguments to this type.
      *
      * <p>Note that in some cases, the returned array be empty. This can occur
      * if this type represents a non-parameterized type nested within
      * a parameterized type.
      *
-     * @return an array of <tt>Type</tt> objects representing the actual type
+     * @return an array of {@code Type} objects representing the actual type
      *     arguments to this type
-     * @throws <tt>TypeNotPresentException</tt> if any of the
+     * @throws TypeNotPresentException if any of the
      *     actual type arguments refers to a non-existent type declaration
-     * @throws <tt>MalformedParameterizedTypeException</tt> if any of the
+     * @throws MalformedParameterizedTypeException if any of the
      *     actual type parameters refer to a parameterized type that cannot
      *     be instantiated for any reason
      * @since 1.5
@@ -116,10 +116,10 @@
     }
 
     /**
-     * Returns the <tt>Type</tt> object representing the class or interface
+     * Returns the {@code Type} object representing the class or interface
      * that declared this type.
      *
-     * @return the <tt>Type</tt> object representing the class or interface
+     * @return the {@code Type} object representing the class or interface
      *     that declared this type
      */
     public Class<?> getRawType() {
@@ -128,18 +128,18 @@
 
 
     /**
-     * Returns a <tt>Type</tt> object representing the type that this type
-     * is a member of.  For example, if this type is <tt>O<T>.I<S></tt>,
-     * return a representation of <tt>O<T></tt>.
+     * Returns a {@code Type} object representing the type that this type
+     * is a member of.  For example, if this type is {@code O<T>.I<S>},
+     * return a representation of {@code O<T>}.
      *
-     * <p>If this type is a top-level type, <tt>null</tt> is returned.
+     * <p>If this type is a top-level type, {@code null} is returned.
      *
-     * @return a <tt>Type</tt> object representing the type that
+     * @return a {@code Type} object representing the type that
      *     this type is a member of. If this type is a top-level type,
-     *     <tt>null</tt> is returned
-     * @throws <tt>TypeNotPresentException</tt> if the owner type
+     *     {@code null} is returned
+     * @throws TypeNotPresentException if the owner type
      *     refers to a non-existent type declaration
-     * @throws <tt>MalformedParameterizedTypeException</tt> if the owner type
+     * @throws MalformedParameterizedTypeException if the owner type
      *     refers to a parameterized type that cannot be instantiated
      *     for any reason
      *
--- a/jdk/src/java.base/share/classes/sun/reflect/generics/scope/ConstructorScope.java	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/src/java.base/share/classes/sun/reflect/generics/scope/ConstructorScope.java	Thu Jun 11 20:18:55 2015 -0700
@@ -56,9 +56,9 @@
     }
 
     /**
-     * Factory method. Takes a <tt>Constructor</tt> object and creates a
+     * Factory method. Takes a {@code Constructor} object and creates a
      * scope for it.
-     * @param m - A Constructor whose scope we want to obtain
+     * @param c - A Constructor whose scope we want to obtain
      * @return The type-variable scope for the constructor m
      */
     public static ConstructorScope make(Constructor<?> c) {
--- a/jdk/src/java.base/share/classes/sun/security/ssl/SignatureAndHashAlgorithm.java	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/src/java.base/share/classes/sun/security/ssl/SignatureAndHashAlgorithm.java	Thu Jun 11 20:18:55 2015 -0700
@@ -28,6 +28,7 @@
 import java.security.AlgorithmConstraints;
 import java.security.CryptoPrimitive;
 import java.security.PrivateKey;
+import java.security.Security;
 
 import java.util.Set;
 import java.util.HashSet;
@@ -415,10 +416,12 @@
                     "SHA1withRSA",          --p);
             supports(HashAlgorithm.SHA1,        SignatureAlgorithm.ECDSA,
                     "SHA1withECDSA",        --p);
+            if (Security.getProvider("SunMSCAPI") == null) {
             supports(HashAlgorithm.SHA224,      SignatureAlgorithm.RSA,
                     "SHA224withRSA",        --p);
             supports(HashAlgorithm.SHA224,      SignatureAlgorithm.ECDSA,
                     "SHA224withECDSA",      --p);
+            }
             supports(HashAlgorithm.SHA256,      SignatureAlgorithm.RSA,
                     "SHA256withRSA",        --p);
             supports(HashAlgorithm.SHA256,      SignatureAlgorithm.ECDSA,
--- a/jdk/src/java.base/share/classes/sun/text/resources/en/FormatData_en_SG.java	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/src/java.base/share/classes/sun/text/resources/en/FormatData_en_SG.java	Thu Jun 11 20:18:55 2015 -0700
@@ -88,6 +88,14 @@
                     "NaN",
                 }
             },
+            { "DatePatterns",
+                new String[] {
+                    "EEEE, d MMMM, yyyy", // full date pattern
+                    "d MMMM, yyyy",       // long date pattern
+                    "d MMM, yyyy",        // medium date pattern
+                    "d/M/yy",             // short date pattern
+                }
+            },
         };
     }
 }
--- a/jdk/src/java.base/share/classes/sun/util/PreHashedMap.java	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/src/java.base/share/classes/sun/util/PreHashedMap.java	Thu Jun 11 20:18:55 2015 -0700
@@ -121,8 +121,7 @@
      * <p> This method must construct the map's hash chains and store them into
      * the appropriate elements of the given hash-table row array.
      *
-     * @param rows
-     *        The row array to be initialized
+     * @param ht The row array to be initialized
      */
     protected abstract void init(Object[] ht);
 
--- a/jdk/src/java.base/share/classes/sun/util/calendar/BaseCalendar.java	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/src/java.base/share/classes/sun/util/calendar/BaseCalendar.java	Thu Jun 11 20:18:55 2015 -0700
@@ -28,7 +28,7 @@
 import java.util.TimeZone;
 
 /**
- * The <code>BaseCalendar</code> provides basic calendar calculation
+ * The {@code BaseCalendar} provides basic calendar calculation
  * functions to support the Julian, Gregorian, and Gregorian-based
  * calendar systems.
  *
@@ -290,11 +290,11 @@
     /**
      * Returns 366 if the specified date is in a leap year, or 365
      * otherwise This method does not perform the normalization with
-     * the specified <code>CalendarDate</code>. The
-     * <code>CalendarDate</code> must be normalized to get a correct
+     * the specified {@code CalendarDate}. The
+     * {@code CalendarDate} must be normalized to get a correct
      * value.
      *
-     * @param a <code>CalendarDate</code>
+     * @param date a {@code CalendarDate}
      * @return a year length in days
      * @throws ClassCastException if the specified date is not a
      * {@link BaseCalendar.Date}
@@ -412,7 +412,7 @@
 
     /**
      * Calculates calendar fields and store them in the specified
-     * <code>CalendarDate</code>.
+     * {@code CalendarDate}.
      */
     // should be 'protected'
     public void getCalendarDateFromFixedDate(CalendarDate date,
--- a/jdk/src/java.base/share/classes/sun/util/calendar/CalendarUtils.java	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/src/java.base/share/classes/sun/util/calendar/CalendarUtils.java	Thu Jun 11 20:18:55 2015 -0700
@@ -94,7 +94,7 @@
      * <code>0</code> and <code>-1%4</code> is <code>-1</code>.
      *
      * @param n the numerator
-     * @param d a divisor which must be > 0
+     * @param d a divisor which must be {@literal > 0}
      * @param r an array of at least one element in which the value
      * <code>mod(n, d)</code> is returned.
      * @return the floor of the quotient.
@@ -117,7 +117,7 @@
      * <code>0</code> and <code>-1%4</code> is <code>-1</code>.
      *
      * @param n the numerator
-     * @param d a divisor which must be > 0
+     * @param d a divisor which must be {@literal > 0}
      * @param r an array of at least one element in which the value
      * <code>mod(n, d)</code> is returned.
      * @return the floor of the quotient.
--- a/jdk/src/java.base/share/classes/sun/util/calendar/ZoneInfo.java	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/src/java.base/share/classes/sun/util/calendar/ZoneInfo.java	Thu Jun 11 20:18:55 2015 -0700
@@ -364,7 +364,7 @@
      *                  0 for January.
      * @param day       The day-in-month of the given date.
      * @param dayOfWeek The day-of-week of the given date.
-     * @param millis    The milliseconds in day in <em>standard</em> local time.
+     * @param milliseconds The milliseconds in day in <em>standard</em> local time.
      * @return The milliseconds to add to UTC to get local time.
      */
     public int getOffset(int era, int year, int month, int day,
--- a/jdk/src/java.base/share/classes/sun/util/locale/provider/LocaleNameProviderImpl.java	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/src/java.base/share/classes/sun/util/locale/provider/LocaleNameProviderImpl.java	Thu Jun 11 20:18:55 2015 -0700
@@ -72,7 +72,7 @@
      * If the name returned cannot be localized according to <code>locale</code>,
      * (say, the provider does not have a Japanese name for Croatian),
      * this method returns null.
-     * @param languageCode the ISO 639 language code string in the form of two
+     * @param lang the ISO 639 language code string in the form of two
      *     lower-case letters between 'a' (U+0061) and 'z' (U+007A)
      * @param locale the desired locale
      * @return the name of the given language code for the specified locale, or null if it's not
@@ -129,7 +129,7 @@
      * If the name returned cannot be localized according to <code>locale</code>,
      * (say, the provider does not have a Japanese name for Croatia),
      * this method returns null.
-     * @param countryCode the ISO 3166 country code string in the form of two
+     * @param ctry the ISO 3166 country code string in the form of two
      *     upper-case letters between 'A' (U+0041) and 'Z' (U+005A)
      * @param locale the desired locale
      * @return the name of the given country code for the specified locale, or null if it's not
@@ -152,7 +152,7 @@
      * is appropriate for display to the user.
      * If the name returned cannot be localized according to <code>locale</code>,
      * this method returns null.
-     * @param variant the variant string
+     * @param vrnt the variant string
      * @param locale the desired locale
      * @return the name of the given variant string for the specified locale, or null if it's not
      *     available.
--- a/jdk/src/java.base/share/classes/sun/util/locale/provider/TimeZoneNameProviderImpl.java	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/src/java.base/share/classes/sun/util/locale/provider/TimeZoneNameProviderImpl.java	Thu Jun 11 20:18:55 2015 -0700
@@ -79,7 +79,7 @@
      * appropriate for daylight saving time even if the specified time zone
      * has not observed daylight saving time in the past.
      *
-     * @param ID a time zone ID string
+     * @param id a time zone ID string
      * @param daylight if true, return the daylight saving name.
      * @param style either {@link java.util.TimeZone#LONG TimeZone.LONG} or
      *    {@link java.util.TimeZone#SHORT TimeZone.SHORT}
--- a/jdk/src/java.base/share/classes/sun/util/logging/PlatformLogger.java	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/src/java.base/share/classes/sun/util/logging/PlatformLogger.java	Thu Jun 11 20:18:55 2015 -0700
@@ -74,10 +74,10 @@
  *   java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
  *
  * Limitation:
- * <JAVA_HOME>/conf/logging.properties is the system-wide logging
+ * {@code <JAVA_HOME>/conf/logging.properties} is the system-wide logging
  * configuration defined in the specification and read in the
  * default case to configure any java.util.logging.Logger instances.
- * Platform loggers will not detect if <JAVA_HOME>/conf/logging.properties
+ * Platform loggers will not detect if {@code <JAVA_HOME>/conf/logging.properties}
  * is modified. In other words, unless the java.util.logging API
  * is used at runtime or the logging system properties is set,
  * the platform loggers will use the default setting described above.
--- a/jdk/src/java.base/share/classes/sun/util/resources/TimeZoneNamesBundle.java	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/src/java.base/share/classes/sun/util/resources/TimeZoneNamesBundle.java	Thu Jun 11 20:18:55 2015 -0700
@@ -55,7 +55,7 @@
  *     array for the enumeration returned by <code>getKeys</code>.
  * <li>Inserts the time zone ID (the key of the bundle entries) into
  *     the string arrays returned by <code>handleGetObject</code>.
- * <ul>
+ * </ul>
  * All <code>TimeZoneNames</code> resource bundles must extend this
  * class and implement the <code>getContents</code> method.
  */
--- a/jdk/src/java.base/share/native/libjava/ClassLoader.c	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/src/java.base/share/native/libjava/ClassLoader.c	Thu Jun 11 20:18:55 2015 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1996, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -479,12 +479,12 @@
     return res;
 }
 /*
- * Class:     java_lang_ClassLoader_NativeLibrary
+ * Class:     java_lang_ClassLoader
  * Method:    findBuiltinLib
  * Signature: (Ljava/lang/String;)Ljava/lang/String;
  */
 JNIEXPORT jstring JNICALL
-Java_java_lang_ClassLoader_00024NativeLibrary_findBuiltinLib
+Java_java_lang_ClassLoader_findBuiltinLib
   (JNIEnv *env, jclass cls, jstring name)
 {
     const char *cname;
@@ -500,8 +500,6 @@
         JNU_ThrowInternalError(env, "NULL filename for native library");
         return NULL;
     }
-    // Can't call initIDs because it will recurse into NativeLibrary via
-    // FindClass to check context so set prochandle here as well.
     procHandle = getProcessHandle();
     cname = JNU_GetStringPlatformChars(env, name, 0);
     if (cname == NULL) {
--- a/jdk/src/java.base/unix/classes/sun/misc/FileURLMapper.java	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/src/java.base/unix/classes/sun/misc/FileURLMapper.java	Thu Jun 11 20:18:55 2015 -0700
@@ -50,7 +50,7 @@
     }
 
     /**
-     * @returns the platform specific path corresponding to the URL
+     * @return the platform specific path corresponding to the URL
      *  so long as the URL does not contain a hostname in the authority field.
      */
 
--- a/jdk/src/java.base/unix/classes/sun/net/www/protocol/http/ntlm/NTLMAuthentication.java	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/src/java.base/unix/classes/sun/net/www/protocol/http/ntlm/NTLMAuthentication.java	Thu Jun 11 20:18:55 2015 -0700
@@ -113,7 +113,8 @@
     Client client;
     /**
      * Create a NTLMAuthentication:
-     * Username may be specified as domain<BACKSLASH>username in the application Authenticator.
+     * Username may be specified as {@literal domain<BACKSLASH>username}
+     * in the application Authenticator.
      * If this notation is not used, then the domain will be taken
      * from a system property: "http.auth.ntlm.domain".
      */
--- a/jdk/src/java.base/unix/native/libnet/Inet4AddressImpl.c	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/src/java.base/unix/native/libnet/Inet4AddressImpl.c	Thu Jun 11 20:18:55 2015 -0700
@@ -121,7 +121,7 @@
     jobjectArray ret = 0;
     int retLen = 0;
 
-    int error=0;
+    int getaddrinfo_error=0;
     struct addrinfo hints, *res, *resNew = NULL;
 
     initInetAddressIDs(env);
@@ -149,22 +149,24 @@
         return NULL;
     }
 
+
+    getaddrinfo_error = getaddrinfo(hostname, NULL, &hints, &res);
+
 #ifdef MACOSX
-    /* If we're looking up the local machine, bypass DNS lookups and get
-     * address from getifaddrs.
-     */
-    ret = lookupIfLocalhost(env, hostname, JNI_FALSE);
-    if (ret != NULL || (*env)->ExceptionCheck(env)) {
-        JNU_ReleaseStringPlatformChars(env, host, hostname);
-        return ret;
+    if (getaddrinfo_error) {
+        // If getaddrinfo fails try getifaddrs.
+        ret = lookupIfLocalhost(env, hostname, JNI_FALSE);
+        if (ret != NULL || (*env)->ExceptionCheck(env)) {
+            JNU_ReleaseStringPlatformChars(env, host, hostname);
+            return ret;
+        }
     }
 #endif
 
-    error = getaddrinfo(hostname, NULL, &hints, &res);
-
-    if (error) {
+    if (getaddrinfo_error) {
         /* report error */
-        NET_ThrowUnknownHostExceptionWithGaiError(env, hostname, error);
+        NET_ThrowUnknownHostExceptionWithGaiError(
+            env, hostname, getaddrinfo_error);
         JNU_ReleaseStringPlatformChars(env, host, hostname);
         return NULL;
     } else {
--- a/jdk/src/java.base/unix/native/libnet/Inet6AddressImpl.c	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/src/java.base/unix/native/libnet/Inet6AddressImpl.c	Thu Jun 11 20:18:55 2015 -0700
@@ -254,7 +254,7 @@
     jobjectArray ret = 0;
     int retLen = 0;
 
-    int error=0;
+    int getaddrinfo_error=0;
 #ifdef AF_INET6
     struct addrinfo hints, *res, *resNew = NULL;
 #endif /* AF_INET6 */
@@ -269,19 +269,6 @@
     hostname = JNU_GetStringPlatformChars(env, host, JNI_FALSE);
     CHECK_NULL_RETURN(hostname, NULL);
 
-#ifdef MACOSX
-    /*
-     * If we're looking up the local machine, attempt to get the address
-     * from getifaddrs. This ensures we get an IPv6 address for the local
-     * machine.
-     */
-    ret = lookupIfLocalhost(env, hostname, JNI_TRUE);
-    if (ret != NULL || (*env)->ExceptionCheck(env)) {
-        JNU_ReleaseStringPlatformChars(env, host, hostname);
-        return ret;
-    }
-#endif
-
 #ifdef AF_INET6
     /* Try once, with our static buffer. */
     memset(&hints, 0, sizeof(hints));
@@ -301,11 +288,27 @@
     }
 #endif
 
-    error = getaddrinfo(hostname, NULL, &hints, &res);
+    getaddrinfo_error = getaddrinfo(hostname, NULL, &hints, &res);
 
-    if (error) {
+#ifdef MACOSX
+    if (getaddrinfo_error) {
+        /*
+         * If getaddrinfo fails looking up the local machine, attempt to get the
+         * address from getifaddrs. This ensures we get an IPv6 address for the
+         * local machine.
+         */
+        ret = lookupIfLocalhost(env, hostname, JNI_TRUE);
+        if (ret != NULL || (*env)->ExceptionCheck(env)) {
+            JNU_ReleaseStringPlatformChars(env, host, hostname);
+            return ret;
+        }
+    }
+#endif
+
+    if (getaddrinfo_error) {
         /* report error */
-        NET_ThrowUnknownHostExceptionWithGaiError(env, hostname, error);
+        NET_ThrowUnknownHostExceptionWithGaiError(
+            env, hostname, getaddrinfo_error);
         JNU_ReleaseStringPlatformChars(env, host, hostname);
         return NULL;
     } else {
--- a/jdk/src/java.base/windows/classes/sun/misc/FileURLMapper.java	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/src/java.base/windows/classes/sun/misc/FileURLMapper.java	Thu Jun 11 20:18:55 2015 -0700
@@ -46,7 +46,7 @@
     }
 
     /**
-     * @returns the platform specific path corresponding to the URL, and in particular
+     * @return the platform specific path corresponding to the URL, and in particular
      *  returns a UNC when the authority contains a hostname
      */
 
--- a/jdk/src/java.base/windows/classes/sun/net/www/protocol/http/ntlm/NTLMAuthentication.java	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/src/java.base/windows/classes/sun/net/www/protocol/http/ntlm/NTLMAuthentication.java	Thu Jun 11 20:18:55 2015 -0700
@@ -83,7 +83,8 @@
 
     /**
      * Create a NTLMAuthentication:
-     * Username may be specified as domain<BACKSLASH>username in the application Authenticator.
+     * Username may be specified as {@literal domain<BACKSLASH>username}
+     * in the application Authenticator.
      * If this notation is not used, then the domain will be taken
      * from a system property: "http.auth.ntlm.domain".
      */
--- a/jdk/src/java.datatransfer/share/classes/sun/datatransfer/DataFlavorUtil.java	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/src/java.datatransfer/share/classes/sun/datatransfer/DataFlavorUtil.java	Thu Jun 11 20:18:55 2015 -0700
@@ -55,7 +55,7 @@
 /**
  * Utility class with different datatransfer helper functions
  *
- * @see 1.9
+ * @since 1.9
  */
 public class DataFlavorUtil {
 
--- a/jdk/src/java.desktop/macosx/classes/com/apple/eio/FileManager.java	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/src/java.desktop/macosx/classes/com/apple/eio/FileManager.java	Thu Jun 11 20:18:55 2015 -0700
@@ -97,7 +97,8 @@
 
 
         /**
-         * Converts an OSType (e.g. "macs" from <CarbonCore/Folders.h>) into an int.
+         * Converts an OSType (e.g. "macs"
+         * from {@literal <CarbonCore/Folders.h>}) into an int.
          *
          * @param type the 4 character type to convert.
          * @return an int representing the 4 character value
@@ -355,7 +356,7 @@
         /**
          * Moves the specified file to the Trash
          *
-         * @param file
+         * @param file the file
          * @return returns true if the NSFileManager successfully moved the file to the Trash.
          * @throws FileNotFoundException
          *
--- a/jdk/src/java.desktop/share/classes/sun/applet/AppletPanel.java	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/sun/applet/AppletPanel.java	Thu Jun 11 20:18:55 2015 -0700
@@ -344,12 +344,14 @@
      * Execute applet events.
      * Here is the state transition diagram
      *
+     * <pre>{@literal
      *   Note: (XXX) is the action
      *         APPLET_XXX is the state
-     *  (applet code loaded) --> APPLET_LOAD -- (applet init called)--> APPLET_INIT -- (
-     *   applet start called) --> APPLET_START -- (applet stop called) -->APPLET_STOP --(applet
-     *   destroyed called) --> APPLET_DESTROY -->(applet gets disposed) -->
-     *   APPLET_DISPOSE -->....
+     *  (applet code loaded) --> APPLET_LOAD -- (applet init called)--> APPLET_INIT --
+     *  (applet start called) --> APPLET_START -- (applet stop called) --> APPLET_STOP --
+     *  (applet destroyed called) --> APPLET_DESTROY --> (applet gets disposed) -->
+     *   APPLET_DISPOSE --> ...
+     * }</pre>
      *
      * In the legacy lifecycle model. The applet gets loaded, inited and started. So it stays
      * in the APPLET_START state unless the applet goes away(refresh page or leave the page).
@@ -364,10 +366,9 @@
      * APPLET_STOP to APPLET_DESTROY and to APPLET_INIT .
      *
      * Also, the applet can jump from APPLET_INIT state to APPLET_DESTROY (in Netscape/Mozilla case).
-         * Same as APPLET_LOAD to
+     * Same as APPLET_LOAD to
      * APPLET_DISPOSE since all of this are triggered by browser.
      *
-     *
      */
     @Override
     public void run() {
--- a/jdk/src/java.desktop/share/classes/sun/applet/AppletViewer.java	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/sun/applet/AppletViewer.java	Thu Jun 11 20:18:55 2015 -0700
@@ -1093,7 +1093,7 @@
     }
 
     /**
-     * Scan an html file for <applet> tags
+     * Scan an html file for {@code <applet>} tags
      */
     public static void parse(URL url, String enc) throws IOException {
         encoding = enc;
--- a/jdk/src/java.naming/share/classes/com/sun/jndi/ldap/LdapName.java	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/src/java.naming/share/classes/com/sun/jndi/ldap/LdapName.java	Thu Jun 11 20:18:55 2015 -0700
@@ -358,7 +358,7 @@
      * Serializes only the unparsed DN, for compactness and to avoid
      * any implementation dependency.
      *
-     * @serialdata      The DN string and a boolean indicating whether
+     * @serialData      The DN string and a boolean indicating whether
      * the values are case sensitive.
      */
     private void writeObject(java.io.ObjectOutputStream s)
--- a/jdk/src/java.security.jgss/share/classes/javax/security/auth/kerberos/DelegationPermission.java	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/src/java.security.jgss/share/classes/javax/security/auth/kerberos/DelegationPermission.java	Thu Jun 11 20:18:55 2015 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,14 +25,15 @@
 
 package javax.security.auth.kerberos;
 
-import java.util.*;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.ObjectStreamField;
+import java.security.BasicPermission;
 import java.security.Permission;
-import java.security.BasicPermission;
 import java.security.PermissionCollection;
-import java.io.ObjectStreamField;
-import java.io.ObjectOutputStream;
-import java.io.ObjectInputStream;
-import java.io.IOException;
+import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
 
 /**
  * This class is used to restrict the usage of the Kerberos
@@ -137,6 +138,7 @@
      * @return true if the specified permission is implied by this object,
      * false if not.
      */
+    @Override
     public boolean implies(Permission p) {
         if (!(p instanceof DelegationPermission))
             return false;
@@ -159,6 +161,7 @@
      *  has the same subordinate and service principal as this.
      *  DelegationPermission object.
      */
+    @Override
     public boolean equals(Object obj) {
         if (obj == this)
             return true;
@@ -175,11 +178,11 @@
      *
      * @return a hash code value for this object.
      */
+    @Override
     public int hashCode() {
         return getName().hashCode();
     }
 
-
     /**
      * Returns a PermissionCollection object for storing
      * DelegationPermission objects.
@@ -192,7 +195,7 @@
      * @return a new PermissionCollection object suitable for storing
      * DelegationPermissions.
      */
-
+    @Override
     public PermissionCollection newPermissionCollection() {
         return new KrbDelegationPermissionCollection();
     }
@@ -263,13 +266,12 @@
     implements java.io.Serializable {
 
     // Not serialized; see serialization section at end of class.
-    private transient List<Permission> perms;
+    private transient ConcurrentHashMap<Permission, Boolean> perms;
 
     public KrbDelegationPermissionCollection() {
-        perms = new ArrayList<Permission>();
+        perms = new ConcurrentHashMap<>();
     }
 
-
     /**
      * Check and see if this collection of permissions implies the permissions
      * expressed in "permission".
@@ -279,18 +281,13 @@
      * @return true if "permission" is a proper subset of a permission in
      * the collection, false if not.
      */
+    @Override
     public boolean implies(Permission permission) {
         if (! (permission instanceof DelegationPermission))
-                return false;
+            return false;
 
-        synchronized (this) {
-            for (Permission x : perms) {
-                if (x.implies(permission))
-                    return true;
-            }
-        }
-        return false;
-
+        // if map contains key, then it automatically implies it
+        return perms.containsKey(permission);
     }
 
     /**
@@ -305,6 +302,7 @@
      * @exception SecurityException - if this PermissionCollection object
      *                                has been marked readonly
      */
+    @Override
     public void add(Permission permission) {
         if (! (permission instanceof DelegationPermission))
             throw new IllegalArgumentException("invalid permission: "+
@@ -312,9 +310,7 @@
         if (isReadOnly())
             throw new SecurityException("attempt to add a Permission to a readonly PermissionCollection");
 
-        synchronized (this) {
-            perms.add(0, permission);
-        }
+        perms.put(permission, Boolean.TRUE);
     }
 
     /**
@@ -323,11 +319,9 @@
      *
      * @return an enumeration of all the DelegationPermission objects.
      */
+    @Override
     public Enumeration<Permission> elements() {
-        // Convert Iterator into Enumeration
-        synchronized (this) {
-            return Collections.enumeration(perms);
-        }
+        return perms.keys();
     }
 
     private static final long serialVersionUID = -3383936936589966948L;
@@ -354,11 +348,7 @@
         // Don't call out.defaultWriteObject()
 
         // Write out Vector
-        Vector<Permission> permissions = new Vector<>(perms.size());
-
-        synchronized (this) {
-            permissions.addAll(perms);
-        }
+        Vector<Permission> permissions = new Vector<>(perms.keySet());
 
         ObjectOutputStream.PutField pfields = out.putFields();
         pfields.put("permissions", permissions);
@@ -379,8 +369,10 @@
 
         // Get the one we want
         Vector<Permission> permissions =
-                (Vector<Permission>)gfields.get("permissions", null);
-        perms = new ArrayList<Permission>(permissions.size());
-        perms.addAll(permissions);
+            (Vector<Permission>)gfields.get("permissions", null);
+        perms = new ConcurrentHashMap<>(permissions.size());
+        for (Permission perm : permissions) {
+            perms.put(perm, Boolean.TRUE);
+        }
     }
 }
--- a/jdk/src/java.security.jgss/share/classes/javax/security/auth/kerberos/ServicePermission.java	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/src/java.security.jgss/share/classes/javax/security/auth/kerberos/ServicePermission.java	Thu Jun 11 20:18:55 2015 -0700
@@ -25,13 +25,14 @@
 
 package javax.security.auth.kerberos;
 
-import java.util.*;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.ObjectStreamField;
 import java.security.Permission;
 import java.security.PermissionCollection;
-import java.io.ObjectStreamField;
-import java.io.ObjectOutputStream;
-import java.io.ObjectInputStream;
-import java.io.IOException;
+import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
 
 /**
  * This class is used to protect Kerberos services and the
@@ -149,6 +150,15 @@
         init(servicePrincipal, getMask(action));
     }
 
+    /**
+     * Creates a ServicePermission object with the specified servicePrincipal
+     * and a pre-calculated mask. Avoids the overhead of re-computing the mask.
+     * Called by ServicePermissionCollection.
+     */
+    ServicePermission(String servicePrincipal, int mask) {
+        super(servicePrincipal);
+        init(servicePrincipal, mask);
+    }
 
     /**
      * Initialize the ServicePermission object.
@@ -175,6 +185,7 @@
      * @return true if the specified permission is implied by this object,
      * false if not.
      */
+    @Override
     public boolean implies(Permission p) {
         if (!(p instanceof ServicePermission))
             return false;
@@ -200,6 +211,7 @@
      *  same service principal, and actions as this
      * ServicePermission object.
      */
+    @Override
     public boolean equals(Object obj) {
         if (obj == this)
             return true;
@@ -219,7 +231,7 @@
      *
      * @return a hash code value for this object.
      */
-
+    @Override
     public int hashCode() {
         return (getName().hashCode() ^ mask);
     }
@@ -234,7 +246,7 @@
      * @param mask a specific integer action mask to translate into a string
      * @return the canonical string representation of the actions
      */
-    private static String getActions(int mask)
+    static String getActions(int mask)
     {
         StringBuilder sb = new StringBuilder();
         boolean comma = false;
@@ -259,6 +271,7 @@
      * Always returns present actions in the following order:
      * initiate, accept.
      */
+    @Override
     public String getActions() {
         if (actions == null)
             actions = getActions(this.mask);
@@ -279,6 +292,7 @@
      * @return a new PermissionCollection object suitable for storing
      * ServicePermissions.
      */
+    @Override
     public PermissionCollection newPermissionCollection() {
         return new KrbServicePermissionCollection();
     }
@@ -453,11 +467,12 @@
 final class KrbServicePermissionCollection extends PermissionCollection
     implements java.io.Serializable {
 
+    // Key is the service principal, value is the ServicePermission.
     // Not serialized; see serialization section at end of class
-    private transient List<Permission> perms;
+    private transient ConcurrentHashMap<String, Permission> perms;
 
     public KrbServicePermissionCollection() {
-        perms = new ArrayList<Permission>();
+        perms = new ConcurrentHashMap<>();
     }
 
     /**
@@ -469,32 +484,28 @@
      * @return true if "permission" is a proper subset of a permission in
      * the collection, false if not.
      */
+    @Override
     public boolean implies(Permission permission) {
         if (! (permission instanceof ServicePermission))
-                return false;
+            return false;
 
         ServicePermission np = (ServicePermission) permission;
         int desired = np.getMask();
-        int effective = 0;
-        int needed = desired;
-
-        synchronized (this) {
-            int len = perms.size();
-
-            // need to deal with the case where the needed permission has
-            // more than one action and the collection has individual permissions
-            // that sum up to the needed.
 
-            for (int i = 0; i < len; i++) {
-                ServicePermission x = (ServicePermission) perms.get(i);
+        // first, check for wildcard principal
+        ServicePermission x = (ServicePermission)perms.get("*");
+        if (x != null) {
+            if ((x.getMask() & desired) == desired) {
+                return true;
+            }
+        }
 
-                //System.out.println("  trying "+x);
-                if (((needed & x.getMask()) != 0) && x.impliesIgnoreMask(np)) {
-                    effective |=  x.getMask();
-                    if ((effective & desired) == desired)
-                        return true;
-                    needed = (desired ^ effective);
-                }
+        // otherwise, check for match on principal
+        x = (ServicePermission)perms.get(np.getName());
+        if (x != null) {
+            //System.out.println("  trying "+x);
+            if ((x.getMask() & desired) == desired) {
+                return true;
             }
         }
         return false;
@@ -512,6 +523,7 @@
      * @exception SecurityException - if this PermissionCollection object
      *                                has been marked readonly
      */
+    @Override
     public void add(Permission permission) {
         if (! (permission instanceof ServicePermission))
             throw new IllegalArgumentException("invalid permission: "+
@@ -519,9 +531,32 @@
         if (isReadOnly())
             throw new SecurityException("attempt to add a Permission to a readonly PermissionCollection");
 
-        synchronized (this) {
-            perms.add(0, permission);
-        }
+        ServicePermission sp = (ServicePermission)permission;
+        String princName = sp.getName();
+
+        // Add permission to map if it is absent, or replace with new
+        // permission if applicable. NOTE: cannot use lambda for
+        // remappingFunction parameter until JDK-8076596 is fixed.
+        perms.merge(princName, sp,
+            new java.util.function.BiFunction<>() {
+                @Override
+                public Permission apply(Permission existingVal,
+                                        Permission newVal) {
+                    int oldMask = ((ServicePermission)existingVal).getMask();
+                    int newMask = ((ServicePermission)newVal).getMask();
+                    if (oldMask != newMask) {
+                        int effective = oldMask | newMask;
+                        if (effective == newMask) {
+                            return newVal;
+                        }
+                        if (effective != oldMask) {
+                            return new ServicePermission(princName, effective);
+                        }
+                    }
+                    return existingVal;
+                }
+            }
+        );
     }
 
     /**
@@ -530,12 +565,9 @@
      *
      * @return an enumeration of all the ServicePermission objects.
      */
-
+    @Override
     public Enumeration<Permission> elements() {
-        // Convert Iterator into Enumeration
-        synchronized (this) {
-            return Collections.enumeration(perms);
-        }
+        return perms.elements();
     }
 
     private static final long serialVersionUID = -4118834211490102011L;
@@ -563,11 +595,7 @@
         // Don't call out.defaultWriteObject()
 
         // Write out Vector
-        Vector<Permission> permissions = new Vector<>(perms.size());
-
-        synchronized (this) {
-            permissions.addAll(perms);
-        }
+        Vector<Permission> permissions = new Vector<>(perms.values());
 
         ObjectOutputStream.PutField pfields = out.putFields();
         pfields.put("permissions", permissions);
@@ -589,7 +617,9 @@
         // Get the one we want
         Vector<Permission> permissions =
                 (Vector<Permission>)gfields.get("permissions", null);
-        perms = new ArrayList<Permission>(permissions.size());
-        perms.addAll(permissions);
+        perms = new ConcurrentHashMap<>(permissions.size());
+        for (Permission perm : permissions) {
+            perms.put(perm.getName(), perm);
+        }
     }
 }
--- a/jdk/src/java.sql.rowset/share/classes/com/sun/rowset/JdbcRowSetImpl.java	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/src/java.sql.rowset/share/classes/com/sun/rowset/JdbcRowSetImpl.java	Thu Jun 11 20:18:55 2015 -0700
@@ -35,7 +35,7 @@
 import javax.sql.rowset.*;
 
 /**
- * The standard implementation of the <code>JdbcRowSet</code> interface. See the interface
+ * The standard implementation of the {@code JdbcRowSet} interface. See the interface
  * definition for full behavior and implementation requirements.
  *
  * @author Jonathan Bruce, Amit Handa
@@ -44,40 +44,40 @@
 public class JdbcRowSetImpl extends BaseRowSet implements JdbcRowSet, Joinable {
 
     /**
-     * The <code>Connection</code> object that is this rowset's
+     * The {@code Connection} object that is this rowset's
      * current connection to the database.  This field is set
      * internally when the connection is established.
      */
     private Connection conn;
 
     /**
-     * The <code>PreparedStatement</code> object that is this rowset's
+     * The {@code PreparedStatement} object that is this rowset's
      * current command.  This field is set internally when the method
-     * <code>execute</code> creates the <code>PreparedStatement</code>
+     * {@code execute} creates the {@code PreparedStatement}
      * object.
      */
     private PreparedStatement ps;
 
     /**
-     * The <code>ResultSet</code> object that is this rowset's
+     * The {@code ResultSet} object that is this rowset's
      * current result set.  This field is set internally when the method
-     * <code>execute</code> executes the rowset's command and thereby
-     * creates the rowset's <code>ResultSet</code> object.
+     * {@code execute} executes the rowset's command and thereby
+     * creates the rowset's {@code ResultSet} object.
      */
     private ResultSet rs;
 
     /**
-     * The <code>RowSetMetaDataImpl</code> object that is constructed when
-     * a <code>ResultSet</code> object is passed to the <code>JdbcRowSet</code>
+     * The {@code RowSetMetaDataImpl} object that is constructed when
+     * a {@code ResultSet} object is passed to the {@code JdbcRowSet}
      * constructor. This helps in constructing all metadata associated
-     * with the <code>ResultSet</code> object using the setter methods of
-     * <code>RowSetMetaDataImpl</code>.
+     * with the {@code ResultSet} object using the setter methods of
+     * {@code RowSetMetaDataImpl}.
      */
     private RowSetMetaDataImpl rowsMD;
 
     /**
-     * The <code>ResultSetMetaData</code> object from which this
-     * <code>RowSetMetaDataImpl</code> is formed and which  helps in getting
+     * The {@code ResultSetMetaData} object from which this
+     * {@code RowSetMetaDataImpl} is formed and which  helps in getting
      * the metadata information.
      */
     private ResultSetMetaData resMD;
@@ -97,13 +97,13 @@
     protected transient JdbcRowSetResourceBundle resBundle;
 
     /**
-     * Constructs a default <code>JdbcRowSet</code> object.
-     * The new instance of <code>JdbcRowSet</code> will serve as a proxy
-     * for the <code>ResultSet</code> object it creates, and by so doing,
+     * Constructs a default {@code JdbcRowSet} object.
+     * The new instance of {@code JdbcRowSet} will serve as a proxy
+     * for the {@code ResultSet} object it creates, and by so doing,
      * it will make it possible to use the result set as a JavaBeans
      * component.
      * <P>
-     * The following is true of a default <code>JdbcRowSet</code> instance:
+     * The following is true of a default {@code JdbcRowSet} instance:
      * <UL>
      *   <LI>Does not show deleted rows
      *   <LI>Has no time limit for how long a driver may take to
@@ -114,17 +114,17 @@
      *       made by others
      *   <LI>Will not see uncommitted data (make "dirty" reads)
      *   <LI>Has escape processing turned on
-     *   <LI>Has its connection's type map set to <code>null</code>
-     *   <LI>Has an empty <code>Hashtable</code> object for storing any
+     *   <LI>Has its connection's type map set to {@code null}
+     *   <LI>Has an empty {@code Hashtable} object for storing any
      *       parameters that are set
      * </UL>
-     * A newly created <code>JdbcRowSet</code> object must have its
-     * <code>execute</code> method invoked before other public methods
+     * A newly created {@code JdbcRowSet} object must have its
+     * {@code execute} method invoked before other public methods
      * are called on it; otherwise, such method calls will cause an
      * exception to be thrown.
      *
      * @throws SQLException [1] if any of its public methods are called prior
-     * to calling the <code>execute</code> method; [2] if invalid JDBC driver
+     * to calling the {@code execute} method; [2] if invalid JDBC driver
      * properties are set or [3] if no connection to a data source exists.
      */
     public JdbcRowSetImpl() {
@@ -217,14 +217,14 @@
     }
 
     /**
-     * Constructs a default <code>JdbcRowSet</code> object given a
-     * valid <code>Connection</code> object. The new
-     * instance of <code>JdbcRowSet</code> will serve as a proxy for
-     * the <code>ResultSet</code> object it creates, and by so doing,
+     * Constructs a default {@code JdbcRowSet} object given a
+     * valid {@code Connection} object. The new
+     * instance of {@code JdbcRowSet} will serve as a proxy for
+     * the {@code ResultSet} object it creates, and by so doing,
      * it will make it possible to use the result set as a JavaBeans
      * component.
      * <P>
-     * The following is true of a default <code>JdbcRowSet</code> instance:
+     * The following is true of a default {@code JdbcRowSet} instance:
      * <UL>
      *   <LI>Does not show deleted rows
      *   <LI>Has no time limit for how long a driver may take to
@@ -235,17 +235,17 @@
      *       made by others
      *   <LI>Will not see uncommitted data (make "dirty" reads)
      *   <LI>Has escape processing turned on
-     *   <LI>Has its connection's type map set to <code>null</code>
-     *   <LI>Has an empty <code>Hashtable</code> object for storing any
+     *   <LI>Has its connection's type map set to {@code null}
+     *   <LI>Has an empty {@code Hashtable} object for storing any
      *       parameters that are set
      * </UL>
-     * A newly created <code>JdbcRowSet</code> object must have its
-     * <code>execute</code> method invoked before other public methods
+     * A newly created {@code JdbcRowSet} object must have its
+     * {@code execute} method invoked before other public methods
      * are called on it; otherwise, such method calls will cause an
      * exception to be thrown.
      *
      * @throws SQLException [1] if any of its public methods are called prior
-     * to calling the <code>execute</code> method, [2] if invalid JDBC driver
+     * to calling the {@code execute} method, [2] if invalid JDBC driver
      * properties are set, or [3] if no connection to a data source exists.
      */
     public JdbcRowSetImpl(Connection con) throws SQLException {
@@ -289,15 +289,15 @@
     }
 
     /**
-     * Constructs a default <code>JdbcRowSet</code> object using the
+     * Constructs a default {@code JdbcRowSet} object using the
      * URL, username, and password arguments supplied. The new
-     * instance of <code>JdbcRowSet</code> will serve as a proxy for
-     * the <code>ResultSet</code> object it creates, and by so doing,
+     * instance of {@code JdbcRowSet} will serve as a proxy for
+     * the {@code ResultSet} object it creates, and by so doing,
      * it will make it possible to use the result set as a JavaBeans
      * component.
      *
      * <P>
-     * The following is true of a default <code>JdbcRowSet</code> instance:
+     * The following is true of a default {@code JdbcRowSet} instance:
      * <UL>
      *   <LI>Does not show deleted rows
      *   <LI>Has no time limit for how long a driver may take to
@@ -308,17 +308,17 @@
      *       made by others
      *   <LI>Will not see uncommitted data (make "dirty" reads)
      *   <LI>Has escape processing turned on
-     *   <LI>Has its connection's type map set to <code>null</code>
-     *   <LI>Has an empty <code>Hashtable</code> object for storing any
+     *   <LI>Has its connection's type map set to {@code null}
+     *   <LI>Has an empty {@code Hashtable} object for storing any
      *       parameters that are set
      * </UL>
      *
-     * @param url - a JDBC URL for the database to which this <code>JdbcRowSet</code>
+     * @param url a JDBC URL for the database to which this {@code JdbcRowSet}
      *        object will be connected. The form for a JDBC URL is
-     *        <code>jdbc:subprotocol:subname</code>.
-     * @param user - the database user on whose behalf the connection
+     *        {@code jdbc:subprotocol:subname}.
+     * @param user the database user on whose behalf the connection
      *        is being made
-     * @param password - the user's password
+     * @param password the user's password
      *
      * @throws SQLException if a database access error occurs
      *
@@ -372,15 +372,15 @@
 
 
     /**
-     * Constructs a <code>JdbcRowSet</code> object using the given valid
-     * <code>ResultSet</code> object. The new
-     * instance of <code>JdbcRowSet</code> will serve as a proxy for
-     * the <code>ResultSet</code> object, and by so doing,
+     * Constructs a {@code JdbcRowSet} object using the given valid
+     * {@code ResultSet} object. The new
+     * instance of {@code JdbcRowSet} will serve as a proxy for
+     * the {@code ResultSet} object, and by so doing,
      * it will make it possible to use the result set as a JavaBeans
      * component.
      *
      * <P>
-     * The following is true of a default <code>JdbcRowSet</code> instance:
+     * The following is true of a default {@code JdbcRowSet} instance:
      * <UL>
      *   <LI>Does not show deleted rows
      *   <LI>Has no time limit for how long a driver may take to
@@ -391,12 +391,12 @@
      *       made by others
      *   <LI>Will not see uncommitted data (make "dirty" reads)
      *   <LI>Has escape processing turned on
-     *   <LI>Has its connection's type map set to <code>null</code>
-     *   <LI>Has an empty <code>Hashtable</code> object for storing any
+     *   <LI>Has its connection's type map set to {@code null}
+     *   <LI>Has an empty {@code Hashtable} object for storing any
      *       parameters that are set
      * </UL>
      *
-     * @param res a valid <code>ResultSet</code> object
+     * @param res a valid {@code ResultSet} object
      *
      * @throws SQLException if a database access occurs due to a non
      * valid ResultSet handle.
@@ -460,13 +460,13 @@
     }
 
     /**
-     * Initializes the given <code>RowSetMetaData</code> object with the values
-     * in the given <code>ResultSetMetaData</code> object.
-     *
-     * @param md the <code>RowSetMetaData</code> object for this
-     *           <code>JdbcRowSetImpl</code> object, which will be set with
+     * Initializes the given {@code RowSetMetaData} object with the values
+     * in the given {@code ResultSetMetaData} object.
+     *
+     * @param md the {@code RowSetMetaData} object for this
+     *           {@code JdbcRowSetImpl} object, which will be set with
      *           values from rsmd
-     * @param rsmd the <code>ResultSetMetaData</code> object from which new
+     * @param rsmd the {@code ResultSetMetaData} object from which new
      *             values for md will be read
      * @throws SQLException if an error occurs
      */
@@ -511,24 +511,24 @@
     //---------------------------------------------------------------------
 
     /**
-     * Creates the internal <code>ResultSet</code> object for which this
-     * <code>JdbcRowSet</code> object is a wrapper, effectively
+     * Creates the internal {@code ResultSet} object for which this
+     * {@code JdbcRowSet} object is a wrapper, effectively
      * making the result set a JavaBeans component.
      * <P>
      * Certain properties must have been set before this method is called
      * so that it can establish a connection to a database and execute the
-     * query that will create the result set.  If a <code>DataSource</code>
+     * query that will create the result set.  If a {@code DataSource}
      * object will be used to create the connection, properties for the
      * data source name, user name, and password must be set.  If the
-     * <code>DriverManager</code> will be used, the properties for the
+     * {@code DriverManager} will be used, the properties for the
      * URL, user name, and password must be set.  In either case, the
      * property for the command must be set.  If the command has placeholder
      * parameters, those must also be set. This method throws
      * an exception if the required properties are not set.
      * <P>
      * Other properties have default values that may optionally be set
-     * to new values. The <code>execute</code> method will use the value
-     * for the command property to create a <code>PreparedStatement</code>
+     * to new values. The {@code execute} method will use the value
+     * for the command property to create a {@code PreparedStatement}
      * object and set its properties (escape processing, maximum field
      * size, maximum number of rows, and query timeout limit) to be those
      * of this rowset.
@@ -784,20 +784,20 @@
     }
 
     /**
-     * Moves the cursor for this rowset's <code>ResultSet</code>
+     * Moves the cursor for this rowset's {@code ResultSet}
      * object down one row from its current position.
-     * A <code>ResultSet</code> cursor is initially positioned
+     * A {@code ResultSet} cursor is initially positioned
      * before the first row; the first call to the method
-     * <code>next</code> makes the first row the current row; the
+     * {@code next} makes the first row the current row; the
      * second call makes the second row the current row, and so on.
      *
      * <P>If an input stream is open for the current row, a call
-     * to the method <code>next</code> will
-     * implicitly close it. A <code>ResultSet</code> object's
+     * to the method {@code next} will
+     * implicitly close it. A {@code ResultSet} object's
      * warning chain is cleared when a new row is read.
      *
-     * @return <code>true</code> if the new current row is valid;
-     *         <code>false</code> if there are no more rows
+     * @return {@code true} if the new current row is valid;
+     *         {@code false} if there are no more rows
      * @throws SQLException if a database access error occurs
      *            or this rowset does not currently have a valid connection,
      *            prepared statement, and result set
@@ -811,16 +811,16 @@
     }
 
     /**
-     * Releases this rowset's <code>ResultSet</code> object's database and
+     * Releases this rowset's {@code ResultSet} object's database and
      * JDBC resources immediately instead of waiting for
      * this to happen when it is automatically closed.
      *
-     * <P><B>Note:</B> A <code>ResultSet</code> object
+     * <P><B>Note:</B> A {@code ResultSet} object
      * is automatically closed by the
-     * <code>Statement</code> object that generated it when
-     * that <code>Statement</code> object is closed,
+     * {@code Statement} object that generated it when
+     * that {@code Statement} object is closed,
      * re-executed, or is used to retrieve the next result from a
-     * sequence of multiple results. A <code>ResultSet</code> object
+     * sequence of multiple results. A {@code ResultSet} object
      * is also automatically closed when it is garbage collected.
      *
      * @throws SQLException if a database access error occurs
@@ -836,14 +836,14 @@
 
     /**
      * Reports whether the last column read from this rowset's
-     * <code>ResultSet</code> object had a value of SQL <code>NULL</code>.
-     * Note that you must first call one of the <code>getXXX</code> methods
+     * {@code ResultSet} object had a value of SQL {@code NULL}.
+     * Note that you must first call one of the {@code getXXX} methods
      * on a column to try to read its value and then call
-     * the method <code>wasNull</code> to see if the value read was
-     * SQL <code>NULL</code>.
-     *
-     * @return <code>true</code> if the last column value read was SQL
-     *         <code>NULL</code> and <code>false</code> otherwise
+     * the method {@code wasNull} to see if the value read was
+     * SQL {@code NULL}.
+     *
+     * @return {@code true} if the last column value read was SQL
+     *         {@code NULL} and {@code false} otherwise
      * @throws SQLException if a database access error occurs
      *            or this rowset does not have a currently valid connection,
      *            prepared statement, and result set
@@ -860,12 +860,12 @@
 
     /**
      * Gets the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as
-     * a <code>String</code>.
+     * of this rowset's {@code ResultSet} object as
+     * a {@code String}.
      *
      * @param columnIndex the first column is 1, the second is 2, and so on
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     * value returned is <code>null</code>
+     * @return the column value; if the value is SQL {@code NULL}, the
+     *         value returned is {@code null}
      * @throws SQLException if (1) a database access error occurs
      *            or (2) this rowset does not currently have a valid connection,
      *            prepared statement, and result set
@@ -878,12 +878,12 @@
 
     /**
      * Gets the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as
-     * a <code>boolean</code>.
+     * of this rowset's {@code ResultSet} object as
+     * a {@code boolean}.
      *
      * @param columnIndex the first column is 1, the second is 2, and so on
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     * value returned is <code>false</code>
+     * @return the column value; if the value is SQL {@code NULL}, the
+     *         value returned is {@code false}
      * @throws SQLException if (1) a database access error occurs
      *            or (2) this rowset does not have a currently valid connection,
      *            prepared statement, and result set
@@ -896,12 +896,12 @@
 
     /**
      * Gets the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as
-     * a <code>byte</code>.
+     * of this rowset's {@code ResultSet} object as
+     * a {@code byte}.
      *
      * @param columnIndex the first column is 1, the second is 2, and so on
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     * value returned is <code>0</code>
+     * @return the column value; if the value is SQL {@code NULL}, the
+     *         value returned is {@code 0}
      * @throws SQLException if (1) a database access error occurs
      *            or (2) this rowset does not have a currently valid connection,
      *            prepared statement, and result set
@@ -914,12 +914,12 @@
 
     /**
      * Gets the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as
-     * a <code>short</code>.
+     * of this rowset's {@code ResultSet} object as
+     * a {@code short}.
      *
      * @param columnIndex the first column is 1, the second is 2, and so on
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     * value returned is <code>0</code>
+     * @return the column value; if the value is SQL {@code NULL}, the
+     *         value returned is {@code 0}
      * @throws SQLException if (1) a database access error occurs
      *            or (2) this rowset does not have a currently valid connection,
      *            prepared statement, and result set
@@ -932,12 +932,12 @@
 
     /**
      * Gets the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as
-     * an <code>int</code>.
+     * of this rowset's {@code ResultSet} object as
+     * an {@code int}.
      *
      * @param columnIndex the first column is 1, the second is 2, and so on
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     * value returned is <code>0</code>
+     * @return the column value; if the value is SQL {@code NULL}, the
+     *         value returned is {@code 0}
      * @throws SQLException if (1) a database access error occurs
      *            or (2) this rowset does not have a currently valid connection,
      *            prepared statement, and result set
@@ -950,12 +950,12 @@
 
     /**
      * Gets the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as
-     * a <code>long</code>.
+     * of this rowset's {@code ResultSet} object as
+     * a {@code long}.
      *
      * @param columnIndex the first column is 1, the second is 2, and so on
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     * value returned is <code>0</code>
+     * @return the column value; if the value is SQL {@code NULL}, the
+     *         value returned is {@code 0}
      * @throws SQLException if (1) a database access error occurs
      *            or (2) this rowset does not have a currently valid connection,
      *            prepared statement, and result set
@@ -968,12 +968,12 @@
 
     /**
      * Gets the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as
-     * a <code>float</code>.
+     * of this rowset's {@code ResultSet} object as
+     * a {@code float}.
      *
      * @param columnIndex the first column is 1, the second is 2, and so on
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     * value returned is <code>0</code>
+     * @return the column value; if the value is SQL {@code NULL}, the
+     *         value returned is {@code 0}
      * @throws SQLException if (1) a database access error occurs
      *            or (2) this rowset does not have a currently valid connection,
      *            prepared statement, and result set
@@ -986,12 +986,12 @@
 
     /**
      * Gets the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as
-     * a <code>double</code>.
+     * of this rowset's {@code ResultSet} object as
+     * a {@code double}.
      *
      * @param columnIndex the first column is 1, the second is 2, and so on
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     * value returned is <code>0</code>
+     * @return the column value; if the value is SQL {@code NULL}, the
+     *         value returned is {@code 0}
      * @throws SQLException if (1) a database access error occurs
      *            or (2) this rowset does not have a currently valid connection,
      *            prepared statement, and result set
@@ -1004,13 +1004,13 @@
 
     /**
      * Gets the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as
-     * a <code>java.sql.BigDecimal</code>.
+     * of this rowset's {@code ResultSet} object as
+     * a {@code java.sql.BigDecimal}.
      *
      * @param columnIndex the first column is 1, the second is 2, and so on
      * @param scale the number of digits to the right of the decimal point
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     * value returned is <code>null</code>
+     * @return the column value; if the value is SQL {@code NULL}, the
+     *         value returned is {@code null}
      * @throws SQLException if (1) database access error occurs
      *            or (2) this rowset does not have a currently valid connection,
      *            prepared statement, and result set
@@ -1025,13 +1025,13 @@
 
     /**
      * Gets the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as
-     * a <code>byte</code> array in the Java programming language.
+     * of this rowset's {@code ResultSet} object as
+     * a {@code byte} array in the Java programming language.
      * The bytes represent the raw values returned by the driver.
      *
      * @param columnIndex the first column is 1, the second is 2, and so on
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     * value returned is <code>null</code>
+     * @return the column value; if the value is SQL {@code NULL}, the
+     *         value returned is {@code null}
      * @throws SQLException if (1) a database access error occurs
      *            or (2) this rowset does not have a currently valid connection,
      *            prepared statement, and result set
@@ -1044,12 +1044,12 @@
 
     /**
      * Gets the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as
-     * a <code>java.sql.Date</code> object in the Java programming language.
+     * of this rowset's {@code ResultSet} object as
+     * a {@code java.sql.Date} object in the Java programming language.
      *
      * @param columnIndex the first column is 1, the second is 2, and so on
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     * value returned is <code>null</code>
+     * @return the column value; if the value is SQL {@code NULL}, the
+     *         value returned is {@code null}
      * @throws SQLException if (1) a database access error occurs
      *            or (2) this rowset does not have a currently valid connection,
      *            prepared statement, and result set
@@ -1062,12 +1062,12 @@
 
     /**
      * Gets the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as
-     * a <code>java.sql.Time</code> object in the Java programming language.
+     * of this rowset's {@code ResultSet} object as
+     * a {@code java.sql.Time} object in the Java programming language.
      *
      * @param columnIndex the first column is 1, the second is 2, and so on
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     * value returned is <code>null</code>
+     * @return the column value; if the value is SQL {@code NULL}, the
+     *         value returned is {@code null}
      * @throws SQLException if (1) a database access error occurs
      *            or (2) this rowset does not have a currently valid connection,
      *            prepared statement, and result set
@@ -1080,12 +1080,12 @@
 
     /**
      * Gets the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as
-     * a <code>java.sql.Timestamp</code> object in the Java programming language.
+     * of this rowset's {@code ResultSet} object as
+     * a {@code java.sql.Timestamp} object in the Java programming language.
      *
      * @param columnIndex the first column is 1, the second is 2, and so on
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     * value returned is <code>null</code>
+     * @return the column value; if the value is SQL {@code NULL}, the
+     *         value returned is {@code null}
      * @throws SQLException if (1) a database access error occurs
      *            or (2) this rowset does not have a currently valid connection,
      *            prepared statement, and result set
@@ -1098,25 +1098,25 @@
 
     /**
      * Gets the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as
+     * of this rowset's {@code ResultSet} object as
      * a stream of ASCII characters. The value can then be read in chunks from the
      * stream. This method is particularly
-     * suitable for retrieving large <code>LONGVARCHAR</code> values.
+     * suitable for retrieving large {@code LONGVARCHAR} values.
      * The JDBC driver will
      * do any necessary conversion from the database format into ASCII.
      *
      * <P><B>Note:</B> All the data in the returned stream must be
      * read prior to getting the value of any other column. The next
-     * call to a <code>getXXX</code> method implicitly closes the stream.  Also, a
-     * stream may return <code>0</code> when the method
-     * <code>InputStream.available</code>
+     * call to a {@code getXXX} method implicitly closes the stream.  Also, a
+     * stream may return {@code 0} when the method
+     * {@code InputStream.available}
      * is called whether there is data available or not.
      *
      * @param columnIndex the first column is 1, the second is 2, and so on
      * @return a Java input stream that delivers the database column value
-     * as a stream of one-byte ASCII characters;
-     * if the value is SQL <code>NULL</code>, the
-     * value returned is <code>null</code>
+     *         as a stream of one-byte ASCII characters;
+     *         if the value is SQL {@code NULL}, the
+     *         value returned is {@code null}
      * @throws SQLException if (1) database access error occurs
      *            (2) this rowset does not have a currently valid connection,
      *            prepared statement, and result set
@@ -1129,31 +1129,31 @@
 
     /**
      * Gets the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as
+     * of this rowset's {@code ResultSet} object as
      * as a stream of Unicode characters.
      * The value can then be read in chunks from the
      * stream. This method is particularly
-     * suitable for retrieving large<code>LONGVARCHAR</code>values.  The JDBC driver will
+     * suitable for retrieving large{@code LONGVARCHAR}values.  The JDBC driver will
      * do any necessary conversion from the database format into Unicode.
      * The byte format of the Unicode stream must be Java UTF-8,
      * as specified in the Java virtual machine specification.
      *
      * <P><B>Note:</B> All the data in the returned stream must be
      * read prior to getting the value of any other column. The next
-     * call to a <code>getXXX</code> method implicitly closes the stream.  Also, a
-     * stream may return <code>0</code> when the method
-     * <code>InputStream.available</code>
+     * call to a {@code getXXX} method implicitly closes the stream.  Also, a
+     * stream may return {@code 0} when the method
+     * {@code InputStream.available}
      * is called whether there is data available or not.
      *
      * @param columnIndex the first column is 1, the second is 2, and so on
      * @return a Java input stream that delivers the database column value
-     * as a stream in Java UTF-8 byte format;
-     * if the value is SQL <code>NULL</code>, the value returned is <code>null</code>
+     *         as a stream in Java UTF-8 byte format;
+     *         if the value is SQL {@code NULL}, the value returned is {@code null}
      * @throws SQLException if (1) a database access error occurs
      *            or (2) this rowset does not have a currently valid connection,
      *            prepared statement, and result set
-     * @deprecated use <code>getCharacterStream</code> in place of
-     *              <code>getUnicodeStream</code>
+     * @deprecated use {@code getCharacterStream} in place of
+     *              {@code getUnicodeStream}
      */
     @Deprecated
     public java.io.InputStream getUnicodeStream(int columnIndex) throws SQLException {
@@ -1165,22 +1165,22 @@
     /**
      * Gets the value of a column in the current row as a stream of
      * the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as a binary stream of
+     * of this rowset's {@code ResultSet} object as a binary stream of
      * uninterpreted bytes. The value can then be read in chunks from the
      * stream. This method is particularly
-     * suitable for retrieving large <code>LONGVARBINARY</code> values.
+     * suitable for retrieving large {@code LONGVARBINARY} values.
      *
      * <P><B>Note:</B> All the data in the returned stream must be
      * read prior to getting the value of any other column. The next
-     * call to a <code>getXXX</code> method implicitly closes the stream.  Also, a
-     * stream may return <code>0</code> when the method
-     * <code>InputStream.available</code>
+     * call to a {@code getXXX} method implicitly closes the stream.  Also, a
+     * stream may return {@code 0} when the method
+     * {@code InputStream.available}
      * is called whether there is data available or not.
      *
      * @param columnIndex the first column is 1, the second is 2, and so on
      * @return a Java input stream that delivers the database column value
-     * as a stream of uninterpreted bytes;
-     * if the value is SQL <code>NULL</code>, the value returned is <code>null</code>
+     *         as a stream of uninterpreted bytes;
+     *         if the value is SQL {@code NULL}, the value returned is {@code null}
      * @throws SQLException if (1) a database access error occurs
      *            or (2) this rowset does not have a currently valid connection,
      *            prepared statement, and result set
@@ -1198,12 +1198,12 @@
 
     /**
      * Gets the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as
-     * a <code>String</code>.
+     * of this rowset's {@code ResultSet} object as
+     * a {@code String}.
      *
      * @param columnName the SQL name of the column
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     * value returned is <code>null</code>
+     * @return the column value; if the value is SQL {@code NULL}, the
+     *         value returned is {@code null}
      * @throws SQLException if (1) a database access error occurs
      *            or (2) this rowset does not have a currently valid connection,
      *            prepared statement, and result set
@@ -1214,12 +1214,12 @@
 
     /**
      * Gets the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as
-     * a <code>boolean</code>.
+     * of this rowset's {@code ResultSet} object as
+     * a {@code boolean}.
      *
      * @param columnName the SQL name of the column
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     * value returned is <code>false</code>
+     * @return the column value; if the value is SQL {@code NULL}, the
+     *         value returned is {@code false}
      * @throws SQLException if (1) a database access error occurs
      *            or (2) this rowset does not have a currently valid connection,
      *            prepared statement, and result set
@@ -1230,12 +1230,12 @@
 
     /**
      * Gets the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as
-     * a <code>byte</code>.
+     * of this rowset's {@code ResultSet} object as
+     * a {@code byte}.
      *
      * @param columnName the SQL name of the column
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     * value returned is <code>0</code>
+     * @return the column value; if the value is SQL {@code NULL}, the
+     *         value returned is {@code 0}
      * @throws SQLException if (1) a database access error occurs
      *            or (2) this rowset does not have a currently valid connection,
      *            prepared statement, and result set
@@ -1246,12 +1246,12 @@
 
     /**
      * Gets the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as
-     * a <code>short</code>.
+     * of this rowset's {@code ResultSet} object as
+     * a {@code short}.
      *
      * @param columnName the SQL name of the column
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     * value returned is <code>0</code>
+     * @return the column value; if the value is SQL {@code NULL}, the
+     *         value returned is {@code 0}
      * @throws SQLException if (1) a database access error occurs
      *            or (2) this rowset does not have a currently valid connection,
      *            prepared statement, and result set
@@ -1262,12 +1262,12 @@
 
     /**
      * Gets the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as
-     * an <code>int</code>.
+     * of this rowset's {@code ResultSet} object as
+     * an {@code int}.
      *
      * @param columnName the SQL name of the column
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     * value returned is <code>0</code>
+     * @return the column value; if the value is SQL {@code NULL}, the
+     *         value returned is {@code 0}
      * @throws SQLException if (1) a database access error occurs
      *            or (2) this rowset does not have a currently valid connection,
      *            prepared statement, and result set
@@ -1278,12 +1278,12 @@
 
     /**
      * Gets the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as
-     * a <code>long</code>.
+     * of this rowset's {@code ResultSet} object as
+     * a {@code long}.
      *
      * @param columnName the SQL name of the column
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     * value returned is <code>0</code>
+     * @return the column value; if the value is SQL {@code NULL}, the
+     *         value returned is {@code 0}
      * @throws SQLException if a database access error occurs
      *            or this rowset does not have a currently valid connection,
      *            prepared statement, and result set
@@ -1294,12 +1294,12 @@
 
     /**
      * Gets the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as
-     * a <code>float</code>.
+     * of this rowset's {@code ResultSet} object as
+     * a {@code float}.
      *
      * @param columnName the SQL name of the column
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     * value returned is <code>0</code>
+     * @return the column value; if the value is SQL {@code NULL}, the
+     *         value returned is {@code 0}
      * @throws SQLException if (1) a database access error occurs
      *            or (2) this rowset does not have a currently valid connection,
      *            prepared statement, and result set
@@ -1310,12 +1310,12 @@
 
     /**
      * Gets the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as
-     * a <code>double</code>.
+     * of this rowset's {@code ResultSet} object as
+     * a {@code double}.
      *
      * @param columnName the SQL name of the column
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     * value returned is <code>0</code>
+     * @return the column value; if the value is SQL {@code NULL}, the
+     *         value returned is {@code 0}
      * @throws SQLException if (1) a database access error occurs
      *            or (2) this rowset does not have a currently valid connection,
      *            prepared statement, and result set
@@ -1326,13 +1326,13 @@
 
     /**
      * Gets the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as
-     * a <code>java.math.BigDecimal</code>.
+     * of this rowset's {@code ResultSet} object as
+     * a {@code java.math.BigDecimal}.
      *
      * @param columnName the SQL name of the column
      * @param scale the number of digits to the right of the decimal point
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     * value returned is <code>null</code>
+     * @return the column value; if the value is SQL {@code NULL}, the
+     * value returned is {@code null}
      * @throws SQLException if (1) adatabase access error occurs
      *            or (2) this rowset does not have a currently valid connection,
      *            prepared statement, and result set
@@ -1345,13 +1345,13 @@
 
     /**
      * Gets the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as
-     * a <code>byte</code> array in the Java programming language.
+     * of this rowset's {@code ResultSet} object as
+     * a {@code byte} array in the Java programming language.
      * The bytes represent the raw values returned by the driver.
      *
      * @param columnName the SQL name of the column
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     * value returned is <code>null</code>
+     * @return the column value; if the value is SQL {@code NULL}, the
+     *         value returned is {@code null}
      * @throws SQLException if (1) a database access error occurs
      *            or (2) this rowset does not have a currently valid connection,
      *            prepared statement, and result set
@@ -1362,12 +1362,12 @@
 
     /**
      * Gets the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as
-     * a <code>java.sql.Date</code> object in the Java programming language.
+     * of this rowset's {@code ResultSet} object as
+     * a {@code java.sql.Date} object in the Java programming language.
      *
      * @param columnName the SQL name of the column
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     * value returned is <code>null</code>
+     * @return the column value; if the value is SQL {@code NULL}, the
+     *         value returned is {@code null}
      * @throws SQLException if (1) a database access error occurs
      *            or (2) this rowset does not have a currently valid connection,
      *            prepared statement, and result set
@@ -1378,13 +1378,13 @@
 
     /**
      * Gets the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as
-     * a <code>java.sql.Time</code> object in the Java programming language.
+     * of this rowset's {@code ResultSet} object as
+     * a {@code java.sql.Time} object in the Java programming language.
      *
      * @param columnName the SQL name of the column
      * @return the column value;
-     * if the value is SQL <code>NULL</code>,
-     * the value returned is <code>null</code>
+     * if the value is SQL {@code NULL},
+     * the value returned is {@code null}
      * @throws SQLException if (1) a database access error occurs
      *            or (2) this rowset does not have a currently valid connection,
      *            prepared statement, and result set
@@ -1395,12 +1395,12 @@
 
     /**
      * Gets the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as
-     * a <code>java.sql.Timestamp</code> object.
+     * of this rowset's {@code ResultSet} object as
+     * a {@code java.sql.Timestamp} object.
      *
      * @param columnName the SQL name of the column
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     * value returned is <code>null</code>
+     * @return the column value; if the value is SQL {@code NULL}, the
+     * value returned is {@code null}
      * @throws SQLException if (1) a database access error occurs
      *            or (2) this rowset does not have a currently valid connection,
      *            prepared statement, and result set
@@ -1411,24 +1411,24 @@
 
     /**
      * Gets the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as a stream of
+     * of this rowset's {@code ResultSet} object as a stream of
      * ASCII characters. The value can then be read in chunks from the
      * stream. This method is particularly
-     * suitable for retrieving large <code>LONGVARCHAR</code> values.
+     * suitable for retrieving large {@code LONGVARCHAR} values.
      * The JDBC driver will
      * do any necessary conversion from the database format into ASCII.
      *
      * <P><B>Note:</B> All the data in the returned stream must be
      * read prior to getting the value of any other column. The next
-     * call to a <code>getXXX</code> method implicitly closes the stream. Also, a
-     * stream may return <code>0</code> when the method <code>available</code>
+     * call to a {@code getXXX} method implicitly closes the stream. Also, a
+     * stream may return {@code 0} when the method {@code available}
      * is called whether there is data available or not.
      *
      * @param columnName the SQL name of the column
      * @return a Java input stream that delivers the database column value
-     * as a stream of one-byte ASCII characters.
-     * If the value is SQL <code>NULL</code>,
-     * the value returned is <code>null</code>.
+     *         as a stream of one-byte ASCII characters.
+     *         If the value is SQL {@code NULL},
+     *         the value returned is {@code null}.
      * @throws SQLException if (1) a database access error occurs
      *            or (2) this rowset does not have a currently valid connection,
      *            prepared statement, and result set
@@ -1439,10 +1439,10 @@
 
     /**
      * Gets the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as a stream of
+     * of this rowset's {@code ResultSet} object as a stream of
      * Unicode characters. The value can then be read in chunks from the
      * stream. This method is particularly
-     * suitable for retrieving large <code>LONGVARCHAR</code> values.
+     * suitable for retrieving large {@code LONGVARCHAR} values.
      * The JDBC driver will
      * do any necessary conversion from the database format into Unicode.
      * The byte format of the Unicode stream must be Java UTF-8,
@@ -1450,15 +1450,15 @@
      *
      * <P><B>Note:</B> All the data in the returned stream must be
      * read prior to getting the value of any other column. The next
-     * call to a <code>getXXX</code> method implicitly closes the stream. Also, a
-     * stream may return <code>0</code> when the method <code>available</code>
+     * call to a {@code getXXX} method implicitly closes the stream. Also, a
+     * stream may return {@code 0} when the method {@code available}
      * is called whether there is data available or not.
      *
      * @param columnName the SQL name of the column
      * @return a Java input stream that delivers the database column value
-     * as a stream of two-byte Unicode characters.
-     * If the value is SQL <code>NULL</code>,
-     * the value returned is <code>null</code>.
+     *         as a stream of two-byte Unicode characters.
+     *         If the value is SQL {@code NULL},
+     *         the value returned is {@code null}.
      * @throws SQLException if (1) a database access error occurs
      *            or (2) this rowset does not have a currently valid connection,
      *            prepared statement, and result set
@@ -1471,23 +1471,23 @@
 
     /**
      * Gets the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as a stream of uninterpreted
-     * <code>byte</code>s.
+     * of this rowset's {@code ResultSet} object as a stream of uninterpreted
+     * {@code byte}s.
      * The value can then be read in chunks from the
      * stream. This method is particularly
-     * suitable for retrieving large <code>LONGVARBINARY</code>
+     * suitable for retrieving large {@code LONGVARBINARY}
      * values.
      *
      * <P><B>Note:</B> All the data in the returned stream must be
      * read prior to getting the value of any other column. The next
-     * call to a <code>getXXX</code> method implicitly closes the stream. Also, a
-     * stream may return <code>0</code> when the method <code>available</code>
+     * call to a {@code getXXX} method implicitly closes the stream. Also, a
+     * stream may return {@code 0} when the method {@code available}
      * is called whether there is data available or not.
      *
      * @param columnName the SQL name of the column
      * @return a Java input stream that delivers the database column value
-     * as a stream of uninterpreted bytes;
-     * if the value is SQL <code>NULL</code>, the result is <code>null</code>
+     *         as a stream of uninterpreted bytes;
+     *         if the value is SQL {@code NULL}, the result is {@code null}
      * @throws SQLException if (1) a database access error occurs
      *            or (2) this rowset does not have a currently valid connection,
      *            prepared statement, and result set
@@ -1503,21 +1503,21 @@
 
     /**
      * Returns the first warning reported by calls on this rowset's
-     * <code>ResultSet</code> object.
-     * Subsequent warnings on this rowset's <code>ResultSet</code> object
-     * will be chained to the <code>SQLWarning</code> object that
+     * {@code ResultSet} object.
+     * Subsequent warnings on this rowset's {@code ResultSet} object
+     * will be chained to the {@code SQLWarning} object that
      * this method returns.
      *
      * <P>The warning chain is automatically cleared each time a new
      * row is read.
      *
      * <P><B>Note:</B> This warning chain only covers warnings caused
-     * by <code>ResultSet</code> methods.  Any warning caused by
-     * <code>Statement</code> methods
+     * by {@code ResultSet} methods.  Any warning caused by
+     * {@code Statement} methods
      * (such as reading OUT parameters) will be chained on the
-     * <code>Statement</code> object.
-     *
-     * @return the first <code>SQLWarning</code> object reported or <code>null</code>
+     * {@code Statement} object.
+     *
+     * @return the first {@code SQLWarning} object reported or {@code null}
      * @throws SQLException if (1) a database access error occurs
      *            or (2) this rowset does not have a currently valid connection,
      *            prepared statement, and result set
@@ -1529,10 +1529,10 @@
     }
 
     /**
-     * Clears all warnings reported on this rowset's <code>ResultSet</code> object.
-     * After this method is called, the method <code>getWarnings</code>
-     * returns <code>null</code> until a new warning is
-     * reported for this rowset's <code>ResultSet</code> object.
+     * Clears all warnings reported on this rowset's {@code ResultSet} object.
+     * After this method is called, the method {@code getWarnings}
+     * returns {@code null} until a new warning is
+     * reported for this rowset's {@code ResultSet} object.
      *
      * @throws SQLException if (1) a database access error occurs
      *            or (2) this rowset does not have a currently valid connection,
@@ -1545,26 +1545,26 @@
     }
 
     /**
-     * Gets the name of the SQL cursor used by this rowset's <code>ResultSet</code>
+     * Gets the name of the SQL cursor used by this rowset's {@code ResultSet}
      * object.
      *
      * <P>In SQL, a result table is retrieved through a cursor that is
      * named. The current row of a result set can be updated or deleted
      * using a positioned update/delete statement that references the
      * cursor name. To insure that the cursor has the proper isolation
-     * level to support update, the cursor's <code>select</code> statement should be
+     * level to support update, the cursor's {@code select} statement should be
      * of the form 'select for update'. If the 'for update' clause is
      * omitted, the positioned updates may fail.
      *
      * <P>The JDBC API supports this SQL feature by providing the name of the
-     * SQL cursor used by a <code>ResultSet</code> object.
-     * The current row of a <code>ResultSet</code> object
+     * SQL cursor used by a {@code ResultSet} object.
+     * The current row of a {@code ResultSet} object
      * is also the current row of this SQL cursor.
      *
      * <P><B>Note:</B> If positioned update is not supported, a
-     * <code>SQLException</code> is thrown.
-     *
-     * @return the SQL name for this rowset's <code>ResultSet</code> object's cursor
+     * {@code SQLException} is thrown.
+     *
+     * @return the SQL name for this rowset's {@code ResultSet} object's cursor
      * @throws SQLException if (1) a database access error occurs
      *            or (2) xthis rowset does not have a currently valid connection,
      *            prepared statement, and result set
@@ -1577,9 +1577,9 @@
 
     /**
      * Retrieves the  number, types and properties of
-     * this rowset's <code>ResultSet</code> object's columns.
-     *
-     * @return the description of this rowset's <code>ResultSet</code>
+     * this rowset's {@code ResultSet} object's columns.
+     *
+     * @return the description of this rowset's {@code ResultSet}
      *     object's columns
      * @throws SQLException if (1) a database access error occurs
      *     or (2) this rowset does not have a currently valid connection,
@@ -1607,8 +1607,8 @@
 
     /**
      * <p>Gets the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as
-     * an <code>Object</code>.
+     * of this rowset's {@code ResultSet} object as
+     * an {@code Object}.
      *
      * <p>This method will return the value of the given column as a
      * Java object.  The type of the Java object will be the default
@@ -1620,14 +1620,14 @@
      * abstract data types.
      *
      * In the JDBC 3.0 API, the behavior of method
-     * <code>getObject</code> is extended to materialize
+     * {@code getObject} is extended to materialize
      * data of SQL user-defined types.  When a column contains
      * a structured or distinct value, the behavior of this method is as
-     * if it were a call to: <code>getObject(columnIndex,
-     * this.getStatement().getConnection().getTypeMap())</code>.
+     * if it were a call to: {@code getObject(columnIndex,
+     * this.getStatement().getConnection().getTypeMap())}.
      *
      * @param columnIndex the first column is 1, the second is 2, and so on
-     * @return a <code>java.lang.Object</code> holding the column value
+     * @return a {@code java.lang.Object} holding the column value
      * @throws SQLException if (1) a database access error occurs
      *            or (2) this rowset does not currently have a valid connection,
      *            prepared statement, and result set
@@ -1640,8 +1640,8 @@
 
     /**
      * <p>Gets the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as
-     * an <code>Object</code>.
+     * of this rowset's {@code ResultSet} object as
+     * an {@code Object}.
      *
      * <p>This method will return the value of the given column as a
      * Java object.  The type of the Java object will be the default
@@ -1653,14 +1653,14 @@
      * abstract data types.
      *
      * In the JDBC 3.0 API, the behavior of the method
-     * <code>getObject</code> is extended to materialize
+     * {@code getObject} is extended to materialize
      * data of SQL user-defined types.  When a column contains
      * a structured or distinct value, the behavior of this method is as
-     * if it were a call to: <code>getObject(columnIndex,
-     * this.getStatement().getConnection().getTypeMap())</code>.
+     * if it were a call to: {@code getObject(columnIndex,
+     * this.getStatement().getConnection().getTypeMap())}.
      *
      * @param columnName the SQL name of the column
-     * @return a <code>java.lang.Object</code> holding the column value
+     * @return a {@code java.lang.Object} holding the column value
      * @throws SQLException if (1) a database access error occurs
      *            or (2) this rowset does not currently have a valid connection,
      *            prepared statement, and result set
@@ -1672,9 +1672,9 @@
     //----------------------------------------------------------------
 
     /**
-     * Maps the given <code>JdbcRowSetImpl</code> column name to its
-     * <code>JdbcRowSetImpl</code> column index and reflects this on
-     * the internal <code>ResultSet</code> object.
+     * Maps the given {@code JdbcRowSetImpl} column name to its
+     * {@code JdbcRowSetImpl} column index and reflects this on
+     * the internal {@code ResultSet} object.
      *
      * @param columnName the name of the column
      * @return the column index of the given column name
@@ -1697,11 +1697,11 @@
 
     /**
      * Gets the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as a
-     * <code>java.io.Reader</code> object.
-     * @return a <code>java.io.Reader</code> object that contains the column
-     * value; if the value is SQL <code>NULL</code>, the value returned is
-     * <code>null</code>.
+     * of this rowset's {@code ResultSet} object as a
+     * {@code java.io.Reader} object.
+     * @return a {@code java.io.Reader} object that contains the column
+     * value; if the value is SQL {@code NULL}, the value returned is
+     * {@code null}.
      * @param columnIndex the first column is 1, the second is 2, and so on
      *
      */
@@ -1713,14 +1713,14 @@
 
     /**
      * Gets the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as a
-     * <code>java.io.Reader</code> object.
-     *
-     * @return a <code>java.io.Reader</code> object that contains the column
-     * value; if the value is SQL <code>NULL</code>, the value returned is
-     * <code>null</code>.
+     * of this rowset's {@code ResultSet} object as a
+     * {@code java.io.Reader} object.
+     *
+     * @return a {@code java.io.Reader} object that contains the column
+     * value; if the value is SQL {@code NULL}, the value returned is
+     * {@code null}.
      * @param columnName the name of the column
-     * @return the value in the specified column as a <code>java.io.Reader</code>
+     * @return the value in the specified column as a {@code java.io.Reader}
      *
      */
     public java.io.Reader getCharacterStream(String columnName) throws SQLException {
@@ -1729,13 +1729,13 @@
 
     /**
      * Gets the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as a
-     * <code>java.math.BigDecimal</code> with full precision.
+     * of this rowset's {@code ResultSet} object as a
+     * {@code java.math.BigDecimal} with full precision.
      *
      * @param columnIndex the first column is 1, the second is 2, and so on
      * @return the column value (full precision);
-     * if the value is SQL <code>NULL</code>, the value returned is
-     * <code>null</code>.
+     *         if the value is SQL {@code NULL}, the value returned is
+     *         {@code null}.
      * @throws SQLException if a database access error occurs
      *            or this rowset does not currently have a valid
      *            connection, prepared statement, and result set
@@ -1748,13 +1748,13 @@
 
     /**
      * Gets the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as a
-     * <code>java.math.BigDecimal</code> with full precision.
+     * of this rowset's {@code ResultSet} object as a
+     * {@code java.math.BigDecimal} with full precision.
      *
      * @param columnName the column name
      * @return the column value (full precision);
-     * if the value is SQL <code>NULL</code>, the value returned is
-     * <code>null</code>.
+     *         if the value is SQL {@code NULL}, the value returned is
+     *         {@code null}.
      * @throws SQLException if a database access error occurs
      *            or this rowset does not currently have a valid
      *            connection, prepared statement, and result set
@@ -1769,11 +1769,11 @@
 
     /**
      * Indicates whether the cursor is before the first row in
-     * this rowset's <code>ResultSet</code> object.
-     *
-     * @return <code>true</code> if the cursor is before the first row;
-     * <code>false</code> if the cursor is at any other position or the
-     * result set contains no rows
+     * this rowset's {@code ResultSet} object.
+     *
+     * @return {@code true} if the cursor is before the first row;
+     *         {@code false} if the cursor is at any other position or the
+     *         result set contains no rows
      * @throws SQLException if a database access error occurs
      *            or this rowset does not currently have a valid
      *            connection, prepared statement, and result set
@@ -1786,11 +1786,11 @@
 
     /**
      * Indicates whether the cursor is after the last row in
-     * this rowset's <code>ResultSet</code> object.
-     *
-     * @return <code>true</code> if the cursor is after the last row;
-     * <code>false</code> if the cursor is at any other position or the
-     * result set contains no rows
+     * this rowset's {@code ResultSet} object.
+     *
+     * @return {@code true} if the cursor is after the last row;
+     *         {@code false} if the cursor is at any other position or the
+     *         result set contains no rows
      * @throws SQLException if a database access error occurs
      *            or this rowset does not currently have a valid
      *            connection, prepared statement, and result set
@@ -1803,10 +1803,10 @@
 
     /**
      * Indicates whether the cursor is on the first row of
-     * this rowset's <code>ResultSet</code> object.
-     *
-     * @return <code>true</code> if the cursor is on the first row;
-     * <code>false</code> otherwise
+     * this rowset's {@code ResultSet} object.
+     *
+     * @return {@code true} if the cursor is on the first row;
+     *         {@code false} otherwise
      * @throws SQLException if a database access error occurs
      *            or this rowset does not currently have a valid
      *            connection, prepared statement, and result set
@@ -1819,14 +1819,14 @@
 
     /**
      * Indicates whether the cursor is on the last row of
-     * this rowset's <code>ResultSet</code> object.
-     * Note: Calling the method <code>isLast</code> may be expensive
+     * this rowset's {@code ResultSet} object.
+     * Note: Calling the method {@code isLast} may be expensive
      * because the JDBC driver
      * might need to fetch ahead one row in order to determine
      * whether the current row is the last row in the result set.
      *
-     * @return <code>true</code> if the cursor is on the last row;
-     * <code>false</code> otherwise
+     * @return {@code true} if the cursor is on the last row;
+     *         {@code false} otherwise
      * @throws SQLException if a database access error occurs
      *            or this rowset does not currently have a valid
      *            connection, prepared statement, and result set
@@ -1840,11 +1840,11 @@
 
     /**
      * Moves the cursor to the front of
-     * this rowset's <code>ResultSet</code> object, just before the
+     * this rowset's {@code ResultSet} object, just before the
      * first row. This method has no effect if the result set contains no rows.
      *
      * @throws SQLException if (1) a database access error occurs,
-     *            (2) the result set type is <code>TYPE_FORWARD_ONLY</code>,
+     *            (2) the result set type is {@code TYPE_FORWARD_ONLY},
      *            or (3) this rowset does not currently have a valid
      *            connection, prepared statement, and result set
      */
@@ -1857,10 +1857,10 @@
 
     /**
      * Moves the cursor to the end of
-     * this rowset's <code>ResultSet</code> object, just after the
+     * this rowset's {@code ResultSet} object, just after the
      * last row. This method has no effect if the result set contains no rows.
      * @throws SQLException if (1) a database access error occurs,
-     *            (2) the result set type is <code>TYPE_FORWARD_ONLY</code>,
+     *            (2) the result set type is {@code TYPE_FORWARD_ONLY},
      *            or (3) this rowset does not currently have a valid
      *            connection, prepared statement, and result set
      */
@@ -1873,12 +1873,12 @@
 
     /**
      * Moves the cursor to the first row in
-     * this rowset's <code>ResultSet</code> object.
-     *
-     * @return <code>true</code> if the cursor is on a valid row;
-     * <code>false</code> if there are no rows in the result set
+     * this rowset's {@code ResultSet} object.
+     *
+     * @return {@code true} if the cursor is on a valid row;
+     * {@code false} if there are no rows in the result set
      * @throws SQLException if (1) a database access error occurs,
-     *            (2) the result set type is <code>TYPE_FORWARD_ONLY</code>,
+     *            (2) the result set type is {@code TYPE_FORWARD_ONLY},
      *            or (3) this rowset does not currently have a valid
      *            connection, prepared statement, and result set
      */
@@ -1893,12 +1893,12 @@
 
     /**
      * Moves the cursor to the last row in
-     * this rowset's <code>ResultSet</code> object.
-     *
-     * @return <code>true</code> if the cursor is on a valid row;
-     * <code>false</code> if there are no rows in the result set
+     * this rowset's {@code ResultSet} object.
+     *
+     * @return {@code true} if the cursor is on a valid row;
+     * {@code false} if there are no rows in the result set
      * @throws SQLException if (1) a database access error occurs,
-     *            (2) the result set type is <code>TYPE_FORWARD_ONLY</code>,
+     *            (2) the result set type is {@code TYPE_FORWARD_ONLY},
      *            or (3) this rowset does not currently have a valid
      *            connection, prepared statement, and result set
      */
@@ -1914,7 +1914,7 @@
      * Retrieves the current row number.  The first row is number 1, the
      * second is number 2, and so on.
      *
-     * @return the current row number; <code>0</code> if there is no current row
+     * @return the current row number; {@code 0} if there is no current row
      * @throws SQLException if a database access error occurs
      *            or this rowset does not currently have a valid connection,
      *            prepared statement, and result set
@@ -1927,7 +1927,7 @@
 
     /**
      * Moves the cursor to the given row number in
-     * this rowset's internal <code>ResultSet</code> object.
+     * this rowset's internal {@code ResultSet} object.
      *
      * <p>If the row number is positive, the cursor moves to
      * the given row number with respect to the
@@ -1937,23 +1937,23 @@
      * <p>If the given row number is negative, the cursor moves to
      * an absolute row position with respect to
      * the end of the result set.  For example, calling the method
-     * <code>absolute(-1)</code> positions the
-     * cursor on the last row, calling the method <code>absolute(-2)</code>
+     * {@code absolute(-1)} positions the
+     * cursor on the last row, calling the method {@code absolute(-2)}
      * moves the cursor to the next-to-last row, and so on.
      *
      * <p>An attempt to position the cursor beyond the first/last row in
      * the result set leaves the cursor before the first row or after
      * the last row.
      *
-     * <p><B>Note:</B> Calling <code>absolute(1)</code> is the same
-     * as calling <code>first()</code>. Calling <code>absolute(-1)</code>
-     * is the same as calling <code>last()</code>.
-     *
-     * @return <code>true</code> if the cursor is on the result set;
-     * <code>false</code> otherwise
+     * <p><B>Note:</B> Calling {@code absolute(1)} is the same
+     * as calling {@code first()}. Calling {@code absolute(-1)}
+     * is the same as calling {@code last()}.
+     *
+     * @return {@code true} if the cursor is on the result set;
+     * {@code false} otherwise
      * @throws SQLException if (1) a database access error occurs,
-     *            (2) the row is <code>0</code>, (3) the result set
-     *            type is <code>TYPE_FORWARD_ONLY</code>, or (4) this
+     *            (2) the row is {@code 0}, (3) the result set
+     *            type is {@code TYPE_FORWARD_ONLY}, or (4) this
      *            rowset does not currently have a valid connection,
      *            prepared statement, and result set
      */
@@ -1969,21 +1969,21 @@
      * Moves the cursor a relative number of rows, either positive or negative.
      * Attempting to move beyond the first/last row in the
      * result set positions the cursor before/after the
-     * the first/last row. Calling <code>relative(0)</code> is valid, but does
+     * the first/last row. Calling {@code relative(0)} is valid, but does
      * not change the cursor position.
      *
-     * <p>Note: Calling the method <code>relative(1)</code>
-     * is different from calling the method <code>next()</code>
-     * because is makes sense to call <code>next()</code> when there
+     * <p>Note: Calling the method {@code relative(1)}
+     * is different from calling the method {@code next()}
+     * because is makes sense to call {@code next()} when there
      * is no current row,
      * for example, when the cursor is positioned before the first row
      * or after the last row of the result set.
      *
-     * @return <code>true</code> if the cursor is on a row;
-     * <code>false</code> otherwise
+     * @return {@code true} if the cursor is on a row;
+     *         {@code false} otherwise
      * @throws SQLException if (1) a database access error occurs,
      *            (2) there is no current row, (3) the result set
-     *            type is <code>TYPE_FORWARD_ONLY</code>, or (4) this
+     *            type is {@code TYPE_FORWARD_ONLY}, or (4) this
      *            rowset does not currently have a valid connection,
      *            prepared statement, and result set
      */
@@ -1997,16 +1997,16 @@
 
     /**
      * Moves the cursor to the previous row in this
-     * <code>ResultSet</code> object.
-     *
-     * <p><B>Note:</B> Calling the method <code>previous()</code> is not the same as
-     * calling the method <code>relative(-1)</code> because it
-     * makes sense to call <code>previous()</code> when there is no current row.
-     *
-     * @return <code>true</code> if the cursor is on a valid row;
-     * <code>false</code> if it is off the result set
+     * {@code ResultSet} object.
+     *
+     * <p><B>Note:</B> Calling the method {@code previous()} is not the same as
+     * calling the method {@code relative(-1)} because it
+     * makes sense to call {@code previous()} when there is no current row.
+     *
+     * @return {@code true} if the cursor is on a valid row;
+     *         {@code false} if it is off the result set
      * @throws SQLException if (1) a database access error occurs,
-     *            (2) the result set type is <code>TYPE_FORWARD_ONLY</code>,
+     *            (2) the result set type is {@code TYPE_FORWARD_ONLY},
      *            or (3) this rowset does not currently have a valid
      *            connection, prepared statement, and result set
      */
@@ -2020,15 +2020,15 @@
 
     /**
      * Gives a hint as to the direction in which the rows in this
-     * <code>ResultSet</code> object will be processed.
+     * {@code ResultSet} object will be processed.
      * The initial value is determined by the
-     * <code>Statement</code> object
-     * that produced this rowset's <code>ResultSet</code> object.
+     * {@code Statement} object
+     * that produced this rowset's {@code ResultSet} object.
      * The fetch direction may be changed at any time.
      *
      * @throws SQLException if (1) a database access error occurs,
-     *            (2) the result set type is <code>TYPE_FORWARD_ONLY</code>
-     *            and the fetch direction is not <code>FETCH_FORWARD</code>,
+     *            (2) the result set type is {@code TYPE_FORWARD_ONLY}
+     *            and the fetch direction is not {@code FETCH_FORWARD},
      *            or (3) this rowset does not currently have a valid
      *            connection, prepared statement, and result set
      * @see java.sql.Statement#setFetchDirection
@@ -2041,10 +2041,10 @@
 
     /**
      * Returns the fetch direction for this
-     * <code>ResultSet</code> object.
+     * {@code ResultSet} object.
      *
      * @return the current fetch direction for this rowset's
-     *         <code>ResultSet</code> object
+     *         {@code ResultSet} object
      * @throws SQLException if a database access error occurs
      *            or this rowset does not currently have a valid connection,
      *            prepared statement, and result set
@@ -2061,16 +2061,16 @@
     /**
      * Gives the JDBC driver a hint as to the number of rows that should
      * be fetched from the database when more rows are needed for this
-     * <code>ResultSet</code> object.
+     * {@code ResultSet} object.
      * If the fetch size specified is zero, the JDBC driver
      * ignores the value and is free to make its own best guess as to what
      * the fetch size should be.  The default value is set by the
-     * <code>Statement</code> object
+     * {@code Statement} object
      * that created the result set.  The fetch size may be changed at any time.
      *
      * @param rows the number of rows to fetch
      * @throws SQLException if (1) a database access error occurs, (2) the
-     *            condition <code>0 <= rows <= this.getMaxRows()</code> is not
+     *            condition {@code 0 <= rows <= this.getMaxRows()} is not
      *            satisfied, or (3) this rowset does not currently have a valid
      *            connection, prepared statement, and result set
      *
@@ -2084,9 +2084,9 @@
     /**
      *
      * Returns the fetch size for this
-     * <code>ResultSet</code> object.
-     *
-     * @return the current fetch size for this rowset's <code>ResultSet</code> object
+     * {@code ResultSet} object.
+     *
+     * @return the current fetch size for this rowset's {@code ResultSet} object
      * @throws SQLException if a database access error occurs
      *            or this rowset does not currently have a valid connection,
      *            prepared statement, and result set
@@ -2111,12 +2111,12 @@
     }
 
     /**
-     * Returns the concurrency mode of this rowset's <code>ResultSet</code> object.
+     * Returns the concurrency mode of this rowset's {@code ResultSet} object.
      * The concurrency used is determined by the
-     * <code>Statement</code> object that created the result set.
-     *
-     * @return the concurrency type, either <code>CONCUR_READ_ONLY</code>
-     * or <code>CONCUR_UPDATABLE</code>
+     * {@code Statement} object that created the result set.
+     *
+     * @return the concurrency type, either {@code CONCUR_READ_ONLY}
+     * or {@code CONCUR_UPDATABLE}
      * @throws SQLException if (1) a database access error occurs
      *            or (2) this rowset does not currently have a valid connection,
      *            prepared statement, and result set
@@ -2138,7 +2138,7 @@
      * Indicates whether the current row has been updated.  The value returned
      * depends on whether or not the result set can detect updates.
      *
-     * @return <code>true</code> if the row has been visibly updated
+     * @return {@code true} if the row has been visibly updated
      * by the owner or another, and updates are detected
      * @throws SQLException if a database access error occurs
      *            or this rowset does not currently have a valid connection,
@@ -2154,10 +2154,10 @@
     /**
      * Indicates whether the current row has had an insertion.
      * The value returned depends on whether or not this
-     * <code>ResultSet</code> object can detect visible inserts.
-     *
-     * @return <code>true</code> if a row has had an insertion
-     * and insertions are detected; <code>false</code> otherwise
+     * {@code ResultSet} object can detect visible inserts.
+     *
+     * @return {@code true} if a row has had an insertion
+     *         and insertions are detected; {@code false} otherwise
      * @throws SQLException if a database access error occurs
      *            or this rowset does not currently have a valid connection,
      *            prepared statement, and result set
@@ -2174,10 +2174,10 @@
      * Indicates whether a row has been deleted.  A deleted row may leave
      * a visible "hole" in a result set.  This method can be used to
      * detect holes in a result set.  The value returned depends on whether
-     * or not this rowset's <code>ResultSet</code> object can detect deletions.
-     *
-     * @return <code>true</code> if a row was deleted and deletions are detected;
-     * <code>false</code> otherwise
+     * or not this rowset's {@code ResultSet} object can detect deletions.
+     *
+     * @return {@code true} if a row was deleted and deletions are detected;
+     *         {@code false} otherwise
      * @throws SQLException if a database access error occurs
      *            or this rowset does not currently have a valid connection,
      *            prepared statement, and result set
@@ -2192,10 +2192,10 @@
     /**
      * Gives a nullable column a null value.
      *
-     * The <code>updateXXX</code> methods are used to update column values in the
-     * current row or the insert row.  The <code>updateXXX</code> methods do not
-     * update the underlying database; instead the <code>updateRow</code>
-     * or <code>insertRow</code> methods are called to update the database.
+     * The {@code updateXXX} methods are used to update column values in the
+     * current row or the insert row.  The {@code updateXXX} methods do not
+     * update the underlying database; instead the {@code updateRow}
+     * or {@code insertRow} methods are called to update the database.
      *
      * @param columnIndex the first column is 1, the second is 2, and so on
      * @throws SQLException if a database access error occurs
@@ -2213,11 +2213,11 @@
     }
 
     /**
-     * Updates the designated column with a <code>boolean</code> value.
-     * The <code>updateXXX</code> methods are used to update column values in the
-     * current row or the insert row.  The <code>updateXXX</code> methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
+     * Updates the designated column with a {@code boolean} value.
+     * The {@code updateXXX} methods are used to update column values in the
+     * current row or the insert row.  The {@code updateXXX} methods do not
+     * update the underlying database; instead the {@code updateRow} or
+     * {@code insertRow} methods are called to update the database.
      *
      * @param columnIndex the first column is 1, the second is 2, and so on
      * @param x the new column value
@@ -2237,11 +2237,11 @@
     }
 
     /**
-     * Updates the designated column with a <code>byte</code> value.
-     * The <code>updateXXX</code> methods are used to update column values in the
-     * current row or the insert row.  The <code>updateXXX</code> methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
+     * Updates the designated column with a {@code byte} value.
+     * The {@code updateXXX} methods are used to update column values in the
+     * current row or the insert row.  The {@code updateXXX} methods do not
+     * update the underlying database; instead the {@code updateRow} or
+     * {@code insertRow} methods are called to update the database.
      *
      *
      * @param columnIndex the first column is 1, the second is 2, and so on
@@ -2262,11 +2262,11 @@
     }
 
     /**
-     * Updates the designated column with a <code>short</code> value.
-     * The <code>updateXXX</code> methods are used to update column values in the
-     * current row or the insert row.  The <code>updateXXX</code> methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
+     * Updates the designated column with a {@code short} value.
+     * The {@code updateXXX} methods are used to update column values in the
+     * current row or the insert row.  The {@code updateXXX} methods do not
+     * update the underlying database; instead the {@code updateRow} or
+     * {@code insertRow} methods are called to update the database.
      *
      * @param columnIndex the first column is 1, the second is 2, and so on
      * @param x the new column value
@@ -2286,11 +2286,11 @@
     }
 
     /**
-     * Updates the designated column with an <code>int</code> value.
-     * The <code>updateXXX</code> methods are used to update column values in the
-     * current row or the insert row.  The <code>updateXXX</code> methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
+     * Updates the designated column with an {@code int} value.
+     * The {@code updateXXX} methods are used to update column values in the
+     * current row or the insert row.  The {@code updateXXX} methods do not
+     * update the underlying database; instead the {@code updateRow} or
+     * {@code insertRow} methods are called to update the database.
      *
      * @param columnIndex the first column is 1, the second is 2, and so on
      * @param x the new column value
@@ -2309,11 +2309,11 @@
     }
 
     /**
-     * Updates the designated column with a <code>long</code> value.
-     * The <code>updateXXX</code> methods are used to update column values in the
-     * current row or the insert row.  The <code>updateXXX</code> methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
+     * Updates the designated column with a {@code long} value.
+     * The {@code updateXXX} methods are used to update column values in the
+     * current row or the insert row.  The {@code updateXXX} methods do not
+     * update the underlying database; instead the {@code updateRow} or
+     * {@code insertRow} methods are called to update the database.
      *
      * @param columnIndex the first column is 1, the second is 2, and so on
      * @param x the new column value
@@ -2333,11 +2333,11 @@
     }
 
     /**
-     * Updates the designated column with a <code>float</code> value.
-     * The <code>updateXXX</code> methods are used to update column values in the
-     * current row or the insert row.  The <code>updateXXX</code> methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
+     * Updates the designated column with a {@code float} value.
+     * The {@code updateXXX} methods are used to update column values in the
+     * current row or the insert row.  The {@code updateXXX} methods do not
+     * update the underlying database; instead the {@code updateRow} or
+     * {@code insertRow} methods are called to update the database.
      *
      * @param columnIndex the first column is 1, the second is 2, and so on
      * @param x the new column value
@@ -2357,11 +2357,11 @@
     }
 
     /**
-     * Updates the designated column with a <code>double</code> value.
-     * The <code>updateXXX</code> methods are used to update column values in the
-     * current row or the insert row.  The <code>updateXXX</code> methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
+     * Updates the designated column with a {@code double} value.
+     * The {@code updateXXX} methods are used to update column values in the
+     * current row or the insert row.  The {@code updateXXX} methods do not
+     * update the underlying database; instead the {@code updateRow} or
+     * {@code insertRow} methods are called to update the database.
      *
      * @param columnIndex the first column is 1, the second is 2, and so on
      * @param x the new column value
@@ -2381,12 +2381,12 @@
     }
 
     /**
-     * Updates the designated column with a <code>java.math.BigDecimal</code>
+     * Updates the designated column with a {@code java.math.BigDecimal}
      * value.
-     * The <code>updateXXX</code> methods are used to update column values in the
-     * current row or the insert row.  The <code>updateXXX</code> methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
+     * The {@code updateXXX} methods are used to update column values in the
+     * current row or the insert row.  The {@code updateXXX} methods do not
+     * update the underlying database; instead the {@code updateRow} or
+     * {@code insertRow} methods are called to update the database.
      *
      * @param columnIndex the first column is 1, the second is 2, and so on
      * @param x the new column value
@@ -2406,11 +2406,11 @@
     }
 
     /**
-     * Updates the designated column with a <code>String</code> value.
-     * The <code>updateXXX</code> methods are used to update column values in the
-     * current row or the insert row.  The <code>updateXXX</code> methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
+     * Updates the designated column with a {@code String} value.
+     * The {@code updateXXX} methods are used to update column values in the
+     * current row or the insert row.  The {@code updateXXX} methods do not
+     * update the underlying database; instead the {@code updateRow} or
+     * {@code insertRow} methods are called to update the database.
      *
      * @param columnIndex the first column is 1, the second is 2, and so on
      * @param x the new column value
@@ -2430,11 +2430,11 @@
     }
 
     /**
-     * Updates the designated column with a <code>byte</code> array value.
-     * The <code>updateXXX</code> methods are used to update column values in the
-     * current row or the insert row.  The <code>updateXXX</code> methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
+     * Updates the designated column with a {@code byte} array value.
+     * The {@code updateXXX} methods are used to update column values in the
+     * current row or the insert row.  The {@code updateXXX} methods do not
+     * update the underlying database; instead the {@code updateRow} or
+     * {@code insertRow} methods are called to update the database.
      *
      * @param columnIndex the first column is 1, the second is 2, and so on
      * @param x the new column value
@@ -2454,11 +2454,11 @@
     }
 
     /**
-     * Updates the designated column with a <code>java.sql.Date</code> value.
-     * The <code>updateXXX</code> methods are used to update column values in the
-     * current row or the insert row.  The <code>updateXXX</code> methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
+     * Updates the designated column with a {@code java.sql.Date} value.
+     * The {@code updateXXX} methods are used to update column values in the
+     * current row or the insert row.  The {@code updateXXX} methods do not
+     * update the underlying database; instead the {@code updateRow} or
+     * {@code insertRow} methods are called to update the database.
      *
      * @param columnIndex the first column is 1, the second is 2, and so on
      * @param x the new column value
@@ -2479,11 +2479,11 @@
 
 
     /**
-     * Updates the designated column with a <code>java.sql.Time</code> value.
-     * The <code>updateXXX</code> methods are used to update column values in the
-     * current row or the insert row.  The <code>updateXXX</code> methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
+     * Updates the designated column with a {@code java.sql.Time} value.
+     * The {@code updateXXX} methods are used to update column values in the
+     * current row or the insert row.  The {@code updateXXX} methods do not
+     * update the underlying database; instead the {@code updateRow} or
+     * {@code insertRow} methods are called to update the database.
      *
      * @param columnIndex the first column is 1, the second is 2, and so on
      * @param x the new column value
@@ -2503,12 +2503,12 @@
     }
 
     /**
-     * Updates the designated column with a <code>java.sql.Timestamp</code>
+     * Updates the designated column with a {@code java.sql.Timestamp}
      * value.
-     * The <code>updateXXX</code> methods are used to update column values in the
-     * current row or the insert row.  The <code>updateXXX</code> methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
+     * The {@code updateXXX} methods are used to update column values in the
+     * current row or the insert row.  The {@code updateXXX} methods do not
+     * update the underlying database; instead the {@code updateRow} or
+     * {@code insertRow} methods are called to update the database.
      *
      * @param columnIndex the first column is 1, the second is 2, and so on
      * @param x the new column value
@@ -2529,10 +2529,10 @@
 
     /**
      * Updates the designated column with an ascii stream value.
-     * The <code>updateXXX</code> methods are used to update column values in the
-     * current row or the insert row.  The <code>updateXXX</code> methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
+     * The {@code updateXXX} methods are used to update column values in the
+     * current row or the insert row.  The {@code updateXXX} methods do not
+     * update the underlying database; instead the {@code updateRow} or
+     * {@code insertRow} methods are called to update the database.
      *
      * @param columnIndex the first column is 1, the second is 2, and so on
      * @param x the new column value
@@ -2554,10 +2554,10 @@
 
     /**
      * Updates the designated column with a binary stream value.
-     * The <code>updateXXX</code> methods are used to update column values in the
-     * current row or the insert row.  The <code>updateXXX</code> methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
+     * The {@code updateXXX} methods are used to update column values in the
+     * current row or the insert row.  The {@code updateXXX} methods do not
+     * update the underlying database; instead the {@code updateRow} or
+     * {@code insertRow} methods are called to update the database.
      *
      * @param columnIndex the first column is 1, the second is 2, and so on
      * @param x the new column value
@@ -2579,10 +2579,10 @@
 
     /**
      * Updates the designated column with a character stream value.
-     * The <code>updateXXX</code> methods are used to update column values in the
-     * current row or the insert row.  The <code>updateXXX</code> methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
+     * The {@code updateXXX} methods are used to update column values in the
+     * current row or the insert row.  The {@code updateXXX} methods do not
+     * update the underlying database; instead the {@code updateRow} or
+     * {@code insertRow} methods are called to update the database.
      *
      * @param columnIndex the first column is 1, the second is 2, and so on
      * @param x the new column value
@@ -2603,18 +2603,18 @@
     }
 
     /**
-     * Updates the designated column with an <code>Object</code> value.
-     * The <code>updateXXX</code> methods are used to update column values in the
-     * current row or the insert row.  The <code>updateXXX</code> methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
+     * Updates the designated column with an {@code Object} value.
+     * The {@code updateXXX} methods are used to update column values in the
+     * current row or the insert row.  The {@code updateXXX} methods do not
+     * update the underlying database; instead the {@code updateRow} or
+     * {@code insertRow} methods are called to update the database.
      *
      * @param columnIndex the first column is 1, the second is 2, and so on
      * @param x the new column value
-     * @param scale for <code>java.sql.Types.DECIMAl</code>
-     *  or <code>java.sql.Types.NUMERIC</code> types,
-     *  this is the number of digits after the decimal point.  For all other
-     *  types this value will be ignored.
+     * @param scale for {@code java.sql.Types.DECIMAl}
+     *        or {@code java.sql.Types.NUMERIC} types,
+     *        this is the number of digits after the decimal point.  For all other
+     *        types this value will be ignored.
      * @throws SQLException if a database access error occurs
      *            or this rowset does not currently have a valid connection,
      *            prepared statement, and result set
@@ -2631,11 +2631,11 @@
     }
 
     /**
-     * Updates the designated column with an <code>Object</code> value.
-     * The <code>updateXXX</code> methods are used to update column values in the
-     * current row or the insert row.  The <code>updateXXX</code> methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
+     * Updates the designated column with an {@code Object} value.
+     * The {@code updateXXX} methods are used to update column values in the
+     * current row or the insert row.  The {@code updateXXX} methods do not
+     * update the underlying database; instead the {@code updateRow} or
+     * {@code insertRow} methods are called to update the database.
      *
      * @param columnIndex the first column is 1, the second is 2, and so on
      * @param x the new column value
@@ -2655,11 +2655,11 @@
     }
 
     /**
-     * Updates the designated column with a <code>null</code> value.
-     * The <code>updateXXX</code> methods are used to update column values in the
-     * current row or the insert row.  The <code>updateXXX</code> methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
+     * Updates the designated column with a {@code null} value.
+     * The {@code updateXXX} methods are used to update column values in the
+     * current row or the insert row.  The {@code updateXXX} methods do not
+     * update the underlying database; instead the {@code updateRow} or
+     * {@code insertRow} methods are called to update the database.
      *
      * @param columnName the name of the column
      * @throws SQLException if a database access error occurs
@@ -2672,11 +2672,11 @@
     }
 
     /**
-     * Updates the designated column with a <code>boolean</code> value.
-     * The <code>updateXXX</code> methods are used to update column values in the
-     * current row or the insert row.  The <code>updateXXX</code> methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
+     * Updates the designated column with a {@code boolean} value.
+     * The {@code updateXXX} methods are used to update column values in the
+     * current row or the insert row.  The {@code updateXXX} methods do not
+     * update the underlying database; instead the {@code updateRow} or
+     * {@code insertRow} methods are called to update the database.
      *
      * @param columnName the name of the column
      * @param x the new column value
@@ -2688,11 +2688,11 @@
     }
 
     /**
-     * Updates the designated column with a <code>byte</code> value.
-     * The <code>updateXXX</code> methods are used to update column values in the
-     * current row or the insert row.  The <code>updateXXX</code> methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
+     * Updates the designated column with a {@code byte} value.
+     * The {@code updateXXX} methods are used to update column values in the
+     * current row or the insert row.  The {@code updateXXX} methods do not
+     * update the underlying database; instead the {@code updateRow} or
+     * {@code insertRow} methods are called to update the database.
      *
      * @param columnName the name of the column
      * @param x the new column value
@@ -2704,11 +2704,11 @@
     }
 
     /**
-     * Updates the designated column with a <code>short</code> value.
-     * The <code>updateXXX</code> methods are used to update column values in the
-     * current row or the insert row.  The <code>updateXXX</code> methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
+     * Updates the designated column with a {@code short} value.
+     * The {@code updateXXX} methods are used to update column values in the
+     * current row or the insert row.  The {@code updateXXX} methods do not
+     * update the underlying database; instead the {@code updateRow} or
+     * {@code insertRow} methods are called to update the database.
      *
      * @param columnName the name of the column
      * @param x the new column value
@@ -2720,11 +2720,11 @@
     }
 
     /**
-     * Updates the designated column with an <code>int</code> value.
-     * The <code>updateXXX</code> methods are used to update column values in the
-     * current row or the insert row.  The <code>updateXXX</code> methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
+     * Updates the designated column with an {@code int} value.
+     * The {@code updateXXX} methods are used to update column values in the
+     * current row or the insert row.  The {@code updateXXX} methods do not
+     * update the underlying database; instead the {@code updateRow} or
+     * {@code insertRow} methods are called to update the database.
      *
      * @param columnName the name of the column
      * @param x the new column value
@@ -2736,11 +2736,11 @@
     }
 
     /**
-     * Updates the designated column with a <code>long</code> value.
-     * The <code>updateXXX</code> methods are used to update column values in the
-     * current row or the insert row.  The <code>updateXXX</code> methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
+     * Updates the designated column with a {@code long} value.
+     * The {@code updateXXX} methods are used to update column values in the
+     * current row or the insert row.  The {@code updateXXX} methods do not
+     * update the underlying database; instead the {@code updateRow} or
+     * {@code insertRow} methods are called to update the database.
      *
      * @param columnName the name of the column
      * @param x the new column value
@@ -2752,11 +2752,11 @@
     }
 
     /**
-     * Updates the designated column with a <code>float </code> value.
-     * The <code>updateXXX</code> methods are used to update column values in the
-     * current row or the insert row.  The <code>updateXXX</code> methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
+     * Updates the designated column with a {@code float } value.
+     * The {@code updateXXX} methods are used to update column values in the
+     * current row or the insert row.  The {@code updateXXX} methods do not
+     * update the underlying database; instead the {@code updateRow} or
+     * {@code insertRow} methods are called to update the database.
      *
      * @param columnName the name of the column
      * @param x the new column value
@@ -2768,11 +2768,11 @@
     }
 
     /**
-     * Updates the designated column with a <code>double</code> value.
-     * The <code>updateXXX</code> methods are used to update column values in the
-     * current row or the insert row.  The <code>updateXXX</code> methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
+     * Updates the designated column with a {@code double} value.
+     * The {@code updateXXX} methods are used to update column values in the
+     * current row or the insert row.  The {@code updateXXX} methods do not
+     * update the underlying database; instead the {@code updateRow} or
+     * {@code insertRow} methods are called to update the database.
      *
      * @param columnName the name of the column
      * @param x the new column value
@@ -2784,12 +2784,12 @@
     }
 
     /**
-     * Updates the designated column with a <code>java.sql.BigDecimal</code>
+     * Updates the designated column with a {@code java.sql.BigDecimal}
      * value.
-     * The <code>updateXXX</code> methods are used to update column values in the
-     * current row or the insert row.  The <code>updateXXX</code> methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
+     * The {@code updateXXX} methods are used to update column values in the
+     * current row or the insert row.  The {@code updateXXX} methods do not
+     * update the underlying database; instead the {@code updateRow} or
+     * {@code insertRow} methods are called to update the database.
      *
      * @param columnName the name of the column
      * @param x the new column value
@@ -2801,11 +2801,11 @@
     }
 
     /**
-     * Updates the designated column with a <code>String</code> value.
-     * The <code>updateXXX</code> methods are used to update column values in the
-     * current row or the insert row.  The <code>updateXXX</code> methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
+     * Updates the designated column with a {@code String} value.
+     * The {@code updateXXX} methods are used to update column values in the
+     * current row or the insert row.  The {@code updateXXX} methods do not
+     * update the underlying database; instead the {@code updateRow} or
+     * {@code insertRow} methods are called to update the database.
      *
      * @param columnName the name of the column
      * @param x the new column value
@@ -2817,19 +2817,19 @@
     }
 
     /**
-     * Updates the designated column with a <code>boolean</code> value.
-     * The <code>updateXXX</code> methods are used to update column values in the
-     * current row or the insert row.  The <code>updateXXX</code> methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
+     * Updates the designated column with a {@code boolean} value.
+     * The {@code updateXXX} methods are used to update column values in the
+     * current row or the insert row.  The {@code updateXXX} methods do not
+     * update the underlying database; instead the {@code updateRow} or
+     * {@code insertRow} methods are called to update the database.
      *
      * JDBC 2.0
      *
      * Updates a column with a byte array value.
      *
-     * The <code>updateXXX</code> methods are used to update column values in the
-     * current row, or the insert row.  The <code>updateXXX</code> methods do not
-     * update the underlying database; instead the <code>updateRow</code> or <code>insertRow</code>
+     * The {@code updateXXX} methods are used to update column values in the
+     * current row, or the insert row.  The {@code updateXXX} methods do not
+     * update the underlying database; instead the {@code updateRow} or {@code insertRow}
      * methods are called to update the database.
      *
      * @param columnName the name of the column
@@ -2842,11 +2842,11 @@
     }
 
     /**
-     * Updates the designated column with a <code>java.sql.Date</code> value.
-     * The <code>updateXXX</code> methods are used to update column values in the
-     * current row or the insert row.  The <code>updateXXX</code> methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
+     * Updates the designated column with a {@code java.sql.Date} value.
+     * The {@code updateXXX} methods are used to update column values in the
+     * current row or the insert row.  The {@code updateXXX} methods do not
+     * update the underlying database; instead the {@code updateRow} or
+     * {@code insertRow} methods are called to update the database.
      *
      * @param columnName the name of the column
      * @param x the new column value
@@ -2858,11 +2858,11 @@
     }
 
     /**
-     * Updates the designated column with a <code>java.sql.Time</code> value.
-     * The <code>updateXXX</code> methods are used to update column values in the
-     * current row or the insert row.  The <code>updateXXX</code> methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
+     * Updates the designated column with a {@code java.sql.Time} value.
+     * The {@code updateXXX} methods are used to update column values in the
+     * current row or the insert row.  The {@code updateXXX} methods do not
+     * update the underlying database; instead the {@code updateRow} or
+     * {@code insertRow} methods are called to update the database.
      *
      * @param columnName the name of the column
      * @param x the new column value
@@ -2874,12 +2874,12 @@
     }
 
     /**
-     * Updates the designated column with a <code>java.sql.Timestamp</code>
+     * Updates the designated column with a {@code java.sql.Timestamp}
      * value.
-     * The <code>updateXXX</code> methods are used to update column values in the
-     * current row or the insert row.  The <code>updateXXX</code> methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
+     * The {@code updateXXX} methods are used to update column values in the
+     * current row or the insert row.  The {@code updateXXX} methods do not
+     * update the underlying database; instead the {@code updateRow} or
+     * {@code insertRow} methods are called to update the database.
      *
      * @param columnName the name of the column
      * @param x the new column value
@@ -2892,10 +2892,10 @@
 
     /**
      * Updates the designated column with an ascii stream value.
-     * The <code>updateXXX</code> methods are used to update column values in the
-     * current row or the insert row.  The <code>updateXXX</code> methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
+     * The {@code updateXXX} methods are used to update column values in the
+     * current row or the insert row.  The {@code updateXXX} methods do not
+     * update the underlying database; instead the {@code updateRow} or
+     * {@code insertRow} methods are called to update the database.
      *
      * @param columnName the name of the column
      * @param x the new column value
@@ -2909,10 +2909,10 @@
 
     /**
      * Updates the designated column with a binary stream value.
-     * The <code>updateXXX</code> methods are used to update column values in the
-     * current row or the insert row.  The <code>updateXXX</code> methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
+     * The {@code updateXXX} methods are used to update column values in the
+     * current row or the insert row.  The {@code updateXXX} methods do not
+     * update the underlying database; instead the {@code updateRow} or
+     * {@code insertRow} methods are called to update the database.
      *
      * @param columnName the name of the column
      * @param x the new column value
@@ -2926,14 +2926,14 @@
 
     /**
      * Updates the designated column with a character stream value.
-     * The <code>updateXXX</code> methods are used to update column values
-     * in the current row or the insert row.  The <code>updateXXX</code>
+     * The {@code updateXXX} methods are used to update column values
+     * in the current row or the insert row.  The {@code updateXXX}
      * methods do not update the underlying database; instead the
-     * <code>updateRow</code> or <code>insertRow</code> methods are called
+     * {@code updateRow} or {@code insertRow} methods are called
      * to update the database.
      *
      * @param columnName the name of the column
-     * @param reader the new column <code>Reader</code> stream value
+     * @param reader the new column {@code Reader} stream value
      * @param length the length of the stream
      * @throws SQLException if a database access error occurs
      *
@@ -2943,16 +2943,16 @@
     }
 
     /**
-     * Updates the designated column with an <code>Object</code> value.
-     * The <code>updateXXX</code> methods are used to update column values in the
-     * current row or the insert row.  The <code>updateXXX</code> methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
+     * Updates the designated column with an {@code Object} value.
+     * The {@code updateXXX} methods are used to update column values in the
+     * current row or the insert row.  The {@code updateXXX} methods do not
+     * update the underlying database; instead the {@code updateRow} or
+     * {@code insertRow} methods are called to update the database.
      *
      * @param columnName the name of the column
      * @param x the new column value
-     * @param scale for <code>java.sql.Types.DECIMAL</code>
-     *  or <code>java.sql.Types.NUMERIC</code> types,
+     * @param scale for {@code java.sql.Types.DECIMAL}
+     *  or {@code java.sql.Types.NUMERIC} types,
      *  this is the number of digits after the decimal point.  For all other
      *  types this value will be ignored.
      * @throws SQLException if a database access error occurs
@@ -2963,11 +2963,11 @@
     }
 
     /**
-     * Updates the designated column with an <code>Object</code> value.
-     * The <code>updateXXX</code> methods are used to update column values in the
-     * current row or the insert row.  The <code>updateXXX</code> methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
+     * Updates the designated column with an {@code Object} value.
+     * The {@code updateXXX} methods are used to update column values in the
+     * current row or the insert row.  The {@code updateXXX} methods do not
+     * update the underlying database; instead the {@code updateRow} or
+     * {@code insertRow} methods are called to update the database.
      *
      * @param columnName the name of the column
      * @param x the new column value
@@ -2980,7 +2980,7 @@
 
     /**
      * Inserts the contents of the insert row into this
-     * <code>ResultSet</code> object and into the database
+     * {@code ResultSet} object and into the database
      * and also notifies listeners that a row has changed.
      * The cursor must be on the insert row when this method is called.
      *
@@ -3000,14 +3000,14 @@
 
     /**
      * Updates the underlying database with the new contents of the
-     * current row of this rowset's <code>ResultSet</code> object
+     * current row of this rowset's {@code ResultSet} object
      * and notifies listeners that a row has changed.
      * This method cannot be called when the cursor is on the insert row.
      *
      * @throws SQLException if (1) a database access error occurs,
      *            (2) this method is called when the cursor is
      *             on the insert row, (3) the concurrency of the result
-     *             set is <code>ResultSet.CONCUR_READ_ONLY</code>, or
+     *             set is {@code ResultSet.CONCUR_READ_ONLY}, or
      *             (4) this rowset does not currently have a valid connection,
      *             prepared statement, and result set
      */
@@ -3019,18 +3019,18 @@
     }
 
     /**
-     * Deletes the current row from this rowset's <code>ResultSet</code> object
+     * Deletes the current row from this rowset's {@code ResultSet} object
      * and from the underlying database and also notifies listeners that a row
      * has changed.  This method cannot be called when the cursor is on the insert
      * row.
      *
      * @throws SQLException if a database access error occurs
-     * or if this method is called when the cursor is on the insert row
+     *         or if this method is called when the cursor is on the insert row
      * @throws SQLException if (1) a database access error occurs,
      *            (2) this method is called when the cursor is before the
      *            first row, after the last row, or on the insert row,
      *            (3) the concurrency of this rowset's result
-     *            set is <code>ResultSet.CONCUR_READ_ONLY</code>, or
+     *            set is {@code ResultSet.CONCUR_READ_ONLY}, or
      *            (4) this rowset does not currently have a valid connection,
      *            prepared statement, and result set
      */
@@ -3042,24 +3042,24 @@
     }
 
     /**
-     * Refreshes the current row of this rowset's <code>ResultSet</code>
+     * Refreshes the current row of this rowset's {@code ResultSet}
      * object with its most recent value in the database.  This method
      * cannot be called when the cursor is on the insert row.
      *
-     * <P>The <code>refreshRow</code> method provides a way for an
+     * <P>The {@code refreshRow} method provides a way for an
      * application to explicitly tell the JDBC driver to refetch
      * a row(s) from the database.  An application may want to call
-     * <code>refreshRow</code> when caching or prefetching is being
+     * {@code refreshRow} when caching or prefetching is being
      * done by the JDBC driver to fetch the latest value of a row
      * from the database.  The JDBC driver may actually refresh multiple
      * rows at once if the fetch size is greater than one.
      *
      * <P> All values are refetched subject to the transaction isolation
-     * level and cursor sensitivity.  If <code>refreshRow</code> is called after
-     * calling an <code>updateXXX</code> method, but before calling
-     * the method <code>updateRow</code>, then the
+     * level and cursor sensitivity.  If {@code refreshRow} is called after
+     * calling an {@code updateXXX} method, but before calling
+     * the method {@code updateRow}, then the
      * updates made to the row are lost.  Calling the method
-     * <code>refreshRow</code> frequently will likely slow performance.
+     * {@code refreshRow} frequently will likely slow performance.
      *
      * @throws SQLException if (1) a database access error occurs,
      *            (2) this method is called when the cursor is
@@ -3076,12 +3076,12 @@
 
     /**
      * Cancels the updates made to the current row in this
-     * <code>ResultSet</code> object and notifies listeners that a row
+     * {@code ResultSet} object and notifies listeners that a row
      * has changed. This method may be called after calling an
-     * <code>updateXXX</code> method(s) and before calling
-     * the method <code>updateRow</code> to roll back
+     * {@code updateXXX} method(s) and before calling
+     * the method {@code updateRow} to roll back
      * the updates made to a row.  If no updates have been made or
-     * <code>updateRow</code> has already been called, this method has no
+     * {@code updateRow} has already been called, this method has no
      * effect.
      *
      * @throws SQLException if (1) a database access error occurs,
@@ -3104,19 +3104,19 @@
      *
      * The insert row is a special row associated with an updatable
      * result set.  It is essentially a buffer where a new row may
-     * be constructed by calling the <code>updateXXX</code> methods prior to
+     * be constructed by calling the {@code updateXXX} methods prior to
      * inserting the row into the result set.
      *
-     * Only the <code>updateXXX</code>, <code>getXXX</code>,
-     * and <code>insertRow</code> methods may be
+     * Only the {@code updateXXX}, {@code getXXX},
+     * and {@code insertRow} methods may be
      * called when the cursor is on the insert row.  All of the columns in
      * a result set must be given a value each time this method is
-     * called before calling <code>insertRow</code>.
-     * An <code>updateXXX</code> method must be called before a
-     * <code>getXXX</code> method can be called on a column value.
+     * called before calling {@code insertRow}.
+     * An {@code updateXXX} method must be called before a
+     * {@code getXXX} method can be called on a column value.
      *
      * @throws SQLException if (1) a database access error occurs,
-     *            (2) this rowset's <code>ResultSet</code> object is
+     *            (2) this rowset's {@code ResultSet} object is
      *             not updatable, or (3) this rowset does not
      *             currently have a valid connection, prepared statement,
      *             and result set
@@ -3134,7 +3134,7 @@
      * the insert row.
      *
      * @throws SQLException if (1) a database access error occurs,
-     *            (2) this rowset's <code>ResultSet</code> object is
+     *            (2) this rowset's {@code ResultSet} object is
      *             not updatable, or (3) this rowset does not
      *             currently have a valid connection, prepared statement,
      *             and result set
@@ -3146,14 +3146,14 @@
     }
 
     /**
-     * Returns the <code>Statement</code> object that produced this
-     * <code>ResultSet</code> object.
+     * Returns the {@code Statement} object that produced this
+     * {@code ResultSet} object.
      * If the result set was generated some other way, such as by a
-     * <code>DatabaseMetaData</code> method, this method returns
-     * <code>null</code>.
-     *
-     * @return the <code>Statement</code> object that produced
-     * this rowset's <code>ResultSet</code> object or <code>null</code>
+     * {@code DatabaseMetaData} method, this method returns
+     * {@code null}.
+     *
+     * @return the {@code Statement} object that produced
+     * this rowset's {@code ResultSet} object or {@code null}
      * if the result set was produced some other way
      * @throws SQLException if a database access error occurs
      */
@@ -3169,16 +3169,16 @@
 
     /**
      * Returns the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as an <code>Object</code>.
-     * This method uses the given <code>Map</code> object
+     * of this rowset's {@code ResultSet} object as an {@code Object}.
+     * This method uses the given {@code Map} object
      * for the custom mapping of the
      * SQL structured or distinct type that is being retrieved.
      *
      * @param i the first column is 1, the second is 2, and so on
-     * @param map a <code>java.util.Map</code> object that contains the mapping
-     * from SQL type names to classes in the Java programming language
-     * @return an <code>Object</code> in the Java programming language
-     * representing the SQL value
+     * @param map a {@code java.util.Map} object that contains the mapping
+     *        from SQL type names to classes in the Java programming language
+     * @return an {@code Object} in the Java programming language
+     *         representing the SQL value
      * @throws SQLException if (1) a database access error occurs
      *            or (2) this rowset does not currently have a valid connection,
      *            prepared statement, and result set
@@ -3193,10 +3193,10 @@
 
     /**
      * Returns the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as a <code>Ref</code> object.
+     * of this rowset's {@code ResultSet} object as a {@code Ref} object.
      *
      * @param i the first column is 1, the second is 2, and so on
-     * @return a <code>Ref</code> object representing an SQL <code>REF</code> value
+     * @return a {@code Ref} object representing an SQL {@code REF} value
      * @throws SQLException if (1) a database access error occurs
      *            or (2) this rowset does not currently have a valid connection,
      *            prepared statement, and result set
@@ -3210,10 +3210,10 @@
 
     /**
      * Returns the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as a <code>Blob</code> object.
+     * of this rowset's {@code ResultSet} object as a {@code Blob} object.
      *
      * @param i the first column is 1, the second is 2, and so on
-     * @return a <code>Blob</code> object representing the SQL <code>BLOB</code>
+     * @return a {@code Blob} object representing the SQL {@code BLOB}
      *         value in the specified column
      * @throws SQLException if (1) a database access error occurs
      *            or (2) this rowset does not currently have a valid connection,
@@ -3227,10 +3227,10 @@
 
     /**
      * Returns the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as a <code>Clob</code> object.
+     * of this rowset's {@code ResultSet} object as a {@code Clob} object.
      *
      * @param i the first column is 1, the second is 2, and so on
-     * @return a <code>Clob</code> object representing the SQL <code>CLOB</code>
+     * @return a {@code Clob} object representing the SQL {@code CLOB}
      *         value in the specified column
      * @throws SQLException if (1) a database access error occurs
      *            or (2) this rowset does not currently have a valid connection,
@@ -3244,10 +3244,10 @@
 
     /**
      * Returns the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as an <code>Array</code> object.
+     * of this rowset's {@code ResultSet} object as an {@code Array} object.
      *
      * @param i the first column is 1, the second is 2, and so on.
-     * @return an <code>Array</code> object representing the SQL <code>ARRAY</code>
+     * @return an {@code Array} object representing the SQL {@code ARRAY}
      *         value in the specified column
      * @throws SQLException if (1) a database access error occurs
      *            or (2) this rowset does not currently have a valid connection,
@@ -3261,14 +3261,14 @@
 
     /**
      * Returns the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as an <code>Object</code>.
-     * This method uses the specified <code>Map</code> object for
+     * of this rowset's {@code ResultSet} object as an {@code Object}.
+     * This method uses the specified {@code Map} object for
      * custom mapping if appropriate.
      *
      * @param colName the name of the column from which to retrieve the value
-     * @param map a <code>java.util.Map</code> object that contains the mapping
+     * @param map a {@code java.util.Map} object that contains the mapping
      * from SQL type names to classes in the Java programming language
-     * @return an <code>Object</code> representing the SQL
+     * @return an {@code Object} representing the SQL
      *         value in the specified column
      * @throws SQLException if (1) a database access error occurs
      *            or (2) this rowset does not currently have a valid connection,
@@ -3282,10 +3282,10 @@
 
     /**
      * Returns the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as a <code>Ref</code> object.
+     * of this rowset's {@code ResultSet} object as a {@code Ref} object.
      *
      * @param colName the column name
-     * @return a <code>Ref</code> object representing the SQL <code>REF</code> value in
+     * @return a {@code Ref} object representing the SQL {@code REF} value in
      *         the specified column
      * @throws SQLException if (1) a database access error occurs
      *            or (2) this rowset does not currently have a valid connection,
@@ -3297,10 +3297,10 @@
 
     /**
      * Returns the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as a <code>Blob</code> object.
+     * of this rowset's {@code ResultSet} object as a {@code Blob} object.
      *
      * @param colName the name of the column from which to retrieve the value
-     * @return a <code>Blob</code> object representing the SQL <code>BLOB</code>
+     * @return a {@code Blob} object representing the SQL {@code BLOB}
      *         value in the specified column
      * @throws SQLException if (1) a database access error occurs
      *            or (2) this rowset does not currently have a valid connection,
@@ -3312,10 +3312,10 @@
 
     /**
      * Returns the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as a <code>Clob</code> object.
+     * of this rowset's {@code ResultSet} object as a {@code Clob} object.
      *
      * @param colName the name of the column from which to retrieve the value
-     * @return a <code>Clob</code> object representing the SQL <code>CLOB</code>
+     * @return a {@code Clob} object representing the SQL {@code CLOB}
      *         value in the specified column
      * @throws SQLException if (1) a database access error occurs
      *            or (2) this rowset does not currently have a valid connection,
@@ -3327,10 +3327,10 @@
 
     /**
      * Returns the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as an <code>Array</code> object.
+     * of this rowset's {@code ResultSet} object as an {@code Array} object.
      *
      * @param colName the name of the column from which to retrieve the value
-     * @return an <code>Array</code> object representing the SQL <code>ARRAY</code>
+     * @return an {@code Array} object representing the SQL {@code ARRAY}
      *         value in the specified column
      * @throws SQLException if (1) a database access error occurs
      *            or (2) this rowset does not currently have a valid connection,
@@ -3342,17 +3342,17 @@
 
     /**
      * Returns the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as a <code>java.sql.Date</code>
+     * of this rowset's {@code ResultSet} object as a {@code java.sql.Date}
      * object. This method uses the given calendar to construct an appropriate
      * millisecond value for the date if the underlying database does not store
      * timezone information.
      *
      * @param columnIndex the first column is 1, the second is 2, and so on
-     * @param cal the <code>java.util.Calendar</code> object
+     * @param cal the {@code java.util.Calendar} object
      *        to use in constructing the date
-     * @return the column value as a <code>java.sql.Date</code> object;
-     *         if the value is SQL <code>NULL</code>,
-     *         the value returned is <code>null</code>
+     * @return the column value as a {@code java.sql.Date} object;
+     *         if the value is SQL {@code NULL},
+     *         the value returned is {@code null}
      * @throws SQLException if (1) a database access error occurs
      *            or (2) this rowset does not currently have a valid connection,
      *            prepared statement, and result set
@@ -3365,17 +3365,17 @@
 
     /**
      * Returns the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as a <code>java.sql.Date</code>
+     * of this rowset's {@code ResultSet} object as a {@code java.sql.Date}
      * object. This method uses the given calendar to construct an appropriate
      * millisecond value for the date if the underlying database does not store
      * timezone information.
      *
      * @param columnName the SQL name of the column from which to retrieve the value
-     * @param cal the <code>java.util.Calendar</code> object
+     * @param cal the {@code java.util.Calendar} object
      *        to use in constructing the date
-     * @return the column value as a <code>java.sql.Date</code> object;
-     *         if the value is SQL <code>NULL</code>,
-     *         the value returned is <code>null</code>
+     * @return the column value as a {@code java.sql.Date} object;
+     *         if the value is SQL {@code NULL},
+     *         the value returned is {@code null}
      * @throws SQLException if a database access error occurs
      *            or this rowset does not currently have a valid connection,
      *            prepared statement, and result set
@@ -3387,17 +3387,17 @@
 
     /**
      * Returns the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as a <code>java.sql.Time</code>
+     * of this rowset's {@code ResultSet} object as a {@code java.sql.Time}
      * object. This method uses the given calendar to construct an appropriate
      * millisecond value for the date if the underlying database does not store
      * timezone information.
      *
      * @param columnIndex the first column is 1, the second is 2, and so on
-     * @param cal the <code>java.util.Calendar</code> object
+     * @param cal the {@code java.util.Calendar} object
      *        to use in constructing the time
-     * @return the column value as a <code>java.sql.Time</code> object;
-     *         if the value is SQL <code>NULL</code>,
-     *         the value returned is <code>null</code> in the Java programming language
+     * @return the column value as a {@code java.sql.Time} object;
+     *         if the value is SQL {@code NULL},
+     *         the value returned is {@code null} in the Java programming language
      * @throws SQLException if a database access error occurs
      *            or this rowset does not currently have a valid connection,
      *            prepared statement, and result set
@@ -3410,17 +3410,17 @@
 
     /**
      * Returns the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as a <code>java.sql.Time</code>
+     * of this rowset's {@code ResultSet} object as a {@code java.sql.Time}
      * object. This method uses the given calendar to construct an appropriate
      * millisecond value for the date if the underlying database does not store
      * timezone information.
      *
      * @param columnName the SQL name of the column
-     * @param cal the <code>java.util.Calendar</code> object
+     * @param cal the {@code java.util.Calendar} object
      *        to use in constructing the time
-     * @return the column value as a <code>java.sql.Time</code> object;
-     *         if the value is SQL <code>NULL</code>,
-     *         the value returned is <code>null</code> in the Java programming language
+     * @return the column value as a {@code java.sql.Time} object;
+     *         if the value is SQL {@code NULL},
+     *         the value returned is {@code null} in the Java programming language
      * @throws SQLException if a database access error occurs
      *            or this rowset does not currently have a valid connection,
      *            prepared statement, and result set
@@ -3431,18 +3431,18 @@
 
     /**
      * Returns the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as a
-     * <code>java.sql.Timestamp</code> object.
+     * of this rowset's {@code ResultSet} object as a
+     * {@code java.sql.Timestamp} object.
      * This method uses the given calendar to construct an appropriate millisecond
      * value for the timestamp if the underlying database does not store
      * timezone information.
      *
      * @param columnIndex the first column is 1, the second is 2, and so on
-     * @param cal the <code>java.util.Calendar</code> object
+     * @param cal the {@code java.util.Calendar} object
      *        to use in constructing the timestamp
-     * @return the column value as a <code>java.sql.Timestamp</code> object;
-     *         if the value is SQL <code>NULL</code>,
-     *         the value returned is <code>null</code>
+     * @return the column value as a {@code java.sql.Timestamp} object;
+     *         if the value is SQL {@code NULL},
+     *         the value returned is {@code null}
      * @throws SQLException if a database access error occurs
      *            or this rowset does not currently have a valid connection,
      *            prepared statement, and result set
@@ -3455,18 +3455,18 @@
 
     /**
      * Returns the value of the designated column in the current row
-     * of this rowset's <code>ResultSet</code> object as a
-     * <code>java.sql.Timestamp</code> object.
+     * of this rowset's {@code ResultSet} object as a
+     * {@code java.sql.Timestamp} object.
      * This method uses the given calendar to construct an appropriate millisecond
      * value for the timestamp if the underlying database does not store
      * timezone information.
      *
      * @param columnName the SQL name of the column
-     * @param cal the <code>java.util.Calendar</code> object
+     * @param cal the {@code java.util.Calendar} object
      *        to use in constructing the timestamp
-     * @return the column value as a <code>java.sql.Timestamp</code> object;
-     *         if the value is SQL <code>NULL</code>,
-     *         the value returned is <code>null</code>
+     * @return the column value as a {@code java.sql.Timestamp} object;
+     *         if the value is SQL {@code NULL},
+     *         the value returned is {@code null}
      * @throws SQLException if a database access error occurs
      *            or this rowset does not currently have a valid connection,
      *            prepared statement, and result set
@@ -3478,8 +3478,8 @@
 
     /**
      * Sets the designated column in either the current row or the insert
-     * row of this <code>JdbcRowSetImpl</code> object with the given
-     * <code>double</code> value.
+     * row of this {@code JdbcRowSetImpl} object with the given
+     * {@code double} value.
      *
      * This method updates a column value in either the current row or
      * the insert row of this rowset, but it does not update the
@@ -3490,14 +3490,14 @@
      * and the database. Both of these methods must be called before the
      * cursor moves to another row.
      *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
+     * @param columnIndex the first column is {@code 1}, the second
+     *        is {@code 2}, and so on; must be {@code 1} or larger
      *        and equal to or less than the number of columns in this rowset
-     * @param ref the new <code>Ref</code> column value
+     * @param ref the new {@code Ref} column value
      * @throws SQLException if (1) the given column index is out of bounds,
      *            (2) the cursor is not on one of this rowset's rows or its
      *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
+     *            {@code ResultSet.CONCUR_READ_ONLY}
      */
     public void updateRef(int columnIndex, java.sql.Ref ref)
         throws SQLException {
@@ -3507,8 +3507,8 @@
 
     /**
      * Sets the designated column in either the current row or the insert
-     * row of this <code>JdbcRowSetImpl</code> object with the given
-     * <code>double</code> value.
+     * row of this {@code JdbcRowSetImpl} object with the given
+     * {@code double} value.
      *
      * This method updates a column value in either the current row or
      * the insert row of this rowset, but it does not update the
@@ -3519,13 +3519,13 @@
      * and the database. Both of these methods must be called before the
      * cursor moves to another row.
      *
-     * @param columnName a <code>String</code> object that must match the
+     * @param columnName a {@code String} object that must match the
      *        SQL name of a column in this rowset, ignoring case
      * @param ref the new column value
      * @throws SQLException if (1) the given column name does not match the
      *            name of a column in this rowset, (2) the cursor is not on
      *            one of this rowset's rows or its insert row, or (3) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
+     *            rowset is {@code ResultSet.CONCUR_READ_ONLY}
      */
     public void updateRef(String columnName, java.sql.Ref ref)
         throws SQLException {
@@ -3534,8 +3534,8 @@
 
     /**
      * Sets the designated column in either the current row or the insert
-     * row of this <code>JdbcRowSetImpl</code> object with the given
-     * <code>double</code> value.
+     * row of this {@code JdbcRowSetImpl} object with the given
+     * {@code double} value.
      *
      * This method updates a column value in either the current row or
      * the insert row of this rowset, but it does not update the
@@ -3546,14 +3546,14 @@
      * and the database. Both of these methods must be called before the
      * cursor moves to another row.
      *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
+     * @param columnIndex the first column is {@code 1}, the second
+     *        is {@code 2}, and so on; must be {@code 1} or larger
      *        and equal to or less than the number of columns in this rowset
-     * @param c the new column <code>Clob</code> value
+     * @param c the new column {@code Clob} value
      * @throws SQLException if (1) the given column index is out of bounds,
      *            (2) the cursor is not on one of this rowset's rows or its
      *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
+     *            {@code ResultSet.CONCUR_READ_ONLY}
      */
     public void updateClob(int columnIndex, Clob c) throws SQLException {
         checkState();
@@ -3563,8 +3563,8 @@
 
     /**
      * Sets the designated column in either the current row or the insert
-     * row of this <code>JdbcRowSetImpl</code> object with the given
-     * <code>double</code> value.
+     * row of this {@code JdbcRowSetImpl} object with the given
+     * {@code double} value.
      *
      * This method updates a column value in either the current row or
      * the insert row of this rowset, but it does not update the
@@ -3575,13 +3575,13 @@
      * and the database. Both of these methods must be called before the
      * cursor moves to another row.
      *
-     * @param columnName a <code>String</code> object that must match the
+     * @param columnName a {@code String} object that must match the
      *        SQL name of a column in this rowset, ignoring case
-     * @param c the new column <code>Clob</code> value
+     * @param c the new column {@code Clob} value
      * @throws SQLException if (1) the given column name does not match the
      *            name of a column in this rowset, (2) the cursor is not on
      *            one of this rowset's rows or its insert row, or (3) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
+     *            rowset is {@code ResultSet.CONCUR_READ_ONLY}
      */
     public void updateClob(String columnName, Clob c) throws SQLException {
         updateClob(findColumn(columnName), c);
@@ -3589,8 +3589,8 @@
 
     /**
      * Sets the designated column in either the current row or the insert
-     * row of this <code>JdbcRowSetImpl</code> object with the given
-     * <code>java.sql.Blob</code> value.
+     * row of this {@code JdbcRowSetImpl} object with the given
+     * {@code java.sql.Blob} value.
      *
      * This method updates a column value in either the current row or
      * the insert row of this rowset, but it does not update the
@@ -3601,14 +3601,14 @@
      * and the database. Both of these methods must be called before the
      * cursor moves to another row.
      *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
+     * @param columnIndex the first column is {@code 1}, the second
+     *        is {@code 2}, and so on; must be {@code 1} or larger
      *        and equal to or less than the number of columns in this rowset
-     * @param b the new column <code>Blob</code> value
+     * @param b the new column {@code Blob} value
      * @throws SQLException if (1) the given column index is out of bounds,
      *            (2) the cursor is not on one of this rowset's rows or its
      *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
+     *            {@code ResultSet.CONCUR_READ_ONLY}
      */
     public void updateBlob(int columnIndex, Blob b) throws SQLException {
         checkState();
@@ -3617,8 +3617,8 @@
 
     /**
      * Sets the designated column in either the current row or the insert
-     * row of this <code>JdbcRowSetImpl</code> object with the given
-     * <code>java.sql.Blob </code> value.
+     * row of this {@code JdbcRowSetImpl} object with the given
+     * {@code java.sql.Blob } value.
      *
      * This method updates a column value in either the current row or
      * the insert row of this rowset, but it does not update the
@@ -3629,13 +3629,13 @@
      * and the database. Both of these methods must be called before the
      * cursor moves to another row.
      *
-     * @param columnName a <code>String</code> object that must match the
+     * @param columnName a {@code String} object that must match the
      *        SQL name of a column in this rowset, ignoring case
-     * @param b the new column <code>Blob</code> value
+     * @param b the new column {@code Blob} value
      * @throws SQLException if (1) the given column name does not match the
      *            name of a column in this rowset, (2) the cursor is not on
      *            one of this rowset's rows or its insert row, or (3) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
+     *            rowset is {@code ResultSet.CONCUR_READ_ONLY}
      */
     public void updateBlob(String columnName, Blob b) throws SQLException {
         updateBlob(findColumn(columnName), b);
@@ -3643,8 +3643,8 @@
 
     /**
      * Sets the designated column in either the current row or the insert
-     * row of this <code>JdbcRowSetImpl</code> object with the given
-     * <code>java.sql.Array</code> values.
+     * row of this {@code JdbcRowSetImpl} object with the given
+     * {@code java.sql.Array} values.
      *
      * This method updates a column value in either the current row or
      * the insert row of this rowset, but it does not update the
@@ -3655,14 +3655,14 @@
      * and the database. Both of these methods must be called before the
      * cursor moves to another row.
      *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
+     * @param columnIndex the first column is {@code 1}, the second
+     *        is {@code 2}, and so on; must be {@code 1} or larger
      *        and equal to or less than the number of columns in this rowset
-     * @param a the new column <code>Array</code> value
+     * @param a the new column {@code Array} value
      * @throws SQLException if (1) the given column index is out of bounds,
      *            (2) the cursor is not on one of this rowset's rows or its
      *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
+     *            {@code ResultSet.CONCUR_READ_ONLY}
      */
     public void updateArray(int columnIndex, Array a) throws SQLException {
         checkState();
@@ -3671,8 +3671,8 @@
 
     /**
      * Sets the designated column in either the current row or the insert
-     * row of this <code>JdbcRowSetImpl</code> object with the given
-     * <code>java.sql.Array</code> value.
+     * row of this {@code JdbcRowSetImpl} object with the given
+     * {@code java.sql.Array} value.
      *
      * This method updates a column value in either the current row or
      * the insert row of this rowset, but it does not update the
@@ -3683,20 +3683,20 @@
      * and the database. Both of these methods must be called before the
      * cursor moves to another row.
      *
-     * @param columnName a <code>String</code> object that must match the
+     * @param columnName a {@code String} object that must match the
      *        SQL name of a column in this rowset, ignoring case
-     * @param a the new column <code>Array</code> value
+     * @param a the new column {@code Array} value
      * @throws SQLException if (1) the given column name does not match the
      *            name of a column in this rowset, (2) the cursor is not on
      *            one of this rowset's rows or its insert row, or (3) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
+     *            rowset is {@code ResultSet.CONCUR_READ_ONLY}
      */
     public void updateArray(String columnName, Array a) throws SQLException {
         updateArray(findColumn(columnName), a);
     }
 
     /**
-     * Provide interface coverage for getURL(int) in ResultSet->RowSet
+     * Provide interface coverage for getURL(int) in {@code ResultSet->RowSet}
      */
     public java.net.URL getURL(int columnIndex) throws SQLException {
         checkState();
@@ -3704,7 +3704,7 @@
     }
 
     /**
-     * Provide interface coverage for getURL(String) in ResultSet->RowSet
+     * Provide interface coverage for getURL(String) in {@code ResultSet->RowSet}
      */
     public java.net.URL getURL(String columnName) throws SQLException {
         return getURL(findColumn(columnName));
@@ -3712,14 +3712,14 @@
 
     /**
      * Return the RowSetWarning object for the current row of a
-     * <code>JdbcRowSetImpl</code>
+     * {@code JdbcRowSetImpl}
      */
     public RowSetWarning getRowSetWarnings() throws SQLException {
        return null;
     }
     /**
      * Unsets the designated parameter to the given int array.
-     * This was set using <code>setMatchColumn</code>
+     * This was set using {@code setMatchColumn}
      * as the column which will form the basis of the join.
      * <P>
      * The parameter value unset by this method should be same
@@ -3728,8 +3728,8 @@
      * @param columnIdxes the index into this rowset
      *        object's internal representation of parameter values
      * @throws SQLException if an error occurs or the
-     *  parameter index is out of bounds or if the columnIdx is
-     *  not the same as set using <code>setMatchColumn(int [])</code>
+     *         parameter index is out of bounds or if the columnIdx is
+     *         not the same as set using {@code setMatchColumn(int [])}
      */
     public void unsetMatchColumn(int[] columnIdxes) throws SQLException {
 
@@ -3748,7 +3748,7 @@
 
    /**
      * Unsets the designated parameter to the given String array.
-     * This was set using <code>setMatchColumn</code>
+     * This was set using {@code setMatchColumn}
      * as the column which will form the basis of the join.
      * <P>
      * The parameter value unset by this method should be same
@@ -3757,8 +3757,8 @@
      * @param columnIdxes the index into this rowset
      *        object's internal representation of parameter values
      * @throws SQLException if an error occurs or the
-     *  parameter index is out of bounds or if the columnName is
-     *  not the same as set using <code>setMatchColumn(String [])</code>
+     *         parameter index is out of bounds or if the columnName is
+     *         not the same as set using {@code setMatchColumn(String [])}
      */
     public void unsetMatchColumn(String[] columnIdxes) throws SQLException {
 
@@ -3774,11 +3774,11 @@
     }
 
     /**
-     * Retrieves the column name as <code>String</code> array
-     * that was set using <code>setMatchColumn(String [])</code>
+     * Retrieves the column name as {@code String} array
+     * that was set using {@code setMatchColumn(String [])}
      * for this rowset.
      *
-     * @return a <code>String</code> array object that contains the column names
+     * @return a {@code String} array object that contains the column names
      *         for the rowset which has this the match columns
      *
      * @throws SQLException if an error occurs or column name is not set
@@ -3796,10 +3796,10 @@
     }
 
     /**
-     * Retrieves the column id as <code>int</code> array that was set using
-     * <code>setMatchColumn(int [])</code> for this rowset.
-     *
-     * @return a <code>int</code> array object that contains the column ids
+     * Retrieves the column id as {@code int} array that was set using
+     * {@code setMatchColumn(int [])} for this rowset.
+     *
+     * @return a {@code int} array object that contains the column ids
      *         for the rowset which has this as the match columns.
      *
      * @throws SQLException if an error occurs or column index is not set
@@ -3829,19 +3829,19 @@
     /**
      * Sets the designated parameter to the given int array.
      * This forms the basis of the join for the
-     * <code>JoinRowSet</code> as the column which will form the basis of the
+     * {@code JoinRowSet} as the column which will form the basis of the
      * join.
      * <P>
      * The parameter value set by this method is stored internally and
      * will be supplied as the appropriate parameter in this rowset's
-     * command when the method <code>getMatchColumnIndexes</code> is called.
+     * command when the method {@code getMatchColumnIndexes} is called.
      *
      * @param columnIdxes the indexes into this rowset
      *        object's internal representation of parameter values; the
      *        first parameter is 0, the second is 1, and so on; must be
-     *        <code>0</code> or greater
+     *        {@code 0} or greater
      * @throws SQLException if an error occurs or the
-     *                         parameter index is out of bounds
+     *         parameter index is out of bounds
      */
     public void setMatchColumn(int[] columnIdxes) throws SQLException {
 
@@ -3858,17 +3858,17 @@
     /**
      * Sets the designated parameter to the given String array.
      *  This forms the basis of the join for the
-     * <code>JoinRowSet</code> as the column which will form the basis of the
+     * {@code JoinRowSet} as the column which will form the basis of the
      * join.
      * <P>
      * The parameter value set by this method is stored internally and
      * will be supplied as the appropriate parameter in this rowset's
-     * command when the method <code>getMatchColumn</code> is called.
+     * command when the method {@code getMatchColumn} is called.
      *
      * @param columnNames the name of the column into this rowset
      *        object's internal representation of parameter values
      * @throws SQLException if an error occurs or the
-     *  parameter index is out of bounds
+     *         parameter index is out of bounds
      */
     public void setMatchColumn(String[] columnNames) throws SQLException {
 
@@ -3883,22 +3883,22 @@
     }
 
 
-        /**
-     * Sets the designated parameter to the given <code>int</code>
+    /**
+     * Sets the designated parameter to the given {@code int}
      * object.  This forms the basis of the join for the
-     * <code>JoinRowSet</code> as the column which will form the basis of the
+     * {@code JoinRowSet} as the column which will form the basis of the
      * join.
      * <P>
      * The parameter value set by this method is stored internally and
      * will be supplied as the appropriate parameter in this rowset's
-     * command when the method <code>getMatchColumn</code> is called.
+     * command when the method {@code getMatchColumn} is called.
      *
      * @param columnIdx the index into this rowset
      *        object's internal representation of parameter values; the
      *        first parameter is 0, the second is 1, and so on; must be
-     *        <code>0</code> or greater
+     *        {@code 0} or greater
      * @throws SQLException if an error occurs or the
-     *                         parameter index is out of bounds
+     *         parameter index is out of bounds
      */
     public void setMatchColumn(int columnIdx) throws SQLException {
         // validate, if col is ok to be set
@@ -3912,19 +3912,19 @@
     }
 
     /**
-     * Sets the designated parameter to the given <code>String</code>
+     * Sets the designated parameter to the given {@code String}
      * object.  This forms the basis of the join for the
-     * <code>JoinRowSet</code> as the column which will form the basis of the
+     * {@code JoinRowSet} as the column which will form the basis of the
      * join.
      * <P>
      * The parameter value set by this method is stored internally and
      * will be supplied as the appropriate parameter in this rowset's
-     * command when the method <code>getMatchColumn</code> is called.
+     * command when the method {@code getMatchColumn} is called.
      *
      * @param columnName the name of the column into this rowset
      *        object's internal representation of parameter values
      * @throws SQLException if an error occurs or the
-     *  parameter index is out of bounds
+     *         parameter index is out of bounds
      */
     public void setMatchColumn(String columnName) throws SQLException {
         // validate, if col is ok to be set
@@ -3938,8 +3938,8 @@
     }
 
     /**
-     * Unsets the designated parameter to the given <code>int</code>
-     * object.  This was set using <code>setMatchColumn</code>
+     * Unsets the designated parameter to the given {@code int}
+     * object.  This was set using {@code setMatchColumn}
      * as the column which will form the basis of the join.
      * <P>
      * The parameter value unset by this method should be same
@@ -3948,8 +3948,8 @@
      * @param columnIdx the index into this rowset
      *        object's internal representation of parameter values
      * @throws SQLException if an error occurs or the
-     *  parameter index is out of bounds or if the columnIdx is
-     *  not the same as set using <code>setMatchColumn(int)</code>
+     *         parameter index is out of bounds or if the columnIdx is
+     *         not the same as set using {@code setMatchColumn(int)}
      */
     public void unsetMatchColumn(int columnIdx) throws SQLException {
         // check if we are unsetting the SAME column
@@ -3964,8 +3964,8 @@
     }
 
     /**
-     * Unsets the designated parameter to the given <code>String</code>
-     * object.  This was set using <code>setMatchColumn</code>
+     * Unsets the designated parameter to the given {@code String}
+     * object.  This was set using {@code setMatchColumn}
      * as the column which will form the basis of the join.
      * <P>
      * The parameter value unset by this method should be same
@@ -3974,8 +3974,8 @@
      * @param columnName the index into this rowset
      *        object's internal representation of parameter values
      * @throws SQLException if an error occurs or the
-     *  parameter index is out of bounds or if the columnName is
-     *  not the same as set using <code>setMatchColumn(String)</code>
+     *         parameter index is out of bounds or if the columnName is
+     *         not the same as set using {@code setMatchColumn(String)}
      *
      */
     public void unsetMatchColumn(String columnName) throws SQLException {
@@ -3992,12 +3992,12 @@
     }
 
     /**
-     * Retrieves the <code>DatabaseMetaData</code> associated with
+     * Retrieves the {@code DatabaseMetaData} associated with
      * the connection handle associated with this
-     * <code>JdbcRowSet</code> object.
-     *
-     * @return the <code>DatabaseMetadata</code> associated
-     *  with the rowset's connection.
+     * {@code JdbcRowSet} object.
+     *
+     * @return the {@code DatabaseMetadata} associated
+     *         with the rowset's connection.
      * @throws SQLException if a database access error occurs
      */
     public DatabaseMetaData getDatabaseMetaData() throws SQLException {
@@ -4006,12 +4006,12 @@
     }
 
     /**
-     * Retrieves the <code>ParameterMetaData</code> associated with
+     * Retrieves the {@code ParameterMetaData} associated with
      * the connection handle associated with this
-     * <code>JdbcRowSet</code> object.
-     *
-     * @return the <code>ParameterMetadata</code> associated
-     *  with the rowset's connection.
+     * {@code JdbcRowSet} object.
+     *
+     * @return the {@code ParameterMetadata} associated
+     *         with the rowset's connection.
      * @throws SQLException if a database access error occurs
      */
     public ParameterMetaData getParameterMetaData() throws SQLException {
@@ -4020,18 +4020,18 @@
     }
 
     /**
-     * Commits all updates in this <code>JdbcRowSet</code> object by
-     * wrapping the internal <code>Connection</code> object and calling
-     * its <code>commit</code> method.
-     * This method sets this <code>JdbcRowSet</code> object's private field
-     * <code>rs</code> to <code>null</code> after saving its value to another
-     * object, but only if the <code>ResultSet</code>
-     * constant <code>HOLD_CURSORS_OVER_COMMIT</code> has not been set.
-     * (The field <code>rs</code> is this <code>JdbcRowSet</code> object's
-     * <code>ResultSet</code> object.)
+     * Commits all updates in this {@code JdbcRowSet} object by
+     * wrapping the internal {@code Connection} object and calling
+     * its {@code commit} method.
+     * This method sets this {@code JdbcRowSet} object's private field
+     * {@code rs} to {@code null} after saving its value to another
+     * object, but only if the {@code ResultSet}
+     * constant {@code HOLD_CURSORS_OVER_COMMIT} has not been set.
+     * (The field {@code rs} is this {@code JdbcRowSet} object's
+     * {@code ResultSet} object.)
      *
      * @throws SQLException if autoCommit is set to true or if a database
-     * access error occurs
+     *         access error occurs
      */
     public void commit() throws SQLException {
       conn.commit();
@@ -4045,8 +4045,8 @@
     }
 
     /**
-     * Sets auto-commit on the internal <code>Connection</code> object with this
-     * <code>JdbcRowSet</code>
+     * Sets auto-commit on the internal {@code Connection} object with this
+     * {@code JdbcRowSet}
      *
      * @throws SQLException if a database access error occurs
      */
@@ -4074,7 +4074,7 @@
     }
 
     /**
-     * Returns the auto-commit status with this <code>JdbcRowSet</code>.
+     * Returns the auto-commit status with this {@code JdbcRowSet}.
      *
      * @return true if auto commit is true; false otherwise
      * @throws SQLException if a database access error occurs
@@ -4084,16 +4084,16 @@
     }
 
     /**
-     * Rolls back all the updates in this <code>JdbcRowSet</code> object by
-     * wrapping the internal <code>Connection</code> object and calling its
-     * <code>rollback</code> method.
-     * This method sets this <code>JdbcRowSet</code> object's private field
-     * <code>rs</code> to <code>null</code> after saving its value to another object.
-     * (The field <code>rs</code> is this <code>JdbcRowSet</code> object's
-     * internal <code>ResultSet</code> object.)
+     * Rolls back all the updates in this {@code JdbcRowSet} object by
+     * wrapping the internal {@code Connection} object and calling its
+     * {@code rollback} method.
+     * This method sets this {@code JdbcRowSet} object's private field
+     * {@code rs} to {@code null} after saving its value to another object.
+     * (The field {@code rs} is this {@code JdbcRowSet} object's
+     * internal {@code ResultSet} object.)
      *
      * @throws SQLException if autoCommit is set to true or a database
-     * access error occurs
+     *         access error occurs
      */
     public void rollback() throws SQLException {
         conn.rollback();
@@ -4106,14 +4106,14 @@
 
 
     /**
-     * Rollbacks all the updates in the <code>JdbcRowSet</code> back to the
-     * last <code>Savepoint</code> transaction marker. Wraps the internal
-     * <code>Connection</code> object and call it's rollback method
-     *
-     * @param s the <code>Savepoint</code> transaction marker to roll the
-     * transaction to.
+     * Rollbacks all the updates in the {@code JdbcRowSet} back to the
+     * last {@code Savepoint} transaction marker. Wraps the internal
+     * {@code Connection} object and call it's rollback method
+     *
+     * @param s the {@code Savepoint} transaction marker to roll the
+     *        transaction to.
      * @throws SQLException if autoCommit is set to true; or ia a database
-     * access error occurs
+     *         access error occurs
      */
     public void rollback(Savepoint s) throws SQLException {
         conn.rollback(s);
@@ -4144,10 +4144,10 @@
     //  Added as per Rave requirements
 
     /**
-     * Gets this <code>JdbcRowSet</code> object's Connection property
-     *
-     *
-     * @return the <code>Connection</code> object associated with this rowset;
+     * Gets this {@code JdbcRowSet} object's Connection property
+     *
+     *
+     * @return the {@code Connection} object associated with this rowset;
      */
 
     protected Connection getConnection() {
@@ -4158,10 +4158,10 @@
     // Added as per rave requirements
 
     /**
-     * Sets this <code>JdbcRowSet</code> object's connection property
-     * to the given <code>Connection</code> object.
-     *
-     * @param connection the <code>Connection</code> object.
+     * Sets this {@code JdbcRowSet} object's connection property
+     * to the given {@code Connection} object.
+     *
+     * @param connection the {@code Connection} object.
      */
 
     protected void setConnection(Connection connection) {
@@ -4172,10 +4172,10 @@
     // Added as per Rave requirements
 
     /**
-     * Gets this <code>JdbcRowSet</code> object's PreparedStatement property
-     *
-     *
-     * @return the <code>PreparedStatement</code> object associated with this rowset;
+     * Gets this {@code JdbcRowSet} object's PreparedStatement property
+     *
+     *
+     * @return the {@code PreparedStatement} object associated with this rowset;
      */
 
     protected PreparedStatement getPreparedStatement() {
@@ -4186,10 +4186,10 @@
     // Added as per Rave requirements
 
     /**
-     * Sets this <code>JdbcRowSet</code> object's preparedtsatement property
-     * to the given <code>PreparedStatemennt</code> object.
-     *
-     * @param preparedStatement the <code>PreparedStatement</code> object
+     * Sets this {@code JdbcRowSet} object's preparedtsatement property
+     * to the given {@code PreparedStatemennt} object.
+     *
+     * @param preparedStatement the {@code PreparedStatement} object
      *
      */
     protected void setPreparedStatement(PreparedStatement preparedStatement) {
@@ -4200,10 +4200,10 @@
     // Added as per Rave requirements
 
     /**
-     * Gets this <code>JdbcRowSet</code> object's ResultSet property
-     *
-     *
-     * @return the <code>ResultSet</code> object associated with this rowset;
+     * Gets this {@code JdbcRowSet} object's ResultSet property
+     *
+     *
+     * @return the {@code ResultSet} object associated with this rowset;
      */
 
     protected ResultSet getResultSet() throws SQLException {
@@ -4217,10 +4217,10 @@
     // Added as per Rave requirements
 
     /**
-     * Sets this <code>JdbcRowSet</code> object's resultset property
-     * to the given <code>ResultSet</code> object.
-     *
-     * @param resultSet the <code>ResultSet</code> object
+     * Sets this {@code JdbcRowSet} object's resultset property
+     * to the given {@code ResultSet} object.
+     *
+     * @param resultSet the {@code ResultSet} object
      *
      */
     protected void setResultSet(ResultSet resultSet) {
@@ -4228,25 +4228,25 @@
     }
 
     /**
-     * Sets this <code>JdbcRowSet</code> object's <code>command</code> property to
-     * the given <code>String</code> object and clears the parameters, if any,
+     * Sets this {@code JdbcRowSet} object's {@code command} property to
+     * the given {@code String} object and clears the parameters, if any,
      * that were set for the previous command. In addition,
-     * if the <code>command</code> property has previously been set to a
+     * if the {@code command} property has previously been set to a
      * non-null value and it is
-     * different from the <code>String</code> object supplied,
-     * this method sets this <code>JdbcRowSet</code> object's private fields
-     * <code>ps</code> and <code>rs</code> to <code>null</code>.
-     * (The field <code>ps</code> is its <code>PreparedStatement</code> object, and
-     * the field <code>rs</code> is its <code>ResultSet</code> object.)
+     * different from the {@code String} object supplied,
+     * this method sets this {@code JdbcRowSet} object's private fields
+     * {@code ps} and {@code rs} to {@code null}.
+     * (The field {@code ps} is its {@code PreparedStatement} object, and
+     * the field {@code rs} is its {@code ResultSet} object.)
      * <P>
-     * The <code>command</code> property may not be needed if the <code>RowSet</code>
+     * The {@code command} property may not be needed if the {@code RowSet}
      * object gets its data from a source that does not support commands,
      * such as a spreadsheet or other tabular file.
-     * Thus, this property is optional and may be <code>null</code>.
-     *
-     * @param command a <code>String</code> object containing an SQL query
-     *            that will be set as this <code>RowSet</code> object's command
-     *            property; may be <code>null</code> but may not be an empty string
+     * Thus, this property is optional and may be {@code null}.
+     *
+     * @param command a {@code String} object containing an SQL query
+     *            that will be set as this {@code RowSet} object's command
+     *            property; may be {@code null} but may not be an empty string
      * @throws SQLException if an empty string is provided as the command value
      * @see #getCommand
      */
@@ -4265,32 +4265,32 @@
     }
 
     /**
-     * Sets the <code>dataSourceName</code> property for this <code>JdbcRowSet</code>
-     * object to the given logical name and sets this <code>JdbcRowSet</code> object's
-     * Url property to <code>null</code>. In addition, if the <code>dataSourceName</code>
+     * Sets the {@code dataSourceName} property for this {@code JdbcRowSet}
+     * object to the given logical name and sets this {@code JdbcRowSet} object's
+     * Url property to {@code null}. In addition, if the {@code dataSourceName}
      * property has previously been set and is different from the one supplied,
-     * this method sets this <code>JdbcRowSet</code> object's private fields
-     * <code>ps</code>, <code>rs</code>, and <code>conn</code> to <code>null</code>.
-     * (The field <code>ps</code> is its <code>PreparedStatement</code> object,
-     * the field <code>rs</code> is its <code>ResultSet</code> object, and
-     * the field <code>conn</code> is its <code>Connection</code> object.)
+     * this method sets this {@code JdbcRowSet} object's private fields
+     * {@code ps}, {@code rs}, and {@code conn} to {@code null}.
+     * (The field {@code ps} is its {@code PreparedStatement} object,
+     * the field {@code rs} is its {@code ResultSet} object, and
+     * the field {@code conn} is its {@code Connection} object.)
      * <P>
      * The name supplied to this method must have been bound to a
-     * <code>DataSource</code> object in a JNDI naming service so that an
+     * {@code DataSource} object in a JNDI naming service so that an
      * application can do a lookup using that name to retrieve the
-     * <code>DataSource</code> object bound to it. The <code>DataSource</code>
+     * {@code DataSource} object bound to it. The {@code DataSource}
      * object can then be used to establish a connection to the data source it
      * represents.
      * <P>
      * Users should set either the Url property or the dataSourceName property.
      * If both properties are set, the driver will use the property set most recently.
      *
-     * @param dsName a <code>String</code> object with the name that can be supplied
+     * @param dsName a {@code String} object with the name that can be supplied
      *        to a naming service based on JNDI technology to retrieve the
-     *        <code>DataSource</code> object that can be used to get a connection;
-     *        may be <code>null</code>
+     *        {@code DataSource} object that can be used to get a connection;
+     *        may be {@code null}
      * @throws SQLException if there is a problem setting the
-     *          <code>dataSourceName</code> property
+     *          {@code dataSourceName} property
      * @see #getDataSourceName
      */
     public void setDataSourceName(String dsName) throws SQLException{
@@ -4310,42 +4310,42 @@
 
 
     /**
-     * Sets the Url property for this <code>JdbcRowSet</code> object
-     * to the given <code>String</code> object and sets the dataSource name
-     * property to <code>null</code>. In addition, if the Url property has
-     * previously been set to a non <code>null</code> value and its value
+     * Sets the Url property for this {@code JdbcRowSet} object
+     * to the given {@code String} object and sets the dataSource name
+     * property to {@code null}. In addition, if the Url property has
+     * previously been set to a non {@code null} value and its value
      * is different from the value to be set,
-     * this method sets this <code>JdbcRowSet</code> object's private fields
-     * <code>ps</code>, <code>rs</code>, and <code>conn</code> to <code>null</code>.
-     * (The field <code>ps</code> is its <code>PreparedStatement</code> object,
-     * the field <code>rs</code> is its <code>ResultSet</code> object, and
-     * the field <code>conn</code> is its <code>Connection</code> object.)
+     * this method sets this {@code JdbcRowSet} object's private fields
+     * {@code ps}, {@code rs}, and {@code conn} to {@code null}.
+     * (The field {@code ps} is its {@code PreparedStatement} object,
+     * the field {@code rs} is its {@code ResultSet} object, and
+     * the field {@code conn} is its {@code Connection} object.)
      * <P>
      * The Url property is a JDBC URL that is used when
      * the connection is created using a JDBC technology-enabled driver
-     * ("JDBC driver") and the <code>DriverManager</code>.
+     * ("JDBC driver") and the {@code DriverManager}.
      * The correct JDBC URL for the specific driver to be used can be found
      * in the driver documentation.  Although there are guidelines for how
      * a JDBC URL is formed,
-     * a driver vendor can specify any <code>String</code> object except
-     * one with a length of <code>0</code> (an empty string).
+     * a driver vendor can specify any {@code String} object except
+     * one with a length of {@code 0} (an empty string).
      * <P>
      * Setting the Url property is optional if connections are established using
-     * a <code>DataSource</code> object instead of the <code>DriverManager</code>.
+     * a {@code DataSource} object instead of the {@code DriverManager}.
      * The driver will use either the URL property or the
      * dataSourceName property to create a connection, whichever was
      * specified most recently. If an application uses a JDBC URL, it
      * must load a JDBC driver that accepts the JDBC URL before it uses the
-     * <code>RowSet</code> object to connect to a database.  The <code>RowSet</code>
+     * {@code RowSet} object to connect to a database.  The {@code RowSet}
      * object will use the URL internally to create a database connection in order
      * to read or write data.
      *
-     * @param url a <code>String</code> object that contains the JDBC URL
+     * @param url a {@code String} object that contains the JDBC URL
      *            that will be used to establish the connection to a database for this
-     *            <code>RowSet</code> object; may be <code>null</code> but must not
+     *            {@code RowSet} object; may be {@code null} but must not
      *            be an empty string
      * @throws SQLException if an error occurs setting the Url property or the
-     *         parameter supplied is a string with a length of <code>0</code> (an
+     *         parameter supplied is a string with a length of {@code 0} (an
      *         empty string)
      * @see #getUrl
      */
@@ -4365,24 +4365,24 @@
        }
     }
 
-     /**
-     * Sets the username property for this <code>JdbcRowSet</code> object
+    /**
+     * Sets the username property for this {@code JdbcRowSet} object
      * to the given user name. Because it
      * is not serialized, the username property is set at run time before
-     * calling the method <code>execute</code>. In addition,
-     * if the <code>username</code> property is already set with a
-     * non-null value and that value is different from the <code>String</code>
+     * calling the method {@code execute}. In addition,
+     * if the {@code username} property is already set with a
+     * non-null value and that value is different from the {@code String}
      * object to be set,
-     * this method sets this <code>JdbcRowSet</code> object's private fields
-     * <code>ps</code>, <code>rs</code>, and <code>conn</code> to <code>null</code>.
-     * (The field <code>ps</code> is its <code>PreparedStatement</code> object,
-     * <code>rs</code> is its <code>ResultSet</code> object, and
-     * <code>conn</code> is its <code>Connection</code> object.)
-     * Setting these fields to <code>null</code> ensures that only current
+     * this method sets this {@code JdbcRowSet} object's private fields
+     * {@code ps}, {@code rs}, and {@code conn} to {@code null}.
+     * (The field {@code ps} is its {@code PreparedStatement} object,
+     * {@code rs} is its {@code ResultSet} object, and
+     * {@code conn} is its {@code Connection} object.)
+     * Setting these fields to {@code null} ensures that only current
      * values will be used.
      *
-     * @param uname the <code>String</code> object containing the user name that
-     *     is supplied to the data source to create a connection. It may be null.
+     * @param uname the {@code String} object containing the user name that
+     *        is supplied to the data source to create a connection. It may be null.
      * @see #getUsername
      */
     public void setUsername(String uname) {
@@ -4401,23 +4401,23 @@
     }
 
      /**
-     * Sets the password property for this <code>JdbcRowSet</code> object
-     * to the given <code>String</code> object. Because it
+     * Sets the password property for this {@code JdbcRowSet} object
+     * to the given {@code String} object. Because it
      * is not serialized, the password property is set at run time before
-     * calling the method <code>execute</code>. Its default valus is
-     * <code>null</code>. In addition,
-     * if the <code>password</code> property is already set with a
+     * calling the method {@code execute}. Its default valus is
+     * {@code null}. In addition,
+     * if the {@code password} property is already set with a
      * non-null value and that value is different from the one being set,
-     * this method sets this <code>JdbcRowSet</code> object's private fields
-     * <code>ps</code>, <code>rs</code>, and <code>conn</code> to <code>null</code>.
-     * (The field <code>ps</code> is its <code>PreparedStatement</code> object,
-     * <code>rs</code> is its <code>ResultSet</code> object, and
-     * <code>conn</code> is its <code>Connection</code> object.)
-     * Setting these fields to <code>null</code> ensures that only current
+     * this method sets this {@code JdbcRowSet} object's private fields
+     * {@code ps}, {@code rs}, and {@code conn} to {@code null}.
+     * (The field {@code ps} is its {@code PreparedStatement} object,
+     * {@code rs} is its {@code ResultSet} object, and
+     * {@code conn} is its {@code Connection} object.)
+     * Setting these fields to {@code null} ensures that only current
      * values will be used.
      *
-     * @param password the <code>String</code> object that represents the password
-     *     that must be supplied to the database to create a connection
+     * @param password the {@code String} object that represents the password
+     *        that must be supplied to the database to create a connection
      */
     public void setPassword(String password) {
 
@@ -4435,18 +4435,18 @@
     }
 
     /**
-     * Sets the type for this <code>RowSet</code> object to the specified type.
-     * The default type is <code>ResultSet.TYPE_SCROLL_INSENSITIVE</code>.
+     * Sets the type for this {@code RowSet} object to the specified type.
+     * The default type is {@code ResultSet.TYPE_SCROLL_INSENSITIVE}.
      *
      * @param type one of the following constants:
-     *             <code>ResultSet.TYPE_FORWARD_ONLY</code>,
-     *             <code>ResultSet.TYPE_SCROLL_INSENSITIVE</code>, or
-     *             <code>ResultSet.TYPE_SCROLL_SENSITIVE</code>
+     *             {@code ResultSet.TYPE_FORWARD_ONLY},
+     *             {@code ResultSet.TYPE_SCROLL_INSENSITIVE}, or
+     *             {@code ResultSet.TYPE_SCROLL_SENSITIVE}
      * @throws SQLException if the parameter supplied is not one of the
      *         following constants:
-     *          <code>ResultSet.TYPE_FORWARD_ONLY</code> or
-     *          <code>ResultSet.TYPE_SCROLL_INSENSITIVE</code>
-     *          <code>ResultSet.TYPE_SCROLL_SENSITIVE</code>
+     *          {@code ResultSet.TYPE_FORWARD_ONLY} or
+     *          {@code ResultSet.TYPE_SCROLL_INSENSITIVE}
+     *          {@code ResultSet.TYPE_SCROLL_SENSITIVE}
      * @see #getConcurrency
      * @see #getType
      */
@@ -4468,18 +4468,18 @@
     }
 
     /**
-     * Sets the concurrency for this <code>RowSet</code> object to
-     * the specified concurrency. The default concurrency for any <code>RowSet</code>
-     * object (connected or disconnected) is <code>ResultSet.CONCUR_UPDATABLE</code>,
+     * Sets the concurrency for this {@code RowSet} object to
+     * the specified concurrency. The default concurrency for any {@code RowSet}
+     * object (connected or disconnected) is {@code ResultSet.CONCUR_UPDATABLE},
      * but this method may be called at any time to change the concurrency.
      *
      * @param concur one of the following constants:
-     *                    <code>ResultSet.CONCUR_READ_ONLY</code> or
-     *                    <code>ResultSet.CONCUR_UPDATABLE</code>
+     *                    {@code ResultSet.CONCUR_READ_ONLY} or
+     *                    {@code ResultSet.CONCUR_UPDATABLE}
      * @throws SQLException if the parameter supplied is not one of the
      *         following constants:
-     *          <code>ResultSet.CONCUR_UPDATABLE</code> or
-     *          <code>ResultSet.CONCUR_READ_ONLY</code>
+     *          {@code ResultSet.CONCUR_UPDATABLE} or
+     *          {@code ResultSet.CONCUR_READ_ONLY}
      * @see #getConcurrency
      * @see #isReadOnly
      */
@@ -4500,8 +4500,8 @@
     }
 
     /**
-     * Retrieves the value of the designated <code>SQL XML</code> parameter as a
-     * <code>SQLXML</code> object in the Java programming language.
+     * Retrieves the value of the designated {@code SQL XML} parameter as a
+     * {@code SQLXML} object in the Java programming language.
      * @param columnIndex the first column is 1, the second is 2, ...
      * @return a SQLXML object that maps an SQL XML value
      * @throws SQLException if a database access error occurs
@@ -4512,8 +4512,8 @@
     }
 
     /**
-     * Retrieves the value of the designated <code>SQL XML</code> parameter as a
-     * <code>SQLXML</code> object in the Java programming language.
+     * Retrieves the value of the designated {@code SQL XML} parameter as a
+     * {@code SQLXML} object in the Java programming language.
      * @param colName the name of the column from which to retrieve the value
      * @return a SQLXML object that maps an SQL XML value
      * @throws SQLException if a database access error occurs
@@ -4524,12 +4524,12 @@
 
     /**
      * Retrieves the value of the designated column in the current row of this
-     * <code>ResultSet</code> object as a java.sql.RowId object in the Java
+     * {@code ResultSet} object as a java.sql.RowId object in the Java
      * programming language.
      *
      * @param columnIndex the first column is 1, the second 2, ...
-     * @return the column value if the value is a SQL <code>NULL</code> the
-     *     value returned is <code>null</code>
+     * @return the column value if the value is a SQL {@code NULL} the
+     *     value returned is {@code null}
      * @throws SQLException if a database access error occurs
      * @since 1.6
      */
@@ -4539,12 +4539,12 @@
 
     /**
      * Retrieves the value of the designated column in the current row of this
-     * <code>ResultSet</code> object as a java.sql.RowId object in the Java
+     * {@code ResultSet} object as a java.sql.RowId object in the Java
      * programming language.
      *
      * @param columnName the name of the column
-     * @return the column value if the value is a SQL <code>NULL</code> the
-     *     value returned is <code>null</code>
+     * @return the column value if the value is a SQL {@code NULL} the
+     *     value returned is {@code null}
      * @throws SQLException if a database access error occurs
      * @since 1.6
      */
@@ -4553,10 +4553,10 @@
     }
 
     /**
-     * Updates the designated column with a <code>RowId</code> value. The updater
+     * Updates the designated column with a {@code RowId} value. The updater
      * methods are used to update column values in the current row or the insert
      * row. The updater methods do not update the underlying database; instead
-     * the <code>updateRow<code> or <code>insertRow</code> methods are called
+     * the {@code updateRow} or {@code insertRow} methods are called
      * to update the database.
      *
      * @param columnIndex the first column is 1, the second 2, ...
@@ -4569,10 +4569,10 @@
     }
 
     /**
-     * Updates the designated column with a <code>RowId</code> value. The updater
+     * Updates the designated column with a {@code RowId} value. The updater
      * methods are used to update column values in the current row or the insert
      * row. The updater methods do not update the underlying database; instead
-     * the <code>updateRow<code> or <code>insertRow</code> methods are called
+     * the {@code updateRow} or {@code insertRow} methods are called
      * to update the database.
      *
      * @param columnName the name of the column
@@ -4631,8 +4631,8 @@
 
 
     /*o
-     * This method is used for updating SQL <code>NCLOB</code>  type that maps
-     * to <code>java.sql.Types.NCLOB</code>
+     * This method is used for updating SQL {@code NCLOB}  type that maps
+     * to {@code java.sql.Types.NCLOB}
      * @param columnIndex the first column is 1, the second 2, ...
      * @param nClob the value for the column to be updated
      * @throws SQLException if a database access error occurs
@@ -4643,8 +4643,8 @@
     }
 
     /**
-     * This method is used for updating SQL <code>NCLOB</code>  type that maps
-     * to <code>java.sql.Types.NCLOB</code>
+     * This method is used for updating SQL {@code NCLOB}  type that maps
+     * to {@code java.sql.Types.NCLOB}
      * @param columnName name of the column
      * @param nClob the value for the column to be updated
      * @throws SQLException if a database access error occurs
@@ -4656,12 +4656,12 @@
 
     /**
      * Retrieves the value of the designated column in the current row
-     * of this <code>ResultSet</code> object as a <code>NClob</code> object
+     * of this {@code ResultSet} object as a {@code NClob} object
      * in the Java programming language.
      *
      * @param i the first column is 1, the second is 2, ...
-     * @return a <code>NClob</code> object representing the SQL
-     *         <code>NCLOB</code> value in the specified column
+     * @return a {@code NClob} object representing the SQL
+     *         {@code NCLOB} value in the specified column
      * @exception SQLException if a database access error occurs
      * @since 1.6
      */
@@ -4672,11 +4672,11 @@
 
   /**
      * Retrieves the value of the designated column in the current row
-     * of this <code>ResultSet</code> object as a <code>NClob</code> object
+     * of this {@code ResultSet} object as a {@code NClob} object
      * in the Java programming language.
      *
      * @param colName the name of the column from which to retrieve the value
-     * @return a <code>NClob</code> object representing the SQL <code>NCLOB</code>
+     * @return a {@code NClob} object representing the SQL {@code NCLOB}
      * value in the specified column
      * @exception SQLException if a database access error occurs
      * @since 1.6
@@ -4694,10 +4694,10 @@
     }
 
     /**
-      * Sets the designated parameter to the given <code>java.sql.SQLXML</code> object. The driver converts this to an
-      * SQL <code>XML</code> value when it sends it to the database.
+      * Sets the designated parameter to the given {@code java.sql.SQLXML} object. The driver converts this to an
+      * SQL {@code XML} value when it sends it to the database.
       * @param parameterIndex index of the first parameter is 1, the second is 2, ...
-      * @param xmlObject a <code>SQLXML</code> object that maps an SQL <code>XML</code> value
+      * @param xmlObject a {@code SQLXML} object that maps an SQL {@code XML} value
       * @throws SQLException if a database access error occurs
       * @since 1.6
       */
@@ -4706,10 +4706,10 @@
      }
 
     /**
-     * Sets the designated parameter to the given <code>java.sql.SQLXML</code> object. The driver converts this to an
-     * <code>SQL XML</code> value when it sends it to the database.
+     * Sets the designated parameter to the given {@code java.sql.SQLXML} object. The driver converts this to an
+     * {@code SQL XML} value when it sends it to the database.
      * @param parameterName the name of the parameter
-     * @param xmlObject a <code>SQLXML</code> object that maps an <code>SQL XML</code> value
+     * @param xmlObject a {@code SQLXML} object that maps an {@code SQL XML} value
      * @throws SQLException if a database access error occurs
      * @since 1.6
      */
@@ -4718,8 +4718,8 @@
      }
 
     /**
-     * Sets the designated parameter to the given <code>java.sql.RowId</code> object. The
-     * driver converts this to a SQL <code>ROWID</code> value when it sends it
+     * Sets the designated parameter to the given {@code java.sql.RowId} object. The
+     * driver converts this to a SQL {@code ROWID} value when it sends it
      * to the database
      *
      * @param parameterIndex the first parameter is 1, the second is 2, ...
@@ -4732,9 +4732,9 @@
          throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
      }
 
-    /**
-    * Sets the designated parameter to the given <code>java.sql.RowId</code> object. The
-    * driver converts this to a SQL <code>ROWID</code> when it sends it to the
+   /**
+    * Sets the designated parameter to the given {@code java.sql.RowId} object. The
+    * driver converts this to a SQL {@code ROWID} when it sends it to the
     * database.
     *
     * @param parameterName the name of the parameter
@@ -4748,18 +4748,18 @@
 
 
    /**
-     * Sets the designated parameter to the given <code>String</code> object.
-     * The driver converts this to a SQL <code>NCHAR</code> or
-     * <code>NVARCHAR</code> or <code>LONGNVARCHAR</code> value
+     * Sets the designated parameter to the given {@code String} object.
+     * The driver converts this to a SQL {@code NCHAR} or
+     * {@code NVARCHAR} or {@code LONGNVARCHAR} value
      * (depending on the argument's
-     * size relative to the driver's limits on <code>NVARCHAR</code> values)
+     * size relative to the driver's limits on {@code NVARCHAR} values)
      * when it sends it to the database.
      *
      * @param parameterIndex of the first parameter is 1, the second is 2, ...
      * @param value the parameter value
      * @throws SQLException if the driver does not support national
      *         character sets;  if the driver can detect that a data conversion
-     *  error could occur ; or if a database access error occurs
+     *         error could occur ; or if a database access error occurs
      * @since 1.6
      */
      public void setNString(int parameterIndex, String value) throws SQLException {
@@ -4768,9 +4768,9 @@
 
 
    /**
-    * Sets the designated parameter in this <code>RowSet</code> object's command
-    * to a <code>Reader</code> object. The
-    * <code>Reader</code> reads the data till end-of-file is reached. The
+    * Sets the designated parameter in this {@code RowSet} object's command
+    * to a {@code Reader} object. The
+    * {@code Reader} reads the data till end-of-file is reached. The
     * driver does the necessary conversion from Java character format to
     * the national character set in the database.
 
@@ -4779,14 +4779,14 @@
     * standard interface.
     * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
     * it might be more efficient to use a version of
-    * <code>setNCharacterStream</code> which takes a length parameter.
+    * {@code setNCharacterStream} which takes a length parameter.
     *
     * @param parameterIndex of the first parameter is 1, the second is 2, ...
     * @param value the parameter value
     * @throws SQLException if the driver does not support national
     *         character sets;  if the driver can detect that a data conversion
-    *  error could occur ; if a database access error occurs; or
-    * this method is called on a closed <code>PreparedStatement</code>
+    *         error could occur ; if a database access error occurs; or
+    *         this method is called on a closed {@code PreparedStatement}
     * @throws SQLFeatureNotSupportedException  if the JDBC driver does not support this method
     * @since 1.6
     */
@@ -4795,14 +4795,14 @@
     }
 
   /**
-    * Sets the designated parameter to a <code>java.sql.NClob</code> object. The object
-    * implements the <code>java.sql.NClob</code> interface. This <code>NClob</code>
-    * object maps to a SQL <code>NCLOB</code>.
+    * Sets the designated parameter to a {@code java.sql.NClob} object. The object
+    * implements the {@code java.sql.NClob} interface. This {@code NClob}
+    * object maps to a SQL {@code NCLOB}.
     * @param parameterName the name of the column to be set
     * @param value the parameter value
     * @throws SQLException if the driver does not support national
     *         character sets;  if the driver can detect that a data conversion
-    *  error could occur; or if a database access error occurs
+    *         error could occur; or if a database access error occurs
     * @since 1.6
     */
     public void setNClob(String parameterName, NClob value) throws SQLException {
@@ -4810,17 +4810,17 @@
      }
 
 
-  /**
+    /**
      * Retrieves the value of the designated column in the current row
-     * of this <code>ResultSet</code> object as a
-     * <code>java.io.Reader</code> object.
+     * of this {@code ResultSet} object as a
+     * {@code java.io.Reader} object.
      * It is intended for use when
-     * accessing  <code>NCHAR</code>,<code>NVARCHAR</code>
-     * and <code>LONGNVARCHAR</code> columns.
-     *
-     * @return a <code>java.io.Reader</code> object that contains the column
-     * value; if the value is SQL <code>NULL</code>, the value returned is
-     * <code>null</code> in the Java programming language.
+     * accessing  {@code NCHAR},{@code NVARCHAR}
+     * and {@code LONGNVARCHAR} columns.
+     *
+     * @return a {@code java.io.Reader} object that contains the column
+     * value; if the value is SQL {@code NULL}, the value returned is
+     * {@code null} in the Java programming language.
      * @param columnIndex the first column is 1, the second is 2, ...
      * @exception SQLException if a database access error occurs
      * @since 1.6
@@ -4832,16 +4832,16 @@
 
     /**
      * Retrieves the value of the designated column in the current row
-     * of this <code>ResultSet</code> object as a
-     * <code>java.io.Reader</code> object.
+     * of this {@code ResultSet} object as a
+     * {@code java.io.Reader} object.
      * It is intended for use when
-     * accessing  <code>NCHAR</code>,<code>NVARCHAR</code>
-     * and <code>LONGNVARCHAR</code> columns.
+     * accessing  {@code NCHAR},{@code NVARCHAR}
+     * and {@code LONGNVARCHAR} columns.
      *
      * @param columnName the name of the column
-     * @return a <code>java.io.Reader</code> object that contains the column
-     * value; if the value is SQL <code>NULL</code>, the value returned is
-     * <code>null</code> in the Java programming language
+     * @return a {@code java.io.Reader} object that contains the column
+     * value; if the value is SQL {@code NULL}, the value returned is
+     * {@code null} in the Java programming language
      * @exception SQLException if a database access error occurs
      * @since 1.6
      */
@@ -4850,11 +4850,11 @@
      }
 
     /**
-     * Updates the designated column with a <code>java.sql.SQLXML</code> value.
+     * Updates the designated column with a {@code java.sql.SQLXML} value.
      * The updater
      * methods are used to update column values in the current row or the insert
      * row. The updater methods do not update the underlying database; instead
-     * the <code>updateRow</code> or <code>insertRow</code> methods are called
+     * the {@code updateRow} or {@code insertRow} methods are called
      * to update the database.
      * @param columnIndex the first column is 1, the second 2, ...
      * @param xmlObject the value for the column to be updated
@@ -4866,11 +4866,11 @@
     }
 
     /**
-     * Updates the designated column with a <code>java.sql.SQLXML</code> value.
+     * Updates the designated column with a {@code java.sql.SQLXML} value.
      * The updater
      * methods are used to update column values in the current row or the insert
      * row. The updater methods do not update the underlying database; instead
-     * the <code>updateRow</code> or <code>insertRow</code> methods are called
+     * the {@code updateRow} or {@code insertRow} methods are called
      * to update the database.
      *
      * @param columnName the name of the column
@@ -4884,15 +4884,15 @@
 
      /**
      * Retrieves the value of the designated column in the current row
-     * of this <code>ResultSet</code> object as
-     * a <code>String</code> in the Java programming language.
+     * of this {@code ResultSet} object as
+     * a {@code String} in the Java programming language.
      * It is intended for use when
-     * accessing  <code>NCHAR</code>,<code>NVARCHAR</code>
-     * and <code>LONGNVARCHAR</code> columns.
+     * accessing  {@code NCHAR},{@code NVARCHAR}
+     * and {@code LONGNVARCHAR} columns.
      *
      * @param columnIndex the first column is 1, the second is 2, ...
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     * value returned is <code>null</code>
+     * @return the column value; if the value is SQL {@code NULL}, the
+     * value returned is {@code null}
      * @exception SQLException if a database access error occurs
      * @since 1.6
      */
@@ -4902,15 +4902,15 @@
 
     /**
      * Retrieves the value of the designated column in the current row
-     * of this <code>ResultSet</code> object as
-     * a <code>String</code> in the Java programming language.
+     * of this {@code ResultSet} object as
+     * a {@code String} in the Java programming language.
      * It is intended for use when
-     * accessing  <code>NCHAR</code>,<code>NVARCHAR</code>
-     * and <code>LONGNVARCHAR</code> columns.
+     * accessing  {@code NCHAR},{@code NVARCHAR}
+     * and {@code LONGNVARCHAR} columns.
      *
      * @param columnName the SQL name of the column
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     * value returned is <code>null</code>
+     * @return the column value; if the value is SQL {@code NULL}, the
+     * value returned is {@code null}
      * @exception SQLException if a database access error occurs
      * @since 1.6
      */
@@ -4927,9 +4927,9 @@
        * the insert row. The updater methods do not update the underlying database;
        * instead the updateRow or insertRow methods are called to update the database.
        *
-       * @param columnIndex - the first column is 1, the second is 2, ...
-       * @param x - the new column value
-       * @param length - the length of the stream
+       * @param columnIndex the first column is 1, the second is 2, ...
+       * @param x the new column value
+       * @param length the length of the stream
        * @exception SQLException if a database access error occurs
        * @since 1.6
        */
@@ -4949,9 +4949,9 @@
        * the insert row. The updater methods do not update the underlying database;
        * instead the updateRow or insertRow methods are called to update the database.
        *
-       * @param columnName - name of the Column
-       * @param x - the new column value
-       * @param length - the length of the stream
+       * @param columnName name of the Column
+       * @param x the new column value
+       * @param length the length of the stream
        * @exception SQLException if a database access error occurs
        * @since 1.6
        */
@@ -4963,26 +4963,27 @@
        }
 
     /**
-     * Updates the designated column with a character stream value.   The
+     * Updates the designated column with a character stream value. The
      * driver does the necessary conversion from Java character format to
      * the national character set in the database.
      * It is intended for use when
-     * updating  <code>NCHAR</code>,<code>NVARCHAR</code>
-     * and <code>LONGNVARCHAR</code> columns.
+     * updating  {@code NCHAR},{@code NVARCHAR}
+     * and {@code LONGNVARCHAR} columns.
      *
      * The updater methods are used to update column values in the
      * current row or the insert row.  The updater methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
+     * update the underlying database; instead the {@code updateRow} or
+     * {@code insertRow} methods are called to update the database.
      *
      * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
      * it might be more efficient to use a version of
-     * <code>updateNCharacterStream</code> which takes a length parameter.
+     * {@code updateNCharacterStream} which takes a length parameter.
      *
      * @param columnIndex the first column is 1, the second is 2, ...
      * @param x the new column value
      * @exception SQLException if a database access error occurs,
-     * the result set concurrency is <code>CONCUR_READ_ONLY</code> or this method is called on a closed result set
+     * the result set concurrency is {@code CONCUR_READ_ONLY} or this
+     * method is called on a closed result set
      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
      * this method
      * @since 1.6
@@ -4997,26 +4998,27 @@
      * driver does the necessary conversion from Java character format to
      * the national character set in the database.
      * It is intended for use when
-     * updating  <code>NCHAR</code>,<code>NVARCHAR</code>
-     * and <code>LONGNVARCHAR</code> columns.
+     * updating  {@code NCHAR},{@code NVARCHAR}
+     * and {@code LONGNVARCHAR} columns.
      *
      * The updater methods are used to update column values in the
      * current row or the insert row.  The updater methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
+     * update the underlying database; instead the {@code updateRow} or
+     * {@code insertRow} methods are called to update the database.
      *
      * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
      * it might be more efficient to use a version of
-     * <code>updateNCharacterStream</code> which takes a length parameter.
-     *
-     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the la
-bel is the name of the column
-     * @param reader the <code>java.io.Reader</code> object containing
+     * {@code updateNCharacterStream} which takes a length parameter.
+     *
+     * @param columnLabel the label for the column specified with the SQL AS clause.
+     *        If the SQL AS clause was not specified, then the label is the name of the column
+     * @param reader the {@code java.io.Reader} object containing
      *        the new column value
      * @exception SQLException if a database access error occurs,
-     * the result set concurrency is <code>CONCUR_READ_ONLY</code> or this method is called on a closed result set
-      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-     * this method
+     *        the result set concurrency is {@code CONCUR_READ_ONLY} or
+     *        this method is called on a closed result set
+     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
+     *        this method
      * @since 1.6
      */
     public void updateNCharacterStream(String columnLabel,
@@ -5027,9 +5029,9 @@
     /**
      * Updates the designated column using the given input stream, which
      * will have the specified number of bytes.
-     * When a very large ASCII value is input to a <code>LONGVARCHAR</code>
+     * When a very large ASCII value is input to a {@code LONGVARCHAR}
      * parameter, it may be more practical to send it via a
-     * <code>java.io.InputStream</code>. Data will be read from the stream
+     * {@code java.io.InputStream}. Data will be read from the stream
      * as needed until end-of-file is reached.  The JDBC driver will
      * do any necessary conversion from ASCII to the database char format.
      *
@@ -5039,16 +5041,16 @@
      * <p>
      * The updater methods are used to update column values in the
      * current row or the insert row.  The updater methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
+     * update the underlying database; instead the {@code updateRow} or
+     * {@code insertRow} methods are called to update the database.
      *
      * @param columnIndex the first column is 1, the second is 2, ...
      * @param inputStream An object that contains the data to set the parameter
-     * value to.
+     *        value to.
      * @param length the number of bytes in the parameter data.
      * @exception SQLException if a database access error occurs,
-     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
-     * or this method is called on a closed result set
+     *            the result set concurrency is {@code CONCUR_READ_ONLY}
+     *            or this method is called on a closed result set
      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
      * this method
      * @since 1.6
@@ -5060,9 +5062,9 @@
     /**
      * Updates the designated column using the given input stream, which
      * will have the specified number of bytes.
-     * When a very large ASCII value is input to a <code>LONGVARCHAR</code>
+     * When a very large ASCII value is input to a {@code LONGVARCHAR}
      * parameter, it may be more practical to send it via a
-     * <code>java.io.InputStream</code>. Data will be read from the stream
+     * {@code java.io.InputStream}. Data will be read from the stream
      * as needed until end-of-file is reached.  The JDBC driver will
      * do any necessary conversion from ASCII to the database char format.
      *
@@ -5072,18 +5074,20 @@
      * <p>
      * The updater methods are used to update column values in the
      * current row or the insert row.  The updater methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
+     * update the underlying database; instead the {@code updateRow} or
+     * {@code insertRow} methods are called to update the database.
+     *
+     * @param columnLabel the label for the column specified with the SQL AS clause.
+     *        If the SQL AS clause was not specified,
+     *        then the label is the name of the column.
      * @param inputStream An object that contains the data to set the parameter
-     * value to.
+     *        value to.
      * @param length the number of bytes in the parameter data.
      * @exception SQLException if a database access error occurs,
-     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
-     * or this method is called on a closed result set
+     *            the result set concurrency is {@code CONCUR_READ_ONLY}
+     *            or this method is called on a closed result set
      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-     * this method
+     *            this method
      * @since 1.6
      */
     public void updateBlob(String columnLabel, InputStream inputStream, long length) throws SQLException {
@@ -5092,9 +5096,9 @@
 
     /**
      * Updates the designated column using the given input stream.
-     * When a very large ASCII value is input to a <code>LONGVARCHAR</code>
+     * When a very large ASCII value is input to a {@code LONGVARCHAR}
      * parameter, it may be more practical to send it via a
-     * <code>java.io.InputStream</code>. Data will be read from the stream
+     * {@code java.io.InputStream}. Data will be read from the stream
      * as needed until end-of-file is reached.  The JDBC driver will
      * do any necessary conversion from ASCII to the database char format.
      *
@@ -5102,23 +5106,23 @@
      * Java stream object or your own subclass that implements the
      * standard interface.
      *
-     *  <P><B>Note:</B> Consult your JDBC driver documentation to determine if
+     * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
      * it might be more efficient to use a version of
-     * <code>updateBlob</code> which takes a length parameter.
+     * {@code updateBlob} which takes a length parameter.
      * <p>
      * The updater methods are used to update column values in the
      * current row or the insert row.  The updater methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
+     * update the underlying database; instead the {@code updateRow} or
+     * {@code insertRow} methods are called to update the database.
      *
      * @param columnIndex the first column is 1, the second is 2, ...
      * @param inputStream An object that contains the data to set the parameter
-     * value to.
+     *        value to.
      * @exception SQLException if a database access error occurs,
-     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
-     * or this method is called on a closed result set
+     *            the result set concurrency is {@code CONCUR_READ_ONLY}
+     *            or this method is called on a closed result set
      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-     * this method
+     *            this method
      * @since 1.6
      */
     public void updateBlob(int columnIndex, InputStream inputStream) throws SQLException {
@@ -5127,9 +5131,9 @@
 
     /**
      * Updates the designated column using the given input stream.
-     * When a very large ASCII value is input to a <code>LONGVARCHAR</code>
+     * When a very large ASCII value is input to a {@code LONGVARCHAR}
      * parameter, it may be more practical to send it via a
-     * <code>java.io.InputStream</code>. Data will be read from the stream
+     * {@code java.io.InputStream}. Data will be read from the stream
      * as needed until end-of-file is reached.  The JDBC driver will
      * do any necessary conversion from ASCII to the database char format.
      *
@@ -5138,22 +5142,23 @@
      * standard interface.
      *   <P><B>Note:</B> Consult your JDBC driver documentation to determine if
      * it might be more efficient to use a version of
-     * <code>updateBlob</code> which takes a length parameter.
+     * {@code updateBlob} which takes a length parameter.
      * <p>
      * The updater methods are used to update column values in the
      * current row or the insert row.  The updater methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the la
-bel is the name of the column
+     * update the underlying database; instead the {@code updateRow} or
+     * {@code insertRow} methods are called to update the database.
+     *
+     * @param columnLabel the label for the column specified with the SQL AS clause.
+     *        If the SQL AS clause was not specified, then the label
+     *        is the name of the column
      * @param inputStream An object that contains the data to set the parameter
-     * value to.
+     *        value to.
      * @exception SQLException if a database access error occurs,
-     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
-     * or this method is called on a closed result set
+     *        the result set concurrency is {@code CONCUR_READ_ONLY}
+     *        or this method is called on a closed result set
      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-     * this method
+     *        this method
      * @since 1.6
      */
     public void updateBlob(String columnLabel, InputStream inputStream) throws SQLException {
@@ -5161,11 +5166,11 @@
     }
 
     /**
-     * Updates the designated column using the given <code>Reader</code>
+     * Updates the designated column using the given {@code Reader}
      * object, which is the given number of characters long.
-     * When a very large UNICODE value is input to a <code>LONGVARCHAR</code>
+     * When a very large UNICODE value is input to a {@code LONGVARCHAR}
      * parameter, it may be more practical to send it via a
-     * <code>java.io.Reader</code> object. The data will be read from the stream
+     * {@code java.io.Reader} object. The data will be read from the stream
      * as needed until end-of-file is reached.  The JDBC driver will
      * do any necessary conversion from UNICODE to the database char format.
      *
@@ -5175,17 +5180,17 @@
      * <p>
      * The updater methods are used to update column values in the
      * current row or the insert row.  The updater methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
+     * update the underlying database; instead the {@code updateRow} or
+     * {@code insertRow} methods are called to update the database.
      *
      * @param columnIndex the first column is 1, the second is 2, ...
      * @param reader An object that contains the data to set the parameter value to.
      * @param length the number of characters in the parameter data.
      * @exception SQLException if a database access error occurs,
-     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
-     * or this method is called on a closed result set
+     *            the result set concurrency is {@code CONCUR_READ_ONLY}
+     *            or this method is called on a closed result set
      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-     * this method
+     *            this method
      * @since 1.6
      */
     public void updateClob(int columnIndex,  Reader reader, long length) throws SQLException {
@@ -5193,11 +5198,11 @@
     }
 
     /**
-     * Updates the designated column using the given <code>Reader</code>
+     * Updates the designated column using the given {@code Reader}
      * object, which is the given number of characters long.
-     * When a very large UNICODE value is input to a <code>LONGVARCHAR</code>
+     * When a very large UNICODE value is input to a {@code LONGVARCHAR}
      * parameter, it may be more practical to send it via a
-     * <code>java.io.Reader</code> object. The data will be read from the stream
+     * {@code java.io.Reader} object. The data will be read from the stream
      * as needed until end-of-file is reached.  The JDBC driver will
      * do any necessary conversion from UNICODE to the database char format.
      *
@@ -5207,17 +5212,18 @@
      * <p>
      * The updater methods are used to update column values in the
      * current row or the insert row.  The updater methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
+     * update the underlying database; instead the {@code updateRow} or
+     * {@code insertRow} methods are called to update the database.
+     *
+     * @param columnLabel the label for the column specified with the SQL AS clause.
+     *        If the SQL AS clause was not specified, then the label is the name of the column
      * @param reader An object that contains the data to set the parameter value to.
      * @param length the number of characters in the parameter data.
      * @exception SQLException if a database access error occurs,
-     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
-     * or this method is called on a closed result set
+     *            the result set concurrency is {@code CONCUR_READ_ONLY}
+     *            or this method is called on a closed result set
      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-     * this method
+     *            this method
      * @since 1.6
      */
     public void updateClob(String columnLabel,  Reader reader, long length) throws SQLException {
@@ -5225,33 +5231,33 @@
     }
 
     /**
-     * Updates the designated column using the given <code>Reader</code>
+     * Updates the designated column using the given {@code Reader}
      * object.
-     * When a very large UNICODE value is input to a <code>LONGVARCHAR</code>
+     * When a very large UNICODE value is input to a {@code LONGVARCHAR}
      * parameter, it may be more practical to send it via a
-     * <code>java.io.Reader</code> object. The data will be read from the stream
+     * {@code java.io.Reader} object. The data will be read from the stream
      * as needed until end-of-file is reached.  The JDBC driver will
      * do any necessary conversion from UNICODE to the database char format.
      *
      * <P><B>Note:</B> This stream object can either be a standard
      * Java stream object or your own subclass that implements the
      * standard interface.
-     *   <P><B>Note:</B> Consult your JDBC driver documentation to determine if
+     * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
      * it might be more efficient to use a version of
-     * <code>updateClob</code> which takes a length parameter.
+     * {@code updateClob} which takes a length parameter.
      * <p>
      * The updater methods are used to update column values in the
      * current row or the insert row.  The updater methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
+     * update the underlying database; instead the {@code updateRow} or
+     * {@code insertRow} methods are called to update the database.
      *
      * @param columnIndex the first column is 1, the second is 2, ...
      * @param reader An object that contains the data to set the parameter value to.
      * @exception SQLException if a database access error occurs,
-     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
-     * or this method is called on a closed result set
+     *            the result set concurrency is {@code CONCUR_READ_ONLY}
+     *            or this method is called on a closed result set
      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-     * this method
+     *            this method
      * @since 1.6
      */
     public void updateClob(int columnIndex,  Reader reader) throws SQLException {
@@ -5259,34 +5265,35 @@
     }
 
     /**
-     * Updates the designated column using the given <code>Reader</code>
+     * Updates the designated column using the given {@code Reader}
      * object.
-     * When a very large UNICODE value is input to a <code>LONGVARCHAR</code>
+     * When a very large UNICODE value is input to a {@code LONGVARCHAR}
      * parameter, it may be more practical to send it via a
-     * <code>java.io.Reader</code> object. The data will be read from the stream
+     * {@code java.io.Reader} object. The data will be read from the stream
      * as needed until end-of-file is reached.  The JDBC driver will
      * do any necessary conversion from UNICODE to the database char format.
      *
      * <P><B>Note:</B> This stream object can either be a standard
      * Java stream object or your own subclass that implements the
      * standard interface.
-     *  <P><B>Note:</B> Consult your JDBC driver documentation to determine if
+     * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
      * it might be more efficient to use a version of
-     * <code>updateClob</code> which takes a length parameter.
+     * {@code updateClob} which takes a length parameter.
      * <p>
      * The updater methods are used to update column values in the
      * current row or the insert row.  The updater methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the la
-bel is the name of the column
+     * update the underlying database; instead the {@code updateRow} or
+     * {@code insertRow} methods are called to update the database.
+     *
+     * @param columnLabel the label for the column specified with the SQL AS clause.
+     *        If the SQL AS clause was not specified, then the label
+     *        is the name of the column
      * @param reader An object that contains the data to set the parameter value to.
      * @exception SQLException if a database access error occurs,
-     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
-     * or this method is called on a closed result set
+     *            the result set concurrency is {@code CONCUR_READ_ONLY}
+     *            or this method is called on a closed result set
      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-     * this method
+     *            this method
      * @since 1.6
      */
     public void updateClob(String columnLabel,  Reader reader) throws SQLException {
@@ -5294,11 +5301,11 @@
     }
 
    /**
-     * Updates the designated column using the given <code>Reader</code>
+     * Updates the designated column using the given {@code Reader}
      * object, which is the given number of characters long.
-     * When a very large UNICODE value is input to a <code>LONGVARCHAR</code>
+     * When a very large UNICODE value is input to a {@code LONGVARCHAR}
      * parameter, it may be more practical to send it via a
-     * <code>java.io.Reader</code> object. The data will be read from the stream
+     * {@code java.io.Reader} object. The data will be read from the stream
      * as needed until end-of-file is reached.  The JDBC driver will
      * do any necessary conversion from UNICODE to the database char format.
      *
@@ -5308,19 +5315,19 @@
      * <p>
      * The updater methods are used to update column values in the
      * current row or the insert row.  The updater methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
+     * update the underlying database; instead the {@code updateRow} or
+     * {@code insertRow} methods are called to update the database.
      *
      * @param columnIndex the first column is 1, the second 2, ...
      * @param reader An object that contains the data to set the parameter value to.
      * @param length the number of characters in the parameter data.
      * @throws SQLException if the driver does not support national
      *         character sets;  if the driver can detect that a data conversion
-     *  error could occur; this method is called on a closed result set,
-     * if a database access error occurs or
-     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
+     *         error could occur; this method is called on a closed result set,
+     *         if a database access error occurs or
+     *         the result set concurrency is {@code CONCUR_READ_ONLY}
      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-     * this method
+     *            this method
      * @since 1.6
      */
     public void updateNClob(int columnIndex,  Reader reader, long length) throws SQLException {
@@ -5328,11 +5335,11 @@
     }
 
     /**
-     * Updates the designated column using the given <code>Reader</code>
+     * Updates the designated column using the given {@code Reader}
      * object, which is the given number of characters long.
-     * When a very large UNICODE value is input to a <code>LONGVARCHAR</code>
+     * When a very large UNICODE value is input to a {@code LONGVARCHAR}
      * parameter, it may be more practical to send it via a
-     * <code>java.io.Reader</code> object. The data will be read from the stream
+     * {@code java.io.Reader} object. The data will be read from the stream
      * as needed until end-of-file is reached.  The JDBC driver will
      * do any necessary conversion from UNICODE to the database char format.
      *
@@ -5342,19 +5349,20 @@
      * <p>
      * The updater methods are used to update column values in the
      * current row or the insert row.  The updater methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
+     * update the underlying database; instead the {@code updateRow} or
+     * {@code insertRow} methods are called to update the database.
+     *
+     * @param columnLabel the label for the column specified with the SQL AS clause.
+     *        If the SQL AS clause was not specified, then the label is the name of the column
      * @param reader An object that contains the data to set the parameter value to.
      * @param length the number of characters in the parameter data.
      * @throws SQLException if the driver does not support national
      *         character sets;  if the driver can detect that a data conversion
-     *  error could occur; this method is called on a closed result set;
-     *  if a database access error occurs or
-     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
+     *         error could occur; this method is called on a closed result set;
+     *         if a database access error occurs or
+     *         the result set concurrency is {@code CONCUR_READ_ONLY}
      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-     * this method
+     *            this method
      * @since 1.6
      */
     public void updateNClob(String columnLabel,  Reader reader, long length) throws SQLException {
@@ -5362,11 +5370,11 @@
     }
 
     /**
-     * Updates the designated column using the given <code>Reader</code>
+     * Updates the designated column using the given {@code Reader}
      * object.
-     * When a very large UNICODE value is input to a <code>LONGVARCHAR</code>
+     * When a very large UNICODE value is input to a {@code LONGVARCHAR}
      * parameter, it may be more practical to send it via a
-     * <code>java.io.Reader</code> object. The data will be read from the stream
+     * {@code java.io.Reader} object. The data will be read from the stream
      * as needed until end-of-file is reached.  The JDBC driver will
      * do any necessary conversion from UNICODE to the database char format.
      *
@@ -5375,22 +5383,22 @@
      * standard interface.
      * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
      * it might be more efficient to use a version of
-     * <code>updateNClob</code> which takes a length parameter.
+     * {@code updateNClob} which takes a length parameter.
      * <p>
      * The updater methods are used to update column values in the
      * current row or the insert row.  The updater methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
+     * update the underlying database; instead the {@code updateRow} or
+     * {@code insertRow} methods are called to update the database.
      *
      * @param columnIndex the first column is 1, the second 2, ...
      * @param reader An object that contains the data to set the parameter value to.
      * @throws SQLException if the driver does not support national
      *         character sets;  if the driver can detect that a data conversion
-     *  error could occur; this method is called on a closed result set,
-     * if a database access error occurs or
-     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
+     *         error could occur; this method is called on a closed result set,
+     *         if a database access error occurs or
+     *         the result set concurrency is {@code CONCUR_READ_ONLY}
      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-     * this method
+     *            this method
      * @since 1.6
      */
     public void updateNClob(int columnIndex,  Reader reader) throws SQLException {
@@ -5398,11 +5406,11 @@
     }
 
     /**
-     * Updates the designated column using the given <code>Reader</code>
+     * Updates the designated column using the given {@code Reader}
      * object.
-     * When a very large UNICODE value is input to a <code>LONGVARCHAR</code>
+     * When a very large UNICODE value is input to a {@code LONGVARCHAR}
      * parameter, it may be more practical to send it via a
-     * <code>java.io.Reader</code> object. The data will be read from the stream
+     * {@code java.io.Reader} object. The data will be read from the stream
      * as needed until end-of-file is reached.  The JDBC driver will
      * do any necessary conversion from UNICODE to the database char format.
      *
@@ -5411,23 +5419,24 @@
      * standard interface.
      * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
      * it might be more efficient to use a version of
-     * <code>updateNClob</code> which takes a length parameter.
+     * {@code updateNClob} which takes a length parameter.
      * <p>
      * The updater methods are used to update column values in the
      * current row or the insert row.  The updater methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the la
-bel is the name of the column
+     * update the underlying database; instead the {@code updateRow} or
+     * {@code insertRow} methods are called to update the database.
+     *
+     * @param columnLabel the label for the column specified with the SQL AS clause.
+     *        If the SQL AS clause was not specified, then
+     *        the label is the name of the column
      * @param reader An object that contains the data to set the parameter value to.
      * @throws SQLException if the driver does not support national
      *         character sets;  if the driver can detect that a data conversion
-     *  error could occur; this method is called on a closed result set;
-     *  if a database access error occurs or
-     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
+     *         error could occur; this method is called on a closed result set;
+     *         if a database access error occurs or
+     *         the result set concurrency is {@code CONCUR_READ_ONLY}
      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-     * this method
+     *         this method
      * @since 1.6
      */
     public void updateNClob(String columnLabel,  Reader reader) throws SQLException {
@@ -5435,22 +5444,22 @@
     }
 
 
-        /**
+    /**
      * Updates the designated column with an ascii stream value, which will have
      * the specified number of bytes.
      * The updater methods are used to update column values in the
      * current row or the insert row.  The updater methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
+     * update the underlying database; instead the {@code updateRow} or
+     * {@code insertRow} methods are called to update the database.
      *
      * @param columnIndex the first column is 1, the second is 2, ...
      * @param x the new column value
      * @param length the length of the stream
      * @exception SQLException if a database access error occurs,
-     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
-     * or this method is called on a closed result set
+     *            the result set concurrency is {@code CONCUR_READ_ONLY}
+     *            or this method is called on a closed result set
      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-     * this method
+     *            this method
      * @since 1.6
      */
     public void updateAsciiStream(int columnIndex,
@@ -5464,17 +5473,17 @@
      * the specified number of bytes.
      * The updater methods are used to update column values in the
      * current row or the insert row.  The updater methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
+     * update the underlying database; instead the {@code updateRow} or
+     * {@code insertRow} methods are called to update the database.
      *
      * @param columnIndex the first column is 1, the second is 2, ...
      * @param x the new column value
      * @param length the length of the stream
      * @exception SQLException if a database access error occurs,
-     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
-     * or this method is called on a closed result set
+     *            the result set concurrency is {@code CONCUR_READ_ONLY}
+     *            or this method is called on a closed result set
      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-     * this method
+     *            this method
      * @since 1.6
      */
     public void updateBinaryStream(int columnIndex,
@@ -5488,17 +5497,17 @@
      * the specified number of bytes.
      * The updater methods are used to update column values in the
      * current row or the insert row.  The updater methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
+     * update the underlying database; instead the {@code updateRow} or
+     * {@code insertRow} methods are called to update the database.
      *
      * @param columnIndex the first column is 1, the second is 2, ...
      * @param x the new column value
      * @param length the length of the stream
      * @exception SQLException if a database access error occurs,
-     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
-     * or this method is called on a closed result set
+     *            the result set concurrency is {@code CONCUR_READ_ONLY}
+     *            or this method is called on a closed result set
      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-     * this method
+     *            this method
      * @since 1.6
      */
     public void updateCharacterStream(int columnIndex,
@@ -5512,17 +5521,19 @@
      * the specified number of bytes..
      * The updater methods are used to update column values in the
      * current row or the insert row.  The updater methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
+     * update the underlying database; instead the {@code updateRow} or
+     * {@code insertRow} methods are called to update the database.
+     *
+     * @param columnLabel the label for the column specified with the SQL AS clause.
+     *        If the SQL AS clause was not specified, then
+     *        the label is the name of the column
      * @param x the new column value
      * @param length the length of the stream
      * @exception SQLException if a database access error occurs,
-     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
-     * or this method is called on a closed result set
+     *            the result set concurrency is {@code CONCUR_READ_ONLY}
+     *            or this method is called on a closed result set
      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-     * this method
+     *            this method
      * @since 1.6
      */
     public void updateAsciiStream(String columnLabel,
@@ -5535,20 +5546,20 @@
      * Updates the designated column with an ascii stream value.
      * The updater methods are used to update column values in the
      * current row or the insert row.  The updater methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
+     * update the underlying database; instead the {@code updateRow} or
+     * {@code insertRow} methods are called to update the database.
      *
      * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
      * it might be more efficient to use a version of
-     * <code>updateAsciiStream</code> which takes a length parameter.
+     * {@code updateAsciiStream} which takes a length parameter.
      *
      * @param columnIndex the first column is 1, the second is 2, ...
      * @param x the new column value
      * @exception SQLException if a database access error occurs,
-     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
-     * or this method is called on a closed result set
+     *            the result set concurrency is {@code CONCUR_READ_ONLY}
+     *            or this method is called on a closed result set
      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-     * this method
+     *            this method
      * @since 1.6
      */
     public void updateAsciiStream(int columnIndex,
@@ -5560,21 +5571,22 @@
      * Updates the designated column with an ascii stream value.
      * The updater methods are used to update column values in the
      * current row or the insert row.  The updater methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
+     * update the underlying database; instead the {@code updateRow} or
+     * {@code insertRow} methods are called to update the database.
      *
      * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
      * it might be more efficient to use a version of
-     * <code>updateAsciiStream</code> which takes a length parameter.
-     *
-     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the la
-bel is the name of the column
+     * {@code updateAsciiStream} which takes a length parameter.
+     *
+     * @param columnLabel the label for the column specified with the SQL AS clause.
+     *        If the SQL AS clause was not specified, then the label
+     *        is the name of the column
      * @param x the new column value
      * @exception SQLException if a database access error occurs,
-     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
-     * or this method is called on a closed result set
+     *            the result set concurrency is {@code CONCUR_READ_ONLY}
+     *            or this method is called on a closed result set
      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-     * this method
+     *            this method
      * @since 1.6
      */
     public void updateAsciiStream(String columnLabel,
@@ -5588,15 +5600,17 @@
      * the specified number of bytes.
      * The updater methods are used to update column values in the
      * current row or the insert row.  The updater methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
+     * update the underlying database; instead the {@code updateRow} or
+     * {@code insertRow} methods are called to update the database.
+     *
+     * @param columnLabel the label for the column specified with the SQL AS clause.
+     *        If the SQL AS clause was not specified, then
+     *        the label is the name of the column
      * @param x the new column value
      * @param length the length of the stream
      * @exception SQLException if a database access error occurs,
-     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
-     * or this method is called on a closed result set
+     *            the result set concurrency is {@code CONCUR_READ_ONLY}
+     *            or this method is called on a closed result set
      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
      * this method
      * @since 1.6
@@ -5611,18 +5625,18 @@
      * Updates the designated column with a binary stream value.
      * The updater methods are used to update column values in the
      * current row or the insert row.  The updater methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
+     * update the underlying database; instead the {@code updateRow} or
+     * {@code insertRow} methods are called to update the database.
      *
      * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
      * it might be more efficient to use a version of
-     * <code>updateBinaryStream</code> which takes a length parameter.
+     * {@code updateBinaryStream} which takes a length parameter.
      *
      * @param columnIndex the first column is 1, the second is 2, ...
      * @param x the new column value
      * @exception SQLException if a database access error occurs,
-     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
-     * or this method is called on a closed result set
+     *            the result set concurrency is {@code CONCUR_READ_ONLY}
+     *            or this method is called on a closed result set
      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
      * this method
      * @since 1.6
@@ -5637,19 +5651,20 @@
      * Updates the designated column with a binary stream value.
      * The updater methods are used to update column values in the
      * current row or the insert row.  The updater methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
+     * update the underlying database; instead the {@code updateRow} or
+     * {@code insertRow} methods are called to update the database.
      *
      * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
      * it might be more efficient to use a version of
-     * <code>updateBinaryStream</code> which takes a length parameter.
-     *
-     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the la
-bel is the name of the column
+     * {@code updateBinaryStream} which takes a length parameter.
+     *
+     * @param columnLabel the label for the column specified with the SQL AS clause.
+     *        If the SQL AS clause was not specified, then
+     *        the label is the name of the column
      * @param x the new column value
      * @exception SQLException if a database access error occurs,
-     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
-     * or this method is called on a closed result set
+     *            the result set concurrency is {@code CONCUR_READ_ONLY}
+     *            or this method is called on a closed result set
      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
      * this method
      * @since 1.6
@@ -5665,18 +5680,20 @@
      * the specified number of bytes.
      * The updater methods are used to update column values in the
      * current row or the insert row.  The updater methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
-     *
-     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
-     * @param reader the <code>java.io.Reader</code> object containing
+     * update the underlying database; instead the {@code updateRow} or
+     * {@code insertRow} methods are called to update the database.
+     *
+     * @param columnLabel the label for the column specified with the SQL AS clause.
+     *        If the SQL AS clause was not specified, then
+     *        the label is the name of the column
+     * @param reader the {@code java.io.Reader} object containing
      *        the new column value
      * @param length the length of the stream
      * @exception SQLException if a database access error occurs,
-     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
-     * or this method is called on a closed result set
+     *            the result set concurrency is {@code CONCUR_READ_ONLY}
+     *            or this method is called on a closed result set
      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-     * this method
+     *            this method
      * @since 1.6
      */
     public void updateCharacterStream(String columnLabel,
@@ -5689,20 +5706,20 @@
      * Updates the designated column with a character stream value.
      * The updater methods are used to update column values in the
      * current row or the insert row.  The updater methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
+     * update the underlying database; instead the {@code updateRow} or
+     * {@code insertRow} methods are called to update the database.
      *
      * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
      * it might be more efficient to use a version of
-     * <code>updateCharacterStream</code> which takes a length parameter.
+     * {@code updateCharacterStream} which takes a length parameter.
      *
      * @param columnIndex the first column is 1, the second is 2, ...
      * @param x the new column value
      * @exception SQLException if a database access error occurs,
-     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
-     * or this method is called on a closed result set
+     *            the result set concurrency is {@code CONCUR_READ_ONLY}
+     *            or this method is called on a closed result set
      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-     * this method
+     *            this method
      * @since 1.6
      */
     public void updateCharacterStream(int columnIndex,
@@ -5714,22 +5731,23 @@
      * Updates the designated column with a character stream value.
      * The updater methods are used to update column values in the
      * current row or the insert row.  The updater methods do not
-     * update the underlying database; instead the <code>updateRow</code> or
-     * <code>insertRow</code> methods are called to update the database.
+     * update the underlying database; instead the {@code updateRow} or
+     * {@code insertRow} methods are called to update the database.
      *
      * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
      * it might be more efficient to use a version of
-     * <code>updateCharacterStream</code> which takes a length parameter.
-     *
-     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the la
-bel is the name of the column
-     * @param reader the <code>java.io.Reader</code> object containing
+     * {@code updateCharacterStream} which takes a length parameter.
+     *
+     * @param columnLabel the label for the column specified with the SQL AS clause.
+     *        If the SQL AS clause was not specified, then the label
+     *        is the name of the column
+     * @param reader the {@code java.io.Reader} object containing
      *        the new column value
      * @exception SQLException if a database access error occurs,
-     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
-     * or this method is called on a closed result set
+     *            the result set concurrency is {@code CONCUR_READ_ONLY}
+     *            or this method is called on a closed result set
      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-     * this method
+     *            this method
      * @since 1.6
      */
     public void updateCharacterStream(String columnLabel,
@@ -5738,97 +5756,98 @@
     }
 
 
-     /**
-  * Sets the designated parameter to the given <code>java.net.URL</code> value.
-  * The driver converts this to an SQL <code>DATALINK</code> value
-  * when it sends it to the database.
-  *
-  * @param parameterIndex the first parameter is 1, the second is 2, ...
-  * @param x the <code>java.net.URL</code> object to be set
-  * @exception SQLException if a database access error occurs or
-  * this method is called on a closed <code>PreparedStatement</code>
-  * @throws SQLFeatureNotSupportedException  if the JDBC driver does not support this method
-  * @since 1.4
-  */
+  /**
+   * Sets the designated parameter to the given {@code java.net.URL} value.
+   * The driver converts this to an SQL {@code DATALINK} value
+   * when it sends it to the database.
+   *
+   * @param parameterIndex the first parameter is 1, the second is 2, ...
+   * @param x the {@code java.net.URL} object to be set
+   * @exception SQLException if a database access error occurs or
+   *            this method is called on a closed {@code PreparedStatement}
+   * @throws SQLFeatureNotSupportedException  if the JDBC driver does not support this method
+   * @since 1.4
+   */
   public void setURL(int parameterIndex, java.net.URL x) throws SQLException{
         throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
    }
 
 
-   /**
-  * Sets the designated parameter to a <code>Reader</code> object.
-  * This method differs from the <code>setCharacterStream (int, Reader)</code> method
-  * because it informs the driver that the parameter value should be sent to
-  * the server as a <code>NCLOB</code>.  When the <code>setCharacterStream</code> method is used, the
-  * driver may have to do extra work to determine whether the parameter
-  * data should be sent to the server as a <code>LONGNVARCHAR</code> or a <code>NCLOB</code>
-  * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
-  * it might be more efficient to use a version of
-  * <code>setNClob</code> which takes a length parameter.
-  *
-  * @param parameterIndex index of the first parameter is 1, the second is 2, ...
-  * @param reader An object that contains the data to set the parameter value to.
-  * @throws SQLException if parameterIndex does not correspond to a parameter
-  * marker in the SQL statement;
-  * if the driver does not support national character sets;
-  * if the driver can detect that a data conversion
-  *  error could occur;  if a database access error occurs or
-  * this method is called on a closed <code>PreparedStatement</code>
-  * @throws SQLFeatureNotSupportedException  if the JDBC driver does not support this method
-  *
-  * @since 1.6
-  */
+  /**
+   * Sets the designated parameter to a {@code Reader} object.
+   * This method differs from the {@code setCharacterStream (int, Reader)} method
+   * because it informs the driver that the parameter value should be sent to
+   * the server as a {@code NCLOB}.  When the {@code setCharacterStream} method is used, the
+   * driver may have to do extra work to determine whether the parameter
+   * data should be sent to the server as a {@code LONGNVARCHAR} or a {@code NCLOB}
+   * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
+   * it might be more efficient to use a version of
+   * {@code setNClob} which takes a length parameter.
+   *
+   * @param parameterIndex index of the first parameter is 1, the second is 2, ...
+   * @param reader An object that contains the data to set the parameter value to.
+   * @throws SQLException if parameterIndex does not correspond to a parameter
+   *         marker in the SQL statement;
+   *         if the driver does not support national character sets;
+   *         if the driver can detect that a data conversion
+   *         error could occur;  if a database access error occurs or
+   *         this method is called on a closed {@code PreparedStatement}
+   * @throws SQLFeatureNotSupportedException  if the JDBC driver does not support this method
+   *
+   * @since 1.6
+   */
   public void setNClob(int parameterIndex, Reader reader)
     throws SQLException{
         throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
    }
 
-   /**
-  * Sets the designated parameter to a <code>Reader</code> object.  The <code>reader</code> must contain the number
-             * of characters specified by length otherwise a <code>SQLException</code> will be
-            * generated when the <code>CallableStatement</code> is executed.
-            * This method differs from the <code>setCharacterStream (int, Reader, int)</code> method
-            * because it informs the driver that the parameter value should be sent to
-            * the server as a <code>NCLOB</code>.  When the <code>setCharacterStream</code> method is used, the
-            * driver may have to do extra work to determine whether the parameter
-            * data should be send to the server as a <code>LONGNVARCHAR</code> or a <code>NCLOB</code>
-            *
-            * @param parameterName the name of the parameter to be set
-            * @param reader An object that contains the data to set the parameter value to.
-            * @param length the number of characters in the parameter data.
-            * @throws SQLException if parameterIndex does not correspond to a parameter
-            * marker in the SQL statement; if the length specified is less than zero;
-            * if the driver does not support national
-            *         character sets;  if the driver can detect that a data conversion
-            *  error could occur; if a database access error occurs or
-            * this method is called on a closed <code>CallableStatement</code>
-            * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-            * this method
-            * @since 1.6
-            */
-            public void setNClob(String parameterName, Reader reader, long length)
+  /**
+   * Sets the designated parameter to a {@code Reader} object.
+   * The {@code reader} must contain the number
+   * of characters specified by length otherwise a {@code SQLException} will be
+   * generated when the {@code CallableStatement} is executed.
+   * This method differs from the {@code setCharacterStream (int, Reader, int)} method
+   * because it informs the driver that the parameter value should be sent to
+   * the server as a {@code NCLOB}.  When the {@code setCharacterStream} method is used, the
+   * driver may have to do extra work to determine whether the parameter
+   * data should be send to the server as a {@code LONGNVARCHAR} or a {@code NCLOB}
+   *
+   * @param parameterName the name of the parameter to be set
+   * @param reader An object that contains the data to set the parameter value to.
+   * @param length the number of characters in the parameter data.
+   * @throws SQLException if parameterIndex does not correspond to a parameter
+   * marker in the SQL statement; if the length specified is less than zero;
+   * if the driver does not support national
+   *         character sets;  if the driver can detect that a data conversion
+   *  error could occur; if a database access error occurs or
+   * this method is called on a closed {@code CallableStatement}
+   * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
+   * this method
+   * @since 1.6
+   */
+  public void setNClob(String parameterName, Reader reader, long length)
     throws SQLException{
         throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
-   }
+  }
 
 
  /**
-  * Sets the designated parameter to a <code>Reader</code> object.
-  * This method differs from the <code>setCharacterStream (int, Reader)</code> method
+  * Sets the designated parameter to a {@code Reader} object.
+  * This method differs from the {@code setCharacterStream (int, Reader)} method
   * because it informs the driver that the parameter value should be sent to
-  * the server as a <code>NCLOB</code>.  When the <code>setCharacterStream</code> method is used, the
+  * the server as a {@code NCLOB}.  When the {@code setCharacterStream} method is used, the
   * driver may have to do extra work to determine whether the parameter
-  * data should be send to the server as a <code>LONGNVARCHAR</code> or a <code>NCLOB</code>
+  * data should be send to the server as a {@code LONGNVARCHAR} or a {@code NCLOB}
   * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
   * it might be more efficient to use a version of
-  * <code>setNClob</code> which takes a length parameter.
+  * {@code setNClob} which takes a length parameter.
   *
   * @param parameterName the name of the parameter
   * @param reader An object that contains the data to set the parameter value to.
   * @throws SQLException if the driver does not support national character sets;
-  * if the driver can detect that a data conversion
-  *  error could occur;  if a database access error occurs or
-  * this method is called on a closed <code>CallableStatement</code>
+  *         if the driver can detect that a data conversion
+  *         error could occur;  if a database access error occurs or
+  *         this method is called on a closed {@code CallableStatement}
   * @throws SQLFeatureNotSupportedException  if the JDBC driver does not support this method
   *
   * @since 1.6
@@ -5839,23 +5858,25 @@
    }
 
 
-   /**
-     ** of characters specified by length otherwise a <code>SQLException</code> will becontain  the number
-     * generated when the <code>PreparedStatement</code> is executed.
-     * This method differs from the <code>setCharacterStream (int, Reader, int)</code> method
+    /**
+     * Sets the designated parameter to a {@code Reader} object. The reader must contain the number
+     * of characters specified by length otherwise a {@code SQLException} will be
+     * generated when the {@code PreparedStatement} is executed.
+     * This method differs from the {@code setCharacterStream (int, Reader, int)} method
      * because it informs the driver that the parameter value should be sent to
-     * the server as a <code>NCLOB</code>.  When the <code>setCharacterStream</code> method is used, the
+     * the server as a {@code NCLOB}.  When the {@code setCharacterStream} method is used, the
      * driver may have to do extra work to determine whether the parameter
-     * data should be sent to the server as a <code>LONGNVARCHAR</code> or a <code>NCLOB</code>
+     * data should be sent to the server as a {@code LONGNVARCHAR} or a {@code NCLOB}
+     *
      * @param parameterIndex index of the first parameter is 1, the second is 2, ...
      * @param reader An object that contains the data to set the parameter value to.
      * @param length the number of characters in the parameter data.
      * @throws SQLException if parameterIndex does not correspond to a parameter
-     * marker in the SQL statement; if the length specified is less than zero;
-     * if the driver does not support national character sets;
-     * if the driver can detect that a data conversion
-     *  error could occur;  if a database access error occurs or
-     * this method is called on a closed <code>PreparedStatement</code>
+     *         marker in the SQL statement; if the length specified is less than zero;
+     *         if the driver does not support national character sets;
+     *         if the driver can detect that a data conversion
+     *         error could occur;  if a database access error occurs or
+     *         this method is called on a closed {@code PreparedStatement}
      * @throws SQLFeatureNotSupportedException  if the JDBC driver does not support this method
      *
      * @since 1.6
@@ -5867,14 +5888,14 @@
 
 
     /**
-     * Sets the designated parameter to a <code>java.sql.NClob</code> object. The driver converts this to
-a
-     * SQL <code>NCLOB</code> value when it sends it to the database.
+     * Sets the designated parameter to a {@code java.sql.NClob} object.
+     * The driver converts this to an
+     * SQL {@code NCLOB} value when it sends it to the database.
      * @param parameterIndex of the first parameter is 1, the second is 2, ...
      * @param value the parameter value
      * @throws SQLException if the driver does not support national
      *         character sets;  if the driver can detect that a data conversion
-     *  error could occur ; or if a database access error occurs
+     *         error could occur; or if a database access error occurs
      * @since 1.6
      */
      public void setNClob(int parameterIndex, NClob value) throws SQLException{
@@ -5883,14 +5904,14 @@
 
 
  /**
-  * Sets the designated parameter to the given <code>String</code> object.
-  * The driver converts this to a SQL <code>NCHAR</code> or
-  * <code>NVARCHAR</code> or <code>LONGNVARCHAR</code>
+  * Sets the designated parameter to the given {@code String} object.
+  * The driver converts this to a SQL {@code NCHAR} or
+  * {@code NVARCHAR} or {@code LONGNVARCHAR}
   * @param parameterName the name of the column to be set
   * @param value the parameter value
   * @throws SQLException if the driver does not support national
   *         character sets;  if the driver can detect that a data conversion
-  *  error could occur; or if a database access error occurs
+  *         error could occur; or if a database access error occurs
   * @since 1.6
   */
  public void setNString(String parameterName, String value)
@@ -5899,8 +5920,8 @@
    }
 
  /**
-  * Sets the designated parameter to a <code>Reader</code> object. The
-  * <code>Reader</code> reads the data till end-of-file is reached. The
+  * Sets the designated parameter to a {@code Reader} object. The
+  * {@code Reader} reads the data till end-of-file is reached. The
   * driver does the necessary conversion from Java character format to
   * the national character set in the database.
   * @param parameterIndex of the first parameter is 1, the second is 2, ...
@@ -5908,7 +5929,7 @@
   * @param length the number of characters in the parameter data.
   * @throws SQLException if the driver does not support national
   *         character sets;  if the driver can detect that a data conversion
-  *  error could occur ; or if a database access error occurs
+  *         error could occur ; or if a database access error occurs
   * @since 1.6
   */
   public void setNCharacterStream(int parameterIndex, Reader value, long length) throws SQLException{
@@ -5918,8 +5939,8 @@
 
 
  /**
-  * Sets the designated parameter to a <code>Reader</code> object. The
-  * <code>Reader</code> reads the data till end-of-file is reached. The
+  * Sets the designated parameter to a {@code Reader} object. The
+  * {@code Reader} reads the data till end-of-file is reached. The
   * driver does the necessary conversion from Java character format to
   * the national character set in the database.
   * @param parameterName the name of the column to be set
@@ -5935,9 +5956,9 @@
         throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
    }
 
-  /**
-  * Sets the designated parameter to a <code>Reader</code> object. The
-  * <code>Reader</code> reads the data till end-of-file is reached. The
+ /**
+  * Sets the designated parameter to a {@code Reader} object. The
+  * {@code Reader} reads the data till end-of-file is reached. The
   * driver does the necessary conversion from Java character format to
   * the national character set in the database.
 
@@ -5946,14 +5967,14 @@
   * standard interface.
   * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
   * it might be more efficient to use a version of
-  * <code>setNCharacterStream</code> which takes a length parameter.
+  * {@code setNCharacterStream} which takes a length parameter.
   *
   * @param parameterName the name of the parameter
   * @param value the parameter value
   * @throws SQLException if the driver does not support national
   *         character sets;  if the driver can detect that a data conversion
-  *  error could occur ; if a database access error occurs; or
-  * this method is called on a closed <code>CallableStatement</code>
+  *         error could occur ; if a database access error occurs; or
+  *         this method is called on a closed {@code CallableStatement}
   * @throws SQLFeatureNotSupportedException  if the JDBC driver does not support this method
   * @since 1.6
   */
@@ -5962,23 +5983,23 @@
    }
 
   /**
-    * Sets the designated parameter to the given <code>java.sql.Timestamp</code> value,
-    * using the given <code>Calendar</code> object.  The driver uses
-    * the <code>Calendar</code> object to construct an SQL <code>TIMESTAMP</code> value,
+    * Sets the designated parameter to the given {@code java.sql.Timestamp} value,
+    * using the given {@code Calendar} object.  The driver uses
+    * the {@code Calendar} object to construct an SQL {@code TIMESTAMP} value,
     * which the driver then sends to the database.  With a
-    * a <code>Calendar</code> object, the driver can calculate the timestamp
+    * a {@code Calendar} object, the driver can calculate the timestamp
     * taking into account a custom timezone.  If no
-    * <code>Calendar</code> object is specified, the driver uses the default
+    * {@code Calendar} object is specified, the driver uses the default
     * timezone, which is that of the virtual machine running the application.
     *
     * @param parameterName the name of the parameter
     * @param x the parameter value
-    * @param cal the <code>Calendar</code> object the driver will use
-    *            to construct the timestamp
+    * @param cal the {@code Calendar} object the driver will use
+    *         to construct the timestamp
     * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
+    *            this method is called on a closed {@code CallableStatement}
     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
+    *            this method
     * @see #getTimestamp
     * @since 1.4
     */
@@ -5987,28 +6008,29 @@
         throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
    }
 
-    /**
-    * Sets the designated parameter to a <code>Reader</code> object.  The <code>reader</code> must contain  the number
-               * of characters specified by length otherwise a <code>SQLException</code> will be
-               * generated when the <code>CallableStatement</code> is executed.
-              * This method differs from the <code>setCharacterStream (int, Reader, int)</code> method
-              * because it informs the driver that the parameter value should be sent to
-              * the server as a <code>CLOB</code>.  When the <code>setCharacterStream</code> method is used, the
-               * driver may have to do extra work to determine whether the parameter
-               * data should be send to the server as a <code>LONGVARCHAR</code> or a <code>CLOB</code>
-               * @param parameterName the name of the parameter to be set
-              * @param reader An object that contains the data to set the parameter value to.
-              * @param length the number of characters in the parameter data.
-              * @throws SQLException if parameterIndex does not correspond to a parameter
-              * marker in the SQL statement; if the length specified is less than zero;
-              * a database access error occurs or
-              * this method is called on a closed <code>CallableStatement</code>
-              * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-              * this method
-              *
-              * @since 1.6
-              */
-      public  void setClob(String parameterName, Reader reader, long length)
+  /**
+   * Sets the designated parameter to a {@code Reader} object.  The {@code reader} must contain  the number
+   * of characters specified by length otherwise a {@code SQLException} will be
+   * generated when the {@code CallableStatement} is executed.
+   * This method differs from the {@code setCharacterStream (int, Reader, int)} method
+   * because it informs the driver that the parameter value should be sent to
+   * the server as a {@code CLOB}.  When the {@code setCharacterStream} method is used, the
+   * driver may have to do extra work to determine whether the parameter
+   * data should be send to the server as a {@code LONGVARCHAR} or a {@code CLOB}
+   *
+   * @param parameterName the name of the parameter to be set
+   * @param reader An object that contains the data to set the parameter value to.
+   * @param length the number of characters in the parameter data.
+   * @throws SQLException if parameterIndex does not correspond to a parameter
+   *         marker in the SQL statement; if the length specified is less than zero;
+   *         a database access error occurs or
+   *         this method is called on a closed {@code CallableStatement}
+   * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
+   *         this method
+   *
+   * @since 1.6
+   */
+   public  void setClob(String parameterName, Reader reader, long length)
       throws SQLException{
         throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
    }
@@ -6016,16 +6038,16 @@
 
 
   /**
-    * Sets the designated parameter to the given <code>java.sql.Clob</code> object.
-    * The driver converts this to an SQL <code>CLOB</code> value when it
+    * Sets the designated parameter to the given {@code java.sql.Clob} object.
+    * The driver converts this to an SQL {@code CLOB} value when it
     * sends it to the database.
     *
     * @param parameterName the name of the parameter
-    * @param x a <code>Clob</code> object that maps an SQL <code>CLOB</code> value
+    * @param x a {@code Clob} object that maps an SQL {@code CLOB} value
     * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
+    *            this method is called on a closed {@code CallableStatement}
     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
+    *            this method
     * @since 1.6
     */
     public void setClob (String parameterName, Clob x) throws SQLException{
@@ -6033,21 +6055,21 @@
    }
 
  /**
-    * Sets the designated parameter to a <code>Reader</code> object.
-    * This method differs from the <code>setCharacterStream (int, Reader)</code> method
+    * Sets the designated parameter to a {@code Reader} object.
+    * This method differs from the {@code setCharacterStream (int, Reader)} method
     * because it informs the driver that the parameter value should be sent to
-    * the server as a <code>CLOB</code>.  When the <code>setCharacterStream</code> method is used, the
+    * the server as a {@code CLOB}.  When the {@code setCharacterStream} method is used, the
     * driver may have to do extra work to determine whether the parameter
-    * data should be send to the server as a <code>LONGVARCHAR</code> or a <code>CLOB</code>
+    * data should be send to the server as a {@code LONGVARCHAR} or a {@code CLOB}
     *
     * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
     * it might be more efficient to use a version of
-    * <code>setClob</code> which takes a length parameter.
+    * {@code setClob} which takes a length parameter.
     *
     * @param parameterName the name of the parameter
     * @param reader An object that contains the data to set the parameter value to.
     * @throws SQLException if a database access error occurs or this method is called on
-    * a closed <code>CallableStatement</code>
+    *         a closed {@code CallableStatement}
     *
     * @throws SQLFeatureNotSupportedException  if the JDBC driver does not support this method
     * @since 1.6
@@ -6058,19 +6080,19 @@
    }
 
 
- /**
-    * Sets the designated parameter to the given <code>java.sql.Date</code> value
+   /**
+    * Sets the designated parameter to the given {@code java.sql.Date} value
     * using the default time zone of the virtual machine that is running
     * the application.
     * The driver converts this
-    * to an SQL <code>DATE</code> value when it sends it to the database.
+    * to an SQL {@code DATE} value when it sends it to the database.
     *
     * @param parameterName the name of the parameter
     * @param x the parameter value
     * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
+    *            this method is called on a closed {@code CallableStatement}
     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
+    *            this method
     * @see #getDate
     * @since 1.4
     */
@@ -6080,23 +6102,23 @@
    }
 
    /**
-    * Sets the designated parameter to the given <code>java.sql.Date</code> value,
-    * using the given <code>Calendar</code> object.  The driver uses
-    * the <code>Calendar</code> object to construct an SQL <code>DATE</code> value,
+    * Sets the designated parameter to the given {@code java.sql.Date} value,
+    * using the given {@code Calendar} object.  The driver uses
+    * the {@code Calendar} object to construct an SQL {@code DATE} value,
     * which the driver then sends to the database.  With a
-    * a <code>Calendar</code> object, the driver can calculate the date
+    * a {@code Calendar} object, the driver can calculate the date
     * taking into account a custom timezone.  If no
-    * <code>Calendar</code> object is specified, the driver uses the default
+    * {@code Calendar} object is specified, the driver uses the default
     * timezone, which is that of the virtual machine running the application.
     *
     * @param parameterName the name of the parameter
     * @param x the parameter value
-    * @param cal the <code>Calendar</code> object the driver will use
+    * @param cal the {@code Calendar} object the driver will use
     *            to construct the date
     * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
+    *            this method is called on a closed {@code CallableStatement}
     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
+    *            this method
     * @see #getDate
     * @since 1.4
     */
@@ -6107,16 +6129,16 @@
 
 
  /**
-    * Sets the designated parameter to the given <code>java.sql.Time</code> value.
+    * Sets the designated parameter to the given {@code java.sql.Time} value.
     * The driver converts this
-    * to an SQL <code>TIME</code> value when it sends it to the database.
+    * to an SQL {@code TIME} value when it sends it to the database.
     *
     * @param parameterName the name of the parameter
     * @param x the parameter value
     * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
+    *            this method is called on a closed {@code CallableStatement}
     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
+    *            this method
     * @see #getTime
     * @since 1.4
     */
@@ -6126,23 +6148,23 @@
    }
 
  /**
-    * Sets the designated parameter to the given <code>java.sql.Time</code> value,
-    * using the given <code>Calendar</code> object.  The driver uses
-    * the <code>Calendar</code> object to construct an SQL <code>TIME</code> value,
+    * Sets the designated parameter to the given {@code java.sql.Time} value,
+    * using the given {@code Calendar} object.  The driver uses
+    * the {@code Calendar} object to construct an SQL {@code TIME} value,
     * which the driver then sends to the database.  With a
-    * a <code>Calendar</code> object, the driver can calculate the time
+    * a {@code Calendar} object, the driver can calculate the time
     * taking into account a custom timezone.  If no
-    * <code>Calendar</code> object is specified, the driver uses the default
+    * {@code Calendar} object is specified, the driver uses the default
     * timezone, which is that of the virtual machine running the application.
     *
     * @param parameterName the name of the parameter
     * @param x the parameter value
-    * @param cal the <code>Calendar</code> object the driver will use
+    * @param cal the {@code Calendar} object the driver will use
     *            to construct the time
     * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
+    *            this method is called on a closed {@code CallableStatement}
     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
+    *            this method
     * @see #getTime
     * @since 1.4
     */
@@ -6152,22 +6174,22 @@
    }
 
    /**
-   * Sets the designated parameter to a <code>Reader</code> object.
-   * This method differs from the <code>setCharacterStream (int, Reader)</code> method
+   * Sets the designated parameter to a {@code Reader} object.
+   * This method differs from the {@code setCharacterStream (int, Reader)} method
    * because it informs the driver that the parameter value should be sent to
-   * the server as a <code>CLOB</code>.  When the <code>setCharacterStream</code> method is used, the
+   * the server as a {@code CLOB}.  When the {@code setCharacterStream} method is used, the
    * driver may have to do extra work to determine whether the parameter
-   * data should be sent to the server as a <code>LONGVARCHAR</code> or a <code>CLOB</code>
+   * data should be sent to the server as a {@code LONGVARCHAR} or a {@code CLOB}
    *
    * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
    * it might be more efficient to use a version of
-   * <code>setClob</code> which takes a length parameter.
+   * {@code setClob} which takes a length parameter.
    *
    * @param parameterIndex index of the first parameter is 1, the second is 2, ...
    * @param reader An object that contains the data to set the parameter value to.
    * @throws SQLException if a database access error occurs, this method is called on
-   * a closed <code>PreparedStatement</code>or if parameterIndex does not correspond to a parameter
-   * marker in the SQL statement
+   *         a closed {@code PreparedStatement}or if parameterIndex does not correspond to a parameter
+   *         marker in the SQL statement
    *
    * @throws SQLFeatureNotSupportedException  if the JDBC driver does not support this method
    * @since 1.6
@@ -6178,20 +6200,20 @@
    }
 
 
-   /**
-   * Sets the designated parameter to a <code>Reader</code> object.  The reader must contain  the number
-   * of characters specified by length otherwise a <code>SQLException</code> will be
-   * generated when the <code>PreparedStatement</code> is executed.
-   *This method differs from the <code>setCharacterStream (int, Reader, int)</code> method
+  /**
+   * Sets the designated parameter to a {@code Reader} object.  The reader must contain  the number
+   * of characters specified by length otherwise a {@code SQLException} will be
+   * generated when the {@code PreparedStatement} is executed.
+   * This method differs from the {@code setCharacterStream (int, Reader, int)} method
    * because it informs the driver that the parameter value should be sent to
-   * the server as a <code>CLOB</code>.  When the <code>setCharacterStream</code> method is used, the
+   * the server as a {@code CLOB}.  When the {@code setCharacterStream} method is used, the
    * driver may have to do extra work to determine whether the parameter
-   * data should be sent to the server as a <code>LONGVARCHAR</code> or a <code>CLOB</code>
+   * data should be sent to the server as a {@code LONGVARCHAR} or a {@code CLOB}
    * @param parameterIndex index of the first parameter is 1, the second is 2, ...
    * @param reader An object that contains the data to set the parameter value to.
    * @param length the number of characters in the parameter data.
    * @throws SQLException if a database access error occurs, this method is called on
-   * a closed <code>PreparedStatement</code>, if parameterIndex does not correspond to a parameter
+   * a closed {@code PreparedStatement}, if parameterIndex does not correspond to a parameter
    * marker in the SQL statement, or if the length specified is less than zero.
    *
    * @throws SQLFeatureNotSupportedException  if the JDBC driver does not support this method
@@ -6203,26 +6225,27 @@
    }
 
 
- /**
-    * Sets the designated parameter to a <code>InputStream</code> object.  The inputstream must contain  the number
-    * of characters specified by length otherwise a <code>SQLException</code> will be
-    * generated when the <code>PreparedStatement</code> is executed.
-    * This method differs from the <code>setBinaryStream (int, InputStream, int)</code>
+   /**
+    * Sets the designated parameter to a {@code InputStream} object.  The inputstream must contain  the number
+    * of characters specified by length otherwise a {@code SQLException} will be
+    * generated when the {@code PreparedStatement} is executed.
+    * This method differs from the {@code setBinaryStream (int, InputStream, int)}
     * method because it informs the driver that the parameter value should be
-    * sent to the server as a <code>BLOB</code>.  When the <code>setBinaryStream</code> method is used,
+    * sent to the server as a {@code BLOB}.  When the {@code setBinaryStream} method is used,
     * the driver may have to do extra work to determine whether the parameter
-    * data should be sent to the server as a <code>LONGVARBINARY</code> or a <code>BLOB</code>
+    * data should be sent to the server as a {@code LONGVARBINARY} or a {@code BLOB}
+    *
     * @param parameterIndex index of the first parameter is 1,
-    * the second is 2, ...
+    *        the second is 2, ...
     * @param inputStream An object that contains the data to set the parameter
-    * value to.
+    *        value to.
     * @param length the number of bytes in the parameter data.
     * @throws SQLException if a database access error occurs,
-    * this method is called on a closed <code>PreparedStatement</code>,
-    * if parameterIndex does not correspond
-    * to a parameter marker in the SQL statement,  if the length specified
-    * is less than zero or if the number of bytes in the inputstream does not match
-    * the specified length.
+    *         this method is called on a closed {@code PreparedStatement},
+    *         if parameterIndex does not correspond
+    *         to a parameter marker in the SQL statement,  if the length specified
+    *         is less than zero or if the number of bytes in the inputstream does not match
+    *         the specified length.
     * @throws SQLFeatureNotSupportedException  if the JDBC driver does not support this method
     *
     * @since 1.6
@@ -6233,28 +6256,27 @@
    }
 
  /**
-    * Sets the designated parameter to a <code>InputStream</code> object.
-    * This method differs from the <code>setBinaryStream (int, InputStream)</code>
-    * This method differs from the <code>setBinaryStream (int, InputStream)</code>
+    * Sets the designated parameter to a {@code InputStream} object.
+    * This method differs from the {@code setBinaryStream (int, InputStream)}
+    * This method differs from the {@code setBinaryStream (int, InputStream)}
     * method because it informs the driver that the parameter value should be
-    * sent to the server as a <code>BLOB</code>.  When the <code>setBinaryStream</code> method is used,
+    * sent to the server as a {@code BLOB}.  When the {@code setBinaryStream} method is used,
     * the driver may have to do extra work to determine whether the parameter
-    * data should be sent to the server as a <code>LONGVARBINARY</code> or a <code>BLOB</code>
+    * data should be sent to the server as a {@code LONGVARBINARY} or a {@code BLOB}
     *
     * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
     * it might be more efficient to use a version of
-    * <code>setBlob</code> which takes a length parameter.
+    * {@code setBlob} which takes a length parameter.
     *
     * @param parameterIndex index of the first parameter is 1,
-    * the second is 2, ...
-
-
+    *        the second is 2, ...
+    *
     * @param inputStream An object that contains the data to set the parameter
-    * value to.
+    *        value to.
     * @throws SQLException if a database access error occurs,
-    * this method is called on a closed <code>PreparedStatement</code> or
-    * if parameterIndex does not correspond
-    * to a parameter marker in the SQL statement,
+    *         this method is called on a closed {@code PreparedStatement} or
+    *         if parameterIndex does not correspond
+    *         to a parameter marker in the SQL statement,
     * @throws SQLFeatureNotSupportedException  if the JDBC driver does not support this method
     *
     * @since 1.6
@@ -6264,72 +6286,72 @@
         throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
    }
 
- /**
-    * Sets the designated parameter to a <code>InputStream</code> object.  The <code>inputstream</code> must contain  the number
-      * of characters specified by length, otherwise a <code>SQLException</code> will be
-      * generated when the <code>CallableStatement</code> is executed.
-      * This method differs from the <code>setBinaryStream (int, InputStream, int)</code>
-      * method because it informs the driver that the parameter value should be
-      * sent to the server as a <code>BLOB</code>.  When the <code>setBinaryStream</code> method is used,
-      * the driver may have to do extra work to determine whether the parameter
-      * data should be sent to the server as a <code>LONGVARBINARY</code> or a <code>BLOB</code>
-      *
-      * @param parameterName the name of the parameter to be set
-      * the second is 2, ...
-      *
-      * @param inputStream An object that contains the data to set the parameter
-      * value to.
-      * @param length the number of bytes in the parameter data.
-      * @throws SQLException  if parameterIndex does not correspond
-      * to a parameter marker in the SQL statement,  or if the length specified
-      * is less than zero; if the number of bytes in the inputstream does not match
-      * the specified length; if a database access error occurs or
-      * this method is called on a closed <code>CallableStatement</code>
-      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-      * this method
-      *
-      * @since 1.6
-      */
-      public void setBlob(String parameterName, InputStream inputStream, long length)
+   /**
+    * Sets the designated parameter to a {@code InputStream} object.  The {@code inputstream} must contain  the number
+    * of characters specified by length, otherwise a {@code SQLException} will be
+    * generated when the {@code CallableStatement} is executed.
+    * This method differs from the {@code setBinaryStream (int, InputStream, int)}
+    * method because it informs the driver that the parameter value should be
+    * sent to the server as a {@code BLOB}.  When the {@code setBinaryStream} method is used,
+    * the driver may have to do extra work to determine whether the parameter
+    * data should be sent to the server as a {@code LONGVARBINARY} or a {@code BLOB}
+    *
+    * @param parameterName the name of the parameter to be set
+    * the second is 2, ...
+    *
+    * @param inputStream An object that contains the data to set the parameter
+    *        value to.
+    * @param length the number of bytes in the parameter data.
+    * @throws SQLException  if parameterIndex does not correspond
+    *         to a parameter marker in the SQL statement,  or if the length specified
+    *         is less than zero; if the number of bytes in the inputstream does not match
+    *         the specified length; if a database access error occurs or
+    *         this method is called on a closed {@code CallableStatement}
+    * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
+    *         this method
+    *
+    * @since 1.6
+    */
+   public void setBlob(String parameterName, InputStream inputStream, long length)
          throws SQLException{
          throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
     }
 
 
- /**
-    * Sets the designated parameter to the given <code>java.sql.Blob</code> object.
-    * The driver converts this to an SQL <code>BLOB</code> value when it
+   /**
+    * Sets the designated parameter to the given {@code java.sql.Blob} object.
+    * The driver converts this to an SQL {@code BLOB} value when it
     * sends it to the database.
     *
     * @param parameterName the name of the parameter
-    * @param x a <code>Blob</code> object that maps an SQL <code>BLOB</code> value
+    * @param x a {@code Blob} object that maps an SQL {@code BLOB} value
     * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
+    *            this method is called on a closed {@code CallableStatement}
     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
+    *            this method
     * @since 1.6
     */
    public void setBlob (String parameterName, Blob x) throws SQLException{
         throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
    }
 
- /**
-    * Sets the designated parameter to a <code>InputStream</code> object.
-    * This method differs from the <code>setBinaryStream (int, InputStream)</code>
+   /**
+    * Sets the designated parameter to a {@code InputStream} object.
+    * This method differs from the {@code setBinaryStream (int, InputStream)}
     * method because it informs the driver that the parameter value should be
-    * sent to the server as a <code>BLOB</code>.  When the <code>setBinaryStream</code> method is used,
+    * sent to the server as a {@code BLOB}.  When the {@code setBinaryStream} method is used,
     * the driver may have to do extra work to determine whether the parameter
-    * data should be send to the server as a <code>LONGVARBINARY</code> or a <code>BLOB</code>
+    * data should be send to the server as a {@code LONGVARBINARY} or a {@code BLOB}
     *
     * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
     * it might be more efficient to use a version of
-    * <code>setBlob</code> which takes a length parameter.
+    * {@code setBlob} which takes a length parameter.
     *
     * @param parameterName the name of the parameter
     * @param inputStream An object that contains the data to set the parameter
-    * value to.
+    *        value to.
     * @throws SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
+    *         this method is called on a closed {@code CallableStatement}
     * @throws SQLFeatureNotSupportedException  if the JDBC driver does not support this method
     *
     * @since 1.6
@@ -6339,22 +6361,22 @@
         throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
    }
 
-  /**
+ /**
   * Sets the value of the designated parameter with the given object. The second
   * argument must be an object type; for integral values, the
-  * <code>java.lang</code> equivalent objects should be used.
+  * {@code java.lang} equivalent objects should be used.
   *
   * <p>The given Java object will be converted to the given targetSqlType
   * before being sent to the database.
   *
   * If the object has a custom mapping (is of a class implementing the
-  * interface <code>SQLData</code>),
-  * the JDBC driver should call the method <code>SQLData.writeSQL</code> to write it
+  * interface {@code SQLData}),
+  * the JDBC driver should call the method {@code SQLData.writeSQL} to write it
   * to the SQL data stream.
   * If, on the other hand, the object is of a class implementing
-  * <code>Ref</code>, <code>Blob</code>, <code>Clob</code>,  <code>NClob</code>,
-  *  <code>Struct</code>, <code>java.net.URL</code>,
-  * or <code>Array</code>, the driver should pass it to the database as a
+  * {@code Ref}, {@code Blob}, {@code Clob},  {@code NClob},
+  *  {@code Struct}, {@code java.net.URL},
+  * or {@code Array}, the driver should pass it to the database as a
   * value of the corresponding SQL type.
   * <P>
   * Note that this method may be used to pass datatabase-
@@ -6365,17 +6387,17 @@
   * @param targetSqlType the SQL type (as defined in java.sql.Types) to be
   * sent to the database. The scale argument may further qualify this type.
   * @param scale for java.sql.Types.DECIMAL or java.sql.Types.NUMERIC types,
-  *          this is the number of digits after the decimal point.  For all other
-  *          types, this value will be ignored.
+  *        this is the number of digits after the decimal point.  For all other
+  *        types, this value will be ignored.
   * @exception SQLException if a database access error occurs or
-  * this method is called on a closed <code>CallableStatement</code>
-  * @exception SQLFeatureNotSupportedException if <code>targetSqlType</code> is
-  * a <code>ARRAY</code>, <code>BLOB</code>, <code>CLOB</code>,
-  * <code>DATALINK</code>, <code>JAVA_OBJECT</code>, <code>NCHAR</code>,
-  * <code>NCLOB</code>, <code>NVARCHAR</code>, <code>LONGNVARCHAR</code>,
-  *  <code>REF</code>, <code>ROWID</code>, <code>SQLXML</code>
-  * or  <code>STRUCT</code> data type and the JDBC driver does not support
-  * this data type
+  *        this method is called on a closed {@code CallableStatement}
+  * @exception SQLFeatureNotSupportedException if {@code targetSqlType} is
+  *            an {@code ARRAY, BLOB, CLOB,
+  *            DATALINK, JAVA_OBJECT, NCHAR,
+  *            NCLOB, NVARCHAR, LONGNVARCHAR,
+  *            REF, ROWID, SQLXML}
+  *            or {@code STRUCT} data type and the JDBC driver does not support
+  *            this data type
   * @see Types
   * @see #getObject
   * @since 1.4
@@ -6387,7 +6409,7 @@
 
   /**
     * Sets the value of the designated parameter with the given object.
-    * This method is like the method <code>setObject</code>
+    * This method is like the method {@code setObject}
     * above, except that it assumes a scale of zero.
     *
     * @param parameterName the name of the parameter
@@ -6395,14 +6417,14 @@
     * @param targetSqlType the SQL type (as defined in java.sql.Types) to be
     *                      sent to the database
     * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
-    * @exception SQLFeatureNotSupportedException if <code>targetSqlType</code> is
-    * a <code>ARRAY</code>, <code>BLOB</code>, <code>CLOB</code>,
-    * <code>DATALINK</code>, <code>JAVA_OBJECT</code>, <code>NCHAR</code>,
-    * <code>NCLOB</code>, <code>NVARCHAR</code>, <code>LONGNVARCHAR</code>,
-    *  <code>REF</code>, <code>ROWID</code>, <code>SQLXML</code>
-    * or  <code>STRUCT</code> data type and the JDBC driver does not support
-    * this data type
+    * this method is called on a closed {@code CallableStatement}
+    * @exception SQLFeatureNotSupportedException if {@code targetSqlType} is
+    *            an {@code ARRAY, BLOB, CLOB,
+    *            DATALINK, JAVA_OBJECT, NCHAR,
+    *            NCLOB, NVARCHAR, LONGNVARCHAR,
+    *            REF, ROWID, SQLXML}
+    *            or {@code STRUCT} data type and the JDBC driver does not support
+    *            this data type
     * @see #getObject
     * @since 1.4
     */
@@ -6411,13 +6433,13 @@
         throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
    }
 
- /**
+  /**
    * Sets the value of the designated parameter with the given object.
-   * The second parameter must be of type <code>Object</code>; therefore, the
-   * <code>java.lang</code> equivalent objects should be used for built-in types.
+   * The second parameter must be of type {@code Object}; therefore, the
+   * {@code java.lang} equivalent objects should be used for built-in types.
    *
    * <p>The JDBC specification specifies a standard mapping from
-   * Java <code>Object</code> types to SQL types.  The given argument
+   * Java {@code Object} types to SQL types.  The given argument
    * will be converted to the corresponding SQL type before being
    * sent to the database.
    *
@@ -6425,13 +6447,13 @@
    * specific abstract data types, by using a driver-specific Java
    * type.
    *
-   * If the object is of a class implementing the interface <code>SQLData</code>,
-   * the JDBC driver should call the method <code>SQLData.writeSQL</code>
+   * If the object is of a class implementing the interface {@code SQLData},
+   * the JDBC driver should call the method {@code SQLData.writeSQL}
    * to write it to the SQL data stream.
    * If, on the other hand, the object is of a class implementing
-   * <code>Ref</code>, <code>Blob</code>, <code>Clob</code>,  <code>NClob</code>,
-   *  <code>Struct</code>, <code>java.net.URL</code>,
-   * or <code>Array</code>, the driver should pass it to the database as a
+   * {@code Ref}, {@code Blob}, {@code Clob},  {@code NClob},
+   *  {@code Struct}, {@code java.net.URL},
+   * or {@code Array}, the driver should pass it to the database as a
    * value of the corresponding SQL type.
    * <P>
    * This method throws an exception if there is an ambiguity, for example, if the
@@ -6440,10 +6462,10 @@
    * @param parameterName the name of the parameter
    * @param x the object containing the input parameter value
    * @exception SQLException if a database access error occurs,
-   * this method is called on a closed <code>CallableStatement</code> or if the given
-   *            <code>Object</code> parameter is ambiguous
+   *            this method is called on a closed {@code CallableStatement} or if the given
+   *            {@code Object} parameter is ambiguous
    * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-   * this method
+   *            this method
    * @see #getObject
    * @since 1.4
    */
@@ -6454,9 +6476,9 @@
   /**
   * Sets the designated parameter to the given input stream, which will have
   * the specified number of bytes.
-  * When a very large ASCII value is input to a <code>LONGVARCHAR</code>
+  * When a very large ASCII value is input to a {@code LONGVARCHAR}
   * parameter, it may be more practical to send it via a
-  * <code>java.io.InputStream</code>. Data will be read from the stream
+  * {@code java.io.InputStream}. Data will be read from the stream
   * as needed until end-of-file is reached.  The JDBC driver will
   * do any necessary conversion from ASCII to the database char format.
   *
@@ -6468,9 +6490,9 @@
   * @param x the Java input stream that contains the ASCII parameter value
   * @param length the number of bytes in the stream
   * @exception SQLException if a database access error occurs or
-  * this method is called on a closed <code>CallableStatement</code>
+  *            this method is called on a closed {@code CallableStatement}
   * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-  * this method
+  *            this method
   * @since 1.4
   */
  public void setAsciiStream(String parameterName, java.io.InputStream x, int length)
@@ -6482,9 +6504,9 @@
 /**
   * Sets the designated parameter to the given input stream, which will have
   * the specified number of bytes.
-  * When a very large binary value is input to a <code>LONGVARBINARY</code>
+  * When a very large binary value is input to a {@code LONGVARBINARY}
   * parameter, it may be more practical to send it via a
-  * <code>java.io.InputStream</code> object. The data will be read from the stream
+  * {@code java.io.InputStream} object. The data will be read from the stream
   * as needed until end-of-file is reached.
   *
   * <P><B>Note:</B> This stream object can either be a standard
@@ -6495,9 +6517,9 @@
   * @param x the java input stream which contains the binary parameter value
   * @param length the number of bytes in the stream
   * @exception SQLException if a database access error occurs or
-  * this method is called on a closed <code>CallableStatement</code>
+  *            this method is called on a closed {@code CallableStatement}
   * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-  * this method
+  *            this method
   * @since 1.4
   */
  public void setBinaryStream(String parameterName, java.io.InputStream x,
@@ -6506,11 +6528,11 @@
  }
 
  /**
-   * Sets the designated parameter to the given <code>Reader</code>
+   * Sets the designated parameter to the given {@code Reader}
    * object, which is the given number of characters long.
-   * When a very large UNICODE value is input to a <code>LONGVARCHAR</code>
+   * When a very large UNICODE value is input to a {@code LONGVARCHAR}
    * parameter, it may be more practical to send it via a
-   * <code>java.io.Reader</code> object. The data will be read from the stream
+   * {@code java.io.Reader} object. The data will be read from the stream
    * as needed until end-of-file is reached.  The JDBC driver will
    * do any necessary conversion from UNICODE to the database char format.
    *
@@ -6519,13 +6541,13 @@
    * standard interface.
    *
    * @param parameterName the name of the parameter
-   * @param reader the <code>java.io.Reader</code> object that
+   * @param reader the {@code java.io.Reader} object that
    *        contains the UNICODE data used as the designated parameter
    * @param length the number of characters in the stream
    * @exception SQLException if a database access error occurs or
-   * this method is called on a closed <code>CallableStatement</code>
+   *            this method is called on a closed {@code CallableStatement}
    * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-   * this method
+   *            this method
    * @since 1.4
    */
   public void setCharacterStream(String parameterName,
@@ -6536,9 +6558,9 @@
 
   /**
    * Sets the designated parameter to the given input stream.
-   * When a very large ASCII value is input to a <code>LONGVARCHAR</code>
+   * When a very large ASCII value is input to a {@code LONGVARCHAR}
    * parameter, it may be more practical to send it via a
-   * <code>java.io.InputStream</code>. Data will be read from the stream
+   * {@code java.io.InputStream}. Data will be read from the stream
    * as needed until end-of-file is reached.  The JDBC driver will
    * do any necessary conversion from ASCII to the database char format.
    *
@@ -6547,15 +6569,15 @@
    * standard interface.
    * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
    * it might be more efficient to use a version of
-   * <code>setAsciiStream</code> which takes a length parameter.
+   * {@code setAsciiStream} which takes a length parameter.
    *
    * @param parameterName the name of the parameter
    * @param x the Java input stream that contains the ASCII parameter value
    * @exception SQLException if a database access error occurs or
-   * this method is called on a closed <code>CallableStatement</code>
+   *            this method is called on a closed {@code CallableStatement}
    * @throws SQLFeatureNotSupportedException  if the JDBC driver does not support this method
-     * @since 1.6
-  */
+   * @since 1.6
+   */
   public void setAsciiStream(String parameterName, java.io.InputStream x)
           throws SQLException{
         throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
@@ -6564,9 +6586,9 @@
 
  /**
     * Sets the designated parameter to the given input stream.
-    * When a very large binary value is input to a <code>LONGVARBINARY</code>
+    * When a very large binary value is input to a {@code LONGVARBINARY}
     * parameter, it may be more practical to send it via a
-    * <code>java.io.InputStream</code> object. The data will be read from the
+    * {@code java.io.InputStream} object. The data will be read from the
     * stream as needed until end-of-file is reached.
     *
     * <P><B>Note:</B> This stream object can either be a standard
@@ -6574,12 +6596,12 @@
     * standard interface.
     * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
     * it might be more efficient to use a version of
-    * <code>setBinaryStream</code> which takes a length parameter.
+    * {@code setBinaryStream} which takes a length parameter.
     *
     * @param parameterName the name of the parameter
     * @param x the java input stream which contains the binary parameter value
     * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
+    *            this method is called on a closed {@code CallableStatement}
     * @throws SQLFeatureNotSupportedException  if the JDBC driver does not support this method
     * @since 1.6
     */
@@ -6589,11 +6611,11 @@
    }
 
  /**
-    * Sets the designated parameter to the given <code>Reader</code>
+    * Sets the designated parameter to the given {@code Reader}
     * object.
-    * When a very large UNICODE value is input to a <code>LONGVARCHAR</code>
+    * When a very large UNICODE value is input to a {@code LONGVARCHAR}
     * parameter, it may be more practical to send it via a
-    * <code>java.io.Reader</code> object. The data will be read from the stream
+    * {@code java.io.Reader} object. The data will be read from the stream
     * as needed until end-of-file is reached.  The JDBC driver will
     * do any necessary conversion from UNICODE to the database char format.
     *
@@ -6602,13 +6624,13 @@
     * standard interface.
     * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
     * it might be more efficient to use a version of
-    * <code>setCharacterStream</code> which takes a length parameter.
+    * {@code setCharacterStream} which takes a length parameter.
     *
     * @param parameterName the name of the parameter
-    * @param reader the <code>java.io.Reader</code> object that contains the
+    * @param reader the {@code java.io.Reader} object that contains the
     *        Unicode data
     * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
+    *            this method is called on a closed {@code CallableStatement}
     * @throws SQLFeatureNotSupportedException  if the JDBC driver does not support this method
     * @since 1.6
     */
@@ -6619,16 +6641,16 @@
 
    /**
     * Sets the designated parameter to the given
-    * <code>java.math.BigDecimal</code> value.
-    * The driver converts this to an SQL <code>NUMERIC</code> value when
+    * {@code java.math.BigDecimal} value.
+    * The driver converts this to an SQL {@code NUMERIC} value when
     * it sends it to the database.
     *
     * @param parameterName the name of the parameter
     * @param x the parameter value
     * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
+    *            this method is called on a closed {@code CallableStatement}
     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
+    *            this method
     * @see #getBigDecimal
     * @since 1.4
     */
@@ -6636,20 +6658,20 @@
         throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
    }
 
- /**
-    * Sets the designated parameter to the given Java <code>String</code> value.
+   /**
+    * Sets the designated parameter to the given Java {@code String} value.
     * The driver converts this
-    * to an SQL <code>VARCHAR</code> or <code>LONGVARCHAR</code> value
+    * to an SQL {@code VARCHAR} or {@code LONGVARCHAR} value
     * (depending on the argument's
-    * size relative to the driver's limits on <code>VARCHAR</code> values)
+    * size relative to the driver's limits on {@code VARCHAR} values)
     * when it sends it to the database.
     *
     * @param parameterName the name of the parameter
     * @param x the parameter value
     * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
+    *            this method is called on a closed {@code CallableStatement}
     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
+    *            this method
     * @see #getString
     * @since 1.4
     */
@@ -6659,19 +6681,19 @@
 
 
 
- /**
+   /**
     * Sets the designated parameter to the given Java array of bytes.
-    * The driver converts this to an SQL <code>VARBINARY</code> or
-    * <code>LONGVARBINARY</code> (depending on the argument's size relative
-    * to the driver's limits on <code>VARBINARY</code> values) when it sends
+    * The driver converts this to an SQL {@code VARBINARY} or
+    * {@code LONGVARBINARY} (depending on the argument's size relative
+    * to the driver's limits on {@code VARBINARY} values) when it sends
     * it to the database.
     *
     * @param parameterName the name of the parameter
     * @param x the parameter value
     * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
+    *            this method is called on a closed {@code CallableStatement}
     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
+    *            this method
     * @see #getBytes
     * @since 1.4
     */
@@ -6680,17 +6702,17 @@
    }
 
  /**
-    * Sets the designated parameter to the given <code>java.sql.Timestamp</code> value.
+    * Sets the designated parameter to the given {@code java.sql.Timestamp} value.
     * The driver
-    * converts this to an SQL <code>TIMESTAMP</code> value when it sends it to the
+    * converts this to an SQL {@code TIMESTAMP} value when it sends it to the
     * database.
     *
     * @param parameterName the name of the parameter
     * @param x the parameter value
     * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
+    *            this method is called on a closed {@code CallableStatement}
     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
+    *            this method
     * @see #getTimestamp
     * @since 1.4
     */
@@ -6700,16 +6722,16 @@
    }
 
     /**
-    * Sets the designated parameter to SQL <code>NULL</code>.
+    * Sets the designated parameter to SQL {@code NULL}.
     *
     * <P><B>Note:</B> You must specify the parameter's SQL type.
     *
     * @param parameterName the name of the parameter
-    * @param sqlType the SQL type code defined in <code>java.sql.Types</code>
+    * @param sqlType the SQL type code defined in {@code java.sql.Types}
     * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
+    *            this method is called on a closed {@code CallableStatement}
     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
+    *            this method
     * @since 1.4
     */
    public void setNull(String parameterName, int sqlType) throws SQLException {
@@ -6717,8 +6739,8 @@
    }
 
  /**
-    * Sets the designated parameter to SQL <code>NULL</code>.
-    * This version of the method <code>setNull</code> should
+    * Sets the designated parameter to SQL {@code NULL}.
+    * This version of the method {@code setNull} should
     * be used for user-defined types and REF type parameters.  Examples
     * of user-defined types include: STRUCT, DISTINCT, JAVA_OBJECT, and
     * named array types.
@@ -6738,14 +6760,14 @@
     *
     *
     * @param parameterName the name of the parameter
-    * @param sqlType a value from <code>java.sql.Types</code>
+    * @param sqlType a value from {@code java.sql.Types}
     * @param typeName the fully-qualified name of an SQL user-defined type;
     *        ignored if the parameter is not a user-defined type or
-    *        SQL <code>REF</code> value
+    *        SQL {@code REF} value
     * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
+    *        this method is called on a closed {@code CallableStatement}
     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
+    *        this method
     * @since 1.4
     */
    public void setNull (String parameterName, int sqlType, String typeName)
@@ -6754,17 +6776,17 @@
    }
 
  /**
-    * Sets the designated parameter to the given Java <code>boolean</code> value.
+    * Sets the designated parameter to the given Java {@code boolean} value.
     * The driver converts this
-    * to an SQL <code>BIT</code> or <code>BOOLEAN</code> value when it sends it to the database.
+    * to an SQL {@code BIT} or {@code BOOLEAN} value when it sends it to the database.
     *
     * @param parameterName the name of the parameter
     * @param x the parameter value
     * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
+    *            this method is called on a closed {@code CallableStatement}
     * @see #getBoolean
     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
+    *            this method
     * @since 1.4
     */
    public void setBoolean(String parameterName, boolean x) throws SQLException{
@@ -6774,16 +6796,16 @@
 
 
  /**
-    * Sets the designated parameter to the given Java <code>byte</code> value.
+    * Sets the designated parameter to the given Java {@code byte} value.
     * The driver converts this
-    * to an SQL <code>TINYINT</code> value when it sends it to the database.
+    * to an SQL {@code TINYINT} value when it sends it to the database.
     *
     * @param parameterName the name of the parameter
     * @param x the parameter value
     * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
+    *            this method is called on a closed {@code CallableStatement}
     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
+    *            this method
     * @see #getByte
     * @since 1.4
     */
@@ -6793,16 +6815,16 @@
 
 
  /**
-    * Sets the designated parameter to the given Java <code>short</code> value.
+    * Sets the designated parameter to the given Java {@code short} value.
     * The driver converts this
-    * to an SQL <code>SMALLINT</code> value when it sends it to the database.
+    * to an SQL {@code SMALLINT} value when it sends it to the database.
     *
     * @param parameterName the name of the parameter
     * @param x the parameter value
     * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
+    *            this method is called on a closed {@code CallableStatement}
     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
+    *            this method
     * @see #getShort
     * @since 1.4
     */
@@ -6812,16 +6834,16 @@
 
 
    /**
-    * Sets the designated parameter to the given Java <code>int</code> value.
+    * Sets the designated parameter to the given Java {@code int} value.
     * The driver converts this
-    * to an SQL <code>INTEGER</code> value when it sends it to the database.
+    * to an SQL {@code INTEGER} value when it sends it to the database.
     *
     * @param parameterName the name of the parameter
     * @param x the parameter value
     * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
+    *            this method is called on a closed {@code CallableStatement}
     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
+    *            this method
     * @see #getInt
     * @since 1.4
     */
@@ -6829,17 +6851,17 @@
         throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
    }
 
- /**
-    * Sets the designated parameter to the given Java <code>long</code> value.
+   /**
+    * Sets the designated parameter to the given Java {@code long} value.
     * The driver converts this
-    * to an SQL <code>BIGINT</code> value when it sends it to the database.
+    * to an SQL {@code BIGINT} value when it sends it to the database.
     *
     * @param parameterName the name of the parameter
     * @param x the parameter value
     * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
+    *            this method is called on a closed {@code CallableStatement}
     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
+    *            this method
     * @see #getLong
     * @since 1.4
     */
@@ -6848,17 +6870,17 @@
    }
 
 
- /**
-    * Sets the designated parameter to the given Java <code>float</code> value.
+   /**
+    * Sets the designated parameter to the given Java {@code float} value.
     * The driver converts this
-    * to an SQL <code>FLOAT</code> value when it sends it to the database.
+    * to an SQL {@code FLOAT} value when it sends it to the database.
     *
     * @param parameterName the name of the parameter
     * @param x the parameter value
     * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
+    *            this method is called on a closed {@code CallableStatement}
     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
+    *            this method
     * @see #getFloat
     * @since 1.4
     */
@@ -6866,17 +6888,17 @@
         throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString());
    }
 
- /**
-    * Sets the designated parameter to the given Java <code>double</code> value.
+   /**
+    * Sets the designated parameter to the given Java {@code double} value.
     * The driver converts this
-    * to an SQL <code>DOUBLE</code> value when it sends it to the database.
+    * to an SQL {@code DOUBLE} value when it sends it to the database.
     *
     * @param parameterName the name of the parameter
     * @param x the parameter value
     * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
+    *            this method is called on a closed {@code CallableStatement}
     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
+    *            this method
     * @see #getDouble
     * @since 1.4
     */
@@ -6887,7 +6909,6 @@
     /**
      * This method re populates the resBundle
      * during the deserialization process
-     *
      */
     private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException {
         // Default state initialization happens here
--- a/jdk/src/java.sql.rowset/share/classes/com/sun/rowset/internal/CachedRowSetWriter.java	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/src/java.sql.rowset/share/classes/com/sun/rowset/internal/CachedRowSetWriter.java	Thu Jun 11 20:18:55 2015 -0700
@@ -43,22 +43,22 @@
 
 
 /**
- * The facility called on internally by the <code>RIOptimisticProvider</code> implementation to
+ * The facility called on internally by the {@code RIOptimisticProvider} implementation to
  * propagate changes back to the data source from which the rowset got its data.
  * <P>
- * A <code>CachedRowSetWriter</code> object, called a writer, has the public
- * method <code>writeData</code> for writing modified data to the underlying data source.
+ * A {@code CachedRowSetWriter} object, called a writer, has the public
+ * method {@code writeData} for writing modified data to the underlying data source.
  * This method is invoked by the rowset internally and is never invoked directly by an application.
  * A writer also has public methods for setting and getting
- * the <code>CachedRowSetReader</code> object, called a reader, that is associated
+ * the {@code CachedRowSetReader} object, called a reader, that is associated
  * with the writer. The remainder of the methods in this class are private and
  * are invoked internally, either directly or indirectly, by the method
- * <code>writeData</code>.
+ * {@code writeData}.
  * <P>
- * Typically the <code>SyncFactory</code> manages the <code>RowSetReader</code> and
- * the <code>RowSetWriter</code> implementations using <code>SyncProvider</code> objects.
+ * Typically the {@code SyncFactory} manages the {@code RowSetReader} and
+ * the {@code RowSetWriter} implementations using {@code SyncProvider} objects.
  * Standard JDBC RowSet implementations provide an object instance of this
- * writer by invoking the <code>SyncProvider.getRowSetWriter()</code> method.
+ * writer by invoking the {@code SyncProvider.getRowSetWriter()} method.
  *
  * @version 0.2
  * @author Jonathan Bruce
@@ -69,15 +69,15 @@
 public class CachedRowSetWriter implements TransactionalWriter, Serializable {
 
 /**
- * The <code>Connection</code> object that this writer will use to make a
+ * The {@code Connection} object that this writer will use to make a
  * connection to the data source to which it will write data.
  *
  */
     private transient Connection con;
 
 /**
- * The SQL <code>SELECT</code> command that this writer will call
- * internally. The method <code>initSQLStatements</code> builds this
+ * The SQL {@code SELECT} command that this writer will call
+ * internally. The method {@code initSQLStatements} builds this
  * command by supplying the words "SELECT" and "FROM," and using
  * metadata to get the table name and column names .
  *
@@ -86,9 +86,9 @@
     private String selectCmd;
 
 /**
- * The SQL <code>UPDATE</code> command that this writer will call
+ * The SQL {@code UPDATE} command that this writer will call
  * internally to write data to the rowset's underlying data source.
- * The method <code>initSQLStatements</code> builds this <code>String</code>
+ * The method {@code initSQLStatements} builds this {@code String}
  * object.
  *
  * @serial
@@ -96,8 +96,8 @@
     private String updateCmd;
 
 /**
- * The SQL <code>WHERE</code> clause the writer will use for update
- * statements in the <code>PreparedStatement</code> object
+ * The SQL {@code WHERE} clause the writer will use for update
+ * statements in the {@code PreparedStatement} object
  * it sends to the underlying data source.
  *
  * @serial
@@ -105,7 +105,7 @@
     private String updateWhere;
 
 /**
- * The SQL <code>DELETE</code> command that this writer will call
+ * The SQL {@code DELETE} command that this writer will call
  * internally to delete a row in the rowset's underlying data source.
  *
  * @serial
@@ -113,8 +113,8 @@
     private String deleteCmd;
 
 /**
- * The SQL <code>WHERE</code> clause the writer will use for delete
- * statements in the <code>PreparedStatement</code> object
+ * The SQL {@code WHERE} clause the writer will use for delete
+ * statements in the {@code PreparedStatement} object
  * it sends to the underlying data source.
  *
  * @serial
@@ -122,9 +122,9 @@
     private String deleteWhere;
 
 /**
- * The SQL <code>INSERT INTO</code> command that this writer will internally use
+ * The SQL {@code INSERT INTO} command that this writer will internally use
  * to insert data into the rowset's underlying data source.  The method
- * <code>initSQLStatements</code> builds this command with a question
+ * {@code initSQLStatements} builds this command with a question
  * mark parameter placeholder for each column in the rowset.
  *
  * @serial
@@ -133,8 +133,8 @@
 
 /**
  * An array containing the column numbers of the columns that are
- * needed to uniquely identify a row in the <code>CachedRowSet</code> object
- * for which this <code>CachedRowSetWriter</code> object is the writer.
+ * needed to uniquely identify a row in the {@code CachedRowSet} object
+ * for which this {@code CachedRowSetWriter} object is the writer.
  *
  * @serial
  */
@@ -142,7 +142,7 @@
 
 /**
  * An array of the parameters that should be used to set the parameter
- * placeholders in a <code>PreparedStatement</code> object that this
+ * placeholders in a {@code PreparedStatement} object that this
  * writer will execute.
  *
  * @serial
@@ -150,33 +150,33 @@
     private Object[] params;
 
 /**
- * The <code>CachedRowSetReader</code> object that has been
- * set as the reader for the <code>CachedRowSet</code> object
- * for which this <code>CachedRowSetWriter</code> object is the writer.
+ * The {@code CachedRowSetReader} object that has been
+ * set as the reader for the {@code CachedRowSet} object
+ * for which this {@code CachedRowSetWriter} object is the writer.
  *
  * @serial
  */
     private CachedRowSetReader reader;
 
 /**
- * The <code>ResultSetMetaData</code> object that contains information
- * about the columns in the <code>CachedRowSet</code> object
- * for which this <code>CachedRowSetWriter</code> object is the writer.
+ * The {@code ResultSetMetaData} object that contains information
+ * about the columns in the {@code CachedRowSet} object
+ * for which this {@code CachedRowSetWriter} object is the writer.
  *
  * @serial
  */
     private ResultSetMetaData callerMd;
 
 /**
- * The number of columns in the <code>CachedRowSet</code> object
- * for which this <code>CachedRowSetWriter</code> object is the writer.
+ * The number of columns in the {@code CachedRowSet} object
+ * for which this {@code CachedRowSetWriter} object is the writer.
  *
  * @serial
  */
     private int callerColumnCount;
 
 /**
- * This <code>CachedRowSet<code> will hold the conflicting values
+ * This {@code CachedRowSet} will hold the conflicting values
  *  retrieved from the db and hold it.
  */
     private CachedRowSetImpl crsResolve;
@@ -209,8 +209,8 @@
     }
 
 /**
- * Propagates changes in the given <code>RowSet</code> object
- * back to its underlying data source and returns <code>true</code>
+ * Propagates changes in the given {@code RowSet} object
+ * back to its underlying data source and returns {@code true}
  * if successful. The writer will check to see if
  * the data in the pre-modified rowset (the original values) differ
  * from the data in the underlying data source.  If data in the data
@@ -221,15 +221,15 @@
  * access for concurrent users.
  * <P>
  * This method is called by the rowset internally when
- * the application invokes the method <code>acceptChanges</code>.
- * The <code>writeData</code> method in turn calls private methods that
+ * the application invokes the method {@code acceptChanges}.
+ * The {@code writeData} method in turn calls private methods that
  * it defines internally.
  * The following is a general summary of what the method
- * <code>writeData</code> does, much of which is accomplished
+ * {@code writeData} does, much of which is accomplished
  * through calls to its own internal methods.
  * <OL>
- * <LI>Creates a <code>CachedRowSet</code> object from the given
- *     <code>RowSet</code> object
+ * <LI>Creates a {@code CachedRowSet} object from the given
+ *     {@code RowSet} object
  * <LI>Makes a connection with the data source
  *   <UL>
  *      <LI>Disables autocommit mode if it is not already disabled
@@ -237,32 +237,32 @@
  *   </UL>
  * <LI>Checks to see if the reader has read new data since the writer
  *     was last called and, if so, calls the method
- *    <code>initSQLStatements</code> to initialize new SQL statements
+ *    {@code initSQLStatements} to initialize new SQL statements
  *   <UL>
- *       <LI>Builds new <code>SELECT</code>, <code>UPDATE</code>,
- *           <code>INSERT</code>, and <code>DELETE</code> statements
- *       <LI>Uses the <code>CachedRowSet</code> object's metadata to
+ *       <LI>Builds new {@code SELECT}, {@code UPDATE},
+ *           {@code INSERT}, and {@code DELETE} statements
+ *       <LI>Uses the {@code CachedRowSet} object's metadata to
  *           determine the table name, column names, and the columns
  *           that make up the primary key
  *   </UL>
  * <LI>When there is no conflict, propagates changes made to the
- *     <code>CachedRowSet</code> object back to its underlying data source
+ *     {@code CachedRowSet} object back to its underlying data source
  *   <UL>
- *      <LI>Iterates through each row of the <code>CachedRowSet</code> object
+ *      <LI>Iterates through each row of the {@code CachedRowSet} object
  *          to determine whether it has been updated, inserted, or deleted
  *      <LI>If the corresponding row in the data source has not been changed
  *          since the rowset last read its
  *          values, the writer will use the appropriate command to update,
  *          insert, or delete the row
  *      <LI>If any data in the data source does not match the original values
- *          for the <code>CachedRowSet</code> object, the writer will roll
+ *          for the {@code CachedRowSet} object, the writer will roll
  *          back any changes it has made to the row in the data source.
  *   </UL>
  * </OL>
  *
- * @return <code>true</code> if changes to the rowset were successfully
+ * @return {@code true} if changes to the rowset were successfully
  *         written to the rowset's underlying data source;
- *         <code>false</code> otherwise
+ *         {@code false} otherwise
  */
     public boolean writeData(RowSetInternal caller) throws SQLException {
         long conflicts = 0;
@@ -434,25 +434,25 @@
 
   } //end writeData
 
-/**
- * Updates the given <code>CachedRowSet</code> object's underlying data
- * source so that updates to the rowset are reflected in the original
- * data source, and returns <code>false</code> if the update was successful.
- * A return value of <code>true</code> indicates that there is a conflict,
- * meaning that a value updated in the rowset has already been changed by
- * someone else in the underlying data source.  A conflict can also exist
- * if, for example, more than one row in the data source would be affected
- * by the update or if no rows would be affected.  In any case, if there is
- * a conflict, this method does not update the underlying data source.
- * <P>
- * This method is called internally by the method <code>writeData</code>
- * if a row in the <code>CachedRowSet</code> object for which this
- * <code>CachedRowSetWriter</code> object is the writer has been updated.
- *
- * @return <code>false</code> if the update to the underlying data source is
- *         successful; <code>true</code> otherwise
- * @throws SQLException if a database access error occurs
- */
+    /**
+     * Updates the given {@code CachedRowSet} object's underlying data
+     * source so that updates to the rowset are reflected in the original
+     * data source, and returns {@code false} if the update was successful.
+     * A return value of {@code true} indicates that there is a conflict,
+     * meaning that a value updated in the rowset has already been changed by
+     * someone else in the underlying data source.  A conflict can also exist
+     * if, for example, more than one row in the data source would be affected
+     * by the update or if no rows would be affected.  In any case, if there is
+     * a conflict, this method does not update the underlying data source.
+     * <P>
+     * This method is called internally by the method {@code writeData}
+     * if a row in the {@code CachedRowSet} object for which this
+     * {@code CachedRowSetWriter} object is the writer has been updated.
+     *
+     * @return {@code false} if the update to the underlying data source is
+     *         successful; {@code true} otherwise
+     * @throws SQLException if a database access error occurs
+     */
     private boolean updateOriginalRow(CachedRowSet crs)
         throws SQLException {
         PreparedStatement pstmt;
@@ -805,16 +805,16 @@
 
    /**
     * Inserts a row that has been inserted into the given
-    * <code>CachedRowSet</code> object into the data source from which
-    * the rowset is derived, returning <code>false</code> if the insertion
+    * {@code CachedRowSet} object into the data source from which
+    * the rowset is derived, returning {@code false} if the insertion
     * was successful.
     *
-    * @param crs the <code>CachedRowSet</code> object that has had a row inserted
+    * @param crs the {@code CachedRowSet} object that has had a row inserted
     *            and to whose underlying data source the row will be inserted
-    * @param pstmt the <code>PreparedStatement</code> object that will be used
+    * @param pstmt the {@code PreparedStatement} object that will be used
     *              to execute the insertion
-    * @return <code>false</code> to indicate that the insertion was successful;
-    *         <code>true</code> otherwise
+    * @return {@code false} to indicate that the insertion was successful;
+    *         {@code true} otherwise
     * @throws SQLException if a database access error occurs
     */
    private boolean insertNewRow(CachedRowSet crs,
@@ -917,24 +917,24 @@
        }
    }
 
-/**
- * Deletes the row in the underlying data source that corresponds to
- * a row that has been deleted in the given <code> CachedRowSet</code> object
- * and returns <code>false</code> if the deletion was successful.
- * <P>
- * This method is called internally by this writer's <code>writeData</code>
- * method when a row in the rowset has been deleted. The values in the
- * deleted row are the same as those that are stored in the original row
- * of the given <code>CachedRowSet</code> object.  If the values in the
- * original row differ from the row in the underlying data source, the row
- * in the data source is not deleted, and <code>deleteOriginalRow</code>
- * returns <code>true</code> to indicate that there was a conflict.
- *
- *
- * @return <code>false</code> if the deletion was successful, which means that
- *         there was no conflict; <code>true</code> otherwise
- * @throws SQLException if there was a database access error
- */
+   /**
+    * Deletes the row in the underlying data source that corresponds to
+    * a row that has been deleted in the given {@code  CachedRowSet} object
+    * and returns {@code false} if the deletion was successful.
+    * <P>
+    * This method is called internally by this writer's {@code writeData}
+    * method when a row in the rowset has been deleted. The values in the
+    * deleted row are the same as those that are stored in the original row
+    * of the given {@code CachedRowSet} object.  If the values in the
+    * original row differ from the row in the underlying data source, the row
+    * in the data source is not deleted, and {@code deleteOriginalRow}
+    * returns {@code true} to indicate that there was a conflict.
+    *
+    *
+    * @return {@code false} if the deletion was successful, which means that
+    *         there was no conflict; {@code true} otherwise
+    * @throws SQLException if there was a database access error
+    */
     private boolean deleteOriginalRow(CachedRowSet crs, CachedRowSetImpl crsRes) throws SQLException {
         PreparedStatement pstmt;
         int i;
@@ -1056,13 +1056,13 @@
     }
 
     /**
-     * Composes a <code>SELECT</code>, <code>UPDATE</code>, <code>INSERT</code>,
-     * and <code>DELETE</code> statement that can be used by this writer to
-     * write data to the data source backing the given <code>CachedRowSet</code>
+     * Composes a {@code SELECT}, {@code UPDATE}, {@code INSERT},
+     * and {@code DELETE} statement that can be used by this writer to
+     * write data to the data source backing the given {@code CachedRowSet}
      * object.
      *
-     * @ param caller a <code>CachedRowSet</code> object for which this
-     *                <code>CachedRowSetWriter</code> object is the writer
+     * @param caller a {@code CachedRowSet} object for which this
+     *        {@code CachedRowSetWriter} object is the writer
      * @throws SQLException if a database access error occurs
      */
     private void initSQLStatements(CachedRowSet caller) throws SQLException {
@@ -1177,13 +1177,13 @@
      * table names. The given metadata object is used to get the proper order
      * and separator.
      *
-     * @param dbmd a <code>DatabaseMetaData</code> object that contains metadata
-     *          about this writer's <code>CachedRowSet</code> object
-     * @param catalog a <code>String</code> object with the rowset's catalog
+     * @param dbmd a {@code DatabaseMetaData} object that contains metadata
+     *          about this writer's {@code CachedRowSet} object
+     * @param catalog a {@code String} object with the rowset's catalog
      *          name
-     * @param table a <code>String</code> object with the name of the table from
+     * @param table a {@code String} object with the name of the table from
      *          which this writer's rowset was derived
-     * @return a <code>String</code> object with the fully qualified name of the
+     * @return a {@code String} object with the fully qualified name of the
      *          table from which this writer's rowset was derived
      * @throws SQLException if a database access error occurs
      */
@@ -1221,21 +1221,21 @@
     }
 
     /**
-     * Assigns to the given <code>CachedRowSet</code> object's
-     * <code>params</code>
+     * Assigns to the given {@code CachedRowSet} object's
+     * {@code params}
      * field an array whose length equals the number of columns needed
      * to uniquely identify a row in the rowset. The array is given
-     * values by the method <code>buildWhereClause</code>.
+     * values by the method {@code buildWhereClause}.
      * <P>
-     * If the <code>CachedRowSet</code> object's <code>keyCols</code>
-     * field has length <code>0</code> or is <code>null</code>, the array
+     * If the {@code CachedRowSet} object's {@code keyCols}
+     * field has length {@code 0} or is {@code null}, the array
      * is set with the column number of every column in the rowset.
-     * Otherwise, the array in the field <code>keyCols</code> is set with only
+     * Otherwise, the array in the field {@code keyCols} is set with only
      * the column numbers of the columns that are required to form a unique
      * identifier for a row.
      *
-     * @param crs the <code>CachedRowSet</code> object for which this
-     *     <code>CachedRowSetWriter</code> object is the writer
+     * @param crs the {@code CachedRowSet} object for which this
+     *     {@code CachedRowSetWriter} object is the writer
      *
      * @throws SQLException if a database access error occurs
      */
@@ -1263,29 +1263,29 @@
     }
 
     /**
-         * Constructs an SQL <code>WHERE</code> clause using the given
-         * string as a starting point. The resulting clause will contain
-         * a column name and " = ?" for each key column, that is, each column
-         * that is needed to form a unique identifier for a row in the rowset.
-         * This <code>WHERE</code> clause can be added to
-         * a <code>PreparedStatement</code> object that updates, inserts, or
-         * deletes a row.
-         * <P>
-         * This method uses the given result set to access values in the
-         * <code>CachedRowSet</code> object that called this writer.  These
-         * values are used to build the array of parameters that will serve as
-         * replacements for the "?" parameter placeholders in the
-         * <code>PreparedStatement</code> object that is sent to the
-         * <code>CachedRowSet</code> object's underlying data source.
-         *
-         * @param whereClause a <code>String</code> object that is an empty
-         *                    string ("")
-         * @param rs a <code>ResultSet</code> object that can be used
-         *           to access the <code>CachedRowSet</code> object's data
-         * @return a <code>WHERE</code> clause of the form "<code>WHERE</code>
-         *         columnName = ? AND columnName = ? AND columnName = ? ..."
-         * @throws SQLException if a database access error occurs
-         */
+     * Constructs an SQL {@code WHERE} clause using the given
+     * string as a starting point. The resulting clause will contain
+     * a column name and " = ?" for each key column, that is, each column
+     * that is needed to form a unique identifier for a row in the rowset.
+     * This {@code WHERE} clause can be added to
+     * a {@code PreparedStatement} object that updates, inserts, or
+     * deletes a row.
+     * <P>
+     * This method uses the given result set to access values in the
+     * {@code CachedRowSet} object that called this writer.  These
+     * values are used to build the array of parameters that will serve as
+     * replacements for the "?" parameter placeholders in the
+     * {@code PreparedStatement} object that is sent to the
+     * {@code CachedRowSet} object's underlying data source.
+     *
+     * @param whereClause a {@code String} object that is an empty
+     *                    string ("")
+     * @param rs a {@code ResultSet} object that can be used
+     *           to access the {@code CachedRowSet} object's data
+     * @return a {@code WHERE} clause of the form "{@code WHERE}
+     *         columnName = ? AND columnName = ? AND columnName = ? ..."
+     * @throws SQLException if a database access error occurs
+     */
     private String buildWhereClause(String whereClause,
                                     ResultSet rs) throws SQLException {
         whereClause = "WHERE ";
--- a/jdk/src/java.sql.rowset/share/classes/com/sun/rowset/internal/SyncResolverImpl.java	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/src/java.sql.rowset/share/classes/com/sun/rowset/internal/SyncResolverImpl.java	Thu Jun 11 20:18:55 2015 -0700
@@ -39,8 +39,8 @@
 
 /**
  * There will be two sets of data which will be maintained by the rowset at the
- * time of synchronization. The <code>SyncProvider</code> will utilize the
- * <code>SyncResolver</code> to synchronize the changes back to database.
+ * time of synchronization. The {@code SyncProvider} will utilize the
+ * {@code SyncResolver} to synchronize the changes back to database.
  */
 public class SyncResolverImpl extends CachedRowSetImpl implements SyncResolver {
     /**
@@ -79,19 +79,19 @@
     private int rowStatus;
 
     /**
-     * This will contain the size of the <code>CachedRowSet</code> object
+     * This will contain the size of the {@code CachedRowSet} object
      */
     private int sz;
 
     /**
-     * The <code>Connection</code> handle used to synchronize the changes
+     * The {@code Connection} handle used to synchronize the changes
      * back to datasource. This is the same connection handle as was passed
      * to the CachedRowSet while fetching the data.
      */
     private transient Connection con;
 
     /**
-     * The <code>CachedRowSet</code> object which will encapsulate
+     * The {@code CachedRowSet} object which will encapsulate
      * a row at any time. This will be built from CachedRowSet and
      * SyncResolver values. Synchronization takes place on a row by
      * row basis encapsulated as a CahedRowSet.
@@ -123,13 +123,13 @@
 
     /**
      * Retrieves the conflict status of the current row of this
-     * <code>SyncResolver</code>, which indicates the operationthe <code>RowSet</code>
+     * {@code SyncResolver}, which indicates the operationthe {@code RowSet}
      * object was attempting when the conflict occurred.
      *
      * @return one of the following constants:
-     *         <code>SyncResolver.UPDATE_ROW_CONFLICT</code>,
-     *         <code>SyncResolver.DELETE_ROW_CONFLICT</code>, or
-     *         <code>SyncResolver.INSERT_ROW_CONFLICT</code>
+     *         {@code SyncResolver.UPDATE_ROW_CONFLICT},
+     *         {@code SyncResolver.DELETE_ROW_CONFLICT}, or
+     *         {@code SyncResolver.INSERT_ROW_CONFLICT}
      */
     public int getStatus() {
         return ((Integer)stats.get(rowStatus-1)).intValue();
@@ -137,10 +137,10 @@
 
     /**
      * Retrieves the value in the designated column in the current row of this
-     * <code>SyncResolver</code> object, which is the value that caused a conflict.
-     *
-     * @param index <code>int</code> designating the column in this row of this
-     *        <code>SyncResolver</code> object from which to retrieve the value
+     * {@code SyncResolver} object, which is the value that caused a conflict.
+     *
+     * @param index {@code int} designating the column in this row of this
+     *        {@code SyncResolver} object from which to retrieve the value
      *        causing a conflict
      */
     public Object getConflictValue(int index) throws SQLException {
@@ -153,10 +153,10 @@
 
     /**
      * Retrieves the value in the designated column in the current row of this
-     * <code>SyncResolver</code> object, which is the value that caused a conflict.
-     *
-     * @param columnName a <code>String</code> object designating the column in this row of this
-     *        <code>SyncResolver</code> object from which to retrieve the value
+     * {@code SyncResolver} object, which is the value that caused a conflict.
+     *
+     * @param columnName a {@code String} object designating the column in this row of this
+     *        {@code SyncResolver} object from which to retrieve the value
      *        causing a conflict
      */
     public Object getConflictValue(String columnName) throws SQLException {
@@ -169,12 +169,12 @@
 
     /**
      * Sets <i>obj</i> as the value in column <i>index</i> in the current row of the
-     * <code>RowSet</code> object. This value is the resolved value that is to be
+     * {@code RowSet} object. This value is the resolved value that is to be
      * persisted in the data source.
      *
-     * @param index an <code>int</code> giving the number of the column into which to
+     * @param index an {@code int} giving the number of the column into which to
      *        set the value to be persisted
-     * @param obj an <code>Object</code> that is the value to be set in the data source
+     * @param obj an {@code Object} that is the value to be set in the data source
      */
     public void setResolvedValue(int index, Object obj) throws SQLException {
         // modify method to throw SQLException in spec
@@ -291,18 +291,18 @@
      * This passes a CachedRowSet as a row to the CachedRowSetWriter
      * after the values have been resolved, back to the datasource.
      *
-     * @param row a <code>CachedRowSet</code> object which will hold the
+     * @param row a {@code CachedRowSet} object which will hold the
      *        values of a particular row after they have been resolved by
      *        the user to synchronize back to datasource.
      * @throws SQLException if synchronization does not happen properly
-     *         maybe beacuse <code>Connection</code> has timed out.
+     *         maybe beacuse {@code Connection} has timed out.
      **/
      private void writeData(CachedRowSet row) throws SQLException {
         crw.updateResolvedConflictToDB(row, crw.getReader().connect((RowSetInternal)crsSync));
      }
 
     /**
-     * This function builds a row  as a <code>CachedRowSet</code> object
+     * This function builds a row  as a {@code CachedRowSet} object
      * which has been resolved and is ready to be synchrinized to the datasource
      *
      * @throws SQLException if there is problem in building
@@ -385,12 +385,12 @@
 
     /**
      * Sets <i>obj</i> as the value in column <i>columnName</i> in the current row of the
-     * <code>RowSet</code> object. This value is the resolved value that is to be
+     * {@code RowSet} object. This value is the resolved value that is to be
      * persisted in the data source.
      *
-     * @param columnName a <code>String</code> object giving the name of the column
+     * @param columnName a {@code String} object giving the name of the column
      *        into which to set the value to be persisted
-     * @param obj an <code>Object</code> that is the value to be set in the data source
+     * @param obj an {@code Object} that is the value to be set in the data source
      */
     public void setResolvedValue(String columnName, Object obj) throws SQLException {
        // modify method to throw SQLException in spec
@@ -445,13 +445,13 @@
     }
 
     /**
-     * Moves the cursor down one row from its current position. A <code>SyncResolver</code>
+     * Moves the cursor down one row from its current position. A {@code SyncResolver}
      * cursor is initially positioned before the first conflict row; the first call to the
-     * method <code>nextConflict()</code> makes the first conflict row the current row;
+     * method {@code nextConflict()} makes the first conflict row the current row;
      * the second call makes the second conflict row the current row, and so on.
      * <p>
      * If an input stream is open for the current row, a call to the method next will
-     * implicitly close it. A <code>SyncResolver</code> object's warning chain is cleared
+     * implicitly close it. A {@code SyncResolver} object's warning chain is cleared
      * when a new row
      *
      * @return true if the new current row is valid; false if there are no more rows
@@ -495,9 +495,9 @@
 
 
     /**
-     * Moves the cursor to the previous conflict row in this <code>SyncResolver</code> object.
-     *
-     * @return <code>true</code> if the cursor is on a valid row; <code>false</code>
+     * Moves the cursor to the previous conflict row in this {@code SyncResolver} object.
+     *
+     * @return {@code true} if the cursor is on a valid row; {@code false}
      *     if it is off the result set
      * @throws SQLException if a database access error occurs or the result set type
      *     is TYPE_FORWARD_ONLY
@@ -511,17 +511,17 @@
     //-----------------------------------------------------------------------
 
     /**
-     * Sets this <code>CachedRowSetImpl</code> object's command property
-     * to the given <code>String</code> object and clears the parameters,
+     * Sets this {@code CachedRowSetImpl} object's command property
+     * to the given {@code String} object and clears the parameters,
      * if any, that were set for the previous command.
      * <P>
      * The command property may not be needed
      * if the rowset is produced by a data source, such as a spreadsheet,
      * that does not support commands. Thus, this property is optional
-     * and may be <code>null</code>.
-     *
-     * @param cmd a <code>String</code> object containing an SQL query
-     *            that will be set as the command; may be <code>null</code>
+     * and may be {@code null}.
+     *
+     * @param cmd a {@code String} object containing an SQL query
+     *            that will be set as the command; may be {@code null}
      * @throws SQLException if an error occurs
      */
     public void setCommand(String cmd) throws SQLException {
@@ -534,25 +534,25 @@
     //---------------------------------------------------------------------
 
     /**
-     * Populates this <code>CachedRowSetImpl</code> object with data from
-     * the given <code>ResultSet</code> object.  This
-     * method is an alternative to the method <code>execute</code>
-     * for filling the rowset with data.  The method <code>populate</code>
+     * Populates this {@code CachedRowSetImpl} object with data from
+     * the given {@code ResultSet} object.  This
+     * method is an alternative to the method {@code execute}
+     * for filling the rowset with data.  The method {@code populate}
      * does not require that the properties needed by the method
-     * <code>execute</code>, such as the <code>command</code> property,
-     * be set. This is true because the method <code>populate</code>
-     * is given the <code>ResultSet</code> object from
+     * {@code execute}, such as the {@code command} property,
+     * be set. This is true because the method {@code populate}
+     * is given the {@code ResultSet} object from
      * which to get data and thus does not need to use the properties
      * required for setting up a connection and executing this
-     * <code>CachedRowSetImpl</code> object's command.
+     * {@code CachedRowSetImpl} object's command.
      * <P>
      * After populating this rowset with data, the method
-     * <code>populate</code> sets the rowset's metadata and
-     * then sends a <code>RowSetChangedEvent</code> object
+     * {@code populate} sets the rowset's metadata and
+     * then sends a {@code RowSetChangedEvent} object
      * to all registered listeners prior to returning.
      *
-     * @param data the <code>ResultSet</code> object containing the data
-     *             to be read into this <code>CachedRowSetImpl</code> object
+     * @param data the {@code ResultSet} object containing the data
+     *             to be read into this {@code CachedRowSetImpl} object
      * @throws SQLException if an error occurs; or the max row setting is
      *          violated while populating the RowSet
      * @see #execute
@@ -562,18 +562,18 @@
     }
 
     /**
-     * Populates this <code>CachedRowSetImpl</code> object with data,
+     * Populates this {@code CachedRowSetImpl} object with data,
      * using the given connection to produce the result set from
      * which data will be read.  A second form of this method,
      * which takes no arguments, uses the values from this rowset's
      * user, password, and either url or data source properties to
-     * create a new database connection. The form of <code>execute</code>
+     * create a new database connection. The form of {@code execute}
      * that is given a connection ignores these properties.
      *
-     * @param conn A standard JDBC <code>Connection</code> object that this
-     * <code>CachedRowSet</code> object can pass to a synchronization provider
+     * @param conn A standard JDBC {@code Connection} object that this
+     * {@code CachedRowSet} object can pass to a synchronization provider
      * to establish a connection to the data source
-     * @throws SQLException if an invalid <code>Connection</code> is supplied
+     * @throws SQLException if an invalid {@code Connection} is supplied
      *           or an error occurs in establishing the connection to the
      *           data source
      * @see #populate
@@ -585,11 +585,11 @@
 
     /**
      * Propagates all row update, insert, and delete changes to the
-     * underlying data source backing this <code>CachedRowSetImpl</code>
+     * underlying data source backing this {@code CachedRowSetImpl}
      * object.
      * <P>
      * <b>Note</b>In the reference implementation an optimistic concurrency implementation
-     * is provided as a sample implementation of a the <code>SyncProvider</code>
+     * is provided as a sample implementation of a the {@code SyncProvider}
      * abstract class.
      * <P>
      * This method fails if any of the updates cannot be propagated back
@@ -601,17 +601,17 @@
      * In that case, when deleted rows are not shown, which is usually true,
      * the current row is not affected.
      * <P>
-     * If no <code>SyncProvider</code> is configured, the reference implementation
-     * leverages the <code>RIOptimisticProvider</code> available which provides the
+     * If no {@code SyncProvider} is configured, the reference implementation
+     * leverages the {@code RIOptimisticProvider} available which provides the
      * default and reference synchronization capabilities for disconnected
-     * <code>RowSets</code>.
+     * {@code RowSets}.
      *
      * @throws SQLException if the cursor is on the insert row or the underlying
      *          reference synchronization provider fails to commit the updates
      *          to the datasource
      * @throws SyncProviderException if an internal error occurs within the
-     *          <code>SyncProvider</code> instance during either during the
-     *          process or at any time when the <code>SyncProvider</code>
+     *          {@code SyncProvider} instance during either during the
+     *          process or at any time when the {@code SyncProvider}
      *          instance touches the data source.
      * @see #acceptChanges(java.sql.Connection)
      * @see javax.sql.RowSetWriter
@@ -623,18 +623,18 @@
 
     /**
      * Propagates all row update, insert, and delete changes to the
-     * data source backing this <code>CachedRowSetImpl</code> object
-     * using the given <code>Connection</code> object.
+     * data source backing this {@code CachedRowSetImpl} object
+     * using the given {@code Connection} object.
      * <P>
-     * The reference implementation <code>RIOptimisticProvider</code>
+     * The reference implementation {@code RIOptimisticProvider}
      * modifies its synchronization to a write back function given
      * the updated connection
      * The reference implementation modifies its synchronization behaviour
-     * via the <code>SyncProvider</code> to ensure the synchronization
-     * occurs according to the updated JDBC <code>Connection</code>
+     * via the {@code SyncProvider} to ensure the synchronization
+     * occurs according to the updated JDBC {@code Connection}
      * properties.
      *
-     * @param con a standard JDBC <code>Connection</code> object
+     * @param con a standard JDBC {@code Connection} object
      * @throws SQLException if the cursor is on the insert row or the underlying
      *                   synchronization provider fails to commit the updates
      *                   back to the data source
@@ -648,11 +648,11 @@
     }
 
     /**
-     * Restores this <code>CachedRowSetImpl</code> object to its original state,
+     * Restores this {@code CachedRowSetImpl} object to its original state,
      * that is, its state before the last set of changes.
      * <P>
      * Before returning, this method moves the cursor before the first row
-     * and sends a <code>rowSetChanged</code> event to all registered
+     * and sends a {@code rowSetChanged} event to all registered
      * listeners.
      * @throws SQLException if an error is occurs rolling back the RowSet
      *           state to the definied original value.
@@ -663,8 +663,8 @@
     }
 
     /**
-     * Releases the current contents of this <code>CachedRowSetImpl</code>
-     * object and sends a <code>rowSetChanged</code> event object to all
+     * Releases the current contents of this {@code CachedRowSetImpl}
+     * object and sends a {@code rowSetChanged} event object to all
      * registered listeners.
      *
      * @throws SQLException if an error occurs flushing the contents of
@@ -690,7 +690,7 @@
 
     /**
      * Immediately removes the current row from this
-     * <code>CachedRowSetImpl</code> object if the row has been inserted, and
+     * {@code CachedRowSetImpl} object if the row has been inserted, and
      * also notifies listeners the a row has changed.  An exception is thrown
      * if the row is not a row that has been inserted or the cursor is before
      * the first row, after the last row, or on the insert row.
@@ -710,10 +710,10 @@
      * row has been modified. This method can be
      * called to reverse updates on a all columns until all updates in a row have
      * been rolled back to their originating state since the last synchronization
-     * (<code>acceptChanges</code>) or population. This method may also be called
+     * ({@code acceptChanges}) or population. This method may also be called
      * while performing updates to the insert row.
      * <P>
-     * <code>undoUpdate</code may be called at any time during the life-time of a
+     * {@code undoUpdate} may be called at any time during the life-time of a
      * rowset, however after a synchronization has occurs this method has no
      * affect until further modification to the RowSet data occurs.
      *
@@ -733,12 +733,12 @@
     //--------------------------------------------------------------------
 
     /**
-     * Returns a new <code>RowSet</code> object backed by the same data as
-     * that of this <code>CachedRowSetImpl</code> object and sharing a set of cursors
+     * Returns a new {@code RowSet} object backed by the same data as
+     * that of this {@code CachedRowSetImpl} object and sharing a set of cursors
      * with it. This allows cursors to interate over a shared set of rows, providing
      * multiple views of the underlying data.
      *
-     * @return a <code>RowSet</code> object that is a copy of this <code>CachedRowSetImpl</code>
+     * @return a {@code RowSet} object that is a copy of this {@code CachedRowSetImpl}
      * object and shares a set of cursors with it
      * @throws SQLException if an error occurs or cloning is
      *                         not supported
@@ -750,19 +750,19 @@
     }
 
     /**
-     * Returns a new <code>RowSet</code> object containing by the same data
-     * as this <code>CachedRowSetImpl</code> object.  This method
-     * differs from the method <code>createCopy</code> in that it throws a
-     * <code>CloneNotSupportedException</code> object instead of an
-     * <code>SQLException</code> object, as the method <code>createShared</code>
-     * does.  This <code>clone</code>
-     * method is called internally by the method <code>createShared</code>,
-     * which catches the <code>CloneNotSupportedException</code> object
-     * and in turn throws a new <code>SQLException</code> object.
-     *
-     * @return a copy of this <code>CachedRowSetImpl</code> object
+     * Returns a new {@code RowSet} object containing by the same data
+     * as this {@code CachedRowSetImpl} object.  This method
+     * differs from the method {@code createCopy} in that it throws a
+     * {@code CloneNotSupportedException} object instead of an
+     * {@code SQLException} object, as the method {@code createShared}
+     * does.  This {@code clone}
+     * method is called internally by the method {@code createShared},
+     * which catches the {@code CloneNotSupportedException} object
+     * and in turn throws a new {@code SQLException} object.
+     *
+     * @return a copy of this {@code CachedRowSetImpl} object
      * @throws CloneNotSupportedException if an error occurs when
-     * attempting to clone this <code>CachedRowSetImpl</code> object
+     * attempting to clone this {@code CachedRowSetImpl} object
      * @see #createShared
      */
     protected Object clone() throws CloneNotSupportedException  {
@@ -770,8 +770,8 @@
     }
 
     /**
-     * Creates a <code>RowSet</code> object that is a deep copy of
-     * this <code>CachedRowSetImpl</code> object's data, including
+     * Creates a {@code RowSet} object that is a deep copy of
+     * this {@code CachedRowSetImpl} object's data, including
      * constraints.  Updates made
      * on a copy are not visible to the original rowset;
      * a copy of a rowset is completely independent from the original.
@@ -780,12 +780,12 @@
      * from first principles, which can be quite expensive.
      * For example, it can eliminate the need to query a
      * remote database server.
-     * @return a new <code>CachedRowSet</code> object that is a deep copy
-     *           of this <code>CachedRowSet</code> object and is
-     *           completely independent from this <code>CachedRowSetImpl</code>
+     * @return a new {@code CachedRowSet} object that is a deep copy
+     *           of this {@code CachedRowSet} object and is
+     *           completely independent from this {@code CachedRowSetImpl}
      *           object.
      * @throws SQLException if an error occurs in generating the copy of this
-     *           of the <code>CachedRowSetImpl</code>
+     *           of the {@code CachedRowSetImpl}
      * @see #createShared
      * @see javax.sql.RowSetEvent
      * @see javax.sql.RowSetListener
@@ -795,21 +795,21 @@
     }
 
     /**
-     * Creates a <code>RowSet</code> object that is a copy of
-     * this <code>CachedRowSetImpl</code> object's table structure
+     * Creates a {@code RowSet} object that is a copy of
+     * this {@code CachedRowSetImpl} object's table structure
      * and the constraints only.
      * There will be no data in the object being returned.
      * Updates made on a copy are not visible to the original rowset.
      * <P>
      * This helps in getting the underlying XML schema which can
-     * be used as the basis for populating a <code>WebRowSet</code>.
-     *
-     * @return a new <code>CachedRowSet</code> object that is a copy
-     * of this <code>CachedRowSetImpl</code> object's schema and
+     * be used as the basis for populating a {@code WebRowSet}.
+     *
+     * @return a new {@code CachedRowSet} object that is a copy
+     * of this {@code CachedRowSetImpl} object's schema and
      * retains all the constraints on the original rowset but contains
      * no data
      * @throws SQLException if an error occurs in generating the copy
-     * of the <code>CachedRowSet</code> object
+     * of the {@code CachedRowSet} object
      * @see #createShared
      * @see #createCopy
      * @see #createCopyNoConstraints
@@ -821,17 +821,17 @@
     }
 
     /**
-     * Creates a <code>CachedRowSet</code> object that is a copy of
-     * this <code>CachedRowSetImpl</code> object's data only.
+     * Creates a {@code CachedRowSet} object that is a copy of
+     * this {@code CachedRowSetImpl} object's data only.
      * All constraints set in this object will not be there
      * in the returning object.  Updates made
      * on a copy are not visible to the original rowset.
      *
-     * @return a new <code>CachedRowSet</code> object that is a deep copy
-     * of this <code>CachedRowSetImpl</code> object and is
-     * completely independent from this <code>CachedRowSetImpl</code> object
+     * @return a new {@code CachedRowSet} object that is a deep copy
+     * of this {@code CachedRowSetImpl} object and is
+     * completely independent from this {@code CachedRowSetImpl} object
      * @throws SQLException if an error occurs in generating the copy of the
-     * of the <code>CachedRowSet</code>
+     * of the {@code CachedRowSet}
      * @see #createShared
      * @see #createCopy
      * @see #createCopySchema
@@ -843,15 +843,15 @@
     }
 
     /**
-     * Converts this <code>CachedRowSetImpl</code> object to a collection
-     * of tables. The sample implementation utilitizes the <code>TreeMap</code>
+     * Converts this {@code CachedRowSetImpl} object to a collection
+     * of tables. The sample implementation utilitizes the {@code TreeMap}
      * collection type.
      * This class guarantees that the map will be in ascending key order,
      * sorted according to the natural order for the key's class.
      *
-     * @return a <code>Collection</code> object consisting of tables,
+     * @return a {@code Collection} object consisting of tables,
      *         each of which is a copy of a row in this
-     *         <code>CachedRowSetImpl</code> object
+     *         {@code CachedRowSetImpl} object
      * @throws SQLException if an error occurs in generating the collection
      * @see #toCollection(int)
      * @see #toCollection(String)
@@ -863,16 +863,16 @@
     }
 
     /**
-     * Returns the specified column of this <code>CachedRowSetImpl</code> object
-     * as a <code>Collection</code> object.  This method makes a copy of the
-     * column's data and utilitizes the <code>Vector</code> to establish the
-     * collection. The <code>Vector</code> class implements a growable array
+     * Returns the specified column of this {@code CachedRowSetImpl} object
+     * as a {@code Collection} object.  This method makes a copy of the
+     * column's data and utilitizes the {@code Vector} to establish the
+     * collection. The {@code Vector} class implements a growable array
      * objects allowing the individual components to be accessed using an
      * an integer index similar to that of an array.
      *
-     * @return a <code>Collection</code> object that contains the value(s)
+     * @return a {@code Collection} object that contains the value(s)
      *         stored in the specified column of this
-     *         <code>CachedRowSetImpl</code>
+     *         {@code CachedRowSetImpl}
      *         object
      * @throws SQLException if an error occurs generated the collection; or
      *          an invalid column is provided.
@@ -886,16 +886,16 @@
     }
 
     /**
-     * Returns the specified column of this <code>CachedRowSetImpl</code> object
-     * as a <code>Collection</code> object.  This method makes a copy of the
-     * column's data and utilitizes the <code>Vector</code> to establish the
-     * collection. The <code>Vector</code> class implements a growable array
+     * Returns the specified column of this {@code CachedRowSetImpl} object
+     * as a {@code Collection} object.  This method makes a copy of the
+     * column's data and utilitizes the {@code Vector} to establish the
+     * collection. The {@code Vector} class implements a growable array
      * objects allowing the individual components to be accessed using an
      * an integer index similar to that of an array.
      *
-     * @return a <code>Collection</code> object that contains the value(s)
+     * @return a {@code Collection} object that contains the value(s)
      *         stored in the specified column of this
-     *         <code>CachedRowSetImpl</code>
+     *         {@code CachedRowSetImpl}
      *         object
      * @throws SQLException if an error occurs generated the collection; or
      *          an invalid column is provided.
@@ -914,25 +914,25 @@
 
 
     /**
-     * Returns the <code>SyncProvider</code> implementation being used
-     * with this <code>CachedRowSetImpl</code> implementation rowset.
+     * Returns the {@code SyncProvider} implementation being used
+     * with this {@code CachedRowSetImpl} implementation rowset.
      *
      * @return the SyncProvider used by the rowset. If not provider was
      *          set when the rowset was instantiated, the reference
      *          implementation (default) provider is returned.
      * @throws SQLException if error occurs while return the
-     *          <code>SyncProvider</code> instance.
+     *          {@code SyncProvider} instance.
      */
     public SyncProvider getSyncProvider() throws SQLException {
       throw new UnsupportedOperationException();
     }
 
     /**
-     * Sets the active <code>SyncProvider</code> and attempts to load
-     * load the new provider using the <code>SyncFactory</code> SPI.
+     * Sets the active {@code SyncProvider} and attempts to load
+     * load the new provider using the {@code SyncFactory} SPI.
      *
      * @throws SQLException if an error occurs while resetting the
-     *          <code>SyncProvider</code>.
+     *          {@code SyncProvider}.
      */
     public void setSyncProvider(String providerStr) throws SQLException {
         throw new UnsupportedOperationException();
@@ -953,23 +953,23 @@
     //---------------------------------------------------------------------
 
     /**
-     * Populates this <code>CachedRowSetImpl</code> object with data.
+     * Populates this {@code CachedRowSetImpl} object with data.
      * This form of the method uses the rowset's user, password, and url or
      * data source name properties to create a database
      * connection.  If properties that are needed
      * have not been set, this method will throw an exception.
      * <P>
-     * Another form of this method uses an existing JDBC <code>Connection</code>
+     * Another form of this method uses an existing JDBC {@code Connection}
      * object instead of creating a new one; therefore, it ignores the
      * properties used for establishing a new connection.
      * <P>
      * The query specified by the command property is executed to create a
-     * <code>ResultSet</code> object from which to retrieve data.
+     * {@code ResultSet} object from which to retrieve data.
      * The current contents of the rowset are discarded, and the
      * rowset's metadata is also (re)set.  If there are outstanding updates,
      * they are also ignored.
      * <P>
-     * The method <code>execute</code> closes any database connections that it
+     * The method {@code execute} closes any database connections that it
      * creates.
      *
      * @throws SQLException if an error occurs or the
@@ -987,20 +987,20 @@
 
     /**
      * Moves the cursor down one row from its current position and
-     * returns <code>true</code> if the new cursor position is a
+     * returns {@code true} if the new cursor position is a
      * valid row.
-     * The cursor for a new <code>ResultSet</code> object is initially
+     * The cursor for a new {@code ResultSet} object is initially
      * positioned before the first row. The first call to the method
-     * <code>next</code> moves the cursor to the first row, making it
+     * {@code next} moves the cursor to the first row, making it
      * the current row; the second call makes the second row the
      * current row, and so on.
      *
      * <P>If an input stream from the previous row is open, it is
-     * implicitly closed. The <code>ResultSet</code> object's warning
+     * implicitly closed. The {@code ResultSet} object's warning
      * chain is cleared when a new row is read.
      *
-     * @return <code>true</code> if the new current row is valid;
-     *         <code>false</code> if there are no more rows
+     * @return {@code true} if the new current row is valid;
+     *         {@code false} if there are no more rows
      * @throws SQLException if an error occurs or
      *            the cursor is not positioned in the rowset, before
      *            the first row, or after the last row
@@ -1010,9 +1010,9 @@
     }
 
     /**
-     * Moves this <code>CachedRowSetImpl</code> object's cursor to the next
-     * row and returns <code>true</code> if the cursor is still in the rowset;
-     * returns <code>false</code> if the cursor has moved to the position after
+     * Moves this {@code CachedRowSetImpl} object's cursor to the next
+     * row and returns {@code true} if the cursor is still in the rowset;
+     * returns {@code false} if the cursor has moved to the position after
      * the last row.
      * <P>
      * This method handles the cases where the cursor moves to a row that
@@ -1021,15 +1021,15 @@
      * that has been deleted, this method moves the cursor to the next
      * row until the cursor is on a row that has not been deleted.
      * <P>
-     * The method <code>internalNext</code> is called by methods such as
-     * <code>next</code>, <code>absolute</code>, and <code>relative</code>,
+     * The method {@code internalNext} is called by methods such as
+     * {@code next}, {@code absolute}, and {@code relative},
      * and, as its name implies, is only called internally.
      * <p>
      * This is a implementation only method and is not required as a standard
-     * implementation of the <code>CachedRowSet</code> interface.
-     *
-     * @return <code>true</code> if the cursor is on a valid row in this
-     *         rowset; <code>false</code> if it is after the last row
+     * implementation of the {@code CachedRowSet} interface.
+     *
+     * @return {@code true} if the cursor is on a valid row in this
+     *         rowset; {@code false} if it is after the last row
      * @throws SQLException if an error occurs
      */
     protected boolean internalNext() throws SQLException {
@@ -1037,25 +1037,25 @@
     }
 
     /**
-     * Closes this <code>CachedRowSetImpl</code> objecy and releases any resources
+     * Closes this {@code CachedRowSetImpl} objecy and releases any resources
      * it was using.
      *
      * @throws SQLException if an error occurs when releasing any resources in use
-     * by this <code>CachedRowSetImpl</code> object
+     * by this {@code CachedRowSetImpl} object
      */
     public void close() throws SQLException {
         throw new UnsupportedOperationException();
     }
 
     /**
-     * Reports whether the last column read was SQL <code>NULL</code>.
-     * Note that you must first call the method <code>getXXX</code>
+     * Reports whether the last column read was SQL {@code NULL}.
+     * Note that you must first call the method {@code getXXX}
      * on a column to try to read its value and then call the method
-     * <code>wasNull</code> to determine whether the value was
-     * SQL <code>NULL</code>.
-     *
-     * @return <code>true</code> if the value in the last column read
-     *         was SQL <code>NULL</code>; <code>false</code> otherwise
+     * {@code wasNull} to determine whether the value was
+     * SQL {@code NULL}.
+     *
+     * @return {@code true} if the value in the last column read
+     *         was SQL {@code NULL}; {@code false} otherwise
      * @throws SQLException if an error occurs
      */
     public boolean wasNull() throws SQLException {
@@ -1064,9 +1064,9 @@
 
     /**
      * Returns the insert row or the current row of this
-     * <code>CachedRowSetImpl</code>object.
-     *
-     * @return the <code>Row</code> object on which this <code>CachedRowSetImpl</code>
+     * {@code CachedRowSetImpl}object.
+     *
+     * @return the {@code Row} object on which this {@code CachedRowSetImpl}
      * objects's cursor is positioned
      */
     protected BaseRow getCurrentRow() {
@@ -1077,7 +1077,7 @@
      * Removes the row on which the cursor is positioned.
      * <p>
      * This is a implementation only method and is not required as a standard
-     * implementation of the <code>CachedRowSet</code> interface.
+     * implementation of the {@code CachedRowSet} interface.
      *
      * @throws SQLException if the cursor is positioned on the insert
      *            row
@@ -1089,20 +1089,20 @@
 
     /**
      * Retrieves the value of the designated column in the current row
-     * of this <code>CachedRowSetImpl</code> object as a
-     * <code>String</code> object.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
+     * of this {@code CachedRowSetImpl} object as a
+     * {@code String} object.
+     *
+     * @param columnIndex the first column is {@code 1}, the second
+     *        is {@code 2}, and so on; must be {@code 1} or larger
      *        and equal to or less than the number of columns in the rowset
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     *         result is <code>null</code>
+     * @return the column value; if the value is SQL {@code NULL}, the
+     *         result is {@code null}
      * @throws SQLException if (1) the given column index is out of bounds,
      * (2) the cursor is not on one of this rowset's rows or its
      * insert row, or (3) the designated column does not store an
-     * SQL <code>TINYINT, SMALLINT, INTEGER, BIGINT, REAL,
-     * FLOAT, DOUBLE, DECIMAL, NUMERIC, BIT, <b>CHAR</b>, <b>VARCHAR</b></code>
-     * or <code>LONGVARCHAR</code> value. The bold SQL type designates the
+     * SQL {@code TINYINT, SMALLINT, INTEGER, BIGINT, REAL,
+     * FLOAT, DOUBLE, DECIMAL, NUMERIC, BIT,} <b>{@code CHAR, VARCHAR}</b>
+     * or {@code LONGVARCHAR} value. The bold SQL type designates the
      * recommended return type.
      */
     public String getString(int columnIndex) throws SQLException {
@@ -1111,18 +1111,18 @@
 
     /**
      * Retrieves the value of the designated column in the current row
-     * of this <code>CachedRowSetImpl</code> object as a
-     * <code>boolean</code> value.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
+     * of this {@code CachedRowSetImpl} object as a
+     * {@code boolean} value.
+     *
+     * @param columnIndex the first column is {@code 1}, the second
+     *        is {@code 2}, and so on; must be {@code 1} or larger
      *        and equal to or less than the number of columns in the rowset
-     * @return the column value as a <code>boolean</code> in the Java progamming language;
-     *        if the value is SQL <code>NULL</code>, the result is <code>false</code>
+     * @return the column value as a {@code boolean} in the Java progamming language;
+     *        if the value is SQL {@code NULL}, the result is {@code false}
      * @throws SQLException if (1) the given column index is out of bounds,
      *            (2) the cursor is not on one of this rowset's rows or its
      *            insert row, or (3) the designated column does not store an
-     *            SQL <code>BOOLEAN</code> value
+     *            SQL {@code BOOLEAN} value
      * @see #getBoolean(String)
      */
     public boolean getBoolean(int columnIndex) throws SQLException {
@@ -1131,20 +1131,20 @@
 
     /**
      * Retrieves the value of the designated column in the current row
-     * of this <code>CachedRowSetImpl</code> object as a
-     * <code>byte</code> value.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
+     * of this {@code CachedRowSetImpl} object as a
+     * {@code byte} value.
+     *
+     * @param columnIndex the first column is {@code 1}, the second
+     *        is {@code 2}, and so on; must be {@code 1} or larger
      *        and equal to or less than the number of columns in the rowset
-     * @return the column value as a <code>byte</code> in the Java programming
-     * language; if the value is SQL <code>NULL</code>, the result is <code>0</code>
+     * @return the column value as a {@code byte} in the Java programming
+     * language; if the value is SQL {@code NULL}, the result is {@code 0}
      * @throws SQLException if (1) the given column index is out of bounds,
      *            (2) the cursor is not on one of this rowset's rows or its
      *            insert row, or (3) the designated column does not store an
-     *            SQL <code><b>TINYINT</b>, SMALLINT, INTEGER, BIGINT, REAL,
-     *            FLOAT, DOUBLE, DECIMAL, NUMERIC, BIT, CHAR, VARCHAR</code>
-     *            or <code>LONGVARCHAR</code> value. The bold SQL type
+     *            SQL <b>{@code TINYINT}</b>, {@code SMALLINT, INTEGER,
+     *            BIGINT, REAL, FLOAT, DOUBLE, DECIMAL, NUMERIC, BIT, CHAR,
+     *            VARCHAR} or {@code LONGVARCHAR} value. The bold SQL type
      *            designates the recommended return type.
      * @see #getByte(String)
      */
@@ -1154,21 +1154,22 @@
 
     /**
      * Retrieves the value of the designated column in the current row
-     * of this <code>CachedRowSetImpl</code> object as a
-     * <code>short</code> value.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
+     * of this {@code CachedRowSetImpl} object as a
+     * {@code short} value.
+     *
+     * @param columnIndex the first column is {@code 1}, the second
+     *        is {@code 2}, and so on; must be {@code 1} or larger
      *        and equal to or less than the number of columns in the rowset
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     *         result is <code>0</code>
+     * @return the column value; if the value is SQL {@code NULL}, the
+     *         result is {@code 0}
      * @throws SQLException if (1) the given column index is out of bounds,
-     * (2) the cursor is not on one of this rowset's rows or its
-     * insert row, or (3) the designated column does not store an
-     * SQL <code>TINYINT, <b>SMALLINT</b>, INTEGER, BIGINT, REAL
-     * FLOAT, DOUBLE, DECIMAL, NUMERIC, BIT, CHAR, VARCHAR</code>
-     * or <code>LONGVARCHAR</code> value. The bold SQL type designates the
-     * recommended return type.
+     *         (2) the cursor is not on one of this rowset's rows or its
+     *         insert row, or (3) the designated column does not store an
+     *         SQL {@code TINYINT}, <b>{@code SMALLINT}</b>,
+     *         {@code INTEGER, BIGINT, REAL, FLOAT, DOUBLE,
+     *         DECIMAL, NUMERIC, BIT, CHAR, VARCHAR}
+     *         or {@code LONGVARCHAR} value. The bold SQL type
+     *         designates the recommended return type.
      * @see #getShort(String)
      */
     public short getShort(int columnIndex) throws SQLException {
@@ -1177,21 +1178,22 @@
 
     /**
      * Retrieves the value of the designated column in the current row
-     * of this <code>CachedRowSetImpl</code> object as an
-     * <code>int</code> value.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
+     * of this {@code CachedRowSetImpl} object as an
+     * {@code int} value.
+     *
+     * @param columnIndex the first column is {@code 1}, the second
+     *        is {@code 2}, and so on; must be {@code 1} or larger
      *        and equal to or less than the number of columns in the rowset
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     *         result is <code>0</code>
+     * @return the column value; if the value is SQL {@code NULL}, the
+     *         result is {@code 0}
      * @throws SQLException if (1) the given column index is out of bounds,
-     * (2) the cursor is not on one of this rowset's rows or its
-     * insert row, or (3) the designated column does not store an
-     * SQL <code>TINYINT, SMALLINT, <b>INTEGER</b>, BIGINT, REAL
-     * FLOAT, DOUBLE, DECIMAL, NUMERIC, BIT, CHAR, VARCHAR</code>
-     * or <code>LONGVARCHAR</code> value. The bold SQL type designates the
-     * recommended return type.
+     *         (2) the cursor is not on one of this rowset's rows or its
+     *         insert row, or (3) the designated column does not store an
+     *         SQL {@code TINYINT, SMALLINT,} <b>{@code INTEGER}</b>,
+     *         {@code BIGINT, REAL, FLOAT, DOUBLE, DECIMAL,
+     *         NUMERIC, BIT, CHAR, VARCHAR} or {@code LONGVARCHAR} value.
+     *         The bold SQL type designates the
+     *         recommended return type.
      */
     public int getInt(int columnIndex) throws SQLException {
         throw new UnsupportedOperationException();
@@ -1199,21 +1201,22 @@
 
     /**
      * Retrieves the value of the designated column in the current row
-     * of this <code>CachedRowSetImpl</code> object as a
-     * <code>long</code> value.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
+     * of this {@code CachedRowSetImpl} object as a
+     * {@code long} value.
+     *
+     * @param columnIndex the first column is {@code 1}, the second
+     *        is {@code 2}, and so on; must be {@code 1} or larger
      *        and equal to or less than the number of columns in the rowset
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     *         result is <code>0</code>
+     * @return the column value; if the value is SQL {@code NULL}, the
+     *         result is {@code 0}
      * @throws SQLException if (1) the given column index is out of bounds,
-     * (2) the cursor is not on one of this rowset's rows or its
-     * insert row, or (3) the designated column does not store an
-     * SQL <code>TINYINT, SMALLINT, INTEGER, <b>BIGINT</b>, REAL
-     * FLOAT, DOUBLE, DECIMAL, NUMERIC, BIT, CHAR, VARCHAR</code>
-     * or <code>LONGVARCHAR</code> value. The bold SQL type designates the
-     * recommended return type.
+     *         (2) the cursor is not on one of this rowset's rows or its
+     *         insert row, or (3) the designated column does not store an
+     *         SQL {@code TINYINT, SMALLINT, INTEGER,}
+     *         <b>{@code BIGINT}</b>, {@code REAL, FLOAT, DOUBLE,
+     *         DECIMAL, NUMERIC, BIT, CHAR, VARCHAR}
+     *         or {@code LONGVARCHAR} value. The bold SQL type
+     * designates the recommended return type.
      * @see #getLong(String)
      */
     public long getLong(int columnIndex) throws SQLException {
@@ -1222,21 +1225,21 @@
 
     /**
      * Retrieves the value of the designated column in the current row
-     * of this <code>CachedRowSetImpl</code> object as a
-     * <code>float</code> value.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
+     * of this {@code CachedRowSetImpl} object as a
+     * {@code float} value.
+     *
+     * @param columnIndex the first column is {@code 1}, the second
+     *        is {@code 2}, and so on; must be {@code 1} or larger
      *        and equal to or less than the number of columns in the rowset
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     *         result is <code>0</code>
+     * @return the column value; if the value is SQL {@code NULL}, the
+     *         result is {@code 0}
      * @throws SQLException if (1) the given column index is out of bounds,
-     * (2) the cursor is not on one of this rowset's rows or its
-     * insert row, or (3) the designated column does not store an
-     * SQL <code>TINYINT, SMALLINT, INTEGER, BIGINT, <b>REAL</b>,
-     * FLOAT, DOUBLE, DECIMAL, NUMERIC, BIT, CHAR, VARCHAR</code>
-     * or <code>LONGVARCHAR</code> value. The bold SQL type designates the
-     * recommended return type.
+     *         (2) the cursor is not on one of this rowset's rows or its
+     *         insert row, or (3) the designated column does not store an
+     *         SQL {@code TINYINT, SMALLINT, INTEGER, BIGINT,}
+     *         <b>{@code REAL}</b>, {@code FLOAT, DOUBLE, DECIMAL, NUMERIC,
+     *         BIT, CHAR, VARCHAR} or {@code LONGVARCHAR} value.
+     *         The bold SQL type designates the recommended return type.
      * @see #getFloat(String)
      */
     public float getFloat(int columnIndex) throws SQLException {
@@ -1245,21 +1248,22 @@
 
     /**
      * Retrieves the value of the designated column in the current row
-     * of this <code>CachedRowSetImpl</code> object as a
-     * <code>double</code> value.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
+     * of this {@code CachedRowSetImpl} object as a
+     * {@code double} value.
+     *
+     * @param columnIndex the first column is {@code 1}, the second
+     *        is {@code 2}, and so on; must be {@code 1} or larger
      *        and equal to or less than the number of columns in the rowset
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     *         result is <code>0</code>
+     * @return the column value; if the value is SQL {@code NULL}, the
+     *         result is {@code 0}
      * @throws SQLException if (1) the given column index is out of bounds,
-     * (2) the cursor is not on one of this rowset's rows or its
-     * insert row, or (3) the designated column does not store an
-     * SQL <code>TINYINT, SMALLINT, INTEGER, BIGINT, REAL,
-     * <b>FLOAT</b>, <b>DOUBLE</b>, DECIMAL, NUMERIC, BIT, CHAR, VARCHAR</code>
-     * or <code>LONGVARCHAR</code> value. The bold SQL type designates the
-     * recommended return type.
+     *         (2) the cursor is not on one of this rowset's rows or its
+     *         insert row, or (3) the designated column does not store an
+     *         SQL {@code TINYINT, SMALLINT, INTEGER, BIGINT, REAL,}
+     *         <b>{@code FLOAT, DOUBLE}</b>,
+     *         {@code DECIMAL, NUMERIC, BIT, CHAR, VARCHAR}
+     *         or {@code LONGVARCHAR} value. The bold SQL type
+     *         designates the recommended return type.
      * @see #getDouble(String)
      *
      */
@@ -1269,21 +1273,21 @@
 
     /**
      * Retrieves the value of the designated column in the current row
-     * of this <code>CachedRowSetImpl</code> object as a
-     * <code>java.math.BigDecimal</code> object.
+     * of this {@code CachedRowSetImpl} object as a
+     * {@code java.math.BigDecimal} object.
      * <P>
-     * This method is deprecated; use the version of <code>getBigDecimal</code>
+     * This method is deprecated; use the version of {@code getBigDecimal}
      * that does not take a scale parameter and returns a value with full
      * precision.
      *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
+     * @param columnIndex the first column is {@code 1}, the second
+     *        is {@code 2}, and so on; must be {@code 1} or larger
      *        and equal to or less than the number of columns in the rowset
      * @param scale the number of digits to the right of the decimal point in the
      *        value returned
      * @return the column value with the specified number of digits to the right
-     *         of the decimal point; if the value is SQL <code>NULL</code>, the
-     *         result is <code>null</code>
+     *         of the decimal point; if the value is SQL {@code NULL}, the
+     *         result is {@code null}
      * @throws SQLException if the given column index is out of bounds,
      *            the cursor is not on a valid row, or this method fails
      * @deprecated
@@ -1295,22 +1299,22 @@
 
     /**
      * Retrieves the value of the designated column in the current row
-     * of this <code>CachedRowSetImpl</code> object as a
-     * <code>byte</code> array value.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
+     * of this {@code CachedRowSetImpl} object as a
+     * {@code byte} array value.
+     *
+     * @param columnIndex the first column is {@code 1}, the second
+     *        is {@code 2}, and so on; must be {@code 1} or larger
      *        and equal to or less than the number of columns in the rowset
-     * @return the column value as a <code>byte</code> array in the Java programming
-     * language; if the value is SQL <code>NULL</code>, the
-     * result is <code>null</code>
+     * @return the column value as a {@code byte} array in the Java programming
+     * language; if the value is SQL {@code NULL}, the
+     * result is {@code null}
      *
      * @throws SQLException if (1) the given column index is out of bounds,
-     * (2) the cursor is not on one of this rowset's rows or its
-     * insert row, or (3) the designated column does not store an
-     * SQL <code><b>BINARY</b>, <b>VARBINARY</b> or
-     * LONGVARBINARY</code> value.
-     * The bold SQL type designates the recommended return type.
+     *         (2) the cursor is not on one of this rowset's rows or its
+     *         insert row, or (3) the designated column does not store an
+     *         SQL <b>{@code BINARY, VARBINARY}</b> or
+     *         {@code LONGVARBINARY} value.
+     *         The bold SQL type designates the recommended return type.
      * @see #getBytes(String)
      */
     public byte[] getBytes(int columnIndex) throws SQLException {
@@ -1319,17 +1323,17 @@
 
     /**
      * Retrieves the value of the designated column in the current row
-     * of this <code>CachedRowSetImpl</code> object as a
-     * <code>java.sql.Date</code> object.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
+     * of this {@code CachedRowSetImpl} object as a
+     * {@code java.sql.Date} object.
+     *
+     * @param columnIndex the first column is {@code 1}, the second
+     *        is {@code 2}, and so on; must be {@code 1} or larger
      *        and equal to or less than the number of columns in the rowset
-     * @return the column value as a <code>java.sql.Data</code> object; if
-     *        the value is SQL <code>NULL</code>, the
-     *        result is <code>null</code>
+     * @return the column value as a {@code java.sql.Data} object; if
+     *        the value is SQL {@code NULL}, the
+     *        result is {@code null}
      * @throws SQLException if the given column index is out of bounds,
-     *            the cursor is not on a valid row, or this method fails
+     *         the cursor is not on a valid row, or this method fails
      */
     public java.sql.Date getDate(int columnIndex) throws SQLException {
         throw new UnsupportedOperationException();
@@ -1337,14 +1341,14 @@
 
     /**
      * Retrieves the value of the designated column in the current row
-     * of this <code>CachedRowSetImpl</code> object as a
-     * <code>java.sql.Time</code> object.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
+     * of this {@code CachedRowSetImpl} object as a
+     * {@code java.sql.Time} object.
+     *
+     * @param columnIndex the first column is {@code 1}, the second
+     *        is {@code 2}, and so on; must be {@code 1} or larger
      *        and equal to or less than the number of columns in the rowset
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     *         result is <code>null</code>
+     * @return the column value; if the value is SQL {@code NULL}, the
+     *         result is {@code null}
      * @throws SQLException if the given column index is out of bounds,
      *         the cursor is not on a valid row, or this method fails
      */
@@ -1354,14 +1358,14 @@
 
     /**
      * Retrieves the value of the designated column in the current row
-     * of this <code>CachedRowSetImpl</code> object as a
-     * <code>java.sql.Timestamp</code> object.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
+     * of this {@code CachedRowSetImpl} object as a
+     * {@code java.sql.Timestamp} object.
+     *
+     * @param columnIndex the first column is {@code 1}, the second
+     *        is {@code 2}, and so on; must be {@code 1} or larger
      *        and equal to or less than the number of columns in the rowset
-     * @return the column value; if the value is SQL <code>NULL</code>, the
-     *         result is <code>null</code>
+     * @return the column value; if the value is SQL {@code NULL}, the
+     *         result is {@code null}
      * @throws SQLException if the given column index is out of bounds,
      *            the cursor is not on a valid row, or this method fails
      */
@@ -1371,33 +1375,33 @@
 
     /**
      * Retrieves the value of the designated column in the current row of this
-     * <code>CachedRowSetImpl</code> object as a <code>java.io.InputStream</code>
+     * {@code CachedRowSetImpl} object as a {@code java.io.InputStream}
      * object.
      *
      * A column value can be retrieved as a stream of ASCII characters
      * and then read in chunks from the stream.  This method is particularly
-     * suitable for retrieving large <code>LONGVARCHAR</code> values.  The JDBC
+     * suitable for retrieving large {@code LONGVARCHAR} values.  The JDBC
      * driver will do any necessary conversion from the database format into ASCII.
      *
      * <P><B>Note:</B> All the data in the returned stream must be
      * read prior to getting the value of any other column. The next
      * call to a get method implicitly closes the stream. . Also, a
-     * stream may return <code>0</code> for <code>CachedRowSetImpl.available()</code>
+     * stream may return {@code 0} for {@code CachedRowSetImpl.available()}
      * whether there is data available or not.
      *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
+     * @param columnIndex the first column is {@code 1}, the second
+     *        is {@code 2}, and so on; must be {@code 1} or larger
      *        and equal to or less than the number of columns in this rowset
      * @return a Java input stream that delivers the database column value
      *         as a stream of one-byte ASCII characters.  If the value is SQL
-     *         <code>NULL</code>, the result is <code>null</code>.
+     *         {@code NULL}, the result is {@code null}.
      * @throws SQLException if (1) the given column index is out of bounds,
-     * (2) the cursor is not on one of this rowset's rows or its
-     * insert row, or (3) the designated column does not store an
-     * SQL <code>CHAR, VARCHAR</code>, <code><b>LONGVARCHAR</b></code>
-     * <code>BINARY, VARBINARY</code> or <code>LONGVARBINARY</code> value. The
-     * bold SQL type designates the recommended return types that this method is
-     * used to retrieve.
+     *         (2) the cursor is not on one of this rowset's rows or its
+     *         insert row, or (3) the designated column does not store an
+     *         SQL {@code CHAR, VARCHAR}, <b>{@code LONGVARCHAR}</b>,
+     *         {@code BINARY, VARBINARY} or {@code LONGVARBINARY} value. The
+     *         bold SQL type designates the recommended return types
+     *         that this method is used to retrieve.
      * @see #getAsciiStream(String)
      */
     public java.io.InputStream getAsciiStream(int columnIndex) throws SQLException {
@@ -1416,8 +1420,8 @@
      * stream may return 0 for available() whether there is data
      * available or not.
      *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
+     * @param columnIndex the first column is {@code 1}, the second
+     *        is {@code 2}, and so on; must be {@code 1} or larger
      *        and equal to or less than the number of columns in this rowset
      * @return a Java input stream that delivers the database column value
      * as a stream of two byte Unicode characters.  If the value is SQL NULL
@@ -1432,30 +1436,30 @@
 
     /**
      * Retrieves the value of the designated column in the current row of this
-     * <code>CachedRowSetImpl</code> object as a <code>java.io.InputStream</code>
+     * {@code CachedRowSetImpl} object as a {@code java.io.InputStream}
      * object.
      * <P>
      * A column value can be retrieved as a stream of uninterpreted bytes
      * and then read in chunks from the stream.  This method is particularly
-     * suitable for retrieving large <code>LONGVARBINARY</code> values.
+     * suitable for retrieving large {@code LONGVARBINARY} values.
      *
      * <P><B>Note:</B> All the data in the returned stream must be
      * read prior to getting the value of any other column. The next
      * call to a get method implicitly closes the stream. Also, a
-     * stream may return <code>0</code> for
-     * <code>CachedRowSetImpl.available()</code> whether there is data
+     * stream may return {@code 0} for
+     * {@code CachedRowSetImpl.available()} whether there is data
      * available or not.
      *
-     * @param columnIndex the first column is <code>1</code>, the second
-     * is <code>2</code>, and so on; must be <code>1</code> or larger
+     * @param columnIndex the first column is {@code 1}, the second
+     * is {@code 2}, and so on; must be {@code 1} or larger
      * and equal to or less than the number of columns in the rowset
      * @return a Java input stream that delivers the database column value
-     * as a stream of uninterpreted bytes.  If the value is SQL <code>NULL</code>
-     * then the result is <code>null</code>.
+     * as a stream of uninterpreted bytes.  If the value is SQL {@code NULL}
+     * then the result is {@code null}.
      * @throws SQLException if (1) the given column index is out of bounds,
      * (2) the cursor is not on one of this rowset's rows or its
      * insert row, or (3) the designated column does not store an
-     * SQL <code>BINARY, VARBINARY</code> or <code><b>LONGVARBINARY</b></code>
+     * SQL {@code BINARY, VARBINARY} or <b>{@code LONGVARBINARY}</b>.
      * The bold type indicates the SQL type that this method is recommened
      * to retrieve.
      * @see #getBinaryStream(String)
@@ -1472,19 +1476,19 @@
 
     /**
      * Retrieves the value stored in the designated column
-     * of the current row as a <code>String</code> object.
-     *
-     * @param columnName a <code>String</code> object giving the SQL name of
-     *        a column in this <code>CachedRowSetImpl</code> object
-     * @return the column value; if the value is SQL <code>NULL</code>,
-     *         the result is <code>null</code>
+     * of the current row as a {@code String} object.
+     *
+     * @param columnName a {@code String} object giving the SQL name of
+     *        a column in this {@code CachedRowSetImpl} object
+     * @return the column value; if the value is SQL {@code NULL},
+     *         the result is {@code null}
      * @throws SQLException if (1) the given column name is not the name of
-     * a column in this rowset, (2) the cursor is not on one of
-     * this rowset's rows or its insert row, or (3) the designated
-     * column does not store an SQL <code>TINYINT, SMALLINT, INTEGER
-     * BIGINT, REAL, FLOAT, DOUBLE, DECIMAL, NUMERIC, BIT, <b>CHAR</b>,
-     * <b>VARCHAR</b></code> or <code>LONGVARCHAR<</code> value. The bold SQL type
-     * designates the recommended return type.
+     *         a column in this rowset, (2) the cursor is not on one of
+     *         this rowset's rows or its insert row, or (3) the designated
+     *         column does not store an SQL {@code TINYINT, SMALLINT, INTEGER,
+     *         BIGINT, REAL, FLOAT, DOUBLE, DECIMAL, NUMERIC, BIT,}
+     *         <b>{@code CHAR, VARCHAR}</b> or {@code LONGVARCHAR} value.
+     *         The bold SQL type designates the recommended return type.
      */
     public String getString(String columnName) throws SQLException {
         throw new UnsupportedOperationException();
@@ -1492,17 +1496,17 @@
 
     /**
      * Retrieves the value stored in the designated column
-     * of the current row as a <code>boolean</code> value.
-     *
-     * @param columnName a <code>String</code> object giving the SQL name of
-     *        a column in this <code>CachedRowSetImpl</code> object
-     * @return the column value as a <code>boolean</code> in the Java programming
-     *        language; if the value is SQL <code>NULL</code>,
-     *        the result is <code>false</code>
+     * of the current row as a {@code boolean} value.
+     *
+     * @param columnName a {@code String} object giving the SQL name of
+     *        a column in this {@code CachedRowSetImpl} object
+     * @return the column value as a {@code boolean} in the Java programming
+     *        language; if the value is SQL {@code NULL},
+     *        the result is {@code false}
      * @throws SQLException if (1) the given column name is not the name of
-     *            a column in this rowset, (2) the cursor is not on one of
-     *            this rowset's rows or its insert row, or (3) the designated
-     *            column does not store an SQL <code>BOOLEAN</code> value
+     *         a column in this rowset, (2) the cursor is not on one of
+     *         this rowset's rows or its insert row, or (3) the designated
+     *         column does not store an SQL {@code BOOLEAN} value
      * @see #getBoolean(int)
      */
     public boolean getBoolean(String columnName) throws SQLException {
@@ -1511,19 +1515,19 @@
 
     /**
      * Retrieves the value stored in the designated column
-     * of the current row as a <code>byte</code> value.
-     *
-     * @param columnName a <code>String</code> object giving the SQL name of
-     *        a column in this <code>CachedRowSetImpl</code> object
-     * @return the column value as a <code>byte</code> in the Java programming
-     * language; if the value is SQL <code>NULL</code>, the result is <code>0</code>
+     * of the current row as a {@code byte} value.
+     *
+     * @param columnName a {@code String} object giving the SQL name of
+     *        a column in this {@code CachedRowSetImpl} object
+     * @return the column value as a {@code byte} in the Java programming
+     * language; if the value is SQL {@code NULL}, the result is {@code 0}
      * @throws SQLException if (1) the given column name is not the name of
-     * a column in this rowset, (2) the cursor is not on one of
-     * this rowset's rows or its insert row, or (3) the designated
-     * column does not store an SQL <code><B>TINYINT</B>, SMALLINT, INTEGER,
-     * BIGINT, REAL, FLOAT, DOUBLE, DECIMAL, NUMERIC, BIT, CHAR,
-     * VARCHAR</code> or <code>LONGVARCHAR</code> value. The
-     * bold type designates the recommended return type
+     *         a column in this rowset, (2) the cursor is not on one of
+     *         this rowset's rows or its insert row, or (3) the designated
+     *         column does not store an SQL <b>{@code TINYINT}</b>,
+     *         {@code SMALLINT, INTEGER, BIGINT, REAL, FLOAT, DOUBLE,
+     *         DECIMAL, NUMERIC, BIT, CHAR, VARCHAR} or {@code LONGVARCHAR}
+     *         value. The bold type designates the recommended return type.
      */
     public byte getByte(String columnName) throws SQLException {
         throw new UnsupportedOperationException();
@@ -1531,19 +1535,20 @@
 
     /**
      * Retrieves the value stored in the designated column
-     * of the current row as a <code>short</code> value.
-     *
-     * @param columnName a <code>String</code> object giving the SQL name of
-     *        a column in this <code>CachedRowSetImpl</code> object
-     * @return the column value; if the value is SQL <code>NULL</code>,
-     *         the result is <code>0</code>
+     * of the current row as a {@code short} value.
+     *
+     * @param columnName a {@code String} object giving the SQL name of
+     *        a column in this {@code CachedRowSetImpl} object
+     * @return the column value; if the value is SQL {@code NULL},
+     *         the result is {@code 0}
      * @throws SQLException if (1) the given column name is not the name of
-     * a column in this rowset, (2) the cursor is not on one of
-     * this rowset's rows or its insert row, or (3) the designated
-     * column does not store an SQL <code>TINYINT, <b>SMALLINT</b>, INTEGER
-     * BIGINT, REAL, FLOAT, DOUBLE, DECIMAL, NUMERIC, BIT, CHAR,
-     * VARCHAR</code> or <code>LONGVARCHAR</code> value. The bold SQL type
-     * designates the recommended return type.
+     *         a column in this rowset, (2) the cursor is not on one of
+     *         this rowset's rows or its insert row, or (3) the designated
+     *         column does not store an SQL {@code TINYINT,}
+     *         <b>{@code SMALLINT}</b>, {@code INTEGER,
+     *         BIGINT, REAL, FLOAT, DOUBLE, DECIMAL, NUMERIC, BIT, CHAR,
+     *         VARCHAR} or {@code LONGVARCHAR} value. The bold SQL type
+     *         designates the recommended return type.
      * @see #getShort(int)
      */
     public short getShort(String columnName) throws SQLException {
@@ -1552,20 +1557,21 @@
 
     /**
      * Retrieves the value stored in the designated column
-     * of the current row as an <code>int</code> value.
-     *
-     * @param columnName a <code>String</code> object giving the SQL name of
-     *        a column in this <code>CachedRowSetImpl</code> object
-     * @return the column value; if the value is SQL <code>NULL</code>,
-     *         the result is <code>0</code>
+     * of the current row as an {@code int} value.
+     *
+     * @param columnName a {@code String} object giving the SQL name of
+     *        a column in this {@code CachedRowSetImpl} object
+     * @return the column value; if the value is SQL {@code NULL},
+     *         the result is {@code 0}
      * @throws SQLException if (1) the given column name is not the name
-     * of a column in this rowset,
-     * (2) the cursor is not on one of this rowset's rows or its
-     * insert row, or (3) the designated column does not store an
-     * SQL <code>TINYINT, SMALLINT, <b>INTEGER</b>, BIGINT, REAL
-     * FLOAT, DOUBLE, DECIMAL, NUMERIC, BIT, CHAR, VARCHAR</code>
-     * or <code>LONGVARCHAR</code> value. The bold SQL type designates the
-     * recommended return type.
+     *         of a column in this rowset,
+     *         (2) the cursor is not on one of this rowset's rows or its
+     *         insert row, or (3) the designated column does not store an
+     *         SQL {@code TINYINT, SMALLINT,} <b>{@code INTEGER}</b>,
+     *         {@code BIGINT, REAL, FLOAT, DOUBLE, DECIMAL,
+     *         NUMERIC, BIT, CHAR, VARCHAR} or {@code LONGVARCHAR} value.
+     *         The bold SQL type designates the
+     *         recommended return type.
      */
     public int getInt(String columnName) throws SQLException {
         throw new UnsupportedOperationException();
@@ -1573,19 +1579,19 @@
 
     /**
      * Retrieves the value stored in the designated column
-     * of the current row as a <code>long</code> value.
-     *
-     * @param columnName a <code>String</code> object giving the SQL name of
-     *        a column in this <code>CachedRowSetImpl</code> object
-     * @return the column value; if the value is SQL <code>NULL</code>,
-     *         the result is <code>0</code>
+     * of the current row as a {@code long} value.
+     *
+     * @param columnName a {@code String} object giving the SQL name of
+     *        a column in this {@code CachedRowSetImpl} object
+     * @return the column value; if the value is SQL {@code NULL},
+     *         the result is {@code 0}
      * @throws SQLException if (1) the given column name is not the name of
-     * a column in this rowset, (2) the cursor is not on one of
-     * this rowset's rows or its insert row, or (3) the designated
-     * column does not store an SQL <code>TINYINT, SMALLINT, INTEGER
-     * <b>BIGINT</b>, REAL, FLOAT, DOUBLE, DECIMAL, NUMERIC, BIT, CHAR,
-     * VARCHAR</code> or <code>LONGVARCHAR</code> value. The bold SQL type
-     * designates the recommended return type.
+     *         a column in this rowset, (2) the cursor is not on one of
+     *         this rowset's rows or its insert row, or (3) the designated
+     *         column does not store an SQL {@code TINYINT, SMALLINT, INTEGER,}
+     *         <b>{@code BIGINT}</b>, {@code REAL, FLOAT, DOUBLE, DECIMAL,
+     *         NUMERIC, BIT, CHAR, VARCHAR} or {@code LONGVARCHAR} value.
+     *         The bold SQL type designates the recommended return type.
      * @see #getLong(int)
      */
     public long getLong(String columnName) throws SQLException {
@@ -1594,19 +1600,19 @@
 
     /**
      * Retrieves the value stored in the designated column
-     * of the current row as a <code>float</code> value.
-     *
-     * @param columnName a <code>String</code> object giving the SQL name of
-     *        a column in this <code>CachedRowSetImpl</code> object
-     * @return the column value; if the value is SQL <code>NULL</code>,
-     *         the result is <code>0</code>
+     * of the current row as a {@code float} value.
+     *
+     * @param columnName a {@code String} object giving the SQL name of
+     *        a column in this {@code CachedRowSetImpl} object
+     * @return the column value; if the value is SQL {@code NULL},
+     *         the result is {@code 0}
      * @throws SQLException if (1) the given column name is not the name of
-     * a column in this rowset, (2) the cursor is not on one of
-     * this rowset's rows or its insert row, or (3) the designated
-     * column does not store an SQL <code>TINYINT, SMALLINT, INTEGER
-     * BIGINT, <b>REAL</b>, FLOAT, DOUBLE, DECIMAL, NUMERIC, BIT, CHAR,
-     * VARCHAR</code> or <code>LONGVARCHAR</code> value. The bold SQL type
-     * designates the recommended return type.
+     *         a column in this rowset, (2) the cursor is not on one of
+     *         this rowset's rows or its insert row, or (3) the designated
+     *         column does not store an SQL {@code TINYINT, SMALLINT, INTEGER,
+     *         BIGINT,} <b>{@code REAL}</b>, {@code FLOAT, DOUBLE, DECIMAL,
+     *         NUMERIC, BIT, CHAR, VARCHAR} or {@code LONGVARCHAR} value.
+     *         The bold SQL type designates the recommended return type.
      * @see #getFloat(String)
      */
     public float getFloat(String columnName) throws SQLException {
@@ -1615,20 +1621,20 @@
 
     /**
      * Retrieves the value stored in the designated column
-     * of the current row of this <code>CachedRowSetImpl</code> object
-     * as a <code>double</code> value.
-     *
-     * @param columnName a <code>String</code> object giving the SQL name of
-     *        a column in this <code>CachedRowSetImpl</code> object
-     * @return the column value; if the value is SQL <code>NULL</code>,
-     *         the result is <code>0</code>
+     * of the current row of this {@code CachedRowSetImpl} object
+     * as a {@code double} value.
+     *
+     * @param columnName a {@code String} object giving the SQL name of
+     *        a column in this {@code CachedRowSetImpl} object
+     * @return the column value; if the value is SQL {@code NULL},
+     *         the result is {@code 0}
      * @throws SQLException if (1) the given column name is not the name of
-     * a column in this rowset, (2) the cursor is not on one of
-     * this rowset's rows or its insert row, or (3) the designated
-     * column does not store an SQL <code>TINYINT, SMALLINT, INTEGER
-     * BIGINT, REAL, <b>FLOAT</b>, <b>DOUBLE</b>, DECIMAL, NUMERIC, BIT, CHAR,
-     * VARCHAR</code> or <code>LONGVARCHAR</code> value. The bold SQL type
-     * designates the recommended return types.
+     *         a column in this rowset, (2) the cursor is not on one of
+     *         this rowset's rows or its insert row, or (3) the designated
+     *         column does not store an SQL {@code TINYINT, SMALLINT, INTEGER,
+     *         BIGINT, REAL,} <b>{@code FLOAT, DOUBLE}</b>, {@code DECIMAL,
+     *         NUMERIC, BIT, CHAR, VARCHAR} or {@code LONGVARCHAR} value.
+     *         The bold SQL type designates the recommended return types.
      * @see #getDouble(int)
      */
     public double getDouble(String columnName) throws SQLException {
@@ -1637,22 +1643,22 @@
 
     /**
      * Retrieves the value stored in the designated column
-     * of the current row as a <code>java.math.BigDecimal</code> object.
-     *
-     * @param columnName a <code>String</code> object giving the SQL name of
-     *        a column in this <code>CachedRowSetImpl</code> object
+     * of the current row as a {@code java.math.BigDecimal} object.
+     *
+     * @param columnName a {@code String} object giving the SQL name of
+     *        a column in this {@code CachedRowSetImpl} object
      * @param scale the number of digits to the right of the decimal point
-     * @return a java.math.BugDecimal object with <code><i>scale</i></code>
-     * number of digits to the right of the decimal point.
+     * @return a java.math.BugDecimal object with <i>{@code scale}</i>
+     *         number of digits to the right of the decimal point.
      * @throws SQLException if (1) the given column name is not the name of
-     * a column in this rowset, (2) the cursor is not on one of
-     * this rowset's rows or its insert row, or (3) the designated
-     * column does not store an SQL <code>TINYINT, SMALLINT, INTEGER
-     * BIGINT, REAL, FLOAT, DOUBLE, <b>DECIMAL</b>, <b>NUMERIC</b>, BIT CHAR,
-     * VARCHAR</code> or <code>LONGVARCHAR</code> value. The bold SQL type
-     * designates the recommended return type that this method is used to
-     * retrieve.
-     * @deprecated Use the <code>getBigDecimal(String columnName)</code>
+     *         a column in this rowset, (2) the cursor is not on one of
+     *         this rowset's rows or its insert row, or (3) the designated
+     *         column does not store an SQL {@code TINYINT, SMALLINT, INTEGER,
+     *         BIGINT, REAL, FLOAT, DOUBLE,} <b>{@code DECIMAL, NUMERIC}</b>,
+     *         {@code BIT, CHAR, VARCHAR} or {@code LONGVARCHAR} value.
+     *         The bold SQL type designates the recommended return type
+     *         that this method is used to retrieve.
+     * @deprecated Use the {@code getBigDecimal(String columnName)}
      *             method instead
      */
     @Deprecated
@@ -1662,19 +1668,19 @@
 
     /**
      * Retrieves the value stored in the designated column
-     * of the current row as a <code>byte</code> array.
+     * of the current row as a {@code byte} array.
      * The bytes represent the raw values returned by the driver.
      *
-     * @param columnName a <code>String</code> object giving the SQL name of
-     *        a column in this <code>CachedRowSetImpl</code> object
-     * @return the column value as a <code>byte</code> array in the Java programming
-     * language; if the value is SQL <code>NULL</code>, the result is <code>null</code>
+     * @param columnName a {@code String} object giving the SQL name of
+     *        a column in this {@code CachedRowSetImpl} object
+     * @return the column value as a {@code byte} array in the Java programming
+     *         language; if the value is SQL {@code NULL}, the result is {@code null}
      * @throws SQLException if (1) the given column name is not the name of
-     * a column in this rowset, (2) the cursor is not on one of
-     * this rowset's rows or its insert row, or (3) the designated
-     * column does not store an SQL <code><b>BINARY</b>, <b>VARBINARY</b>
-     * </code> or <code>LONGVARBINARY</code> values
-     * The bold SQL type designates the recommended return type.
+     *         a column in this rowset, (2) the cursor is not on one of
+     *         this rowset's rows or its insert row, or (3) the designated
+     *         column does not store an SQL <b>{@code BINARY, VARBINARY}</b>
+     *         or {@code LONGVARBINARY} values.
+     *         The bold SQL type designates the recommended return type.
      * @see #getBytes(int)
      */
     public byte[] getBytes(String columnName) throws SQLException {
@@ -1683,17 +1689,17 @@
 
     /**
      * Retrieves the value stored in the designated column
-     * of the current row as a <code>java.sql.Date</code> object.
-     *
-     * @param columnName a <code>String</code> object giving the SQL name of
-     *        a column in this <code>CachedRowSetImpl</code> object
-     * @return the column value; if the value is SQL <code>NULL</code>,
-     *         the result is <code>null</code>
+     * of the current row as a {@code java.sql.Date} object.
+     *
+     * @param columnName a {@code String} object giving the SQL name of
+     *        a column in this {@code CachedRowSetImpl} object
+     * @return the column value; if the value is SQL {@code NULL},
+     *         the result is {@code null}
      * @throws SQLException if (1) the given column name is not the name of
      *            a column in this rowset, (2) the cursor is not on one of
      *            this rowset's rows or its insert row, or (3) the designated
-     *            column does not store an SQL <code>DATE</code> or
-     *            <code>TIMESTAMP</code> value
+     *            column does not store an SQL {@code DATE} or
+     *            {@code TIMESTAMP} value
      */
     public java.sql.Date getDate(String columnName) throws SQLException {
         throw new UnsupportedOperationException();
@@ -1701,12 +1707,12 @@
 
     /**
      * Retrieves the value stored in the designated column
-     * of the current row as a <code>java.sql.Time</code> object.
-     *
-     * @param columnName a <code>String</code> object giving the SQL name of
-     *        a column in this <code>CachedRowSetImpl</code> object
-     * @return the column value; if the value is SQL <code>NULL</code>,
-     *         the result is <code>null</code>
+     * of the current row as a {@code java.sql.Time} object.
+     *
+     * @param columnName a {@code String} object giving the SQL name of
+     *        a column in this {@code CachedRowSetImpl} object
+     * @return the column value; if the value is SQL {@code NULL},
+     *         the result is {@code null}
      * @throws SQLException if the given column name does not match one of
      *            this rowset's column names or the cursor is not on one of
      *            this rowset's rows or its insert row
@@ -1717,12 +1723,12 @@
 
     /**
      * Retrieves the value stored in the designated column
-     * of the current row as a <code>java.sql.Timestamp</code> object.
-     *
-     * @param columnName a <code>String</code> object giving the SQL name of
-     *        a column in this <code>CachedRowSetImpl</code> object
-     * @return the column value; if the value is SQL <code>NULL</code>,
-     *         the result is <code>null</code>
+     * of the current row as a {@code java.sql.Timestamp} object.
+     *
+     * @param columnName a {@code String} object giving the SQL name of
+     *        a column in this {@code CachedRowSetImpl} object
+     * @return the column value; if the value is SQL {@code NULL},
+     *         the result is {@code null}
      * @throws SQLException if the given column name does not match one of
      *            this rowset's column names or the cursor is not on one of
      *            this rowset's rows or its insert row
@@ -1733,32 +1739,32 @@
 
     /**
      * Retrieves the value of the designated column in the current row of this
-     * <code>CachedRowSetImpl</code> object as a <code>java.io.InputStream</code>
+     * {@code CachedRowSetImpl} object as a {@code java.io.InputStream}
      * object.
      *
      * A column value can be retrieved as a stream of ASCII characters
      * and then read in chunks from the stream. This method is particularly
-     * suitable for retrieving large <code>LONGVARCHAR</code> values. The
-     * <code>SyncProvider</code> will rely on the JDBC driver to do any necessary
+     * suitable for retrieving large {@code LONGVARCHAR} values. The
+     * {@code SyncProvider} will rely on the JDBC driver to do any necessary
      * conversion from the database format into ASCII format.
      *
      * <P><B>Note:</B> All the data in the returned stream must
      * be read prior to getting the value of any other column. The
-     * next call to a <code>getXXX</code> method implicitly closes the stream.
-     *
-     * @param columnName a <code>String</code> object giving the SQL name of
-     *        a column in this <code>CachedRowSetImpl</code> object
+     * next call to a {@code getXXX} method implicitly closes the stream.
+     *
+     * @param columnName a {@code String} object giving the SQL name of
+     *        a column in this {@code CachedRowSetImpl} object
      * @return a Java input stream that delivers the database column value
      *         as a stream of one-byte ASCII characters.  If the value is SQL
-     *         <code>NULL</code>, the result is <code>null</code>.
+     *         {@code NULL}, the result is {@code null}.
      * @throws SQLException if (1) the given column name is not the name of
-     * a column in this rowset
-     * (2) the cursor is not on one of this rowset's rows or its
-     * insert row, or (3) the designated column does not store an
-     * SQL <code>CHAR, VARCHAR</code>, <code><b>LONGVARCHAR</b></code>
-     * <code>BINARY, VARBINARY</code> or <code>LONGVARBINARY</code> value. The
-     * bold SQL type designates the recommended return types that this method is
-     * used to retrieve.
+     *         a column in this rowset
+     *         (2) the cursor is not on one of this rowset's rows or its
+     *         insert row, or (3) the designated column does not store an
+     *         SQL {@code CHAR, VARCHAR}, <b>{@code LONGVARCHAR}</b>,
+     *         {@code BINARY, VARBINARY} or {@code LONGVARBINARY} value. The
+     *         bold SQL type designates the recommended return types
+     *         that this method is used to retrieve.
      * @see #getAsciiStream(int)
      */
     public java.io.InputStream getAsciiStream(String columnName) throws SQLException {
@@ -1769,23 +1775,23 @@
     /**
      * A column value can be retrieved as a stream of Unicode characters
      * and then read in chunks from the stream.  This method is particularly
-     * suitable for retrieving large <code>LONGVARCHAR</code> values.
+     * suitable for retrieving large {@code LONGVARCHAR} values.
      * The JDBC driver will do any necessary conversion from the database
      * format into Unicode.
      *
      * <P><B>Note:</B> All the data in the returned stream must
      * be read prior to getting the value of any other column. The
-     * next call to a <code>getXXX</code> method implicitly closes the stream.
-     *
-     * @param columnName a <code>String</code> object giving the SQL name of
-     *        a column in this <code>CachedRowSetImpl</code> object
+     * next call to a {@code getXXX} method implicitly closes the stream.
+     *
+     * @param columnName a {@code String} object giving the SQL name of
+     *        a column in this {@code CachedRowSetImpl} object
      * @return a Java input stream that delivers the database column value
      *         as a stream of two-byte Unicode characters.  If the value is
-     *         SQL <code>NULL</code>, the result is <code>null</code>.
+     *         SQL {@code NULL}, the result is {@code null}.
      * @throws SQLException if the given column name does not match one of
      *            this rowset's column names or the cursor is not on one of
      *            this rowset's rows or its insert row
-     * @deprecated use the method <code>getCharacterStream</code> instead
+     * @deprecated use the method {@code getCharacterStream} instead
      */
     @Deprecated
     public java.io.InputStream getUnicodeStream(String columnName) throws SQLException {
@@ -1794,30 +1800,30 @@
 
     /**
      * Retrieves the value of the designated column in the current row of this
-     * <code>CachedRowSetImpl</code> object as a <code>java.io.InputStream</code>
+     * {@code CachedRowSetImpl} object as a {@code java.io.InputStream}
      * object.
      * <P>
      * A column value can be retrieved as a stream of uninterpreted bytes
      * and then read in chunks from the stream.  This method is particularly
-     * suitable for retrieving large <code>LONGVARBINARY</code> values.
+     * suitable for retrieving large {@code LONGVARBINARY} values.
      *
      * <P><B>Note:</B> All the data in the returned stream must be
      * read prior to getting the value of any other column. The next
      * call to a get method implicitly closes the stream. Also, a
-     * stream may return <code>0</code> for <code>CachedRowSetImpl.available()</code>
+     * stream may return {@code 0} for {@code CachedRowSetImpl.available()}
      * whether there is data available or not.
      *
-     * @param columnName a <code>String</code> object giving the SQL name of
-     *        a column in this <code>CachedRowSetImpl</code> object
+     * @param columnName a {@code String} object giving the SQL name of
+     *        a column in this {@code CachedRowSetImpl} object
      * @return a Java input stream that delivers the database column value
      *         as a stream of uninterpreted bytes.  If the value is SQL
-     *         <code>NULL</code>, the result is <code>null</code>.
+     *         {@code NULL}, the result is {@code null}.
      * @throws SQLException if (1) the given column name is unknown,
-     * (2) the cursor is not on one of this rowset's rows or its
-     * insert row, or (3) the designated column does not store an
-     * SQL <code>BINARY, VARBINARY</code> or <code><b>LONGVARBINARY</b></code>
-     * The bold type indicates the SQL type that this method is recommened
-     * to retrieve.
+     *         (2) the cursor is not on one of this rowset's rows or its
+     *         insert row, or (3) the designated column does not store an
+     *         SQL {@code BINARY, VARBINARY} or <b>{@code LONGVARBINARY}</b>
+     *         The bold type indicates the SQL type that this method is recommened
+     *         to retrieve.
      * @see #getBinaryStream(int)
      *
      */
@@ -1831,17 +1837,17 @@
     //=====================================================================
 
     /**
-     * The first warning reported by calls on this <code>CachedRowSetImpl</code>
-     * object is returned. Subsequent <code>CachedRowSetImpl</code> warnings will
-     * be chained to this <code>SQLWarning</code>.
+     * The first warning reported by calls on this {@code CachedRowSetImpl}
+     * object is returned. Subsequent {@code CachedRowSetImpl} warnings will
+     * be chained to this {@code SQLWarning}.
      *
      * <P>The warning chain is automatically cleared each time a new
      * row is read.
      *
      * <P><B>Note:</B> This warning chain only covers warnings caused
-     * by <code>ResultSet</code> methods.  Any warning caused by statement
+     * by {@code ResultSet} methods.  Any warning caused by statement
      * methods (such as reading OUT parameters) will be chained on the
-     * <code>Statement</code> object.
+     * {@code Statement} object.
      *
      * @return the first SQLWarning or null
      */
@@ -1850,10 +1856,10 @@
     }
 
     /**
-     * Clears all the warnings reporeted for the <code>CachedRowSetImpl</code>
-     * object. After a call to this method, the <code>getWarnings</code> method
-     * returns <code>null</code> until a new warning is reported for this
-     * <code>CachedRowSetImpl</code> object.
+     * Clears all the warnings reporeted for the {@code CachedRowSetImpl}
+     * object. After a call to this method, the {@code getWarnings} method
+     * returns {@code null} until a new warning is reported for this
+     * {@code CachedRowSetImpl} object.
      */
     public void clearWarnings() {
        throw new UnsupportedOperationException();
@@ -1861,25 +1867,25 @@
 
     /**
      * Retrieves the name of the SQL cursor used by this
-     * <code>CachedRowSetImpl</code> object.
+     * {@code CachedRowSetImpl} object.
      *
      * <P>In SQL, a result table is retrieved through a cursor that is
-     * named. The current row of a <code>ResultSet</code> can be updated or deleted
+     * named. The current row of a {@code ResultSet} can be updated or deleted
      * using a positioned update/delete statement that references the
      * cursor name. To ensure that the cursor has the proper isolation
-     * level to support an update operation, the cursor's <code>SELECT</code>
-     * statement should be of the form <code>select for update</code>.
-     * If the <code>for update</code> clause
+     * level to support an update operation, the cursor's {@code SELECT}
+     * statement should be of the form {@code select for update}.
+     * If the {@code for update} clause
      * is omitted, positioned updates may fail.
      *
      * <P>JDBC supports this SQL feature by providing the name of the
-     * SQL cursor used by a <code>ResultSet</code> object. The current row
+     * SQL cursor used by a {@code ResultSet} object. The current row
      * of a result set is also the current row of this SQL cursor.
      *
      * <P><B>Note:</B> If positioned updates are not supported, an
-     * <code>SQLException</code> is thrown.
-     *
-     * @return the SQL cursor name for this <code>CachedRowSetImpl</code> object's
+     * {@code SQLException} is thrown.
+     *
+     * @return the SQL cursor name for this {@code CachedRowSetImpl} object's
      *         cursor
      * @throws SQLException if an error occurs
      */
@@ -1888,12 +1894,12 @@
     }
 
     /**
-     * Retrieves a <code>ResultSetMetaData</code> object instance that
-     * contains information about the <code>CachedRowSet</code> object.
+     * Retrieves a {@code ResultSetMetaData} object instance that
+     * contains information about the {@code CachedRowSet} object.
      * However, applications should cast the returned object to a
-     * <code>RowSetMetaData</code> interface implementation. In the
+     * {@code RowSetMetaData} interface implementation. In the
      * reference implementation, this cast can be done on the
-     * <code>RowSetMetaDataImpl</code> class.
+     * {@code RowSetMetaDataImpl} class.
      * <P>
      * For example:
      * <pre>
@@ -1907,10 +1913,10 @@
      * crs.setMetaData(metaData);
      * </pre>
      *
-     * @return the <code>ResultSetMetaData</code> object that describes this
-     *         <code>CachedRowSetImpl</code> object's columns
+     * @return the {@code ResultSetMetaData} object that describes this
+     *         {@code CachedRowSetImpl} object's columns
      * @throws SQLException if an error occurs in generating the RowSet
-     * meta data; or if the <code>CachedRowSetImpl</code> is empty.
+     * meta data; or if the {@code CachedRowSetImpl} is empty.
      * @see javax.sql.RowSetMetaData
      */
     public ResultSetMetaData getMetaData() throws SQLException {
@@ -1920,10 +1926,10 @@
 
     /**
      * Retrieves the value of the designated column in the current row
-     * of this <code>CachedRowSetImpl</code> object as an
-     * <code>Object</code> value.
+     * of this {@code CachedRowSetImpl} object as an
+     * {@code Object} value.
      * <P>
-     * The type of the <code>Object</code> will be the default
+     * The type of the {@code Object} will be the default
      * Java object type corresponding to the column's SQL type,
      * following the mapping for built-in types specified in the JDBC 3.0
      * specification.
@@ -1931,23 +1937,23 @@
      * This method may also be used to read datatabase-specific
      * abstract data types.
      * <P>
-     * This implementation of the method <code>getObject</code> extends its
+     * This implementation of the method {@code getObject} extends its
      * behavior so that it gets the attributes of an SQL structured type
-     * as an array of <code>Object</code> values.  This method also custom
+     * as an array of {@code Object} values.  This method also custom
      * maps SQL user-defined types to classes in the Java programming language.
      * When the specified column contains
      * a structured or distinct value, the behavior of this method is as
-     * if it were a call to the method <code>getObject(columnIndex,
-     * this.getStatement().getConnection().getTypeMap())</code>.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
+     * if it were a call to the method {@code getObject(columnIndex,
+     * this.getStatement().getConnection().getTypeMap())}.
+     *
+     * @param columnIndex the first column is {@code 1}, the second
+     *        is {@code 2}, and so on; must be {@code 1} or larger
      *        and equal to or less than the number of columns in the rowset
-     * @return a <code>java.lang.Object</code> holding the column value;
-     *         if the value is SQL <code>NULL</code>, the result is <code>null</code>
+     * @return a {@code java.lang.Object} holding the column value;
+     *         if the value is SQL {@code NULL}, the result is {@code null}
      * @throws SQLException if the given column index is out of bounds,
      *            the cursor is not on a valid row, or there is a problem getting
-     *            the <code>Class</code> object for a custom mapping
+     *            the {@code Class} object for a custom mapping
      * @see #getObject(String)
      */
     public Object getObject(int columnIndex) throws SQLException {
@@ -1956,10 +1962,10 @@
 
     /**
      * Retrieves the value of the designated column in the current row
-     * of this <code>CachedRowSetImpl</code> object as an
-     * <code>Object</code> value.
+     * of this {@code CachedRowSetImpl} object as an
+     * {@code Object} value.
      * <P>
-     * The type of the <code>Object</code> will be the default
+     * The type of the {@code Object} will be the default
      * Java object type corresponding to the column's SQL type,
      * following the mapping for built-in types specified in the JDBC 3.0
      * specification.
@@ -1967,23 +1973,23 @@
      * This method may also be used to read datatabase-specific
      * abstract data types.
      * <P>
-     * This implementation of the method <code>getObject</code> extends its
+     * This implementation of the method {@code getObject} extends its
      * behavior so that it gets the attributes of an SQL structured type
-     * as an array of <code>Object</code> values.  This method also custom
+     * as an array of {@code Object} values.  This method also custom
      * maps SQL user-defined types to classes
      * in the Java programming language. When the specified column contains
      * a structured or distinct value, the behavior of this method is as
-     * if it were a call to the method <code>getObject(columnIndex,
-     * this.getStatement().getConnection().getTypeMap())</code>.
-     *
-     * @param columnName a <code>String</code> object that must match the
+     * if it were a call to the method {@code getObject(columnIndex,
+     * this.getStatement().getConnection().getTypeMap())}.
+     *
+     * @param columnName a {@code String} object that must match the
      *        SQL name of a column in this rowset, ignoring case
-     * @return a <code>java.lang.Object</code> holding the column value;
-     *         if the value is SQL <code>NULL</code>, the result is <code>null</code>
+     * @return a {@code java.lang.Object} holding the column value;
+     *         if the value is SQL {@code NULL}, the result is {@code null}
      * @throws SQLException if (1) the given column name does not match one of
      *            this rowset's column names, (2) the cursor is not
      *            on a valid row, or (3) there is a problem getting
-     *            the <code>Class</code> object for a custom mapping
+     *            the {@code Class} object for a custom mapping
      * @see #getObject(int)
      */
     public Object getObject(String columnName) throws SQLException {
@@ -1993,10 +1999,10 @@
     //----------------------------------------------------------------
 
     /**
-     * Maps the given column name for one of this <code>CachedRowSetImpl</code>
+     * Maps the given column name for one of this {@code CachedRowSetImpl}
      * object's columns to its column number.
      *
-     * @param columnName a <code>String</code> object that must match the
+     * @param columnName a {@code String} object that must match the
      *        SQL name of a column in this rowset, ignoring case
      * @return the column index of the given column name
      * @throws SQLException if the given column name does not match one
@@ -2014,25 +2020,25 @@
 
     /**
      * Retrieves the value stored in the designated column
-     * of the current row as a <code>java.io.Reader</code> object.
+     * of the current row as a {@code java.io.Reader} object.
      *
      * <P><B>Note:</B> All the data in the returned stream must
      * be read prior to getting the value of any other column. The
-     * next call to a <code>getXXX</code> method implicitly closes the stream.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
+     * next call to a {@code getXXX} method implicitly closes the stream.
+     *
+     * @param columnIndex the first column is {@code 1}, the second
+     *        is {@code 2}, and so on; must be {@code 1} or larger
      *        and equal to or less than the number of columns in the rowset
      * @return a Java character stream that delivers the database column value
      * as a stream of two-byte unicode characters in a
-     * <code>java.io.Reader</code> object.  If the value is
-     * SQL <code>NULL</code>, the result is <code>null</code>.
+     * {@code java.io.Reader} object.  If the value is
+     * SQL {@code NULL}, the result is {@code null}.
      * @throws SQLException if (1) the given column index is out of bounds,
-     * (2) the cursor is not on one of this rowset's rows or its
-     * insert row, or (3) the designated column does not store an
-     * SQL <code>CHAR, VARCHAR, <b>LONGVARCHAR</b>, BINARY, VARBINARY</code> or
-     * <code>LONGVARBINARY</code> value.
-     * The bold SQL type designates the recommended return type.
+     *         (2) the cursor is not on one of this rowset's rows or its
+     *         insert row, or (3) the designated column does not store an
+     *         SQL {@code CHAR, VARCHAR,} <b>{@code LONGVARCHAR}</b>,
+     *         {@code BINARY, VARBINARY} or {@code LONGVARBINARY} value.
+     *         The bold SQL type designates the recommended return type.
      * @see #getCharacterStream(String)
      */
     public java.io.Reader getCharacterStream(int columnIndex) throws SQLException{
@@ -2041,23 +2047,24 @@
 
     /**
      * Retrieves the value stored in the designated column
-     * of the current row as a <code>java.io.Reader</code> object.
+     * of the current row as a {@code java.io.Reader} object.
      *
      * <P><B>Note:</B> All the data in the returned stream must
      * be read prior to getting the value of any other column. The
-     * next call to a <code>getXXX</code> method implicitly closes the stream.
-     *
-     * @param columnName a <code>String</code> object giving the SQL name of
-     *        a column in this <code>CachedRowSetImpl</code> object
+     * next call to a {@code getXXX} method implicitly closes the stream.
+     *
+     * @param columnName a {@code String} object giving the SQL name of
+     *        a column in this {@code CachedRowSetImpl} object
      * @return a Java input stream that delivers the database column value
      *         as a stream of two-byte Unicode characters.  If the value is
-     *         SQL <code>NULL</code>, the result is <code>null</code>.
+     *         SQL {@code NULL}, the result is {@code null}.
      * @throws SQLException if (1) the given column name is not the name of
-     * a column in this rowset, (2) the cursor is not on one of
-     * this rowset's rows or its insert row, or (3) the designated
-     * column does not store an SQL <code>CHAR, VARCHAR, <b>LONGVARCHAR</b>,
-     * BINARY, VARYBINARY</code> or <code>LONGVARBINARY</code> value.
-     * The bold SQL type designates the recommended return type.
+     *         a column in this rowset, (2) the cursor is not on one of
+     *         this rowset's rows or its insert row, or (3) the designated
+     *         column does not store an SQL {@code CHAR, VARCHAR,}
+     *         <b>{@code LONGVARCHAR}</b>,
+     *         {@code BINARY, VARYBINARY} or {@code LONGVARBINARY} value.
+     *         The bold SQL type designates the recommended return type.
      */
     public java.io.Reader getCharacterStream(String columnName) throws SQLException {
         throw new UnsupportedOperationException();
@@ -2065,21 +2072,22 @@
 
     /**
      * Retrieves the value of the designated column in the current row
-     * of this <code>CachedRowSetImpl</code> object as a
-     * <code>java.math.BigDecimal</code> object.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
+     * of this {@code CachedRowSetImpl} object as a
+     * {@code java.math.BigDecimal} object.
+     *
+     * @param columnIndex the first column is {@code 1}, the second
+     *        is {@code 2}, and so on; must be {@code 1} or larger
      *        and equal to or less than the number of columns in the rowset
-     * @return a <code>java.math.BigDecimal</code> value with full precision;
-     *         if the value is SQL <code>NULL</code>, the result is <code>null</code>
+     * @return a {@code java.math.BigDecimal} value with full precision;
+     *         if the value is SQL {@code NULL}, the result is {@code null}
      * @throws SQLException if (1) the given column index is out of bounds,
-     * (2) the cursor is not on one of this rowset's rows or its
-     * insert row, or (3) the designated column does not store an
-     * SQL <code>TINYINT, SMALLINT, INTEGER, BIGINT, REAL,
-     * FLOAT, DOUBLE, <b>DECIMAL</b>, <b>NUMERIC</b>, BIT, CHAR, VARCHAR</code>
-     * or <code>LONGVARCHAR</code> value. The bold SQL type designates the
-     * recommended return types that this method is used to retrieve.
+     *         (2) the cursor is not on one of this rowset's rows or its
+     *         insert row, or (3) the designated column does not store an
+     *         SQL {@code TINYINT, SMALLINT, INTEGER, BIGINT, REAL,
+     *         FLOAT, DOUBLE,} <b>{@code DECIMAL, NUMERIC}</b>,
+     *         {@code BIT, CHAR, VARCHAR} or {@code LONGVARCHAR} value.
+     *         The bold SQL type designates the
+     *         recommended return types that this method is used to retrieve.
      * @see #getBigDecimal(String)
      */
     public BigDecimal getBigDecimal(int columnIndex) throws SQLException {
@@ -2088,21 +2096,21 @@
 
     /**
      * Retrieves the value of the designated column in the current row
-     * of this <code>CachedRowSetImpl</code> object as a
-     * <code>java.math.BigDecimal</code> object.
-     *
-     * @param columnName a <code>String</code> object that must match the
+     * of this {@code CachedRowSetImpl} object as a
+     * {@code java.math.BigDecimal} object.
+     *
+     * @param columnName a {@code String} object that must match the
      *        SQL name of a column in this rowset, ignoring case
-     * @return a <code>java.math.BigDecimal</code> value with full precision;
-     *         if the value is SQL <code>NULL</code>, the result is <code>null</code>
+     * @return a {@code java.math.BigDecimal} value with full precision;
+     *         if the value is SQL {@code NULL}, the result is {@code null}
      * @throws SQLException if (1) the given column name is not the name of
-     * a column in this rowset, (2) the cursor is not on one of
-     * this rowset's rows or its insert row, or (3) the designated
-     * column does not store an SQL <code>TINYINT, SMALLINT, INTEGER
-     * BIGINT, REAL, FLOAT, DOUBLE, <b>DECIMAL</b>, <b>NUMERIC</b>, BIT CHAR,
-     * VARCHAR</code> or <code>LONGVARCHAR</code> value. The bold SQL type
-     * designates the recommended return type that this method is used to
-     * retrieve
+     *         a column in this rowset, (2) the cursor is not on one of
+     *         this rowset's rows or its insert row, or (3) the designated
+     *         column does not store an SQL {@code TINYINT, SMALLINT, INTEGER,
+     *         BIGINT, REAL, FLOAT, DOUBLE,} <b>{@code DECIMAL, NUMERIC}</b>,
+     *         {@code BIT, CHAR, VARCHAR} or {@code LONGVARCHAR} value.
+     *         The bold SQL type designates the recommended return type
+     *         that this method is used to retrieve.
      * @see #getBigDecimal(int)
      */
     public BigDecimal getBigDecimal(String columnName) throws SQLException {
@@ -2114,7 +2122,7 @@
     //---------------------------------------------------------------------
 
     /**
-     * Returns the number of rows in this <code>CachedRowSetImpl</code> object.
+     * Returns the number of rows in this {@code CachedRowSetImpl} object.
      *
      * @return number of rows in the rowset
      */
@@ -2124,10 +2132,10 @@
 
     /**
      * Indicates whether the cursor is before the first row in this
-     * <code>CachedRowSetImpl</code> object.
-     *
-     * @return <code>true</code> if the cursor is before the first row;
-     *         <code>false</code> otherwise or if the rowset contains no rows
+     * {@code CachedRowSetImpl} object.
+     *
+     * @return {@code true} if the cursor is before the first row;
+     *         {@code false} otherwise or if the rowset contains no rows
      * @throws SQLException if an error occurs
      */
     public boolean isBeforeFirst() throws SQLException {
@@ -2136,10 +2144,10 @@
 
     /**
      * Indicates whether the cursor is after the last row in this
-     * <code>CachedRowSetImpl</code> object.
-     *
-     * @return <code>true</code> if the cursor is after the last row;
-     *         <code>false</code> otherwise or if the rowset contains no rows
+     * {@code CachedRowSetImpl} object.
+     *
+     * @return {@code true} if the cursor is after the last row;
+     *         {@code false} otherwise or if the rowset contains no rows
      * @throws SQLException if an error occurs
      */
     public boolean isAfterLast() throws SQLException {
@@ -2148,10 +2156,10 @@
 
     /**
      * Indicates whether the cursor is on the first row in this
-     * <code>CachedRowSetImpl</code> object.
-     *
-     * @return <code>true</code> if the cursor is on the first row;
-     *         <code>false</code> otherwise or if the rowset contains no rows
+     * {@code CachedRowSetImpl} object.
+     *
+     * @return {@code true} if the cursor is on the first row;
+     *         {@code false} otherwise or if the rowset contains no rows
      * @throws SQLException if an error occurs
      */
     public boolean isFirst() throws SQLException {
@@ -2160,14 +2168,14 @@
 
     /**
      * Indicates whether the cursor is on the last row in this
-     * <code>CachedRowSetImpl</code> object.
+     * {@code CachedRowSetImpl} object.
      * <P>
-     * Note: Calling the method <code>isLast</code> may be expensive
+     * Note: Calling the method {@code isLast} may be expensive
      * because the JDBC driver might need to fetch ahead one row in order
      * to determine whether the current row is the last row in this rowset.
      *
-     * @return <code>true</code> if the cursor is on the last row;
-     *         <code>false</code> otherwise or if this rowset contains no rows
+     * @return {@code true} if the cursor is on the last row;
+     *         {@code false} otherwise or if this rowset contains no rows
      * @throws SQLException if an error occurs
      */
     public boolean isLast() throws SQLException {
@@ -2175,19 +2183,19 @@
     }
 
     /**
-     * Moves this <code>CachedRowSetImpl</code> object's cursor to the front of
+     * Moves this {@code CachedRowSetImpl} object's cursor to the front of
      * the rowset, just before the first row. This method has no effect if
      * this rowset contains no rows.
      *
      * @throws SQLException if an error occurs or the type of this rowset
-     *            is <code>ResultSet.TYPE_FORWARD_ONLY</code>
+     *            is {@code ResultSet.TYPE_FORWARD_ONLY}
      */
     public void beforeFirst() throws SQLException {
         throw new UnsupportedOperationException();
     }
 
     /**
-     * Moves this <code>CachedRowSetImpl</code> object's cursor to the end of
+     * Moves this {@code CachedRowSetImpl} object's cursor to the end of
      * the rowset, just after the last row. This method has no effect if
      * this rowset contains no rows.
      *
@@ -2198,34 +2206,34 @@
     }
 
     /**
-     * Moves this <code>CachedRowSetImpl</code> object's cursor to the first row
-     * and returns <code>true</code> if the operation was successful.  This
+     * Moves this {@code CachedRowSetImpl} object's cursor to the first row
+     * and returns {@code true} if the operation was successful.  This
      * method also notifies registered listeners that the cursor has moved.
      *
-     * @return <code>true</code> if the cursor is on a valid row;
-     *         <code>false</code> otherwise or if there are no rows in this
-     *         <code>CachedRowSetImpl</code> object
+     * @return {@code true} if the cursor is on a valid row;
+     *         {@code false} otherwise or if there are no rows in this
+     *         {@code CachedRowSetImpl} object
      * @throws SQLException if the type of this rowset
-     *            is <code>ResultSet.TYPE_FORWARD_ONLY</code>
+     *            is {@code ResultSet.TYPE_FORWARD_ONLY}
      */
     public boolean first() throws SQLException {
         throw new UnsupportedOperationException();
     }
 
     /**
-     * Moves this <code>CachedRowSetImpl</code> object's cursor to the first
-     * row and returns <code>true</code> if the operation is successful.
+     * Moves this {@code CachedRowSetImpl} object's cursor to the first
+     * row and returns {@code true} if the operation is successful.
      * <P>
-     * This method is called internally by the methods <code>first</code>,
-     * <code>isFirst</code>, and <code>absolute</code>.
-     * It in turn calls the method <code>internalNext</code> in order to
+     * This method is called internally by the methods {@code first},
+     * {@code isFirst}, and {@code absolute}.
+     * It in turn calls the method {@code internalNext} in order to
      * handle the case where the first row is a deleted row that is not visible.
      * <p>
      * This is a implementation only method and is not required as a standard
-     * implementation of the <code>CachedRowSet</code> interface.
-     *
-     * @return <code>true</code> if the cursor moved to the first row;
-     *         <code>false</code> otherwise
+     * implementation of the {@code CachedRowSet} interface.
+     *
+     * @return {@code true} if the cursor moved to the first row;
+     *         {@code false} otherwise
      * @throws SQLException if an error occurs
      */
     protected boolean internalFirst() throws SQLException {
@@ -2233,35 +2241,35 @@
     }
 
     /**
-     * Moves this <code>CachedRowSetImpl</code> object's cursor to the last row
-     * and returns <code>true</code> if the operation was successful.  This
+     * Moves this {@code CachedRowSetImpl} object's cursor to the last row
+     * and returns {@code true} if the operation was successful.  This
      * method also notifies registered listeners that the cursor has moved.
      *
-     * @return <code>true</code> if the cursor is on a valid row;
-     *         <code>false</code> otherwise or if there are no rows in this
-     *         <code>CachedRowSetImpl</code> object
+     * @return {@code true} if the cursor is on a valid row;
+     *         {@code false} otherwise or if there are no rows in this
+     *         {@code CachedRowSetImpl} object
      * @throws SQLException if the type of this rowset
-     *            is <code>ResultSet.TYPE_FORWARD_ONLY</code>
+     *            is {@code ResultSet.TYPE_FORWARD_ONLY}
      */
     public boolean last() throws SQLException {
         throw new UnsupportedOperationException();
     }
 
     /**
-     * Moves this <code>CachedRowSetImpl</code> object's cursor to the last
-     * row and returns <code>true</code> if the operation is successful.
+     * Moves this {@code CachedRowSetImpl} object's cursor to the last
+     * row and returns {@code true} if the operation is successful.
      * <P>
-     * This method is called internally by the method <code>last</code>
+     * This method is called internally by the method {@code last}
      * when rows have been deleted and the deletions are not visible.
-     * The method <code>internalLast</code> handles the case where the
+     * The method {@code internalLast} handles the case where the
      * last row is a deleted row that is not visible by in turn calling
-     * the method <code>internalPrevious</code>.
+     * the method {@code internalPrevious}.
      * <p>
      * This is a implementation only method and is not required as a standard
-     * implementation of the <code>CachedRowSet</code> interface.
-     *
-     * @return <code>true</code> if the cursor moved to the last row;
-     *         <code>false</code> otherwise
+     * implementation of the {@code CachedRowSet} interface.
+     *
+     * @return {@code true} if the cursor moved to the last row;
+     *         {@code false} otherwise
      * @throws SQLException if an error occurs
      */
     protected boolean internalLast() throws SQLException {
@@ -2269,12 +2277,12 @@
     }
 
     /**
-     * Returns the number of the current row in this <code>CachedRowSetImpl</code>
+     * Returns the number of the current row in this {@code CachedRowSetImpl}
      * object. The first row is number 1, the second number 2, and so on.
      *
-     * @return the number of the current row;  <code>0</code> if there is no
+     * @return the number of the current row;  {@code 0} if there is no
      *         current row
-     * @throws SQLException if an error occurs; or if the <code>CacheRowSetImpl</code>
+     * @throws SQLException if an error occurs; or if the {@code CacheRowSetImpl}
      *         is empty
      */
     public int getRow() throws SQLException {
@@ -2282,51 +2290,51 @@
     }
 
     /**
-     * Moves this <code>CachedRowSetImpl</code> object's cursor to the row number
+     * Moves this {@code CachedRowSetImpl} object's cursor to the row number
      * specified.
      *
      * <p>If the number is positive, the cursor moves to an absolute row with
      * respect to the beginning of the rowset.  The first row is row 1, the second
      * is row 2, and so on.  For example, the following command, in which
-     * <code>crs</code> is a <code>CachedRowSetImpl</code> object, moves the cursor
+     * {@code crs} is a {@code CachedRowSetImpl} object, moves the cursor
      * to the fourth row, starting from the beginning of the rowset.
-     * <PRE><code>
+     * <PRE>{@code
      *
      *    crs.absolute(4);
      *
-     * </code> </PRE>
+     * }</PRE>
      * <P>
      * If the number is negative, the cursor moves to an absolute row position
      * with respect to the end of the rowset.  For example, calling
-     * <code>absolute(-1)</code> positions the cursor on the last row,
-     * <code>absolute(-2)</code> moves it on the next-to-last row, and so on.
-     * If the <code>CachedRowSetImpl</code> object <code>crs</code> has five rows,
+     * {@code absolute(-1)} positions the cursor on the last row,
+     * {@code absolute(-2)} moves it on the next-to-last row, and so on.
+     * If the {@code CachedRowSetImpl} object {@code crs} has five rows,
      * the following command moves the cursor to the fourth-to-last row, which
      * in the case of a  rowset with five rows, is also the second row, counting
      * from the beginning.
-     * <PRE><code>
+     * <PRE>{@code
      *
      *    crs.absolute(-4);
      *
-     * </code> </PRE>
+     * }</PRE>
      *
      * If the number specified is larger than the number of rows, the cursor
      * will move to the position after the last row. If the number specified
      * would move the cursor one or more rows before the first row, the cursor
      * moves to the position before the first row.
      * <P>
-     * Note: Calling <code>absolute(1)</code> is the same as calling the
-     * method <code>first()</code>.  Calling <code>absolute(-1)</code> is the
-     * same as calling <code>last()</code>.
+     * Note: Calling {@code absolute(1)} is the same as calling the
+     * method {@code first()}.  Calling {@code absolute(-1)} is the
+     * same as calling {@code last()}.
      *
      * @param row a positive number to indicate the row, starting row numbering from
-     *        the first row, which is <code>1</code>; a negative number to indicate
+     *        the first row, which is {@code 1}; a negative number to indicate
      *        the row, starting row numbering from the last row, which is
-     *        <code>-1</code>; it must not be <code>0</code>
-     * @return <code>true</code> if the cursor is on the rowset; <code>false</code>
+     *        {@code -1}; it must not be {@code 0}
+     * @return {@code true} if the cursor is on the rowset; {@code false}
      *         otherwise
-     * @throws SQLException if the given cursor position is <code>0</code> or the
-     *            type of this rowset is <code>ResultSet.TYPE_FORWARD_ONLY</code>
+     * @throws SQLException if the given cursor position is {@code 0} or the
+     *            type of this rowset is {@code ResultSet.TYPE_FORWARD_ONLY}
      */
     public boolean absolute( int row ) throws SQLException {
         throw new UnsupportedOperationException();
@@ -2340,80 +2348,80 @@
      * If the number is positive, the cursor moves the specified number of
      * rows toward the end of the rowset, starting at the current row.
      * For example, the following command, in which
-     * <code>crs</code> is a <code>CachedRowSetImpl</code> object with 100 rows,
+     * {@code crs} is a {@code CachedRowSetImpl} object with 100 rows,
      * moves the cursor forward four rows from the current row.  If the
      * current row is 50, the cursor would move to row 54.
-     * <PRE><code>
+     * <PRE>{@code
      *
      *    crs.relative(4);
      *
-     * </code> </PRE>
+     * }</PRE>
      * <P>
      * If the number is negative, the cursor moves back toward the beginning
      * the specified number of rows, starting at the current row.
      * For example, calling the method
-     * <code>absolute(-1)</code> positions the cursor on the last row,
-     * <code>absolute(-2)</code> moves it on the next-to-last row, and so on.
-     * If the <code>CachedRowSetImpl</code> object <code>crs</code> has five rows,
+     * {@code absolute(-1)} positions the cursor on the last row,
+     * {@code absolute(-2)} moves it on the next-to-last row, and so on.
+     * If the {@code CachedRowSetImpl} object {@code crs} has five rows,
      * the following command moves the cursor to the fourth-to-last row, which
      * in the case of a  rowset with five rows, is also the second row
      * from the beginning.
-     * <PRE><code>
+     * <PRE>{@code
      *
      *    crs.absolute(-4);
      *
-     * </code> </PRE>
+     * }</PRE>
      *
      * If the number specified is larger than the number of rows, the cursor
      * will move to the position after the last row. If the number specified
      * would move the cursor one or more rows before the first row, the cursor
      * moves to the position before the first row. In both cases, this method
-     * throws an <code>SQLException</code>.
+     * throws an {@code SQLException}.
      * <P>
-     * Note: Calling <code>absolute(1)</code> is the same as calling the
-     * method <code>first()</code>.  Calling <code>absolute(-1)</code> is the
-     * same as calling <code>last()</code>.  Calling <code>relative(0)</code>
+     * Note: Calling {@code absolute(1)} is the same as calling the
+     * method {@code first()}.  Calling {@code absolute(-1)} is the
+     * same as calling {@code last()}.  Calling {@code relative(0)}
      * is valid, but it does not change the cursor position.
      *
-     * @param rows an <code>int</code> indicating the number of rows to move
+     * @param rows an {@code int} indicating the number of rows to move
      *             the cursor, starting at the current row; a positive number
      *             moves the cursor forward; a negative number moves the cursor
      *             backward; must not move the cursor past the valid
      *             rows
-     * @return <code>true</code> if the cursor is on a row in this
-     *         <code>CachedRowSetImpl</code> object; <code>false</code>
+     * @return {@code true} if the cursor is on a row in this
+     *         {@code CachedRowSetImpl} object; {@code false}
      *         otherwise
      * @throws SQLException if there are no rows in this rowset, the cursor is
      *         positioned either before the first row or after the last row, or
-     *         the rowset is type <code>ResultSet.TYPE_FORWARD_ONLY</code>
+     *         the rowset is type {@code ResultSet.TYPE_FORWARD_ONLY}
      */
     public boolean relative(int rows) throws SQLException {
         throw new UnsupportedOperationException();
     }
 
     /**
-     * Moves this <code>CachedRowSetImpl</code> object's cursor to the
-     * previous row and returns <code>true</code> if the cursor is on
-     * a valid row or <code>false</code> if it is not.
+     * Moves this {@code CachedRowSetImpl} object's cursor to the
+     * previous row and returns {@code true} if the cursor is on
+     * a valid row or {@code false} if it is not.
      * This method also notifies all listeners registered with this
-     * <code>CachedRowSetImpl</code> object that its cursor has moved.
+     * {@code CachedRowSetImpl} object that its cursor has moved.
      * <P>
-     * Note: calling the method <code>previous()</code> is not the same
-     * as calling the method <code>relative(-1)</code>.  This is true
-     * because it is possible to call <code>previous()</code> from the insert
+     * Note: calling the method {@code previous()} is not the same
+     * as calling the method {@code relative(-1)}.  This is true
+     * because it is possible to call {@code previous()} from the insert
      * row, from after the last row, or from the current row, whereas
-     * <code>relative</code> may only be called from the current row.
+     * {@code relative} may only be called from the current row.
      * <P>
-     * The method <code>previous</code> may used in a <code>while</code>
+     * The method {@code previous} may used in a {@code while}
      * loop to iterate through a rowset starting after the last row
-     * and moving toward the beginning. The loop ends when <code>previous</code>
-     * returns <code>false</code>, meaning that there are no more rows.
+     * and moving toward the beginning. The loop ends when {@code previous}
+     * returns {@code false}, meaning that there are no more rows.
      * For example, the following code fragment retrieves all the data in
-     * the <code>CachedRowSetImpl</code> object <code>crs</code>, which has
+     * the {@code CachedRowSetImpl} object {@code crs}, which has
      * three columns.  Note that the cursor must initially be positioned
      * after the last row so that the first call to the method
-     * <code>previous</code> places the cursor on the last line.
-     * <PRE> <code>
+     * {@code previous} places the cursor on the last line.
+     * <PRE>{@code
      *
      *     crs.afterLast();
      *     while (previous()) {
@@ -2423,33 +2431,33 @@
      *         System.out.println(name + "   " + age + "   " + ssn);
      *     }
      *
-     * </code> </PRE>
-     * This method throws an <code>SQLException</code> if the cursor is not
+     * }</PRE>
+     * This method throws an {@code SQLException} if the cursor is not
      * on a row in the rowset, before the first row, or after the last row.
      *
-     * @return <code>true</code> if the cursor is on a valid row;
-     *         <code>false</code> if it is before the first row or after the
+     * @return {@code true} if the cursor is on a valid row;
+     *         {@code false} if it is before the first row or after the
      *         last row
      * @throws SQLException if the cursor is not on a valid position or the
-     *           type of this rowset is <code>ResultSet.TYPE_FORWARD_ONLY</code>
+     *           type of this rowset is {@code ResultSet.TYPE_FORWARD_ONLY}
      */
     public boolean previous() throws SQLException {
         throw new UnsupportedOperationException();
     }
 
     /**
-     * Moves the cursor to the previous row in this <code>CachedRowSetImpl</code>
+     * Moves the cursor to the previous row in this {@code CachedRowSetImpl}
      * object, skipping past deleted rows that are not visible; returns
-     * <code>true</code> if the cursor is on a row in this rowset and
-     * <code>false</code> when the cursor goes before the first row.
+     * {@code true} if the cursor is on a row in this rowset and
+     * {@code false} when the cursor goes before the first row.
      * <P>
-     * This method is called internally by the method <code>previous</code>.
+     * This method is called internally by the method {@code previous}.
      * <P>
      * This is a implementation only method and is not required as a standard
-     * implementation of the <code>CachedRowSet</code> interface.
-     *
-     * @return <code>true</code> if the cursor is on a row in this rowset;
-     *         <code>false</code> when the cursor reaches the position before
+     * implementation of the {@code CachedRowSet} interface.
+     *
+     * @return {@code true} if the cursor is on a row in this rowset;
+     *         {@code false} when the cursor reaches the position before
      *         the first row
      * @throws SQLException if an error occurs
      */
@@ -2463,14 +2471,14 @@
     //---------------------------------------------------------------------
 
     /**
-     * Indicates whether the current row of this <code>CachedRowSetImpl</code>
+     * Indicates whether the current row of this {@code CachedRowSetImpl}
      * object has been updated.  The value returned
-     * depends on whether this rowset can detect updates: <code>false</code>
+     * depends on whether this rowset can detect updates: {@code false}
      * will always be returned if it does not detect updates.
      *
-     * @return <code>true</code> if the row has been visibly updated
+     * @return {@code true} if the row has been visibly updated
      *         by the owner or another and updates are detected;
-     *         <code>false</code> otherwise
+     *         {@code false} otherwise
      * @throws SQLException if the cursor is on the insert row or not
      *            not on a valid row
      *
@@ -2482,13 +2490,13 @@
 
     /**
      * Indicates whether the designated column of the current row of
-     * this <code>CachedRowSetImpl</code> object has been updated. The
+     * this {@code CachedRowSetImpl} object has been updated. The
      * value returned depends on whether this rowset can detcted updates:
-     * <code>false</code> will always be returned if it does not detect updates.
+     * {@code false} will always be returned if it does not detect updates.
      *
      * @param idx the index identifier of the column that may be have been updated.
-     * @return <code>true</code> is the designated column has been updated
-     * and the rowset detects updates; <code>false</code> if the rowset has not
+     * @return {@code true} is the designated column has been updated
+     * and the rowset detects updates; {@code false} if the rowset has not
      * been updated or the rowset does not detect updates
      * @throws SQLException if the cursor is on the insert row or not
      *          on a valid row
@@ -2500,14 +2508,14 @@
 
     /**
      * Indicates whether the designated column of the current row of
-     * this <code>CachedRowSetImpl</code> object has been updated. The
+     * this {@code CachedRowSetImpl} object has been updated. The
      * value returned depends on whether this rowset can detcted updates:
-     * <code>false</code> will always be returned if it does not detect updates.
-     *
-     * @param columnName the <code>String</code> column name column that may be have
+     * {@code false} will always be returned if it does not detect updates.
+     *
+     * @param columnName the {@code String} column name column that may be have
      * been updated.
-     * @return <code>true</code> is the designated column has been updated
-     * and the rowset detects updates; <code>false</code> if the rowset has not
+     * @return {@code true} is the designated column has been updated
+     * and the rowset detects updates; {@code false} if the rowset has not
      * been updated or the rowset does not detect updates
      * @throws SQLException if the cursor is on the insert row or not
      *          on a valid row
@@ -2521,8 +2529,8 @@
      * Indicates whether the current row has been inserted.  The value returned
      * depends on whether or not the rowset can detect visible inserts.
      *
-     * @return <code>true</code> if a row has been inserted and inserts are detected;
-     *         <code>false</code> otherwise
+     * @return {@code true} if a row has been inserted and inserts are detected;
+     *         {@code false} otherwise
      * @throws SQLException if the cursor is on the insert row or not
      *            not on a valid row
      *
@@ -2536,12 +2544,12 @@
      * Indicates whether the current row has been deleted.  A deleted row
      * may leave a visible "hole" in a rowset.  This method can be used to
      * detect such holes if the rowset can detect deletions. This method
-     * will always return <code>false</code> if this rowset cannot detect
+     * will always return {@code false} if this rowset cannot detect
      * deletions.
      *
-     * @return <code>true</code> if (1)the current row is blank, indicating that
+     * @return {@code true} if (1)the current row is blank, indicating that
      *         the row has been deleted, and (2)deletions are detected;
-     *         <code>false</code> otherwise
+     *         {@code false} otherwise
      * @throws SQLException if the cursor is on a valid row in this rowset
      * @see DatabaseMetaData#deletesAreDetected
      */
@@ -2551,8 +2559,8 @@
 
     /**
      * Sets the designated nullable column in the current row or the
-     * insert row of this <code>CachedRowSetImpl</code> object with
-     * <code>null</code> value.
+     * insert row of this {@code CachedRowSetImpl} object with
+     * {@code null} value.
      * <P>
      * This method updates a column value in the current row or the insert
      * row of this rowset; however, another method must be called to complete
@@ -2565,15 +2573,15 @@
      * <P>
      * In order to propagate updates in this rowset to the underlying
      * data source, an application must call the method {@link #acceptChanges}
-     * after it calls either <code>updateRow</code> or <code>insertRow</code>.
-     *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
+     * after it calls either {@code updateRow} or {@code insertRow}.
+     *
+     * @param columnIndex the first column is {@code 1}, the second
+     *        is {@code 2}, and so on; must be {@code 1} or larger
      *        and equal to or less than the number of columns in this rowset
      * @throws SQLException if (1) the given column index is out of bounds,
      *            (2) the cursor is not on one of this rowset's rows or its
      *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
+     *            {@code ResultSet.CONCUR_READ_ONLY}
      */
     public void updateNull(int columnIndex) throws SQLException {
         throw new UnsupportedOperationException();
@@ -2581,8 +2589,8 @@
 
     /**
      * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>boolean</code> value.
+     * row of this {@code CachedRowSetImpl} object with the given
+     * {@code boolean} value.
      * <P>
      * This method updates a column value in the current row or the insert
      * row of this rowset, but it does not update the database.
@@ -2593,14 +2601,14 @@
      * and the database. Both of these methods must be called before the
      * cursor moves to another row.
      *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
+     * @param columnIndex the first column is {@code 1}, the second
+     *        is {@code 2}, and so on; must be {@code 1} or larger
      *        and equal to or less than the number of columns in this rowset
      * @param x the new column value
      * @throws SQLException if (1) the given column index is out of bounds,
      *            (2) the cursor is not on one of this rowset's rows or its
      *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
+     *            {@code ResultSet.CONCUR_READ_ONLY}
      */
     public void updateBoolean(int columnIndex, boolean x) throws SQLException {
         throw new UnsupportedOperationException();
@@ -2608,8 +2616,8 @@
 
     /**
      * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>byte</code> value.
+     * row of this {@code CachedRowSetImpl} object with the given
+     * {@code byte} value.
      * <P>
      * This method updates a column value in the current row or the insert
      * row of this rowset, but it does not update the database.
@@ -2620,14 +2628,14 @@
      * and the database. Both of these methods must be called before the
      * cursor moves to another row.
      *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
+     * @param columnIndex the first column is {@code 1}, the second
+     *        is {@code 2}, and so on; must be {@code 1} or larger
      *        and equal to or less than the number of columns in this rowset
      * @param x the new column value
      * @throws SQLException if (1) the given column index is out of bounds,
      *            (2) the cursor is not on one of this rowset's rows or its
      *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
+     *            {@code ResultSet.CONCUR_READ_ONLY}
      */
     public void updateByte(int columnIndex, byte x) throws SQLException {
         throw new UnsupportedOperationException();
@@ -2635,8 +2643,8 @@
 
     /**
      * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>short</code> value.
+     * row of this {@code CachedRowSetImpl} object with the given
+     * {@code short} value.
      * <P>
      * This method updates a column value in the current row or the insert
      * row of this rowset, but it does not update the database.
@@ -2647,14 +2655,14 @@
      * and the database. Both of these methods must be called before the
      * cursor moves to another row.
      *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
+     * @param columnIndex the first column is {@code 1}, the second
+     *        is {@code 2}, and so on; must be {@code 1} or larger
      *        and equal to or less than the number of columns in this rowset
      * @param x the new column value
      * @throws SQLException if (1) the given column index is out of bounds,
      *            (2) the cursor is not on one of this rowset's rows or its
      *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
+     *            {@code ResultSet.CONCUR_READ_ONLY}
      */
     public void updateShort(int columnIndex, short x) throws SQLException {
         throw new UnsupportedOperationException();
@@ -2662,8 +2670,8 @@
 
     /**
      * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>int</code> value.
+     * row of this {@code CachedRowSetImpl} object with the given
+     * {@code int} value.
      * <P>
      * This method updates a column value in the current row or the insert
      * row of this rowset, but it does not update the database.
@@ -2674,14 +2682,14 @@
      * and the database. Both of these methods must be called before the
      * cursor moves to another row.
      *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
+     * @param columnIndex the first column is {@code 1}, the second
+     *        is {@code 2}, and so on; must be {@code 1} or larger
      *        and equal to or less than the number of columns in this rowset
      * @param x the new column value
      * @throws SQLException if (1) the given column index is out of bounds,
      *            (2) the cursor is not on one of this rowset's rows or its
      *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
+     *            {@code ResultSet.CONCUR_READ_ONLY}
      */
     public void updateInt(int columnIndex, int x) throws SQLException {
         throw new UnsupportedOperationException();
@@ -2689,8 +2697,8 @@
 
     /**
      * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>long</code> value.
+     * row of this {@code CachedRowSetImpl} object with the given
+     * {@code long} value.
      * <P>
      * This method updates a column value in the current row or the insert
      * row of this rowset, but it does not update the database.
@@ -2701,14 +2709,14 @@
      * and the database. Both of these methods must be called before the
      * cursor moves to another row.
      *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
+     * @param columnIndex the first column is {@code 1}, the second
+     *        is {@code 2}, and so on; must be {@code 1} or larger
      *        and equal to or less than the number of columns in this rowset
      * @param x the new column value
      * @throws SQLException if (1) the given column index is out of bounds,
      *            (2) the cursor is not on one of this rowset's rows or its
      *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
+     *            {@code ResultSet.CONCUR_READ_ONLY}
      */
     public void updateLong(int columnIndex, long x) throws SQLException {
        throw new UnsupportedOperationException();
@@ -2717,8 +2725,8 @@
 
     /**
      * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>float</code> value.
+     * row of this {@code CachedRowSetImpl} object with the given
+     * {@code float} value.
      * <P>
      * This method updates a column value in the current row or the insert
      * row of this rowset, but it does not update the database.
@@ -2729,14 +2737,14 @@
      * and the database. Both of these methods must be called before the
      * cursor moves to another row.
      *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
+     * @param columnIndex the first column is {@code 1}, the second
+     *        is {@code 2}, and so on; must be {@code 1} or larger
      *        and equal to or less than the number of columns in this rowset
      * @param x the new column value
      * @throws SQLException if (1) the given column index is out of bounds,
      *            (2) the cursor is not on one of this rowset's rows or its
      *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
+     *            {@code ResultSet.CONCUR_READ_ONLY}
      */
     public void updateFloat(int columnIndex, float x) throws SQLException {
         throw new UnsupportedOperationException();
@@ -2744,8 +2752,8 @@
 
     /**
      * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>double</code> value.
+     * row of this {@code CachedRowSetImpl} object with the given
+     * {@code double} value.
      *
      * This method updates a column value in either the current row or
      * the insert row of this rowset, but it does not update the
@@ -2756,14 +2764,14 @@
      * and the database. Both of these methods must be called before the
      * cursor moves to another row.
      *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
+     * @param columnIndex the first column is {@code 1}, the second
+     *        is {@code 2}, and so on; must be {@code 1} or larger
      *        and equal to or less than the number of columns in this rowset
      * @param x the new column value
      * @throws SQLException if (1) the given column index is out of bounds,
      *            (2) the cursor is not on one of this rowset's rows or its
      *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
+     *            {@code ResultSet.CONCUR_READ_ONLY}
      */
     public void updateDouble(int columnIndex, double x) throws SQLException {
         throw new UnsupportedOperationException();
@@ -2771,8 +2779,8 @@
 
     /**
      * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>java.math.BigDecimal</code> object.
+     * row of this {@code CachedRowSetImpl} object with the given
+     * {@code java.math.BigDecimal} object.
      * <P>
      * This method updates a column value in the current row or the insert
      * row of this rowset, but it does not update the database.
@@ -2783,14 +2791,14 @@
      * and the database. Both of these methods must be called before the
      * cursor moves to another row.
      *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
+     * @param columnIndex the first column is {@code 1}, the second
+     *        is {@code 2}, and so on; must be {@code 1} or larger
      *        and equal to or less than the number of columns in this rowset
      * @param x the new column value
      * @throws SQLException if (1) the given column index is out of bounds,
      *            (2) the cursor is not on one of this rowset's rows or its
      *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
+     *            {@code ResultSet.CONCUR_READ_ONLY}
      */
     public void updateBigDecimal(int columnIndex, BigDecimal x) throws SQLException {
         throw new UnsupportedOperationException();
@@ -2798,8 +2806,8 @@
 
     /**
      * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>String</code> object.
+     * row of this {@code CachedRowSetImpl} object with the given
+     * {@code String} object.
      * <P>
      * This method updates a column value in either the current row or
      * the insert row of this rowset, but it does not update the
@@ -2810,17 +2818,17 @@
      * as inserted. Both of these methods must be called before the
      * cursor moves to another row.
      * <P>
-     * The method <code>acceptChanges</code> must be called if the
+     * The method {@code acceptChanges} must be called if the
      * updated values are to be written back to the underlying database.
      *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
+     * @param columnIndex the first column is {@code 1}, the second
+     *        is {@code 2}, and so on; must be {@code 1} or larger
      *        and equal to or less than the number of columns in this rowset
      * @param x the new column value
      * @throws SQLException if (1) the given column index is out of bounds,
      *            (2) the cursor is not on one of this rowset's rows or its
      *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
+     *            {@code ResultSet.CONCUR_READ_ONLY}
      */
     public void updateString(int columnIndex, String x) throws SQLException {
         throw new UnsupportedOperationException();
@@ -2828,8 +2836,8 @@
 
     /**
      * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>byte</code> array.
+     * row of this {@code CachedRowSetImpl} object with the given
+     * {@code byte} array.
      *
      * This method updates a column value in either the current row or
      * the insert row of this rowset, but it does not update the
@@ -2840,14 +2848,14 @@
      * and the database. Both of these methods must be called before the
      * cursor moves to another row.
      *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
+     * @param columnIndex the first column is {@code 1}, the second
+     *        is {@code 2}, and so on; must be {@code 1} or larger
      *        and equal to or less than the number of columns in this rowset
      * @param x the new column value
      * @throws SQLException if (1) the given column index is out of bounds,
      *            (2) the cursor is not on one of this rowset's rows or its
      *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
+     *            {@code ResultSet.CONCUR_READ_ONLY}
      */
     public void updateBytes(int columnIndex, byte x[]) throws SQLException {
         throw new UnsupportedOperationException();
@@ -2855,8 +2863,8 @@
 
     /**
      * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>Date</code> object.
+     * row of this {@code CachedRowSetImpl} object with the given
+     * {@code Date} object.
      *
      * This method updates a column value in either the current row or
      * the insert row of this rowset, but it does not update the
@@ -2867,15 +2875,15 @@
      * and the database. Both of these methods must be called before the
      * cursor moves to another row.
      *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
+     * @param columnIndex the first column is {@code 1}, the second
+     *        is {@code 2}, and so on; must be {@code 1} or larger
      *        and equal to or less than the number of columns in this rowset
      * @param x the new column value
      * @throws SQLException if (1) the given column index is out of bounds,
      *            (2) the cursor is not on one of this rowset's rows or its
      *            insert row, (3) the type of the designated column is not
-     *            an SQL <code>DATE</code> or <code>TIMESTAMP</code>, or
-     *            (4) this rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
+     *            an SQL {@code DATE} or {@code TIMESTAMP}, or
+     *            (4) this rowset is {@code ResultSet.CONCUR_READ_ONLY}
      */
     public void updateDate(int columnIndex, java.sql.Date x) throws SQLException {
         throw new UnsupportedOperationException();
@@ -2883,8 +2891,8 @@
 
     /**
      * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>Time</code> object.
+     * row of this {@code CachedRowSetImpl} object with the given
+     * {@code Time} object.
      *
      * This method updates a column value in either the current row or
      * the insert row of this rowset, but it does not update the
@@ -2895,15 +2903,15 @@
      * and the database. Both of these methods must be called before the
      * cursor moves to another row.
      *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
+     * @param columnIndex the first column is {@code 1}, the second
+     *        is {@code 2}, and so on; must be {@code 1} or larger
      *        and equal to or less than the number of columns in this rowset
      * @param x the new column value
      * @throws SQLException if (1) the given column index is out of bounds,
      *            (2) the cursor is not on one of this rowset's rows or its
      *            insert row, (3) the type of the designated column is not
-     *            an SQL <code>TIME</code> or <code>TIMESTAMP</code>, or
-     *            (4) this rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
+     *            an SQL {@code TIME} or {@code TIMESTAMP}, or
+     *            (4) this rowset is {@code ResultSet.CONCUR_READ_ONLY}
      */
     public void updateTime(int columnIndex, java.sql.Time x) throws SQLException {
        throw new UnsupportedOperationException();
@@ -2911,8 +2919,8 @@
 
     /**
      * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>Timestamp</code> object.
+     * row of this {@code CachedRowSetImpl} object with the given
+     * {@code Timestamp} object.
      *
      * This method updates a column value in either the current row or
      * the insert row of this rowset, but it does not update the
@@ -2923,16 +2931,16 @@
      * and the database. Both of these methods must be called before the
      * cursor moves to another row.
      *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
+     * @param columnIndex the first column is {@code 1}, the second
+     *        is {@code 2}, and so on; must be {@code 1} or larger
      *        and equal to or less than the number of columns in this rowset
      * @param x the new column value
      * @throws SQLException if (1) the given column index is out of bounds,
      *            (2) the cursor is not on one of this rowset's rows or its
      *            insert row, (3) the type of the designated column is not
-     *            an SQL <code>DATE</code>, <code>TIME</code>, or
-     *            <code>TIMESTAMP</code>, or (4) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
+     *            an SQL {@code DATE}, {@code TIME}, or
+     *            {@code TIMESTAMP}, or (4) this rowset is
+     *            {@code ResultSet.CONCUR_READ_ONLY}
      */
     public void updateTimestamp(int columnIndex, java.sql.Timestamp x) throws SQLException {
         throw new UnsupportedOperationException();
@@ -2940,7 +2948,7 @@
 
     /**
      * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
+     * row of this {@code CachedRowSetImpl} object with the given
      * ASCII stream value.
      * <P>
      * This method updates a column value in either the current row or
@@ -2952,8 +2960,8 @@
      * and the database. Both of these methods must be called before the
      * cursor moves to another row.
      *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
+     * @param columnIndex the first column is {@code 1}, the second
+     *        is {@code 2}, and so on; must be {@code 1} or larger
      *        and equal to or less than the number of columns in this rowset
      * @param x the new column value
      * @param length the number of one-byte ASCII characters in the stream
@@ -2965,8 +2973,8 @@
 
     /**
      * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>java.io.InputStream</code> object.
+     * row of this {@code CachedRowSetImpl} object with the given
+     * {@code java.io.InputStream} object.
      * <P>
      * This method updates a column value in either the current row or
      * the insert row of this rowset, but it does not update the
@@ -2977,17 +2985,17 @@
      * and the database. Both of these methods must be called before the
      * cursor moves to another row.
      *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
+     * @param columnIndex the first column is {@code 1}, the second
+     *        is {@code 2}, and so on; must be {@code 1} or larger
      *        and equal to or less than the number of columns in this rowset
-     * @param x the new column value; must be a <code>java.io.InputStream</code>
-     *          containing <code>BINARY</code>, <code>VARBINARY</code>, or
-     *          <code>LONGVARBINARY</code> data
+     * @param x the new column value; must be a {@code java.io.InputStream}
+     *          containing {@code BINARY}, {@code VARBINARY}, or
+     *          {@code LONGVARBINARY} data
      * @param length the length of the stream in bytes
      * @throws SQLException if (1) the given column index is out of bounds,
      *            (2) the cursor is not on one of this rowset's rows or its
      *            insert row, (3) the data in the stream is not binary, or
-     *            (4) this rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
+     *            (4) this rowset is {@code ResultSet.CONCUR_READ_ONLY}
      */
     public void updateBinaryStream(int columnIndex, java.io.InputStream x,int length) throws SQLException {
         throw new UnsupportedOperationException();
@@ -2995,8 +3003,8 @@
 
     /**
      * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>java.io.Reader</code> object.
+     * row of this {@code CachedRowSetImpl} object with the given
+     * {@code java.io.Reader} object.
      * <P>
      * This method updates a column value in either the current row or
      * the insert row of this rowset, but it does not update the
@@ -3007,19 +3015,19 @@
      * and the database. Both of these methods must be called before the
      * cursor moves to another row.
      *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
+     * @param columnIndex the first column is {@code 1}, the second
+     *        is {@code 2}, and so on; must be {@code 1} or larger
      *        and equal to or less than the number of columns in this rowset
-     * @param x the new column value; must be a <code>java.io.Reader</code>
-     *          containing <code>BINARY</code>, <code>VARBINARY</code>,
-     *          <code>LONGVARBINARY</code>, <code>CHAR</code>, <code>VARCHAR</code>,
-     *          or <code>LONGVARCHAR</code> data
+     * @param x the new column value; must be a {@code java.io.Reader}
+     *          containing {@code BINARY}, {@code VARBINARY},
+     *          {@code LONGVARBINARY}, {@code CHAR}, {@code VARCHAR},
+     *          or {@code LONGVARCHAR} data
      * @param length the length of the stream in characters
      * @throws SQLException if (1) the given column index is out of bounds,
      *            (2) the cursor is not on one of this rowset's rows or its
      *            insert row, (3) the data in the stream is not a binary or
      *            character type, or (4) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
+     *            {@code ResultSet.CONCUR_READ_ONLY}
      */
     public void updateCharacterStream(int columnIndex, java.io.Reader x, int length) throws SQLException {
         throw new UnsupportedOperationException();
@@ -3027,11 +3035,11 @@
 
     /**
      * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>Object</code> value.  The <code>scale</code> parameter indicates
+     * row of this {@code CachedRowSetImpl} object with the given
+     * {@code Object} value.  The {@code scale} parameter indicates
      * the number of digits to the right of the decimal point and is ignored
      * if the new column value is not a type that will be mapped to an SQL
-     * <code>DECIMAL</code> or <code>NUMERIC</code> value.
+     * {@code DECIMAL} or {@code NUMERIC} value.
      * <P>
      * This method updates a column value in either the current row or
      * the insert row of this rowset, but it does not update the
@@ -3042,16 +3050,16 @@
      * and the database. Both of these methods must be called before the
      * cursor moves to another row.
      *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
+     * @param columnIndex the first column is {@code 1}, the second
+     *        is {@code 2}, and so on; must be {@code 1} or larger
      *        and equal to or less than the number of columns in this rowset
      * @param x the new column value
      * @param scale the number of digits to the right of the decimal point (for
-     *              <code>DECIMAL</code> and <code>NUMERIC</code> types only)
+     *              {@code DECIMAL} and {@code NUMERIC} types only)
      * @throws SQLException if (1) the given column index is out of bounds,
      *            (2) the cursor is not on one of this rowset's rows or its
      *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
+     *            {@code ResultSet.CONCUR_READ_ONLY}
      */
     public void updateObject(int columnIndex, Object x, int scale) throws SQLException {
        throw new UnsupportedOperationException();
@@ -3059,8 +3067,8 @@
 
     /**
      * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>Object</code> value.
+     * row of this {@code CachedRowSetImpl} object with the given
+     * {@code Object} value.
      * <P>
      * This method updates a column value in either the current row or
      * the insert row of this rowset, but it does not update the
@@ -3071,14 +3079,14 @@
      * and the database. Both of these methods must be called before the
      * cursor moves to another row.
      *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
+     * @param columnIndex the first column is {@code 1}, the second
+     *        is {@code 2}, and so on; must be {@code 1} or larger
      *        and equal to or less than the number of columns in this rowset
      * @param x the new column value
      * @throws SQLException if (1) the given column index is out of bounds,
      *            (2) the cursor is not on one of this rowset's rows or its
      *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
+     *            {@code ResultSet.CONCUR_READ_ONLY}
      */
     public void updateObject(int columnIndex, Object x) throws SQLException {
         throw new UnsupportedOperationException();
@@ -3087,8 +3095,8 @@
 
     /**
      * Sets the designated nullable column in the current row or the
-     * insert row of this <code>CachedRowSetImpl</code> object with
-     * <code>null</code> value.
+     * insert row of this {@code CachedRowSetImpl} object with
+     * {@code null} value.
      * <P>
      * This method updates a column value in the current row or the insert
      * row of this rowset, but it does not update the database.
@@ -3098,12 +3106,12 @@
      * must be called, which will insert the new row into both this rowset
      * and the database.
      *
-     * @param columnName a <code>String</code> object that must match the
+     * @param columnName a {@code String} object that must match the
      *        SQL name of a column in this rowset, ignoring case
      * @throws SQLException if (1) the given column name does not match the
      *            name of a column in this rowset, (2) the cursor is not on
      *            one of this rowset's rows or its insert row, or (3) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
+     *            rowset is {@code ResultSet.CONCUR_READ_ONLY}
      */
     public void updateNull(String columnName) throws SQLException {
         throw new UnsupportedOperationException();
@@ -3111,8 +3119,8 @@
 
     /**
      * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>boolean</code> value.
+     * row of this {@code CachedRowSetImpl} object with the given
+     * {@code boolean} value.
      * <P>
      * This method updates a column value in the current row or the insert
      * row of this rowset, but it does not update the database.
@@ -3123,13 +3131,13 @@
      * and the database. Both of these methods must be called before the
      * cursor moves to another row.
      *
-     * @param columnName a <code>String</code> object that must match the
+     * @param columnName a {@code String} object that must match the
      *        SQL name of a column in this rowset, ignoring case
      * @param x the new column value
      * @throws SQLException if (1) the given column name does not match the
      *            name of a column in this rowset, (2) the cursor is not on
      *            one of this rowset's rows or its insert row, or (3) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
+     *            rowset is {@code ResultSet.CONCUR_READ_ONLY}
      */
     public void updateBoolean(String columnName, boolean x) throws SQLException {
        throw new UnsupportedOperationException();
@@ -3137,8 +3145,8 @@
 
     /**
      * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>byte</code> value.
+     * row of this {@code CachedRowSetImpl} object with the given
+     * {@code byte} value.
      * <P>
      * This method updates a column value in the current row or the insert
      * row of this rowset, but it does not update the database.
@@ -3149,13 +3157,13 @@
      * and the database. Both of these methods must be called before the
      * cursor moves to another row.
      *
-     * @param columnName a <code>String</code> object that must match the
+     * @param columnName a {@code String} object that must match the
      *        SQL name of a column in this rowset, ignoring case
      * @param x the new column value
      * @throws SQLException if (1) the given column name does not match the
      *            name of a column in this rowset, (2) the cursor is not on
      *            one of this rowset's rows or its insert row, or (3) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
+     *            rowset is {@code ResultSet.CONCUR_READ_ONLY}
      */
     public void updateByte(String columnName, byte x) throws SQLException {
         throw new UnsupportedOperationException();
@@ -3163,8 +3171,8 @@
 
     /**
      * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>short</code> value.
+     * row of this {@code CachedRowSetImpl} object with the given
+     * {@code short} value.
      * <P>
      * This method updates a column value in the current row or the insert
      * row of this rowset, but it does not update the database.
@@ -3175,13 +3183,13 @@
      * and the database. Both of these methods must be called before the
      * cursor moves to another row.
      *
-     * @param columnName a <code>String</code> object that must match the
+     * @param columnName a {@code String} object that must match the
      *        SQL name of a column in this rowset, ignoring case
      * @param x the new column value
      * @throws SQLException if (1) the given column name does not match the
      *            name of a column in this rowset, (2) the cursor is not on
      *            one of this rowset's rows or its insert row, or (3) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
+     *            rowset is {@code ResultSet.CONCUR_READ_ONLY}
      */
     public void updateShort(String columnName, short x) throws SQLException {
         throw new UnsupportedOperationException();
@@ -3189,8 +3197,8 @@
 
     /**
      * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>int</code> value.
+     * row of this {@code CachedRowSetImpl} object with the given
+     * {@code int} value.
      * <P>
      * This method updates a column value in the current row or the insert
      * row of this rowset, but it does not update the database.
@@ -3201,13 +3209,13 @@
      * and the database. Both of these methods must be called before the
      * cursor moves to another row.
      *
-     * @param columnName a <code>String</code> object that must match the
+     * @param columnName a {@code String} object that must match the
      *        SQL name of a column in this rowset, ignoring case
      * @param x the new column value
      * @throws SQLException if (1) the given column name does not match the
      *            name of a column in this rowset, (2) the cursor is not on
      *            one of this rowset's rows or its insert row, or (3) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
+     *            rowset is {@code ResultSet.CONCUR_READ_ONLY}
      */
     public void updateInt(String columnName, int x) throws SQLException {
         throw new UnsupportedOperationException();
@@ -3215,8 +3223,8 @@
 
     /**
      * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>long</code> value.
+     * row of this {@code CachedRowSetImpl} object with the given
+     * {@code long} value.
      * <P>
      * This method updates a column value in the current row or the insert
      * row of this rowset, but it does not update the database.
@@ -3227,13 +3235,13 @@
      * and the database. Both of these methods must be called before the
      * cursor moves to another row.
      *
-     * @param columnName a <code>String</code> object that must match the
+     * @param columnName a {@code String} object that must match the
      *        SQL name of a column in this rowset, ignoring case
      * @param x the new column value
      * @throws SQLException if (1) the given column name does not match the
      *            name of a column in this rowset, (2) the cursor is not on
      *            one of this rowset's rows or its insert row, or (3) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
+     *            rowset is {@code ResultSet.CONCUR_READ_ONLY}
      */
     public void updateLong(String columnName, long x) throws SQLException {
         throw new UnsupportedOperationException();
@@ -3241,8 +3249,8 @@
 
     /**
      * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>float</code> value.
+     * row of this {@code CachedRowSetImpl} object with the given
+     * {@code float} value.
      * <P>
      * This method updates a column value in the current row or the insert
      * row of this rowset, but it does not update the database.
@@ -3253,13 +3261,13 @@
      * and the database. Both of these methods must be called before the
      * cursor moves to another row.
      *
-     * @param columnName a <code>String</code> object that must match the
+     * @param columnName a {@code String} object that must match the
      *        SQL name of a column in this rowset, ignoring case
      * @param x the new column value
      * @throws SQLException if (1) the given column name does not match the
      *            name of a column in this rowset, (2) the cursor is not on
      *            one of this rowset's rows or its insert row, or (3) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
+     *            rowset is {@code ResultSet.CONCUR_READ_ONLY}
      */
     public void updateFloat(String columnName, float x) throws SQLException {
         throw new UnsupportedOperationException();
@@ -3267,8 +3275,8 @@
 
     /**
      * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>double</code> value.
+     * row of this {@code CachedRowSetImpl} object with the given
+     * {@code double} value.
      *
      * This method updates a column value in either the current row or
      * the insert row of this rowset, but it does not update the
@@ -3279,13 +3287,13 @@
      * and the database. Both of these methods must be called before the
      * cursor moves to another row.
      *
-     * @param columnName a <code>String</code> object that must match the
+     * @param columnName a {@code String} object that must match the
      *        SQL name of a column in this rowset, ignoring case
      * @param x the new column value
      * @throws SQLException if (1) the given column name does not match the
      *            name of a column in this rowset, (2) the cursor is not on
      *            one of this rowset's rows or its insert row, or (3) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
+     *            rowset is {@code ResultSet.CONCUR_READ_ONLY}
      */
     public void updateDouble(String columnName, double x) throws SQLException {
         throw new UnsupportedOperationException();
@@ -3293,8 +3301,8 @@
 
     /**
      * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>java.math.BigDecimal</code> object.
+     * row of this {@code CachedRowSetImpl} object with the given
+     * {@code java.math.BigDecimal} object.
      * <P>
      * This method updates a column value in the current row or the insert
      * row of this rowset, but it does not update the database.
@@ -3305,13 +3313,13 @@
      * and the database. Both of these methods must be called before the
      * cursor moves to another row.
      *
-     * @param columnName a <code>String</code> object that must match the
+     * @param columnName a {@code String} object that must match the
      *        SQL name of a column in this rowset, ignoring case
      * @param x the new column value
      * @throws SQLException if (1) the given column name does not match the
      *            name of a column in this rowset, (2) the cursor is not on
      *            one of this rowset's rows or its insert row, or (3) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
+     *            rowset is {@code ResultSet.CONCUR_READ_ONLY}
      */
     public void updateBigDecimal(String columnName, BigDecimal x) throws SQLException {
         throw new UnsupportedOperationException();
@@ -3319,8 +3327,8 @@
 
     /**
      * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>String</code> object.
+     * row of this {@code CachedRowSetImpl} object with the given
+     * {@code String} object.
      *
      * This method updates a column value in either the current row or
      * the insert row of this rowset, but it does not update the
@@ -3331,13 +3339,13 @@
      * and the database. Both of these methods must be called before the
      * cursor moves to another row.
      *
-     * @param columnName a <code>String</code> object that must match the
+     * @param columnName a {@code String} object that must match the
      *        SQL name of a column in this rowset, ignoring case
      * @param x the new column value
      * @throws SQLException if (1) the given column name does not match the
      *            name of a column in this rowset, (2) the cursor is not on
      *            one of this rowset's rows or its insert row, or (3) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
+     *            rowset is {@code ResultSet.CONCUR_READ_ONLY}
      */
     public void updateString(String columnName, String x) throws SQLException {
         throw new UnsupportedOperationException();
@@ -3345,8 +3353,8 @@
 
     /**
      * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>byte</code> array.
+     * row of this {@code CachedRowSetImpl} object with the given
+     * {@code byte} array.
      *
      * This method updates a column value in either the current row or
      * the insert row of this rowset, but it does not update the
@@ -3357,13 +3365,13 @@
      * and the database. Both of these methods must be called before the
      * cursor moves to another row.
      *
-     * @param columnName a <code>String</code> object that must match the
+     * @param columnName a {@code String} object that must match the
      *        SQL name of a column in this rowset, ignoring case
      * @param x the new column value
      * @throws SQLException if (1) the given column name does not match the
      *            name of a column in this rowset, (2) the cursor is not on
      *            one of this rowset's rows or its insert row, or (3) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
+     *            rowset is {@code ResultSet.CONCUR_READ_ONLY}
      */
     public void updateBytes(String columnName, byte x[]) throws SQLException {
         throw new UnsupportedOperationException();
@@ -3371,8 +3379,8 @@
 
     /**
      * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>Date</code> object.
+     * row of this {@code CachedRowSetImpl} object with the given
+     * {@code Date} object.
      *
      * This method updates a column value in either the current row or
      * the insert row of this rowset, but it does not update the
@@ -3383,15 +3391,15 @@
      * and the database. Both of these methods must be called before the
      * cursor moves to another row.
      *
-     * @param columnName a <code>String</code> object that must match the
+     * @param columnName a {@code String} object that must match the
      *        SQL name of a column in this rowset, ignoring case
      * @param x the new column value
      * @throws SQLException if (1) the given column name does not match the
      *            name of a column in this rowset, (2) the cursor is not on
      *            one of this rowset's rows or its insert row, (3) the type
-     *            of the designated column is not an SQL <code>DATE</code> or
-     *            <code>TIMESTAMP</code>, or (4) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
+     *            of the designated column is not an SQL {@code DATE} or
+     *            {@code TIMESTAMP}, or (4) this rowset is
+     *            {@code ResultSet.CONCUR_READ_ONLY}
      */
     public void updateDate(String columnName, java.sql.Date x) throws SQLException {
         throw new UnsupportedOperationException();
@@ -3399,8 +3407,8 @@
 
     /**
      * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>Time</code> object.
+     * row of this {@code CachedRowSetImpl} object with the given
+     * {@code Time} object.
      *
      * This method updates a column value in either the current row or
      * the insert row of this rowset, but it does not update the
@@ -3411,15 +3419,15 @@
      * and the database. Both of these methods must be called before the
      * cursor moves to another row.
      *
-     * @param columnName a <code>String</code> object that must match the
+     * @param columnName a {@code String} object that must match the
      *        SQL name of a column in this rowset, ignoring case
      * @param x the new column value
      * @throws SQLException if (1) the given column name does not match the
      *            name of a column in this rowset, (2) the cursor is not on
      *            one of this rowset's rows or its insert row, (3) the type
-     *            of the designated column is not an SQL <code>TIME</code> or
-     *            <code>TIMESTAMP</code>, or (4) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
+     *            of the designated column is not an SQL {@code TIME} or
+     *            {@code TIMESTAMP}, or (4) this rowset is
+     *            {@code ResultSet.CONCUR_READ_ONLY}
      */
     public void updateTime(String columnName, java.sql.Time x) throws SQLException {
         throw new UnsupportedOperationException();
@@ -3427,8 +3435,8 @@
 
     /**
      * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>Timestamp</code> object.
+     * row of this {@code CachedRowSetImpl} object with the given
+     * {@code Timestamp} object.
      *
      * This method updates a column value in either the current row or
      * the insert row of this rowset, but it does not update the
@@ -3439,7 +3447,7 @@
      * and the database. Both of these methods must be called before the
      * cursor moves to another row.
      *
-     * @param columnName a <code>String</code> object that must match the
+     * @param columnName a {@code String} object that must match the
      *        SQL name of a column in this rowset, ignoring case
      * @param x the new column value
      * @throws SQLException if the given column index is out of bounds or
@@ -3448,9 +3456,9 @@
      * @throws SQLException if (1) the given column name does not match the
      *            name of a column in this rowset, (2) the cursor is not on
      *            one of this rowset's rows or its insert row, (3) the type
-     *            of the designated column is not an SQL <code>DATE</code>,
-     *            <code>TIME</code>, or <code>TIMESTAMP</code>, or (4) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
+     *            of the designated column is not an SQL {@code DATE},
+     *            {@code TIME}, or {@code TIMESTAMP}, or (4) this
+     *            rowset is {@code ResultSet.CONCUR_READ_ONLY}
      */
     public void updateTimestamp(String columnName, java.sql.Timestamp x) throws SQLException {
         throw new UnsupportedOperationException();
@@ -3458,7 +3466,7 @@
 
     /**
      * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
+     * row of this {@code CachedRowSetImpl} object with the given
      * ASCII stream value.
      * <P>
      * This method updates a column value in either the current row or
@@ -3470,7 +3478,7 @@
      * and the database. Both of these methods must be called before the
      * cursor moves to another row.
      *
-     * @param columnName a <code>String</code> object that must match the
+     * @param columnName a {@code String} object that must match the
      *        SQL name of a column in this rowset, ignoring case
      * @param x the new column value
      * @param length the number of one-byte ASCII characters in the stream
@@ -3483,8 +3491,8 @@
 
     /**
      * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>java.io.InputStream</code> object.
+     * row of this {@code CachedRowSetImpl} object with the given
+     * {@code java.io.InputStream} object.
      * <P>
      * This method updates a column value in either the current row or
      * the insert row of this rowset, but it does not update the
@@ -3495,17 +3503,17 @@
      * and the database. Both of these methods must be called before the
      * cursor moves to another row.
      *
-     * @param columnName a <code>String</code> object that must match the
+     * @param columnName a {@code String} object that must match the
      *        SQL name of a column in this rowset, ignoring case
-     * @param x the new column value; must be a <code>java.io.InputStream</code>
-     *          containing <code>BINARY</code>, <code>VARBINARY</code>, or
-     *          <code>LONGVARBINARY</code> data
+     * @param x the new column value; must be a {@code java.io.InputStream}
+     *          containing {@code BINARY}, {@code VARBINARY}, or
+     *          {@code LONGVARBINARY} data
      * @param length the length of the stream in bytes
      * @throws SQLException if (1) the given column name does not match the
      *            name of a column in this rowset, (2) the cursor is not on
      *            one of this rowset's rows or its insert row, (3) the data
      *            in the stream is not binary, or (4) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
+     *            {@code ResultSet.CONCUR_READ_ONLY}
      */
     public void updateBinaryStream(String columnName, java.io.InputStream x, int length) throws SQLException {
         throw new UnsupportedOperationException();
@@ -3513,8 +3521,8 @@
 
     /**
      * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>java.io.Reader</code> object.
+     * row of this {@code CachedRowSetImpl} object with the given
+     * {@code java.io.Reader} object.
      * <P>
      * This method updates a column value in either the current row or
      * the insert row of this rowset, but it does not update the
@@ -3525,18 +3533,18 @@
      * and the database. Both of these methods must be called before the
      * cursor moves to another row.
      *
-     * @param columnName a <code>String</code> object that must match the
+     * @param columnName a {@code String} object that must match the
      *        SQL name of a column in this rowset, ignoring case
      * @param reader the new column value; must be a
-     * <code>java.io.Reader</code> containing <code>BINARY</code>,
-     * <code>VARBINARY</code>, <code>LONGVARBINARY</code>, <code>CHAR</code>,
-     * <code>VARCHAR</code>, or <code>LONGVARCHAR</code> data
+     * {@code java.io.Reader} containing {@code BINARY},
+     * {@code VARBINARY}, {@code LONGVARBINARY}, {@code CHAR},
+     * {@code VARCHAR}, or {@code LONGVARCHAR} data
      * @param length the length of the stream in characters
      * @throws SQLException if (1) the given column name does not match the
      *            name of a column in this rowset, (2) the cursor is not on
      *            one of this rowset's rows or its insert row, (3) the data
      *            in the stream is not a binary or character type, or (4) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
+     *            rowset is {@code ResultSet.CONCUR_READ_ONLY}
      */
     public void updateCharacterStream(String columnName,
     java.io.Reader reader,
@@ -3546,11 +3554,11 @@
 
     /**
      * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>Object</code> value.  The <code>scale</code> parameter
+     * row of this {@code CachedRowSetImpl} object with the given
+     * {@code Object} value.  The {@code scale} parameter
      * indicates the number of digits to the right of the decimal point
      * and is ignored if the new column value is not a type that will be
-     *  mapped to an SQL <code>DECIMAL</code> or <code>NUMERIC</code> value.
+     *  mapped to an SQL {@code DECIMAL} or {@code NUMERIC} value.
      * <P>
      * This method updates a column value in either the current row or
      * the insert row of this rowset, but it does not update the
@@ -3561,15 +3569,15 @@
      * and the database. Both of these methods must be called before the
      * cursor moves to another row.
      *
-     * @param columnName a <code>String</code> object that must match the
+     * @param columnName a {@code String} object that must match the
      *        SQL name of a column in this rowset, ignoring case
      * @param x the new column value
      * @param scale the number of digits to the right of the decimal point (for
-     *              <code>DECIMAL</code> and <code>NUMERIC</code> types only)
+     *              {@code DECIMAL} and {@code NUMERIC} types only)
      * @throws SQLException if (1) the given column name does not match the
      *            name of a column in this rowset, (2) the cursor is not on
      *            one of this rowset's rows or its insert row, or (3) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
+     *            rowset is {@code ResultSet.CONCUR_READ_ONLY}
      */
     public void updateObject(String columnName, Object x, int scale) throws SQLException {
         throw new UnsupportedOperationException();
@@ -3577,8 +3585,8 @@
 
     /**
      * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>Object</code> value.
+     * row of this {@code CachedRowSetImpl} object with the given
+     * {@code Object} value.
      * <P>
      * This method updates a column value in either the current row or
      * the insert row of this rowset, but it does not update the
@@ -3589,20 +3597,20 @@
      * and the database. Both of these methods must be called before the
      * cursor moves to another row.
      *
-     * @param columnName a <code>String</code> object that must match the
+     * @param columnName a {@code String} object that must match the
      *        SQL name of a column in this rowset, ignoring case
      * @param x the new column value
      * @throws SQLException if (1) the given column name does not match the
      *            name of a column in this rowset, (2) the cursor is not on
      *            one of this rowset's rows or its insert row, or (3) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
+     *            rowset is {@code ResultSet.CONCUR_READ_ONLY}
      */
     public void updateObject(String columnName, Object x) throws SQLException {
         throw new UnsupportedOperationException();
     }
 
     /**
-     * Inserts the contents of this <code>CachedRowSetImpl</code> object's insert
+     * Inserts the contents of this {@code CachedRowSetImpl} object's insert
      * row into this rowset immediately following the current row.
      * If the current row is the
      * position after the last row or before the first row, the new row will
@@ -3614,14 +3622,14 @@
      * @throws SQLException if (1) the cursor is not on the insert row,
      *            (2) one or more of the non-nullable columns in the insert
      *            row has not been given a value, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
+     *            {@code ResultSet.CONCUR_READ_ONLY}
      */
     public void insertRow() throws SQLException {
         throw new UnsupportedOperationException();
     }
 
     /**
-     * Marks the current row of this <code>CachedRowSetImpl</code> object as
+     * Marks the current row of this {@code CachedRowSetImpl} object as
      * updated and notifies listeners registered with this rowset that the
      * row has changed.
      * <P>
@@ -3631,26 +3639,26 @@
      * and the updates made before the cursor moved will be lost.
      *
      * @throws SQLException if the cursor is on the insert row or this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
+     *            rowset is {@code ResultSet.CONCUR_READ_ONLY}
      */
     public void updateRow() throws SQLException {
         throw new UnsupportedOperationException();
     }
 
     /**
-     * Deletes the current row from this <code>CachedRowSetImpl</code> object and
+     * Deletes the current row from this {@code CachedRowSetImpl} object and
      * notifies listeners registered with this rowset that a row has changed.
      * This method cannot be called when the cursor is on the insert row.
      * <P>
      * This method marks the current row as deleted, but it does not delete
      * the row from the underlying data source.  The method
-     * <code>acceptChanges</code> must be called to delete the row in
+     * {@code acceptChanges} must be called to delete the row in
      * the data source.
      *
      * @throws SQLException if (1) this method is called when the cursor
      *            is on the insert row, before the first row, or after the
      *            last row or (2) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
+     *            {@code ResultSet.CONCUR_READ_ONLY}
      */
     public void deleteRow() throws SQLException {
         throw new UnsupportedOperationException();
@@ -3659,7 +3667,7 @@
     /**
      * Sets the current row with its original value and marks the row as
      * not updated, thus undoing any changes made to the row since the
-     * last call to the methods <code>updateRow</code> or <code>deleteRow</code>.
+     * last call to the methods {@code updateRow} or {@code deleteRow}.
      * This method should be called only when the cursor is on a row in
      * this rowset.
      *
@@ -3672,11 +3680,11 @@
 
     /**
      * Rolls back any updates made to the current row of this
-     * <code>CachedRowSetImpl</code> object and notifies listeners that
+     * {@code CachedRowSetImpl} object and notifies listeners that
      * a row has changed.  To have an effect, this method
-     * must be called after an <code>updateXXX</code> method has been
-     * called and before the method <code>updateRow</code> has been called.
-     * If no updates have been made or the method <code>updateRow</code>
+     * must be called after an {@code updateXXX} method has been
+     * called and before the method {@code updateRow} has been called.
+     * If no updates have been made or the method {@code updateRow}
      * has already been called, this method has no effect.
      *
      * @throws SQLException if the cursor is on the insert row, before the
@@ -3687,39 +3695,39 @@
     }
 
     /**
-     * Moves the cursor for this <code>CachedRowSetImpl</code> object
+     * Moves the cursor for this {@code CachedRowSetImpl} object
      * to the insert row.  The current row in the rowset is remembered
      * while the cursor is on the insert row.
      * <P>
      * The insert row is a special row associated with an updatable
      * rowset.  It is essentially a buffer where a new row may
-     * be constructed by calling the appropriate <code>updateXXX</code>
+     * be constructed by calling the appropriate {@code updateXXX}
      * methods to assign a value to each column in the row.  A complete
      * row must be constructed; that is, every column that is not nullable
      * must be assigned a value.  In order for the new row to become part
-     * of this rowset, the method <code>insertRow</code> must be called
+     * of this rowset, the method {@code insertRow} must be called
      * before the cursor is moved back to the rowset.
      * <P>
      * Only certain methods may be invoked while the cursor is on the insert
      * row; many methods throw an exception if they are called while the
-     * cursor is there.  In addition to the <code>updateXXX</code>
-     * and <code>insertRow</code> methods, only the <code>getXXX</code> methods
-     * may be called when the cursor is on the insert row.  A <code>getXXX</code>
-     * method should be called on a column only after an <code>updateXXX</code>
+     * cursor is there.  In addition to the {@code updateXXX}
+     * and {@code insertRow} methods, only the {@code getXXX} methods
+     * may be called when the cursor is on the insert row.  A {@code getXXX}
+     * method should be called on a column only after an {@code updateXXX}
      * method has been called on that column; otherwise, the value returned is
      * undetermined.
      *
-     * @throws SQLException if this <code>CachedRowSetImpl</code> object is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
+     * @throws SQLException if this {@code CachedRowSetImpl} object is
+     *            {@code ResultSet.CONCUR_READ_ONLY}
      */
     public void moveToInsertRow() throws SQLException {
         throw new UnsupportedOperationException();
     }
 
     /**
-     * Moves the cursor for this <code>CachedRowSetImpl</code> object to
+     * Moves the cursor for this {@code CachedRowSetImpl} object to
      * the current row.  The current row is the row the cursor was on
-     * when the method <code>moveToInsertRow</code> was called.
+     * when the method {@code moveToInsertRow} was called.
      * <P>
      * Calling this method has no effect unless it is called while the
      * cursor is on the insert row.
@@ -3731,9 +3739,9 @@
     }
 
     /**
-     * Returns <code>null</code>.
-     *
-     * @return <code>null</code>
+     * Returns {@code null}.
+     *
+     * @return {@code null}
      * @throws SQLException if an error occurs
      */
     public Statement getStatement() throws SQLException {
@@ -3742,18 +3750,18 @@
 
     /**
      * Retrieves the value of the designated column in this
-     * <code>CachedRowSetImpl</code> object as an <code>Object</code> in
+     * {@code CachedRowSetImpl} object as an {@code Object} in
      * the Java programming language, using the given
-     * <code>java.util.Map</code> object to custom map the value if
+     * {@code java.util.Map} object to custom map the value if
      * appropriate.
      *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
+     * @param columnIndex the first column is {@code 1}, the second
+     *        is {@code 2}, and so on; must be {@code 1} or larger
      *        and equal to or less than the number of columns in this rowset
-     * @param map a <code>java.util.Map</code> object showing the mapping
+     * @param map a {@code java.util.Map} object showing the mapping
      *            from SQL type names to classes in the Java programming
      *            language
-     * @return an <code>Object</code> representing the SQL value
+     * @return an {@code Object} representing the SQL value
      * @throws SQLException if the given column index is out of bounds or
      *            the cursor is not on one of this rowset's rows or its
      *            insert row
@@ -3767,17 +3775,17 @@
 
     /**
      * Retrieves the value of the designated column in this
-     * <code>CachedRowSetImpl</code> object as a <code>Ref</code> object
+     * {@code CachedRowSetImpl} object as a {@code Ref} object
      * in the Java programming language.
      *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
+     * @param columnIndex the first column is {@code 1}, the second
+     *        is {@code 2}, and so on; must be {@code 1} or larger
      *        and equal to or less than the number of columns in this rowset
-     * @return a <code>Ref</code> object representing an SQL<code> REF</code> value
+     * @return a {@code Ref} object representing an SQL{@code  REF} value
      * @throws SQLException if (1) the given column index is out of bounds,
      *            (2) the cursor is not on one of this rowset's rows or its
      *            insert row, or (3) the designated column does not store an
-     *            SQL <code>REF</code> value
+     *            SQL {@code REF} value
      * @see #getRef(String)
      */
     public Ref getRef(int columnIndex) throws SQLException {
@@ -3786,17 +3794,17 @@
 
     /**
      * Retrieves the value of the designated column in this
-     * <code>CachedRowSetImpl</code> object as a <code>Blob</code> object
+     * {@code CachedRowSetImpl} object as a {@code Blob} object
      * in the Java programming language.
      *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
+     * @param columnIndex the first column is {@code 1}, the second
+     *        is {@code 2}, and so on; must be {@code 1} or larger
      *        and equal to or less than the number of columns in this rowset
-     * @return a <code>Blob</code> object representing an SQL <code>BLOB</code> value
+     * @return a {@code Blob} object representing an SQL {@code BLOB} value
      * @throws SQLException if (1) the given column index is out of bounds,
      *            (2) the cursor is not on one of this rowset's rows or its
      *            insert row, or (3) the designated column does not store an
-     *            SQL <code>BLOB</code> value
+     *            SQL {@code BLOB} value
      * @see #getBlob(String)
      */
     public Blob getBlob(int columnIndex) throws SQLException {
@@ -3805,17 +3813,17 @@
 
     /**
      * Retrieves the value of the designated column in this
-     * <code>CachedRowSetImpl</code> object as a <code>Clob</code> object
+     * {@code CachedRowSetImpl} object as a {@code Clob} object
      * in the Java programming language.
      *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
+     * @param columnIndex the first column is {@code 1}, the second
+     *        is {@code 2}, and so on; must be {@code 1} or larger
      *        and equal to or less than the number of columns in this rowset
-     * @return a <code>Clob</code> object representing an SQL <code>CLOB</code> value
+     * @return a {@code Clob} object representing an SQL {@code CLOB} value
      * @throws SQLException if (1) the given column index is out of bounds,
      *            (2) the cursor is not on one of this rowset's rows or its
      *            insert row, or (3) the designated column does not store an
-     *            SQL <code>CLOB</code> value
+     *            SQL {@code CLOB} value
      * @see #getClob(String)
      */
     public Clob getClob(int columnIndex) throws SQLException {
@@ -3824,18 +3832,18 @@
 
     /**
      * Retrieves the value of the designated column in this
-     * <code>CachedRowSetImpl</code> object as an <code>Array</code> object
+     * {@code CachedRowSetImpl} object as an {@code Array} object
      * in the Java programming language.
      *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
+     * @param columnIndex the first column is {@code 1}, the second
+     *        is {@code 2}, and so on; must be {@code 1} or larger
      *        and equal to or less than the number of columns in this rowset
-     * @return an <code>Array</code> object representing an SQL
-     *         <code>ARRAY</code> value
+     * @return an {@code Array} object representing an SQL
+     *         {@code ARRAY} value
      * @throws SQLException if (1) the given column index is out of bounds,
      *            (2) the cursor is not on one of this rowset's rows or its
      *            insert row, or (3) the designated column does not store an
-     *            SQL <code>ARRAY</code> value
+     *            SQL {@code ARRAY} value
      * @see #getArray(String)
      */
     public Array getArray(int columnIndex) throws SQLException {
@@ -3844,17 +3852,17 @@
 
     /**
      * Retrieves the value of the designated column in this
-     * <code>CachedRowSetImpl</code> object as an <code>Object</code> in
+     * {@code CachedRowSetImpl} object as an {@code Object} in
      * the Java programming language, using the given
-     * <code>java.util.Map</code> object to custom map the value if
+     * {@code java.util.Map} object to custom map the value if
      * appropriate.
      *
-     * @param columnName a <code>String</code> object that must match the
+     * @param columnName a {@code String} object that must match the
      *        SQL name of a column in this rowset, ignoring case
-     * @param map a <code>java.util.Map</code> object showing the mapping
+     * @param map a {@code java.util.Map} object showing the mapping
      *        from SQL type names to classes in the Java programming
      *        language
-     * @return an <code>Object</code> representing the SQL value
+     * @return an {@code Object} representing the SQL value
      * @throws SQLException if the given column name is not the name of
      *         a column in this rowset or the cursor is not on one of
      *         this rowset's rows or its insert row
@@ -3867,16 +3875,16 @@
 
     /**
      * Retrieves the value of the designated column in this
-     * <code>CachedRowSetImpl</code> object as a <code>Ref</code> object
+     * {@code CachedRowSetImpl} object as a {@code Ref} object
      * in the Java programming language.
      *
-     * @param colName a <code>String</code> object that must match the
+     * @param colName a {@code String} object that must match the
      *        SQL name of a column in this rowset, ignoring case
-     * @return a <code>Ref</code> object representing an SQL<code> REF</code> value
+     * @return a {@code Ref} object representing an SQL{@code  REF} value
      * @throws SQLException  if (1) the given column name is not the name of
      *            a column in this rowset, (2) the cursor is not on one of
      *            this rowset's rows or its insert row, or (3) the column value
-     *            is not an SQL <code>REF</code> value
+     *            is not an SQL {@code REF} value
      * @see #getRef(int)
      */
     public Ref getRef(String colName) throws SQLException {
@@ -3885,16 +3893,16 @@
 
     /**
      * Retrieves the value of the designated column in this
-     * <code>CachedRowSetImpl</code> object as a <code>Blob</code> object
+     * {@code CachedRowSetImpl} object as a {@code Blob} object
      * in the Java programming language.
      *
-     * @param colName a <code>String</code> object that must match the
+     * @param colName a {@code String} object that must match the
      *        SQL name of a column in this rowset, ignoring case
-     * @return a <code>Blob</code> object representing an SQL <code>BLOB</code> value
+     * @return a {@code Blob} object representing an SQL {@code BLOB} value
      * @throws SQLException if (1) the given column name is not the name of
      *            a column in this rowset, (2) the cursor is not on one of
      *            this rowset's rows or its insert row, or (3) the designated
-     *            column does not store an SQL <code>BLOB</code> value
+     *            column does not store an SQL {@code BLOB} value
      * @see #getBlob(int)
      */
     public Blob getBlob(String colName) throws SQLException {
@@ -3903,17 +3911,17 @@
 
     /**
      * Retrieves the value of the designated column in this
-     * <code>CachedRowSetImpl</code> object as a <code>Clob</code> object
+     * {@code CachedRowSetImpl} object as a {@code Clob} object
      * in the Java programming language.
      *
-     * @param colName a <code>String</code> object that must match the
+     * @param colName a {@code String} object that must match the
      *        SQL name of a column in this rowset, ignoring case
-     * @return a <code>Clob</code> object representing an SQL
-     *         <code>CLOB</code> value
+     * @return a {@code Clob} object representing an SQL
+     *         {@code CLOB} value
      * @throws SQLException if (1) the given column name is not the name of
      *            a column in this rowset, (2) the cursor is not on one of
      *            this rowset's rows or its insert row, or (3) the designated
-     *            column does not store an SQL <code>CLOB</code> value
+     *            column does not store an SQL {@code CLOB} value
      * @see #getClob(int)
      */
     public Clob getClob(String colName) throws SQLException {
@@ -3922,17 +3930,17 @@
 
     /**
      * Retrieves the value of the designated column in this
-     * <code>CachedRowSetImpl</code> object as an <code>Array</code> object
+     * {@code CachedRowSetImpl} object as an {@code Array} object
      * in the Java programming langugage.
      *
-     * @param colName a <code>String</code> object that must match the
+     * @param colName a {@code String} object that must match the
      *        SQL name of a column in this rowset, ignoring case
-     * @return an <code>Array</code> object representing an SQL
-     *         <code>ARRAY</code> value
+     * @return an {@code Array} object representing an SQL
+     *         {@code ARRAY} value
      * @throws SQLException if (1) the given column name is not the name of
      *            a column in this rowset, (2) the cursor is not on one of
      *            this rowset's rows or its insert row, or (3) the designated
-     *            column does not store an SQL <code>ARRAY</code> value
+     *            column does not store an SQL {@code ARRAY} value
      * @see #getArray(int)
      */
     public Array getArray(String colName) throws SQLException {
@@ -3941,22 +3949,22 @@
 
     /**
      * Retrieves the value of the designated column in the current row
-     * of this <code>CachedRowSetImpl</code> object as a <code>java.sql.Date</code>
-     * object, using the given <code>Calendar</code> object to construct an
+     * of this {@code CachedRowSetImpl} object as a {@code java.sql.Date}
+     * object, using the given {@code Calendar} object to construct an
      * appropriate millisecond value for the date.
      *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
+     * @param columnIndex the first column is {@code 1}, the second
+     *        is {@code 2}, and so on; must be {@code 1} or larger
      *        and equal to or less than the number of columns in the rowset
-     * @param cal the <code>java.util.Calendar</code> object to use in
+     * @param cal the {@code java.util.Calendar} object to use in
      *            constructing the date
-     * @return the column value; if the value is SQL <code>NULL</code>,
-     *         the result is <code>null</code>
+     * @return the column value; if the value is SQL {@code NULL},
+     *         the result is {@code null}
      * @throws SQLException if (1) the given column name is not the name of
      *            a column in this rowset, (2) the cursor is not on one of
      *            this rowset's rows or its insert row, or (3) the designated
-     *            column does not store an SQL <code>DATE</code> or
-     *            <code>TIMESTAMP</code> value
+     *            column does not store an SQL {@code DATE} or
+     *            {@code TIMESTAMP} value
      */
     public java.sql.Date getDate(int columnIndex, Calendar cal) throws SQLException {
         throw new UnsupportedOperationException();
@@ -3964,21 +3972,21 @@
 
     /**
      * Retrieves the value of the designated column in the current row
-     * of this <code>CachedRowSetImpl</code> object as a <code>java.sql.Date</code>
-     * object, using the given <code>Calendar</code> object to construct an
+     * of this {@code CachedRowSetImpl} object as a {@code java.sql.Date}
+     * object, using the given {@code Calendar} object to construct an
      * appropriate millisecond value for the date.
      *
-     * @param columnName a <code>String</code> object that must match the
+     * @param columnName a {@code String} object that must match the
      *        SQL name of a column in this rowset, ignoring case
-     * @param cal the <code>java.util.Calendar</code> object to use in
+     * @param cal the {@code java.util.Calendar} object to use in
      *            constructing the date
-     * @return the column value; if the value is SQL <code>NULL</code>,
-     *         the result is <code>null</code>
+     * @return the column value; if the value is SQL {@code NULL},
+     *         the result is {@code null}
      * @throws SQLException if (1) the given column name is not the name of
      *            a column in this rowset, (2) the cursor is not on one of
      *            this rowset's rows or its insert row, or (3) the designated
-     *            column does not store an SQL <code>DATE</code> or
-     *            <code>TIMESTAMP</code> value
+     *            column does not store an SQL {@code DATE} or
+     *            {@code TIMESTAMP} value
      */
     public java.sql.Date getDate(String columnName, Calendar cal) throws SQLException {
         throw new UnsupportedOperationException();
@@ -3986,22 +3994,22 @@
 
     /**
      * Retrieves the value of the designated column in the current row
-     * of this <code>CachedRowSetImpl</code> object as a <code>java.sql.Time</code>
-     * object, using the given <code>Calendar</code> object to construct an
+     * of this {@code CachedRowSetImpl} object as a {@code java.sql.Time}
+     * object, using the given {@code Calendar} object to construct an
      * appropriate millisecond value for the date.
      *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
+     * @param columnIndex the first column is {@code 1}, the second
+     *        is {@code 2}, and so on; must be {@code 1} or larger
      *        and equal to or less than the number of columns in the rowset
-     * @param cal the <code>java.util.Calendar</code> object to use in
+     * @param cal the {@code java.util.Calendar} object to use in
      *            constructing the date
-     * @return the column value; if the value is SQL <code>NULL</code>,
-     *         the result is <code>null</code>
+     * @return the column value; if the value is SQL {@code NULL},
+     *         the result is {@code null}
      * @throws SQLException if (1) the given column name is not the name of
      *            a column in this rowset, (2) the cursor is not on one of
      *            this rowset's rows or its insert row, or (3) the designated
-     *            column does not store an SQL <code>TIME</code> or
-     *            <code>TIMESTAMP</code> value
+     *            column does not store an SQL {@code TIME} or
+     *            {@code TIMESTAMP} value
      */
     public java.sql.Time getTime(int columnIndex, Calendar cal) throws SQLException {
         throw new UnsupportedOperationException();
@@ -4009,21 +4017,21 @@
 
     /**
      * Retrieves the value of the designated column in the current row
-     * of this <code>CachedRowSetImpl</code> object as a <code>java.sql.Time</code>
-     * object, using the given <code>Calendar</code> object to construct an
+     * of this {@code CachedRowSetImpl} object as a {@code java.sql.Time}
+     * object, using the given {@code Calendar} object to construct an
      * appropriate millisecond value for the date.
      *
-     * @param columnName a <code>String</code> object that must match the
+     * @param columnName a {@code String} object that must match the
      *        SQL name of a column in this rowset, ignoring case
-     * @param cal the <code>java.util.Calendar</code> object to use in
+     * @param cal the {@code java.util.Calendar} object to use in
      *            constructing the date
-     * @return the column value; if the value is SQL <code>NULL</code>,
-     *         the result is <code>null</code>
+     * @return the column value; if the value is SQL {@code NULL},
+     *         the result is {@code null}
      * @throws SQLException if (1) the given column name is not the name of
      *            a column in this rowset, (2) the cursor is not on one of
      *            this rowset's rows or its insert row, or (3) the designated
-     *            column does not store an SQL <code>TIME</code> or
-     *            <code>TIMESTAMP</code> value
+     *            column does not store an SQL {@code TIME} or
+     *            {@code TIMESTAMP} value
      */
     public java.sql.Time getTime(String columnName, Calendar cal) throws SQLException {
         throw new UnsupportedOperationException();
@@ -4031,22 +4039,22 @@
 
     /**
      * Retrieves the value of the designated column in the current row
-     * of this <code>CachedRowSetImpl</code> object as a <code>java.sql.Timestamp</code>
-     * object, using the given <code>Calendar</code> object to construct an
+     * of this {@code CachedRowSetImpl} object as a {@code java.sql.Timestamp}
+     * object, using the given {@code Calendar} object to construct an
      * appropriate millisecond value for the date.
      *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
+     * @param columnIndex the first column is {@code 1}, the second
+     *        is {@code 2}, and so on; must be {@code 1} or larger
      *        and equal to or less than the number of columns in the rowset
-     * @param cal the <code>java.util.Calendar</code> object to use in
+     * @param cal the {@code java.util.Calendar} object to use in
      *            constructing the date
-     * @return the column value; if the value is SQL <code>NULL</code>,
-     *         the result is <code>null</code>
+     * @return the column value; if the value is SQL {@code NULL},
+     *         the result is {@code null}
      * @throws SQLException if (1) the given column name is not the name of
      *            a column in this rowset, (2) the cursor is not on one of
      *            this rowset's rows or its insert row, or (3) the designated
-     *            column does not store an SQL <code>TIME</code> or
-     *            <code>TIMESTAMP</code> value
+     *            column does not store an SQL {@code TIME} or
+     *            {@code TIMESTAMP} value
      */
     public java.sql.Timestamp getTimestamp(int columnIndex, Calendar cal) throws SQLException {
         throw new UnsupportedOperationException();
@@ -4054,22 +4062,22 @@
 
     /**
      * Retrieves the value of the designated column in the current row
-     * of this <code>CachedRowSetImpl</code> object as a
-     * <code>java.sql.Timestamp</code> object, using the given
-     * <code>Calendar</code> object to construct an appropriate
+     * of this {@code CachedRowSetImpl} object as a
+     * {@code java.sql.Timestamp} object, using the given
+     * {@code Calendar} object to construct an appropriate
      * millisecond value for the date.
      *
-     * @param columnName a <code>String</code> object that must match the
+     * @param columnName a {@code String} object that must match the
      *        SQL name of a column in this rowset, ignoring case
-     * @param cal the <code>java.util.Calendar</code> object to use in
+     * @param cal the {@code java.util.Calendar} object to use in
      *            constructing the date
-     * @return the column value; if the value is SQL <code>NULL</code>,
-     *         the result is <code>null</code>
+     * @return the column value; if the value is SQL {@code NULL},
+     *         the result is {@code null}
      * @throws SQLException if (1) the given column name is not the name of
      *            a column in this rowset, (2) the cursor is not on one of
      *            this rowset's rows or its insert row, or (3) the designated
-     *            column does not store an SQL <code>DATE</code>,
-     *            <code>TIME</code>, or <code>TIMESTAMP</code> value
+     *            column does not store an SQL {@code DATE},
+     *            {@code TIME}, or {@code TIMESTAMP} value
      */
     public java.sql.Timestamp getTimestamp(String columnName, Calendar cal) throws SQLException {
         throw new UnsupportedOperationException();
@@ -4080,13 +4088,13 @@
      */
 
     /**
-     * Retrieves the <code>Connection</code> object passed to this
-     * <code>CachedRowSetImpl</code> object.  This connection may be
+     * Retrieves the {@code Connection} object passed to this
+     * {@code CachedRowSetImpl} object.  This connection may be
      * used to populate this rowset with data or to write data back
      * to its underlying data source.
      *
-     * @return the <code>Connection</code> object passed to this rowset;
-     *         may be <code>null</code> if there is no connection
+     * @return the {@code Connection} object passed to this rowset;
+     *         may be {@code null} if there is no connection
      * @throws SQLException if an error occurs
      */
     public Connection getConnection() throws SQLException{
@@ -4094,10 +4102,10 @@
     }
 
     /**
-     * Sets the metadata for this <code>CachedRowSetImpl</code> object
-     * with the given <code>RowSetMetaData</code> object.
-     *
-     * @param md a <code>RowSetMetaData</code> object instance containing
+     * Sets the metadata for this {@code CachedRowSetImpl} object
+     * with the given {@code RowSetMetaData} object.
+     *
+     * @param md a {@code RowSetMetaData} object instance containing
      *            metadata about the columsn in the rowset
      * @throws SQLException if invalid meta data is supplied to the
      *            rowset
@@ -4108,17 +4116,17 @@
 
     /**
      * Returns a result set containing the original value of the rowset. The
-     * original value is the state of the <code>CachedRowSetImpl</code> after the
+     * original value is the state of the {@code CachedRowSetImpl} after the
      * last population or synchronization (whichever occurred most recently) with
      * the data source.
      * <p>
      * The cursor is positioned before the first row in the result set.
-     * Only rows contained in the result set returned by <code>getOriginal()</code>
+     * Only rows contained in the result set returned by {@code getOriginal()}
      * are said to have an original value.
      *
      * @return the original result set of the rowset
      * @throws SQLException if an error occurs produce the
-     *           <code>ResultSet</code> object
+     *           {@code ResultSet} object
      */
     public ResultSet getOriginal() throws SQLException {
        throw new UnsupportedOperationException();
@@ -4127,7 +4135,7 @@
     /**
      * Returns a result set containing the original value of the current
      * row only.
-     * The original value is the state of the <code>CachedRowSetImpl</code> after
+     * The original value is the state of the {@code CachedRowSetImpl} after
      * the last population or synchronization (whichever occurred most recently)
      * with the data source.
      *
@@ -4153,7 +4161,7 @@
     /**
      * Marks all rows in this rowset as being original rows. Any updates
      * made to the rows become the original values for the rowset.
-     * Calls to the method <code>setOriginal</code> connot be reversed.
+     * Calls to the method {@code setOriginal} connot be reversed.
      *
      * @throws SQLException if an error occurs
      */
@@ -4165,8 +4173,8 @@
      * Returns an identifier for the object (table) that was used to create this
      * rowset.
      *
-     * @return a <code>String</code> object that identifies the table from
-     *         which this <code>CachedRowSetImpl</code> object was derived
+     * @return a {@code String} object that identifies the table from
+     *         which this {@code CachedRowSetImpl} object was derived
      * @throws SQLException if an error occurs
      */
     public String getTableName() throws SQLException {
@@ -4177,8 +4185,8 @@
      * Sets the identifier for the table from which this rowset was derived
      * to the given table name.
      *
-     * @param tabName a <code>String</code> object that identifies the
-     *          table from which this <code>CachedRowSetImpl</code> object
+     * @param tabName a {@code String} object that identifies the
+     *          table from which this {@code CachedRowSetImpl} object
      *          was derived
      * @throws SQLException if an error occurs
      */
@@ -4188,7 +4196,7 @@
 
     /**
      * Returns the columns that make a key to uniquely identify a
-     * row in this <code>CachedRowSetImpl</code> object.
+     * row in this {@code CachedRowSetImpl} object.
      *
      * @return an array of column numbers that constitutes a primary
      *           key for this rowset. This array should be empty
@@ -4203,16 +4211,16 @@
 
 
     /**
-     * Sets this <code>CachedRowSetImpl</code> object's
-     * <code>keyCols</code> field with the given array of column
+     * Sets this {@code CachedRowSetImpl} object's
+     * {@code keyCols} field with the given array of column
      * numbers, which forms a key for uniquely identifying a row
      * in this rowset.
      *
-     * @param keys an array of <code>int</code> indicating the
+     * @param keys an array of {@code int} indicating the
      *        columns that form a primary key for this
-     *        <code>CachedRowSetImpl</code> object; every
+     *        {@code CachedRowSetImpl} object; every
      *        element in the array must be greater than
-     *        <code>0</code> and less than or equal to the number
+     *        {@code 0} and less than or equal to the number
      *        of columns in this rowset
      * @throws SQLException if any of the numbers in the
      *            given array is not valid for this rowset
@@ -4224,8 +4232,8 @@
 
     /**
      * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>double</code> value.
+     * row of this {@code CachedRowSetImpl} object with the given
+     * {@code double} value.
      *
      * This method updates a column value in either the current row or
      * the insert row of this rowset, but it does not update the
@@ -4236,14 +4244,14 @@
      * and the database. Both of these methods must be called before the
      * cursor moves to another row.
      *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
+     * @param columnIndex the first column is {@code 1}, the second
+     *        is {@code 2}, and so on; must be {@code 1} or larger
      *        and equal to or less than the number of columns in this rowset
-     * @param ref the new column <code>java.sql.Ref</code> value
+     * @param ref the new column {@code java.sql.Ref} value
      * @throws SQLException if (1) the given column index is out of bounds,
      *        (2) the cursor is not on one of this rowset's rows or its
      *        insert row, or (3) this rowset is
-     *        <code>ResultSet.CONCUR_READ_ONLY</code>
+     *        {@code ResultSet.CONCUR_READ_ONLY}
      */
     public void updateRef(int columnIndex, java.sql.Ref ref) throws SQLException {
         throw new UnsupportedOperationException();
@@ -4251,8 +4259,8 @@
 
     /**
      * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>double</code> value.
+     * row of this {@code CachedRowSetImpl} object with the given
+     * {@code double} value.
      *
      * This method updates a column value in either the current row or
      * the insert row of this rowset, but it does not update the
@@ -4263,13 +4271,13 @@
      * and the database. Both of these methods must be called before the
      * cursor moves to another row.
      *
-     * @param columnName a <code>String</code> object that must match the
+     * @param columnName a {@code String} object that must match the
      *        SQL name of a column in this rowset, ignoring case
-     * @param ref the new column <code>java.sql.Ref</code> value
+     * @param ref the new column {@code java.sql.Ref} value
      * @throws SQLException if (1) the given column name does not match the
      *        name of a column in this rowset, (2) the cursor is not on
      *        one of this rowset's rows or its insert row, or (3) this
-     *        rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
+     *        rowset is {@code ResultSet.CONCUR_READ_ONLY}
      */
     public void updateRef(String columnName, java.sql.Ref ref) throws SQLException {
         throw new UnsupportedOperationException();
@@ -4277,8 +4285,8 @@
 
     /**
      * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>double</code> value.
+     * row of this {@code CachedRowSetImpl} object with the given
+     * {@code double} value.
      *
      * This method updates a column value in either the current row or
      * the insert row of this rowset, but it does not update the
@@ -4289,14 +4297,14 @@
      * and the database. Both of these methods must be called before the
      * cursor moves to another row.
      *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
+     * @param columnIndex the first column is {@code 1}, the second
+     *        is {@code 2}, and so on; must be {@code 1} or larger
      *        and equal to or less than the number of columns in this rowset
-     * @param c the new column <code>Clob value
+     * @param c the new column {@code Clob} value
      * @throws SQLException if (1) the given column index is out of bounds,
      *        (2) the cursor is not on one of this rowset's rows or its
      *        insert row, or (3) this rowset is
-     *        <code>ResultSet.CONCUR_READ_ONLY</code>
+     *        {@code ResultSet.CONCUR_READ_ONLY}
      */
     public void updateClob(int columnIndex, Clob c) throws SQLException {
        throw new UnsupportedOperationException();
@@ -4304,8 +4312,8 @@
 
     /**
      * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>double</code> value.
+     * row of this {@code CachedRowSetImpl} object with the given
+     * {@code double} value.
      *
      * This method updates a column value in either the current row or
      * the insert row of this rowset, but it does not update the
@@ -4316,13 +4324,13 @@
      * and the database. Both of these methods must be called before the
      * cursor moves to another row.
      *
-     * @param columnName a <code>String</code> object that must match the
+     * @param columnName a {@code String} object that must match the
      *        SQL name of a column in this rowset, ignoring case
-     * @param c the new column <code>Clob</code>value
+     * @param c the new column {@code Clob}value
      * @throws SQLException if (1) the given column name does not match the
      *            name of a column in this rowset, (2) the cursor is not on
      *            one of this rowset's rows or its insert row, or (3) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
+     *            rowset is {@code ResultSet.CONCUR_READ_ONLY}
      */
     public void updateClob(String columnName, Clob c) throws SQLException {
         throw new UnsupportedOperationException();
@@ -4330,8 +4338,8 @@
 
     /**
      * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>java.sql.Blob</code> value.
+     * row of this {@code CachedRowSetImpl} object with the given
+     * {@code java.sql.Blob} value.
      *
      * This method updates a column value in either the current row or
      * the insert row of this rowset, but it does not update the
@@ -4342,14 +4350,14 @@
      * and the database. Both of these methods must be called before the
      * cursor moves to another row.
      *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
+     * @param columnIndex the first column is {@code 1}, the second
+     *        is {@code 2}, and so on; must be {@code 1} or larger
      *        and equal to or less than the number of columns in this rowset
-     * @param b the new column <code>Blob</code> value
+     * @param b the new column {@code Blob} value
      * @throws SQLException if (1) the given column index is out of bounds,
      *            (2) the cursor is not on one of this rowset's rows or its
      *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
+     *            {@code ResultSet.CONCUR_READ_ONLY}
      */
     public void updateBlob(int columnIndex, Blob b) throws SQLException {
        throw new UnsupportedOperationException();
@@ -4357,8 +4365,8 @@
 
     /**
      * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>java.sql.Blob </code> value.
+     * row of this {@code CachedRowSetImpl} object with the given
+     * {@code java.sql.Blob } value.
      *
      * This method updates a column value in either the current row or
      * the insert row of this rowset, but it does not update the
@@ -4369,13 +4377,13 @@
      * and the database. Both of these methods must be called before the
      * cursor moves to another row.
      *
-     * @param columnName a <code>String</code> object that must match the
+     * @param columnName a {@code String} object that must match the
      *        SQL name of a column in this rowset, ignoring case
-     * @param b the new column <code>Blob</code> value
+     * @param b the new column {@code Blob} value
      * @throws SQLException if (1) the given column name does not match the
      *            name of a column in this rowset, (2) the cursor is not on
      *            one of this rowset's rows or its insert row, or (3) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
+     *            rowset is {@code ResultSet.CONCUR_READ_ONLY}
      */
     public void updateBlob(String columnName, Blob b) throws SQLException {
         throw new UnsupportedOperationException();
@@ -4383,8 +4391,8 @@
 
     /**
      * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>java.sql.Array</code> values.
+     * row of this {@code CachedRowSetImpl} object with the given
+     * {@code java.sql.Array} values.
      *
      * This method updates a column value in either the current row or
      * the insert row of this rowset, but it does not update the
@@ -4395,14 +4403,14 @@
      * and the database. Both of these methods must be called before the
      * cursor moves to another row.
      *
-     * @param columnIndex the first column is <code>1</code>, the second
-     *        is <code>2</code>, and so on; must be <code>1</code> or larger
+     * @param columnIndex the first column is {@code 1}, the second
+     *        is {@code 2}, and so on; must be {@code 1} or larger
      *        and equal to or less than the number of columns in this rowset
-     * @param a the new column <code>Array</code> value
+     * @param a the new column {@code Array} value
      * @throws SQLException if (1) the given column index is out of bounds,
      *            (2) the cursor is not on one of this rowset's rows or its
      *            insert row, or (3) this rowset is
-     *            <code>ResultSet.CONCUR_READ_ONLY</code>
+     *            {@code ResultSet.CONCUR_READ_ONLY}
      */
     public void updateArray(int columnIndex, Array a) throws SQLException {
         throw new UnsupportedOperationException();
@@ -4410,8 +4418,8 @@
 
     /**
      * Sets the designated column in either the current row or the insert
-     * row of this <code>CachedRowSetImpl</code> object with the given
-     * <code>java.sql.Array</code> value.
+     * row of this {@code CachedRowSetImpl} object with the given
+     * {@code java.sql.Array} value.
      *
      * This method updates a column value in either the current row or
      * the insert row of this rowset, but it does not update the
@@ -4422,13 +4430,13 @@
      * and the database. Both of these methods must be called before the
      * cursor moves to another row.
      *
-     * @param columnName a <code>String</code> object that must match the
+     * @param columnName a {@code String} object that must match the
      *        SQL name of a column in this rowset, ignoring case
-     * @param a the new column <code>Array</code> value
+     * @param a the new column {@code Array} value
      * @throws SQLException if (1) the given column name does not match the
      *            name of a column in this rowset, (2) the cursor is not on
      *            one of this rowset's rows or its insert row, or (3) this
-     *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
+     *            rowset is {@code ResultSet.CONCUR_READ_ONLY}
      */
     public void updateArray(String columnName, Array a) throws SQLException {
         throw new UnsupportedOperationException();
@@ -4437,7 +4445,7 @@
 
     /**
      * Retrieves the value of the designated column in this
-     * <code>CachedRowSetImpl</code> object as a <code>java.net.URL</code> object
+     * {@code CachedRowSetImpl} object as a {@code java.net.URL} object
      * in the Java programming language.
      *
      * @return a java.net.URL object containing the resource reference described by
@@ -4445,7 +4453,7 @@
      * @throws SQLException if (1) the given column index is out of bounds,
      * (2) the cursor is not on one of this rowset's rows or its
      * insert row, or (3) the designated column does not store an
-     * SQL <code>DATALINK</code> value.
+     * SQL {@code DATALINK} value.
      * @see #getURL(String)
      */
     public java.net.URL getURL(int columnIndex) throws SQLException {
@@ -4454,7 +4462,7 @@
 
     /**
      * Retrieves the value of the designated column in this
-     * <code>CachedRowSetImpl</code> object as a <code>java.net.URL</code> object
+     * {@code CachedRowSetImpl} object as a {@code java.net.URL} object
      * in the Java programming language.
      *
      * @return a java.net.URL object containing the resource reference described by
@@ -4463,7 +4471,7 @@
      * in this rowset, or
      * (2) the cursor is not on one of this rowset's rows or its
      * insert row, or (3) the designated column does not store an
-     * SQL <code>DATALINK</code> value.
+     * SQL {@code DATALINK} value.
      * @see #getURL(int)
      */
     public java.net.URL getURL(String columnName) throws SQLException {
@@ -4472,20 +4480,20 @@
     }
 
     /**
-     * The first warning reported by calls on this <code>CachedRowSetImpl</code>
-     * object is returned. Subsequent <code>CachedRowSetImpl</code> warnings will
-     * be chained to this <code>SQLWarning</code>. All <code>RowSetWarnings</code>
+     * The first warning reported by calls on this {@code CachedRowSetImpl}
+     * object is returned. Subsequent {@code CachedRowSetImpl} warnings will
+     * be chained to this {@code SQLWarning}. All {@code RowSetWarnings}
      * warnings are generated in the disconnected environment and remain a
-     * seperate warning chain to that provided by the <code>getWarnings</code>
+     * seperate warning chain to that provided by the {@code getWarnings}
      * method.
      *
      * <P>The warning chain is automatically cleared each time a new
      * row is read.
      *
      * <P><B>Note:</B> This warning chain only covers warnings caused
-     * by <code>CachedRowSet</code> (and their child interface)
-     * methods. All <code>SQLWarnings</code> can be obtained using the
-     * <code>getWarnings</code> method which tracks warnings generated
+     * by {@code CachedRowSet} (and their child interface)
+     * methods. All {@code SQLWarnings} can be obtained using the
+     * {@code getWarnings} method which tracks warnings generated
      * by the underlying JDBC driver.
      * @return the first SQLWarning or null
      *
@@ -4495,7 +4503,7 @@
     }
 
      /**
-     * Commits all changes performed by the <code>acceptChanges()</code>
+     * Commits all changes performed by the {@code acceptChanges()}
      * methods
      *
      * @see java.sql.Connection#commit
@@ -4505,7 +4513,7 @@
     }
 
     /**
-     * Rolls back all changes performed by the <code>acceptChanges()</code>
+     * Rolls back all changes performed by the {@code acceptChanges()}
      * methods
      *
      * @see java.sql.Connection#rollback
@@ -4515,8 +4523,8 @@
     }
 
     /**
-     * Rolls back all changes performed by the <code>acceptChanges()</code>
-     * to the last <code>Savepoint</code> transaction marker.
+     * Rolls back all changes performed by the {@code acceptChanges()}
+     * to the last {@code Savepoint} transaction marker.
      *
      * @see java.sql.Connection#rollback(Savepoint)
      */
@@ -4526,7 +4534,7 @@
 
     /**
      * Unsets the designated parameter to the given int array.
-     * This was set using <code>setMatchColumn</code>
+     * This was set using {@code setMatchColumn}
      * as the column which will form the basis of the join.
      * <P>
      * The parameter value unset by this method should be same
@@ -4536,7 +4544,7 @@
      *        object's internal representation of parameter values
      * @throws SQLException if an error occurs or the
      *  parameter index is out of bounds or if the columnIdx is
-     *  not the same as set using <code>setMatchColumn(int [])</code>
+     *  not the same as set using {@code setMatchColumn(int [])}
      */
     public void unsetMatchColumn(int[] columnIdxes) throws SQLException {
          throw new UnsupportedOperationException();
@@ -4544,7 +4552,7 @@
 
    /**
      * Unsets the designated parameter to the given String array.
-     * This was set using <code>setMatchColumn</code>
+     * This was set using {@code setMatchColumn}
      * as the column which will form the basis of the join.
      * <P>
      * The parameter value unset by this method should be same
@@ -4554,18 +4562,18 @@
      *        object's internal representation of parameter values
      * @throws SQLException if an error occurs or the
      *  parameter index is out of bounds or if the columnName is
-     *  not the same as set using <code>setMatchColumn(String [])</code>
+     *  not the same as set using {@code setMatchColumn(String [])}
      */
     public void unsetMatchColumn(String[] columnIdxes) throws SQLException {
        throw new UnsupportedOperationException();
     }
 
     /**
-     * Retrieves the column name as <code>String</code> array
-     * that was set using <code>setMatchColumn(String [])</code>
+     * Retrieves the column name as {@code String} array
+     * that was set using {@code setMatchColumn(String [])}
      * for this rowset.
      *
-     * @return a <code>String</code> array object that contains the column names
+     * @return a {@code String} array object that contains the column names
      *         for the rowset which has this the match columns
      *
      * @throws SQLException if an error occurs or column name is not set
@@ -4575,10 +4583,10 @@
     }
 
     /**
-     * Retrieves the column id as <code>int</code> array that was set using
-     * <code>setMatchColumn(int [])</code> for this rowset.
-     *
-     * @return a <code>int</code> array object that contains the column ids
+     * Retrieves the column id as {@code int} array that was set using
+     * {@code setMatchColumn(int [])} for this rowset.
+     *
+     * @return a {@code int} array object that contains the column ids
      *         for the rowset which has this as the match columns.
      *
      * @throws SQLException if an error occurs or column index is not set
@@ -4590,17 +4598,17 @@
     /**
      * Sets the designated parameter to the given int array.
      * This forms the basis of the join for the
-     * <code>JoinRowSet</code> as the column which will form the basis of the
+     * {@code JoinRowSet} as the column which will form the basis of the
      * join.
      * <P>
      * The parameter value set by this method is stored internally and
      * will be supplied as the appropriate parameter in this rowset's
-     * command when the method <code>getMatchColumnIndexes</code> is called.
+     * command when the method {@code getMatchColumnIndexes} is called.
      *
      * @param columnIdxes the indexes into this rowset
      *        object's internal representation of parameter values; the
      *        first parameter is 0, the second is 1, and so on; must be
-     *        <code>0</code> or greater
+     *        {@code 0} or greater
      * @throws SQLException if an error occurs or the
      *                         parameter index is out of bounds
      */
@@ -4611,12 +4619,12 @@
     /**
      * Sets the designated parameter to the given String array.
      *  This forms the basis of the join for the
-     * <code>JoinRowSet</code> as the column which will form the basis of the
+     * {@code JoinRowSet} as the column which will form the basis of the
      * join.
      * <P>
      * The parameter value set by this method is stored internally and
      * will be supplied as the appropriate parameter in this rowset's
-     * command when the method <code>getMatchColumn</code> is called.
+     * command when the method {@code getMatchColumn} is called.
      *
      * @param columnNames the name of the column into this rowset
      *        object's internal representation of parameter values
@@ -4629,19 +4637,19 @@
 
 
     /**
-     * Sets the designated parameter to the given <code>int</code>
+     * Sets the designated parameter to the given {@code int}
      * object.  This forms the basis of the join for the
-     * <code>JoinRowSet</code> as the column which will form the basis of the
+     * {@code JoinRowSet} as the column which will form the basis of the
      * join.
      * <P>
      * The parameter value set by this method is stored internally and
      * will be supplied as the appropriate parameter in this rowset's
-     * command when the method <code>getMatchColumn</code> is called.
+     * command when the method {@code getMatchColumn} is called.
      *
      * @param columnIdx the index into this rowset
      *        object's internal representation of parameter values; the
      *        first parameter is 0, the second is 1, and so on; must be
-     *        <code>0</code> or greater
+     *        {@code 0} or greater
      * @throws SQLException if an error occurs or the
      *                         parameter index is out of bounds
      */
@@ -4650,14 +4658,14 @@
     }
 
     /**
-     * Sets the designated parameter to the given <code>String</code>
+     * Sets the designated parameter to the given {@code String}
      * object.  This forms the basis of the join for the
-     * <code>JoinRowSet</code> as the column which will form the basis of the
+     * {@code JoinRowSet} as the column which will form the basis of the
      * join.
      * <P>
      * The parameter value set by this method is stored internally and
      * will be supplied as the appropriate parameter in this rowset's
-     * command when the method <code>getMatchColumn</code> is called.
+     * command when the method {@code getMatchColumn} is called.
      *
      * @param columnName the name of the column into this rowset
      *        object's internal representation of parameter values
@@ -4669,8 +4677,8 @@
     }
 
     /**
-     * Unsets the designated parameter to the given <code>int</code>
-     * object.  This was set using <code>setMatchColumn</code>
+     * Unsets the designated parameter to the given {@code int}
+     * object.  This was set using {@code setMatchColumn}
      * as the column which will form the basis of the join.
      * <P>
      * The parameter value unset by this method should be same
@@ -4680,15 +4688,15 @@
      *        object's internal representation of parameter values
      * @throws SQLException if an error occurs or the
      *  parameter index is out of bounds or if the columnIdx is
-     *  not the same as set using <code>setMatchColumn(int)</code>
+     *  not the same as set using {@code setMatchColumn(int)}
      */
     public void unsetMatchColumn(int columnIdx) throws SQLException {
         throw new UnsupportedOperationException();
     }
 
     /**
-     * Unsets the designated parameter to the given <code>String</code>
-     * object.  This was set using <code>setMatchColumn</code>
+     * Unsets the designated parameter to the given {@code String}
+     * object.  This was set using {@code setMatchColumn}
      * as the column which will form the basis of the join.
      * <P>
      * The parameter value unset by this method should be same
@@ -4698,7 +4706,7 @@
      *        object's internal representation of parameter values
      * @throws SQLException if an error occurs or the
      *  parameter index is out of bounds or if the columnName is
-     *  not the same as set using <code>setMatchColumn(String)</code>
+     *  not the same as set using {@code setMatchColumn(String)}
      */
     public void unsetMatchColumn(String columnName) throws SQLException {
         throw new UnsupportedOperationException();
@@ -4706,48 +4714,48 @@
 
     /**
      * Notifies registered listeners that a RowSet object in the given RowSetEvent
-     * object has populated a number of additional rows. The <code>numRows</code> parameter
-     * ensures that this event will only be fired every <code>numRow</code>.
+     * object has populated a number of additional rows. The {@code numRows} parameter
+     * ensures that this event will only be fired every {@code numRow}.
      * <p>
      * The source of the event can be retrieved with the method event.getSource.
      *
-     * @param event a <code>RowSetEvent</code> object that contains the
-     *     <code>RowSet</code> object that is the source of the events
+     * @param event a {@code RowSetEvent} object that contains the
+     *     {@code RowSet} object that is the source of the events
      * @param numRows when populating, the number of rows interval on which the
-     *     <code>CachedRowSet</code> populated should fire; the default value
-     *     is zero; cannot be less than <code>fetchSize</code> or zero
+     *     {@code CachedRowSet} populated should fire; the default value
+     *     is zero; cannot be less than {@code fetchSize} or zero
      */
     public void rowSetPopulated(RowSetEvent event, int numRows) throws SQLException {
         throw new UnsupportedOperationException();
     }
 
     /**
-     * Populates this <code>CachedRowSet</code> object with data from
-     * the given <code>ResultSet</code> object. While related to the <code>populate(ResultSet)</code>
+     * Populates this {@code CachedRowSet} object with data from
+     * the given {@code ResultSet} object. While related to the {@code populate(ResultSet)}
      * method, an additional parameter is provided to allow starting position within
-     * the <code>ResultSet</code> from where to populate the CachedRowSet
+     * the {@code ResultSet} from where to populate the CachedRowSet
      * instance.
      *
-     * This method is an alternative to the method <code>execute</code>
-     * for filling the rowset with data.  The method <code>populate</code>
+     * This method is an alternative to the method {@code execute}
+     * for filling the rowset with data.  The method {@code populate}
      * does not require that the properties needed by the method
-     * <code>execute</code>, such as the <code>command</code> property,
-     * be set. This is true because the method <code>populate</code>
-     * is given the <code>ResultSet</code> object from
+     * {@code execute}, such as the {@code command} property,
+     * be set. This is true because the method {@code populate}
+     * is given the {@code ResultSet} object from
      * which to get data and thus does not need to use the properties
      * required for setting up a connection and executing this
-     * <code>CachedRowSetImpl</code> object's command.
+     * {@code CachedRowSetImpl} object's command.
      * <P>
      * After populating this rowset with data, the method
-     * <code>populate</code> sets the rowset's metadata and
-     * then sends a <code>RowSetChangedEvent</code> object
+     * {@code populate} sets the rowset's metadata and
+     * then sends a {@code RowSetChangedEvent} object
      * to all registered listeners prior to returning.
      *
-     * @param data the <code>ResultSet</code> object containing the data
-     *             to be read into this <code>CachedRowSetImpl</code> object
+     * @param data the {@code ResultSet} object containing the data
+     *             to be read into this {@code CachedRowSetImpl} object
      * @param start the integer specifing the position in the
-     *        <code>ResultSet</code> object to popultate the
-     *        <code>CachedRowSetImpl</code> object.
+     *        {@code ResultSet} object to popultate the
+     *        {@code CachedRowSetImpl} object.
      * @throws SQLException if an error occurs; or the max row setting is
      *          violated while populating the RowSet.Also id the start position
      *          is negative.
@@ -4759,7 +4767,7 @@
      }
 
     /**
-     * The nextPage gets the next page, that is a <code>CachedRowSetImpl</code> object
+     * The nextPage gets the next page, that is a {@code CachedRowSetImpl} object
      * containing the number of rows specified by page size.
      * @return boolean value true indicating whether there are more pages to come and
      *         false indicating that this is the last page.
@@ -4796,7 +4804,7 @@
      * @return boolean value true if it retrieves the previous page, flase if it
      *         is on the first page.
      * @throws SQLException if it is called before populate is called or ResultSet
-     *         is of type <code>ResultSet.TYPE_FORWARD_ONLY</code> or if an error
+     *         is of type {@code ResultSet.TYPE_FORWARD_ONLY} or if an error
      *         occurs.
      */
     public boolean previousPage() throws SQLException {
@@ -4807,7 +4815,7 @@
        * Updates the designated column with a character stream value, which will
        * have the specified number of bytes. The driver does the necessary conversion
        * from Java character format to the national character set in the database.
-       * It is intended for use when updating NCHAR,NVARCHAR and LONGNVARCHAR columns.
+       * It is intended for use when updating NCHAR, NVARCHAR and LONGNVARCHAR columns.
        * The updater methods are used to update column values in the current row or
        * the insert row. The updater methods do not update the underlying database;
        * instead the updateRow or insertRow methods are called to update the database.
--- a/jdk/src/java.sql.rowset/share/classes/com/sun/rowset/internal/WebRowSetXmlWriter.java	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/src/java.sql.rowset/share/classes/com/sun/rowset/internal/WebRowSetXmlWriter.java	Thu Jun 11 20:18:55 2015 -0700
@@ -36,24 +36,24 @@
 import javax.sql.rowset.spi.*;
 
 /**
- * An implementation of the <code>XmlWriter</code> interface, which writes a
- * <code>WebRowSet</code> object to an output stream as an XML document.
+ * An implementation of the {@code XmlWriter}  interface, which writes a
+ * {@code WebRowSet}  object to an output stream as an XML document.
  */
 
 public class WebRowSetXmlWriter implements XmlWriter, Serializable {
 
     /**
-     * The <code>java.io.Writer</code> object to which this <code>WebRowSetXmlWriter</code>
-     * object will write when its <code>writeXML</code> method is called. The value
-     * for this field is set with the <code>java.io.Writer</code> object given
-     * as the second argument to the <code>writeXML</code> method.
+     * The {@code java.io.Writer}  object to which this {@code WebRowSetXmlWriter}
+     * object will write when its {@code writeXML}  method is called. The value
+     * for this field is set with the {@code java.io.Writer}  object given
+     * as the second argument to the {@code writeXML}  method.
      */
     private transient java.io.Writer writer;
 
     /**
-     * The <code>java.util.Stack</code> object that this <code>WebRowSetXmlWriter</code>
+     * The {@code java.util.Stack}  object that this {@code WebRowSetXmlWriter}
      * object will use for storing the tags to be used for writing the calling
-     * <code>WebRowSet</code> object as an XML document.
+     * {@code WebRowSet}  object as an XML document.
      */
     private java.util.Stack<String> stack;
 
@@ -69,24 +69,24 @@
     }
 
     /**
-     * Writes the given <code>WebRowSet</code> object as an XML document
-     * using the given <code>java.io.Writer</code> object. The XML document
-     * will include the <code>WebRowSet</code> object's data, metadata, and
+     * Writes the given {@code WebRowSet}  object as an XML document
+     * using the given {@code java.io.Writer}  object. The XML document
+     * will include the {@code WebRowSet}  object's data, metadata, and
      * properties.  If a data value has been updated, that information is also
      * included.
      * <P>
-     * This method is called by the <code>XmlWriter</code> object that is
-     * referenced in the calling <code>WebRowSet</code> object's
-     * <code>xmlWriter</code> field.  The <code>XmlWriter.writeXML</code>
+     * This method is called by the {@code XmlWriter}  object that is
+     * referenced in the calling {@code WebRowSet}  object's
+     * {@code xmlWriter}  field.  The {@code XmlWriter.writeXML}
      * method passes to this method the arguments that were supplied to it.
      *
-     * @param caller the <code>WebRowSet</code> object to be written; must
-     *        be a rowset for which this <code>WebRowSetXmlWriter</code> object
+     * @param caller the {@code WebRowSet}  object to be written; must
+     *        be a rowset for which this {@code WebRowSetXmlWriter}  object
      *        is the writer
-     * @param wrt the <code>java.io.Writer</code> object to which
-     *        <code>caller</code> will be written
+     * @param wrt the {@code java.io.Writer}  object to which
+     *        {@code caller}  will be written
      * @exception SQLException if a database access error occurs or
-     *            this <code>WebRowSetXmlWriter</code> object is not the writer
+     *            this {@code WebRowSetXmlWriter}  object is not the writer
      *            for the given rowset
      * @see XmlWriter#writeXML
      */
@@ -100,26 +100,26 @@
     }
 
     /**
-     * Writes the given <code>WebRowSet</code> object as an XML document
-     * using the given <code>java.io.OutputStream</code> object. The XML document
-     * will include the <code>WebRowSet</code> object's data, metadata, and
+     * Writes the given {@code WebRowSet}  object as an XML document
+     * using the given {@code java.io.OutputStream}  object. The XML document
+     * will include the {@code WebRowSet}  object's data, metadata, and
      * properties.  If a data value has been updated, that information is also
      * included.
      * <P>
-     * Using stream is a faster way than using <code>java.io.Writer<code/>
+     * Using stream is a faster way than using {@code java.io.Writer}
      *
-     * This method is called by the <code>XmlWriter</code> object that is
-     * referenced in the calling <code>WebRowSet</code> object's
-     * <code>xmlWriter</code> field.  The <code>XmlWriter.writeXML</code>
+     * This method is called by the {@code XmlWriter}  object that is
+     * referenced in the calling {@code WebRowSet}  object's
+     * {@code xmlWriter}  field.  The {@code XmlWriter.writeXML}
      * method passes to this method the arguments that were supplied to it.
      *
-     * @param caller the <code>WebRowSet</code> object to be written; must
-     *        be a rowset for which this <code>WebRowSetXmlWriter</code> object
+     * @param caller the {@code WebRowSet}  object to be written; must
+     *        be a rowset for which this {@code WebRowSetXmlWriter}  object
      *        is the writer
-     * @param oStream the <code>java.io.OutputStream</code> object to which
-     *        <code>caller</code> will be written
+     * @param oStream the {@code java.io.OutputStream}  object to which
+     *        {@code caller}  will be written
      * @throws SQLException if a database access error occurs or
-     *            this <code>WebRowSetXmlWriter</code> object is not the writer
+     *            this {@code WebRowSetXmlWriter}  object is not the writer
      *            for the given rowset
      * @see XmlWriter#writeXML
      */
--- a/jdk/src/java.sql.rowset/share/classes/javax/sql/rowset/RowSetMetaDataImpl.java	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/src/java.sql.rowset/share/classes/javax/sql/rowset/RowSetMetaDataImpl.java	Thu Jun 11 20:18:55 2015 -0700
@@ -76,7 +76,7 @@
      * the <code>RowSet</code> object for which this <code>RowSetMetaDataImpl</code>
      * was created. To be valid, a column number must be greater than
      * <code>0</code> and less than or equal to the number of columns in a row.
-     * @throws <code>SQLException</code> with the message "Invalid column index"
+     * @throws SQLException with the message "Invalid column index"
      *        if the given column number is out of the range of valid column
      *        numbers for the <code>RowSet</code> object
      */
--- a/jdk/src/jdk.jartool/share/classes/com/sun/jarsigner/ContentSigner.java	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/src/jdk.jartool/share/classes/com/sun/jarsigner/ContentSigner.java	Thu Jun 11 20:18:55 2015 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -35,9 +35,11 @@
  *
  * @since 1.5
  * @author Vincent Ryan
+ * @deprecated This package has been deprecated.
  */
 
 @jdk.Exported
+@Deprecated
 public abstract class ContentSigner {
 
     /**
--- a/jdk/src/jdk.jartool/share/classes/com/sun/jarsigner/ContentSignerParameters.java	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/src/jdk.jartool/share/classes/com/sun/jarsigner/ContentSignerParameters.java	Thu Jun 11 20:18:55 2015 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -34,8 +34,10 @@
  *
  * @since 1.5
  * @author Vincent Ryan
+ * @deprecated This package has been deprecated.
  */
 @jdk.Exported
+@Deprecated
 public interface ContentSignerParameters {
 
     /**
--- a/jdk/src/jdk.jartool/share/classes/com/sun/jarsigner/package-info.java	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/src/jdk.jartool/share/classes/com/sun/jarsigner/package-info.java	Thu Jun 11 20:18:55 2015 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -29,7 +29,10 @@
  * Clients may override the default signing mechanism of the <tt>jarsigner</tt>
  * tool by supplying an alternative implementation of
  * {@link com.sun.jarsigner.ContentSigner}.
+ *
+ * This package has been deprecated.
  */
 
 @jdk.Exported
+@Deprecated
 package com.sun.jarsigner;
--- a/jdk/src/jdk.jartool/share/classes/sun/security/tools/jarsigner/Main.java	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/src/jdk.jartool/share/classes/sun/security/tools/jarsigner/Main.java	Thu Jun 11 20:18:55 2015 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -75,7 +75,7 @@
  * @author Roland Schemers
  * @author Jan Luehe
  */
-
+@SuppressWarnings("deprecation")
 public class Main {
 
     // for i18n
@@ -396,9 +396,15 @@
             } else if (collator.compare(flags, "-altsigner") ==0) {
                 if (++n == args.length) usageNoArg();
                 altSignerClass = args[n];
+                System.err.println(
+                        rb.getString("This.option.is.deprecated") +
+                                "-altsigner");
             } else if (collator.compare(flags, "-altsignerpath") ==0) {
                 if (++n == args.length) usageNoArg();
                 altSignerClasspath = args[n];
+                System.err.println(
+                        rb.getString("This.option.is.deprecated") +
+                                "-altsignerpath");
             } else if (collator.compare(flags, "-sectionsonly") ==0) {
                 signManifest = false;
             } else if (collator.compare(flags, "-internalsf") ==0) {
@@ -2306,6 +2312,7 @@
      * @param args The command-line arguments to jarsigner.
      * @param zipFile The original source Zip file.
      */
+    @SuppressWarnings("deprecation")
     public Block generateBlock(PrivateKey privateKey,
                                String sigalg,
                                X509Certificate[] certChain,
@@ -2331,6 +2338,7 @@
         /*
          * Construct a new signature block.
          */
+        @SuppressWarnings("deprecation")
         Block(SignatureFile sfg, PrivateKey privateKey, String sigalg,
             X509Certificate[] certChain, boolean externalSF, String tsaUrl,
             X509Certificate tsaCert, String tSAPolicyID, String tSADigestAlg,
@@ -2451,6 +2459,7 @@
 /*
  * This object encapsulates the parameters used to perform content signing.
  */
+@SuppressWarnings("deprecation")
 class JarSignerParameters implements ContentSignerParameters {
 
     private String[] args;
--- a/jdk/src/jdk.jartool/share/classes/sun/security/tools/jarsigner/Resources.java	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/src/jdk.jartool/share/classes/sun/security/tools/jarsigner/Resources.java	Thu Jun 11 20:18:55 2015 -0700
@@ -44,6 +44,7 @@
         {"signerClass.is.not.a.signing.mechanism", "{0} is not a signing mechanism"},
         {"jarsigner.error.", "jarsigner error: "},
         {"Illegal.option.", "Illegal option: "},
+        {"This.option.is.deprecated", "This option is deprecated: "},
         {".keystore.must.be.NONE.if.storetype.is.{0}",
                 "-keystore must be NONE if -storetype is {0}"},
         {".keypass.can.not.be.specified.if.storetype.is.{0}",
@@ -91,9 +92,11 @@
         {".tsadigestalg.algorithm.of.digest.data.in.timestamping.request",
                 "[-tsadigestalg <algorithm>] algorithm of digest data in timestamping request"},
         {".altsigner.class.class.name.of.an.alternative.signing.mechanism",
-                "[-altsigner <class>]        class name of an alternative signing mechanism"},
+                "[-altsigner <class>]        class name of an alternative signing mechanism\n" +
+                "                            (This option has been deprecated.)"},
         {".altsignerpath.pathlist.location.of.an.alternative.signing.mechanism",
-                "[-altsignerpath <pathlist>] location of an alternative signing mechanism"},
+                "[-altsignerpath <pathlist>] location of an alternative signing mechanism\n" +
+                "                            (This option has been deprecated.)"},
         {".internalsf.include.the.SF.file.inside.the.signature.block",
                 "[-internalsf]               include the .SF file inside the signature block"},
         {".sectionsonly.don.t.compute.hash.of.entire.manifest",
--- a/jdk/src/jdk.jartool/share/classes/sun/security/tools/jarsigner/TimestampedSigner.java	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/src/jdk.jartool/share/classes/sun/security/tools/jarsigner/TimestampedSigner.java	Thu Jun 11 20:18:55 2015 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -45,7 +45,7 @@
  *
  * @author Vincent Ryan
  */
-
+@SuppressWarnings("deprecation")
 public final class TimestampedSigner extends ContentSigner {
 
     /*
--- a/jdk/src/jdk.jdi/share/classes/com/sun/tools/jdi/VirtualMachineManagerService.java	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/tools/jdi/VirtualMachineManagerService.java	Thu Jun 11 20:18:55 2015 -0700
@@ -37,7 +37,6 @@
     /**
      * Replaces the default connector.
      *
-     * @return the default {@link LaunchingConnector}
      * @throws java.lang.IllegalArgumentException if the given
      * connector is not a member of the list returned by
      * {@link #launchingConnectors}
--- a/jdk/src/jdk.jvmstat/share/classes/sun/jvmstat/monitor/HostIdentifier.java	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/src/jdk.jvmstat/share/classes/sun/jvmstat/monitor/HostIdentifier.java	Thu Jun 11 20:18:55 2015 -0700
@@ -81,16 +81,15 @@
  * valid HostIdentifier strings:
  *
  * <ul>
- *   <li><p>&lt null &gt - transformed into "//localhost"</p></li>
- *   <li><p>localhost - transformed into "//localhost"</p></li>
- *   <li><p>hostname - transformed into "//hostname"</p></li>
- *   <li><p>hostname:port - transformed into "//hostname:port"</p></li>
- *   <li><p>proto:hostname - transformed into "proto://hostname"</p></li>
- *   <li><p>proto:hostname:port - transformed into
- *          "proto://hostname:port"</p></li>
- *   <li><p>proto://hostname:port</p></li>
+ *   <li>{@code <null>} - transformed into "//localhost"</li>
+ *   <li>localhost - transformed into "//localhost"</li>
+ *   <li>hostname - transformed into "//hostname"</li>
+ *   <li>hostname:port - transformed into "//hostname:port"</li>
+ *   <li>proto:hostname - transformed into "proto://hostname"</li>
+ *   <li>proto:hostname:port - transformed into
+ *          "proto://hostname:port"</li>
+ *   <li>proto://hostname:port</li>
  * </ul>
- * </p>
  *
  * @see URI
  * @see VmIdentifier
--- a/jdk/src/jdk.jvmstat/share/classes/sun/jvmstat/monitor/MonitoredVm.java	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/src/jdk.jvmstat/share/classes/sun/jvmstat/monitor/MonitoredVm.java	Thu Jun 11 20:18:55 2015 -0700
@@ -74,9 +74,10 @@
      *
      * @param patternString a string containing a pattern as described in
      *                      {@link java.util.regex.Pattern}.
-     * @return List<Monitor> - a List of {@link Monitor} objects that can be used to
+     * @return {@code List<Monitor>} - a List of {@link Monitor}
+     *                objects that can be used to
      *                monitor the instrumentation objects whose names match
-     *                the given pattern. If no instrumentation objects have`
+     *                the given pattern. If no instrumentation objects have
      *                names matching the given pattern, then an empty List
      *                is returned.
      * @throws MonitorException Thrown if an error occurs while communicating
--- a/jdk/src/jdk.jvmstat/share/classes/sun/jvmstat/monitor/VmIdentifier.java	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/src/jdk.jvmstat/share/classes/sun/jvmstat/monitor/VmIdentifier.java	Thu Jun 11 20:18:55 2015 -0700
@@ -39,86 +39,85 @@
  *      [<I>protocol</I>:][<I>//</I>]<I><B>lvmid</B></I>[<I>@hostname</I>][<I>:port</I>][<I>/servername</I>]
  * </pre>
  * The only required component of this string is the Local Virtual Machine
- * Identifier, or <tt>lvmid</tt>, which uniquely identifies the target
+ * Identifier, or {@code lvmid}, which uniquely identifies the target
  * Java Virtual Machine on a host. The optional components of the VmIdentifier
  * include:
  * <ul>
- *   <li><p><tt>protocol</tt> - The communications protocol. A VmIdentifier
- *          omitting the protocol must be resolved against a HostIdentifier
- *          using {@link HostIdentifier#resolve}.
- *       </p></li>
- *   <li><p><tt>hostname</tt> - A hostname or IP address indicating the target
- *          host. A VmIdentifier omitting the protocol must be resolved
- *          against a HostIdentifier using {@link HostIdentifier#resolve}.
- *       </p></li>
- *   <li><p><tt>port</tt> - The port for the communications protocol.
- *          Treatment of the <tt>port</tt> parameter is implementation
- *          (protocol) specific. A VmIdentifier omitting the protocol should
- *          be resolved against a HostIdentifier using
- *          {@link HostIdentifier#resolve}.
- *       </p></li>
- *   <li><p><tt>servername</tt> - The treatment of the Path, Query, and
- *          Fragment components of the VmIdentifier are implementation
- *          (protocol) dependent. A VmIdentifier omitting the protocol should
- *          be resolved against a HostIdentifier using
- *          {@link HostIdentifier#resolve}.
- *       </p></li>
+ *   <li>{@code protocol} - The communications protocol. A VmIdentifier
+ *       omitting the protocol must be resolved against a HostIdentifier
+ *       using {@link HostIdentifier#resolve}.
+ *       </li>
+ *   <li>{@code hostname} - A hostname or IP address indicating the target
+ *       host. A VmIdentifier omitting the protocol must be resolved
+ *       against a HostIdentifier using {@link HostIdentifier#resolve}.
+ *       </li>
+ *   <li>{@code port} - The port for the communications protocol.
+ *       Treatment of the {@code port} parameter is implementation
+ *       (protocol) specific. A VmIdentifier omitting the protocol should
+ *       be resolved against a HostIdentifier using
+ *       {@link HostIdentifier#resolve}.
+ *       </li>
+ *   <li>{@code servername} - The treatment of the Path, Query, and
+ *       Fragment components of the VmIdentifier are implementation
+ *       (protocol) dependent. A VmIdentifier omitting the protocol should
+ *       be resolved against a HostIdentifier using
+ *       {@link HostIdentifier#resolve}.
+ *       </li>
  * </ul>
  * <p>
  * All VmIdentifier instances are constructed as absolute, hierarchical URIs.
  * The constructors will accept relative (and even some malformed,
  * though convenient) URI strings. Such strings are transformed into
  * legitimate, absolute URI strings.
- * </p>
  * <p>
  * With the exception of <em>file:</em> based VmIdentifier strings, all
- * VmIdentifier strings must include a <tt>lvmid</tt>. Attempting to construct
- * a non-file based VmIdentifier that doesn't include a <tt>lvmid</tt>
- * component will result in a <tt>MonitorException</tt>.
- * </p>
+ * VmIdentifier strings must include a {@code lvmid}. Attempting to construct
+ * a non-file based VmIdentifier that doesn't include a {@code lvmid}
+ * component will result in a {@code MonitorException}.
  * <p>
  * Here are some examples of VmIdentifier strings.
  * <ul>
- *    <li><p>Relative URIs</p></li>
+ *    <li>Relative URIs
  *      <ul>
- *         <li><p><em>1234</em> - Specifies the Java Virtual Machine
- *                identified by lvmid <em>1234</em> on an unnamed host.
- *                This string is transformed into the absolute form
- *                <em>//1234</em>, which must be resolved against a
- *                HostIdentifier.
- *         </p></li>
- *         <li><p><em>1234@hostname</em> - Specifies the Java Virtual
- *                Machine identified by lvmid <em>1234</em> on host
- *                <em>hostname</em> with an unnamed protocol.
- *                This string is transformed into the absolute form
- *                <em>//1234@hostname</em>, which must be resolved against
- *                a HostIdentifier.
- *         </p></li>
- *         <li><p><em>1234@hostname:2099</em> - Specifies the Java Virtual
- *                Machine identified by lvmid <em>1234</em> on host
- *                <em>hostname</em> with an unnamed protocol, but with
- *                port <em>2099</em>. This string is transformed into
- *                the absolute form <em>//1234@hostname:2099</em>, which
- *                must be resolved against a HostIdentifier.
- *         </p></li>
+ *         <li><em>1234</em> - Specifies the Java Virtual Machine
+ *             identified by lvmid <em>1234</em> on an unnamed host.
+ *             This string is transformed into the absolute form
+ *             <em>//1234</em>, which must be resolved against a
+ *             HostIdentifier.
+ *         </li>
+ *         <li><em>1234@hostname</em> - Specifies the Java Virtual
+ *             Machine identified by lvmid <em>1234</em> on host
+ *             <em>hostname</em> with an unnamed protocol.
+ *             This string is transformed into the absolute form
+ *             <em>//1234@hostname</em>, which must be resolved against
+ *             a HostIdentifier.
+ *         </li>
+ *         <li><em>1234@hostname:2099</em> - Specifies the Java Virtual
+ *             Machine identified by lvmid <em>1234</em> on host
+ *             <em>hostname</em> with an unnamed protocol, but with
+ *             port <em>2099</em>. This string is transformed into
+ *             the absolute form <em>//1234@hostname:2099</em>, which
+ *             must be resolved against a HostIdentifier.
+ *         </li>
  *      </ul>
- *    <li><p>Absolute URIs</p></li>
+ *    </li>
+ *    <li>Absolute URIs
  *      <ul>
- *         <li><p><em>rmi://1234@hostname:2099/remoteobjectname</em> -
- *                Specifies the Java Virtual Machine identified by lvmid
- *                <em>1234</em> on host <em>hostname</em> accessed
- *                using the <em>rmi:</em> protocol through the rmi remote
- *                object named <em>remoteobjectname</em> as registered with
- *                the <em>rmiserver</em> on port <em>2099</em> on host
- *                <em>hostname</em>.
- *         </p></li>
- *         <li><p><em>file:/path/file</em> - Identifies a Java Virtual Machine
- *                through accessing a special file based protocol to use as
- *                the communications mechanism.
- *         </p></li>
+ *         <li><em>rmi://1234@hostname:2099/remoteobjectname</em> -
+ *             Specifies the Java Virtual Machine identified by lvmid
+ *             <em>1234</em> on host <em>hostname</em> accessed
+ *             using the <em>rmi:</em> protocol through the rmi remote
+ *             object named <em>remoteobjectname</em> as registered with
+ *             the <em>rmiserver</em> on port <em>2099</em> on host
+ *             <em>hostname</em>.
+ *         </li>
+ *         <li><em>file:/path/file</em> - Identifies a Java Virtual Machine
+ *             through accessing a special file based protocol to use as
+ *             the communications mechanism.
+ *         </li>
  *      </ul>
+ *    </li>
  * </ul>
- * </p>
  *
  * @see URI
  * @see HostIdentifier
@@ -236,16 +235,14 @@
      * missing components will have result in the HostIdentifier assigning
      * assumed defaults that allow the VmIdentifier to be resolved according
      * to those defaults.
-     * </p>
      * <p>
-     * For example, a VmIdentifier that specifies only a <tt>lvmid</tt>
+     * For example, a VmIdentifier that specifies only a {@code lvmid}
      * will result in a HostIdentifier for <em>localhost</em> utilizing
      * the default local protocol, <em>local:</em>. A VmIdentifier that
-     * specifies both a <tt>vmid</tt> and a <tt>hostname</tt> will result
+     * specifies both a {@code vmid} and a {@code hostname} will result
      * in a HostIdentifier for the specified host with the default remote
      * protocol, <em>rmi:</em>, using the protocol defaults for the
-     * <tt>port</tt> and <tt>servername</tt> components.
-     * </p>
+     * {@code port} and {@code servername} components.
      *
      * @return HostIdentifier - the host identifier for the host containing
      *                          the Java Virtual Machine represented by this
--- a/jdk/src/jdk.jvmstat/share/classes/sun/jvmstat/perfdata/monitor/AbstractPerfDataBuffer.java	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/src/jdk.jvmstat/share/classes/sun/jvmstat/perfdata/monitor/AbstractPerfDataBuffer.java	Thu Jun 11 20:18:55 2015 -0700
@@ -108,7 +108,8 @@
      *
      * @param patternString  a string containing a pattern as described in
      *                       {@link java.util.regex.Pattern}.
-     * @return List<Monitor> - a List of {@link Monitor} objects that can be used to
+     * @return {@code List<Monitor>} - a List of {@link Monitor}
+     *                objects that can be used to
      *                monitor the instrumentation objects whose names match
      *                the given pattern. If no instrumentation objects have`
      *                names matching the given pattern, then an empty List
--- a/jdk/src/jdk.jvmstat/share/classes/sun/jvmstat/perfdata/monitor/PerfDataBufferImpl.java	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/src/jdk.jvmstat/share/classes/sun/jvmstat/perfdata/monitor/PerfDataBufferImpl.java	Thu Jun 11 20:18:55 2015 -0700
@@ -266,7 +266,8 @@
      *
      * @param patternString a string containing a pattern as described in
      *                      {@link java.util.regex.Pattern}.
-     * @return List<Monitor> - a List of {@link Monitor} objects that can be used to
+     * @return {@code List<Monitor>} - a List of {@link Monitor}
+     *                objects that can be used to
      *                monitor the instrumentation objects whose names match
      *                the given pattern. If no instrumentation objects have`
      *                names matching the given pattern, then an empty List
--- a/jdk/src/jdk.naming.dns/share/classes/com/sun/jndi/dns/DnsName.java	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/src/jdk.naming.dns/share/classes/com/sun/jndi/dns/DnsName.java	Thu Jun 11 20:18:55 2015 -0700
@@ -580,7 +580,7 @@
      * Serializes only the domain name string, for compactness and to avoid
      * any implementation dependency.
      *
-     * @serialdata      The domain name string.
+     * @serialData      The domain name string.
      */
     private void writeObject(java.io.ObjectOutputStream s)
             throws java.io.IOException {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/com/sun/corba/7130985/CorbaExceptionsCompileTest.java	Thu Jun 11 20:18:55 2015 -0700
@@ -0,0 +1,119 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/**
+ * @test
+ * @bug 7130985
+ * @summary Four helper classes missing in Sun JDK
+ * @library /lib/testlibrary
+ * @build jdk.testlibrary.*
+ * @run main CorbaExceptionsCompileTest
+ */
+
+import java.io.*;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.rmi.RemoteException;
+import org.omg.CORBA.ORBPackage.InvalidName;
+import org.omg.CORBA.TypeCodePackage.BadKind;
+import org.omg.CORBA.TypeCodePackage.Bounds;
+
+import jdk.testlibrary.FileUtils;
+import jdk.testlibrary.JDKToolLauncher;
+
+public class CorbaExceptionsCompileTest implements CorbaExceptionsTest {
+
+    public CorbaExceptionsCompileTest() {
+        super();
+    }
+
+    public void testExceptionInvalidName()
+        throws java.rmi.RemoteException, InvalidName {}
+
+    public void testExceptionBounds()
+        throws java.rmi.RemoteException, Bounds {}
+
+    public void testExceptionBadKind()
+        throws java.rmi.RemoteException, BadKind {}
+
+    public void testExceptionCorba_Bounds()
+        throws java.rmi.RemoteException, org.omg.CORBA.Bounds {}
+
+    public static void main(String[] args) throws Exception {
+        final File f = new File(
+            CorbaExceptionsCompileTest.class.getProtectionDomain()
+                .getCodeSource().getLocation().getPath());
+        System.out.println(f.getCanonicalPath());
+        ProcessBuilder pb = new ProcessBuilder("ls", "-l");
+        pb.directory(f);
+        Process p = pb.start();
+        p.waitFor();
+        if (p.exitValue() == 0) {
+            try (BufferedReader br = new BufferedReader(
+                    new InputStreamReader(p.getInputStream()))) {
+                StringBuilder builder = new StringBuilder();
+                String line = null;
+                while ( (line = br.readLine()) != null) {
+                    builder.append(line + "\n");
+                }
+                String result = builder.toString();
+                System.out.println(result);
+            }
+        }
+
+        Path outDir = Paths.get("CorbaExceptionsCompileTest-compiled");
+        outDir = Files.createDirectory(outDir).toAbsolutePath();
+        JDKToolLauncher launcher = JDKToolLauncher.createUsingTestJDK("rmic");
+        launcher.addToolArg("-classpath").addToolArg(f.getCanonicalPath())
+            .addToolArg("-d").addToolArg(outDir.toString())
+            .addToolArg("-iiop").addToolArg("CorbaExceptionsCompileTest");
+
+        pb = new ProcessBuilder(launcher.getCommand());
+        pb.directory(f);
+        System.out.println("Working Directory: " + pb.directory());
+        System.out.println("CorbaExceptionsCompileTest.class exists: "
+            + new File(f, "CorbaExceptionsCompileTest.class").exists());
+
+        p = pb.start();
+        p.waitFor();
+        if (p.exitValue() != 0) {
+            try (BufferedReader br = new BufferedReader(
+                    new InputStreamReader(p.getInputStream()))) {
+                StringBuilder builder = new StringBuilder();
+                String line = null;
+                while ( (line = br.readLine()) != null) {
+                    builder.append(line + "\n");
+                }
+                String result = builder.toString();
+                System.out.println(result);
+                throw new RuntimeException(launcher.getCommand() +
+                    " -iiop CorbaExceptionsCompileTest failed with status: "
+                    + p.exitValue());
+            }
+        }
+
+        if (Files.exists(outDir))
+            FileUtils.deleteFileTreeWithRetry(outDir);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/com/sun/corba/7130985/CorbaExceptionsTest.java	Thu Jun 11 20:18:55 2015 -0700
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.rmi.Remote;
+import org.omg.CORBA.ORBPackage.InvalidName;
+import org.omg.CORBA.TypeCodePackage.BadKind;
+import org.omg.CORBA.TypeCodePackage.Bounds;
+
+public interface CorbaExceptionsTest extends Remote {
+     public void testExceptionInvalidName() throws java.rmi.RemoteException, InvalidName;
+     public void testExceptionBounds() throws java.rmi.RemoteException, Bounds;
+     public void testExceptionBadKind() throws java.rmi.RemoteException, BadKind;
+     public void testExceptionCorba_Bounds() throws java.rmi.RemoteException, org.omg.CORBA.Bounds;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/io/FilePermission/FilePermissionCollection.java	Thu Jun 11 20:18:55 2015 -0700
@@ -0,0 +1,171 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8056179
+ * @summary Unit test for FilePermissionCollection subclass
+ */
+
+import java.io.FilePermission;
+import java.security.Permission;
+import java.security.PermissionCollection;
+import java.security.SecurityPermission;
+import java.util.Enumeration;
+
+public class FilePermissionCollection {
+
+    public static void main(String[] args) throws Exception {
+
+        int testFail = 0;
+
+        FilePermission perm = new FilePermission("/tmp/foo", "read");
+        PermissionCollection perms = perm.newPermissionCollection();
+
+        // test 1
+        System.out.println
+            ("test 1: add throws IllegalArgExc for wrong perm type");
+        try {
+            perms.add(new SecurityPermission("createAccessControlContext"));
+            System.err.println("Expected IllegalArgumentException");
+            testFail++;
+        } catch (IllegalArgumentException iae) {}
+
+        // test 2
+        System.out.println("test 2: implies returns false for wrong perm type");
+        if (perms.implies(new SecurityPermission("getPolicy"))) {
+            System.err.println("Expected false, returned true");
+            testFail++;
+        }
+
+        // test 3
+        System.out.println("test 3: implies returns true for match on " +
+                           "name and action");
+        perms.add(new FilePermission("/tmp/foo", "read"));
+        if (!perms.implies(new FilePermission("/tmp/foo", "read"))) {
+            System.err.println("Expected true, returned false");
+            testFail++;
+        }
+
+        // test 4
+        System.out.println("test 4: implies returns false for match on " +
+                           "name but not action");
+        if (perms.implies(new FilePermission("/tmp/foo", "write"))) {
+            System.err.println("Expected false, returned true");
+            testFail++;
+        }
+
+        // test 5
+        System.out.println("test 5: implies returns true for match on " +
+                           "name and subset of actions");
+        perms.add(new FilePermission("/tmp/bar", "read, write"));
+        if (!perms.implies(new FilePermission("/tmp/bar", "write"))) {
+            System.err.println("Expected true, returned false");
+            testFail++;
+        }
+
+        // test 6
+        System.out.println("test 6: implies returns true for aggregate " +
+                           "match on name and action");
+        perms.add(new FilePermission("/tmp/baz", "read"));
+        perms.add(new FilePermission("/tmp/baz", "write"));
+        if (!perms.implies(new FilePermission("/tmp/baz", "read"))) {
+            System.err.println("Expected true, returned false");
+            testFail++;
+        }
+        if (!perms.implies(new FilePermission("/tmp/baz", "write,read"))) {
+            System.err.println("Expected true, returned false");
+            testFail++;
+        }
+
+        // test 7
+        System.out.println("test 7: implies returns true for wildcard " +
+                           "and match on action");
+        perms.add(new FilePermission("/usr/tmp/*", "read"));
+        if (!perms.implies(new FilePermission("/usr/tmp/foo", "read"))) {
+            System.err.println("Expected true, returned false");
+            testFail++;
+        }
+
+        // test 8
+        System.out.println
+            ("test 8: implies returns false for non-match on wildcard");
+        if (perms.implies(new FilePermission("/usr/tmp/bar/foo", "read"))) {
+            System.err.println("Expected false, returned true");
+            testFail++;
+        }
+
+        // test 9
+        System.out.println
+            ("test 9: implies returns true for deep wildcard match");
+        perms.add(new FilePermission("/usr/tmp/-", "read"));
+        if (!perms.implies(new FilePermission("/usr/tmp/bar/foo", "read"))) {
+            System.err.println("Expected true, returned false");
+            testFail++;
+        }
+
+        // test 10
+        System.out.println("test 10: implies returns true for relative match");
+        perms.add(new FilePermission(".", "read"));
+        if (!perms.implies(new FilePermission(System.getProperty("user.dir"),
+                                              "read"))) {
+            System.err.println("Expected true, returned false");
+            testFail++;
+        }
+
+        // test 11
+        System.out.println("test 11: implies returns true for all " +
+                           "wildcard and match on action");
+        perms.add(new FilePermission("<<ALL FILES>>", "read"));
+        if (!perms.implies(new FilePermission("/tmp/foobar", "read"))) {
+            System.err.println("Expected true, returned false");
+            testFail++;
+        }
+
+        // test 12
+        System.out.println("test 12: implies returns false for wildcard " +
+                           "and non-match on action");
+        if (perms.implies(new FilePermission("/tmp/foobar", "write"))) {
+            System.err.println("Expected false, returned true");
+            testFail++;
+        }
+
+        // test 13
+        System.out.println("test 13: elements returns correct number of perms");
+        int numPerms = 0;
+        Enumeration<Permission> e = perms.elements();
+        while (e.hasMoreElements()) {
+            numPerms++;
+            System.out.println(e.nextElement());
+        }
+        // the two "/tmp/baz" entries were combined into one
+        if (numPerms != 7) {
+            System.err.println("Expected 7, got " + numPerms);
+            testFail++;
+        }
+
+        if (testFail > 0) {
+            throw new Exception(testFail + " test(s) failed");
+        }
+    }
+}
--- a/jdk/test/java/lang/Runtime/exec/LotsOfOutput.java	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/test/java/lang/Runtime/exec/LotsOfOutput.java	Thu Jun 11 20:18:55 2015 -0700
@@ -48,20 +48,21 @@
         UnixCommands.ensureCommandsAvailable("cat");
 
         Process p = runtime.exec(UnixCommands.cat() + " /dev/zero");
-        long initMemory = usedMemory();
-        boolean growing = false;
+        long prev = usedMemory();
+        int growing = 0;
         for (int i = 1; i < 10; i++) {
             Thread.sleep(100);
             long used = usedMemory();
-            if (used != initMemory) {
-                System.out.printf("consuming memory: i: %d, initial: %d, used: %d, delta: %d%n",
-                        i, initMemory, used, used - initMemory);
+            if (used != prev) {
+                System.out.printf("consuming memory: i: %d, prev: %d, used: %d, delta: %d%n",
+                        i, prev, used, used - prev);
             }
-            if (used > initMemory + THRESHOLD)
-                growing = true;
+            if (used > prev + THRESHOLD)
+                growing += 1;
+            prev = used;
         }
-        if (growing)
-            throw new Exception("Process consumes memory.");
+        if (growing > 2)
+            throw new Exception("Process consumes memory: growing " + growing);
 
     }
 }
--- a/jdk/test/java/lang/invoke/8022701/InvokeSeveralWays.java	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/test/java/lang/invoke/8022701/InvokeSeveralWays.java	Thu Jun 11 20:18:55 2015 -0700
@@ -38,12 +38,19 @@
             failures++;
         } catch (InvocationTargetException e) {
             Throwable c = e.getCause();
-            if (expected.isInstance(c))
-               System.out.println("EXPECTED: " + expected.getName() + ", "+ c);
-            else {
-               failures++;
-               System.out.println("FAIL: Unexpected wrapped exception " + c);
-               e.printStackTrace(System.out);
+            if (BootstrapMethodError.class.isInstance(c)) {
+                c = c.getCause();
+                if (expected.isInstance(c))
+                    System.out.println("EXPECTED: " + expected.getName() + ", "+ c);
+                else {
+                    failures++;
+                    System.out.println("FAIL: Unexpected wrapped exception " + c);
+                    e.printStackTrace(System.out);
+                }
+            } else {
+                failures++;
+                System.out.println("FAIL: Exception from MethodHandle invocation not wrapped in BootstrapMethodError " + c);
+                e.printStackTrace(System.out);
             }
         } catch (Throwable e) {
             failures++;
@@ -74,14 +81,19 @@
             Invoker.invoke();
             System.out.println("FAIL: No exception throw, probably failed to load modified bytecodes for MethodSupplier");
             failures++;
-        } catch (Throwable e) {
-            if (expected.isInstance(e))
-               System.out.println("EXPECTED: " + expected.getName() + ", "+ e);
+        } catch (BootstrapMethodError e) {
+            Throwable c = e.getCause();
+            if (expected.isInstance(c))
+                System.out.println("EXPECTED: " + expected.getName() + ", "+ c);
             else {
+                failures++;
+                System.out.println("FAIL: Unexpected exception has been caught " + c);
+                e.printStackTrace(System.out);
+            }
+        } catch (Throwable e) {
             failures++;
-            System.out.println("FAIL: Unexpected exception has been caught " + e);
+            System.out.println("FAIL: Exception from MethodHandle invocation not wrapped in BootstrapMethodError " + e);
             e.printStackTrace(System.out);
-            }
         }
         System.out.println();
         try {
--- a/jdk/test/java/lang/invoke/LFCaching/LFGarbageCollectedTest.java	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/test/java/lang/invoke/LFCaching/LFGarbageCollectedTest.java	Thu Jun 11 20:18:55 2015 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -24,6 +24,7 @@
 /*
  * @test LFGarbageCollectedTest
  * @bug 8046703
+ * @ignore 8078602
  * @summary Test verifies that lambda forms are garbage collected
  * @author kshefov
  * @library /lib/testlibrary/jsr292 /lib/testlibrary
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/net/SocketPermission/SocketPermissionCollection.java	Thu Jun 11 20:18:55 2015 -0700
@@ -0,0 +1,147 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8056179
+ * @summary Unit test for PermissionCollection subclasses
+ */
+
+import java.net.SocketPermission;
+import java.security.Permission;
+import java.security.PermissionCollection;
+import java.security.SecurityPermission;
+import java.util.Enumeration;
+
+public class SocketPermissionCollection {
+
+    public static void main(String[] args) throws Exception {
+
+        int testFail = 0;
+
+        SocketPermission perm = new SocketPermission("www.example.com",
+                                                     "connect");
+        PermissionCollection perms = perm.newPermissionCollection();
+
+        // test 1
+        System.out.println
+            ("test 1: add throws IllegalArgExc for wrong perm type");
+        try {
+            perms.add(new SecurityPermission("createAccessControlContext"));
+            System.err.println("Expected IllegalArgumentException");
+            testFail++;
+        } catch (IllegalArgumentException iae) {}
+
+        // test 2
+        System.out.println("test 2: implies returns false for wrong perm type");
+        if (perms.implies(new SecurityPermission("getPolicy"))) {
+            System.err.println("Expected false, returned true");
+            testFail++;
+        }
+
+        // test 3
+        System.out.println
+            ("test 3: implies returns true for match on name and action");
+        perms.add(new SocketPermission("www.example.com", "connect"));
+        if (!perms.implies(new SocketPermission("www.example.com", "connect"))) {
+            System.err.println("Expected true, returned false");
+            testFail++;
+        }
+
+        // test 4
+        System.out.println
+            ("test 4: implies returns false for match on name but not action");
+        if (perms.implies(new SocketPermission("www.example.com", "accept"))) {
+            System.err.println("Expected false, returned true");
+            testFail++;
+        }
+
+        // test 5
+        System.out.println("test 5: implies returns true for match on " +
+                           "name and subset of actions");
+        perms.add(new SocketPermission("www.example.org", "accept, connect"));
+        if (!perms.implies(new SocketPermission("www.example.org", "connect"))) {
+            System.err.println("Expected true, returned false");
+            testFail++;
+        }
+
+        // test 6
+        System.out.println("test 6: implies returns true for aggregate " +
+                           "match on name and action");
+        perms.add(new SocketPermission("www.example.us", "accept"));
+        perms.add(new SocketPermission("www.example.us", "connect"));
+        if (!perms.implies(new SocketPermission("www.example.us", "accept"))) {
+            System.err.println("Expected true, returned false");
+            testFail++;
+        }
+        if (!perms.implies(new SocketPermission("www.example.us",
+                                                "connect,accept"))) {
+            System.err.println("Expected true, returned false");
+            testFail++;
+        }
+
+        // test 7
+        System.out.println("test 7: implies returns true for wildcard " +
+                           "and match on action");
+        perms.add(new SocketPermission("*.example.edu", "resolve"));
+        if (!perms.implies(new SocketPermission("foo.example.edu", "resolve"))) {
+            System.err.println("Expected true, returned false");
+            testFail++;
+        }
+
+        // test 8
+        System.out.println("test 8: implies returns false for non-match " +
+                           "on wildcard");
+        if (perms.implies(new SocketPermission("foo.example.edu", "connect"))) {
+            System.err.println("Expected false, returned true");
+            testFail++;
+        }
+
+        // test 9
+        System.out.println("test 9: implies returns true for matching " +
+                           "port range and action");
+        perms.add(new SocketPermission("204.160.241.0:1024-65535", "connect"));
+        if (!perms.implies(new SocketPermission("204.160.241.0:1025", "connect"))) {
+            System.err.println("Expected true, returned false");
+            testFail++;
+        }
+
+        // test 13
+        System.out.println("test 13: elements returns correct number of perms");
+        int numPerms = 0;
+        Enumeration<Permission> e = perms.elements();
+        while (e.hasMoreElements()) {
+            numPerms++;
+            System.out.println(e.nextElement());
+        }
+        // the two "/tmp/baz" entries were combined into one
+        if (numPerms != 5) {
+            System.err.println("Expected 5, got " + numPerms);
+            testFail++;
+        }
+
+        if (testFail > 0) {
+            throw new Exception(testFail + " test(s) failed");
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/security/BasicPermission/BasicPermissionCollection.java	Thu Jun 11 20:18:55 2015 -0700
@@ -0,0 +1,125 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8056179
+ * @summary Unit test for BasicPermissionCollection subclass
+ */
+
+import java.security.BasicPermission;
+import java.security.Permission;
+import java.security.PermissionCollection;
+import java.security.SecurityPermission;
+import java.util.Enumeration;
+
+public class BasicPermissionCollection {
+
+    public static void main(String[] args) throws Exception {
+
+        int testFail = 0;
+
+        TestPermission perm = new TestPermission("foo");
+        PermissionCollection perms = perm.newPermissionCollection();
+
+        // test 1
+        System.out.println("test 1: add throws IllegalArgumentExc");
+        try {
+            perms.add(new SecurityPermission("createAccessControlContext"));
+            System.err.println("Expected IllegalArgumentException");
+            testFail++;
+        } catch (IllegalArgumentException iae) {}
+
+        // test 2
+        System.out.println("test 2: implies returns false for wrong class");
+        if (perms.implies(new SecurityPermission("getPolicy"))) {
+            System.err.println("Expected false, returned true");
+            testFail++;
+        }
+
+        // test 3
+        System.out.println("test 3: implies returns true for match on name");
+        perms.add(new TestPermission("foo"));
+        if (!perms.implies(new TestPermission("foo"))) {
+            System.err.println("Expected true, returned false");
+            testFail++;
+        }
+
+        // test 4
+        System.out.println("test 4: implies returns true for wildcard match");
+        perms.add(new TestPermission("bar.*"));
+        if (!perms.implies(new TestPermission("bar.foo"))) {
+            System.err.println("Expected true, returned false");
+            testFail++;
+        }
+
+        // test 5
+        System.out.println
+            ("test 5: implies returns false for invalid wildcard");
+        perms.add(new TestPermission("baz*"));
+        if (perms.implies(new TestPermission("baz.foo"))) {
+            System.err.println("Expected false, returned true");
+            testFail++;
+        }
+
+        // test 6
+        System.out.println
+            ("test 6: implies returns true for deep wildcard match");
+        if (!perms.implies(new TestPermission("bar.foo.baz"))) {
+            System.err.println("Expected true, returned false");
+            testFail++;
+        }
+
+        // test 7
+        System.out.println
+            ("test 7: implies returns true for all wildcard match");
+        perms.add(new TestPermission("*"));
+        if (!perms.implies(new TestPermission("yes"))) {
+            System.err.println("Expected true, returned false");
+            testFail++;
+        }
+
+        // test 8
+        System.out.println("test 8: elements returns correct number of perms");
+        int numPerms = 0;
+        Enumeration<Permission> e = perms.elements();
+        while (e.hasMoreElements()) {
+            numPerms++;
+            System.out.println(e.nextElement());
+        }
+        if (numPerms != 4) {
+            System.err.println("Expected 4, got " + numPerms);
+            testFail++;
+        }
+
+        if (testFail > 0) {
+            throw new Exception(testFail + " test(s) failed");
+        }
+    }
+
+    private static class TestPermission extends BasicPermission {
+        TestPermission(String name) {
+            super(name);
+        }
+    }
+}
--- a/jdk/test/java/security/PermissionCollection/Concurrent.java	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/test/java/security/PermissionCollection/Concurrent.java	Thu Jun 11 20:18:55 2015 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -104,13 +104,11 @@
                     System.out.println(perm[perm.length-1] + " implies " + result);
                 }
 
-                synchronized (pc) {
-                    Enumeration en = pc.elements();
-                    while (en.hasMoreElements()) {
-                        Object obj = en.nextElement();
-                        if (debug) {
-                            System.out.println(obj);
-                        }
+                Enumeration en = pc.elements();
+                while (en.hasMoreElements()) {
+                    Object obj = en.nextElement();
+                    if (debug) {
+                        System.out.println(obj);
                     }
                 }
             }
@@ -151,13 +149,11 @@
                     }
                 }
 
-                synchronized (pc) {
-                    Enumeration en = pc.elements();
-                    while (en.hasMoreElements()) {
-                        Object obj = en.nextElement();
-                        if (debug) {
-                            System.out.println(obj);
-                        }
+                Enumeration en = pc.elements();
+                while (en.hasMoreElements()) {
+                    Object obj = en.nextElement();
+                    if (debug) {
+                        System.out.println(obj);
                     }
                 }
             }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/text/Format/DateFormat/LocaleDateFormats.java	Thu Jun 11 20:18:55 2015 -0700
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/**
+ * @test
+ * @bug 8080774
+ * @run testng/othervm -Djava.locale.providers=JRE,CLDR LocaleDateFormats
+ * @summary This file contains tests for JRE locales date formats
+ */
+
+import java.text.DateFormat;
+import java.util.Calendar;
+import java.util.Locale;
+import static org.testng.Assert.assertEquals;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+
+public class LocaleDateFormats {
+
+    @Test(dataProvider = "dateFormats")
+    public void testDateFormat(Locale loc, int style, int year, int month, int date, String expectedString) {
+        Calendar cal = Calendar.getInstance(loc);
+        cal.set(year, month-1, date);
+        // Create date formatter based on requested style and test locale
+        DateFormat df = DateFormat.getDateInstance(style, loc);
+        // Test the date format
+        assertEquals(df.format(cal.getTime()), expectedString);
+    }
+
+    @DataProvider(name = "dateFormats" )
+    private Object[][] dateFormats() {
+        return new Object[][] {
+            //8080774
+            //Locale, Format type, year, month, date, expected result
+            {localeEnSG, DateFormat.SHORT, 2015, 5, 6, "6/5/15"},
+            {localeEnSG, DateFormat.MEDIUM, 2015, 5, 6, "6 May, 2015"},
+            {localeEnSG, DateFormat.LONG, 2015, 5, 6, "6 May, 2015"},
+            {localeEnSG, DateFormat.FULL, 2015, 5, 6, "Wednesday, 6 May, 2015"}
+        };
+    }
+    // en_SG Locale instance
+    private static final Locale localeEnSG = new Locale("en", "SG");
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/util/Arrays/SortingIntBenchmarkTestJMH.java	Thu Jun 11 20:18:55 2015 -0700
@@ -0,0 +1,708 @@
+/*
+ * Copyright 2015 Goldman Sachs.
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import org.openjdk.jmh.annotations.Benchmark;
+import org.openjdk.jmh.annotations.BenchmarkMode;
+import org.openjdk.jmh.annotations.Measurement;
+import org.openjdk.jmh.annotations.Mode;
+import org.openjdk.jmh.annotations.OutputTimeUnit;
+import org.openjdk.jmh.annotations.Param;
+import org.openjdk.jmh.annotations.Scope;
+import org.openjdk.jmh.annotations.Setup;
+import org.openjdk.jmh.annotations.State;
+import org.openjdk.jmh.annotations.Warmup;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Random;
+import java.util.Set;
+import java.util.concurrent.TimeUnit;
+
+@State(Scope.Thread)
+@BenchmarkMode(Mode.Throughput)
+@OutputTimeUnit(TimeUnit.SECONDS)
+public class SortingIntBenchmarkTestJMH {
+    private static final int QUICKSORT_THRESHOLD = 286;
+    private static final int MAX_RUN_COUNT = 67;
+    private static final int INSERTION_SORT_THRESHOLD = 47;
+    public static final int MAX_VALUE = 1_000_000;
+
+    @Param({"pairFlipZeroPairFlip", "pairFlipOneHundredPairFlip"
+            , "zeroHi", "hiZeroLow", "hiFlatLow", "identical",
+            "randomDups", "randomNoDups", "sortedReversedSorted", "pairFlip", "endLessThan"})
+
+    public String listType;
+
+    private int[] array;
+    private static final int LIST_SIZE = 10_000_000;
+    public static final int NUMBER_OF_ITERATIONS = 10;
+
+    @Setup
+    public void setUp() {
+        Random random = new Random(123456789012345L);
+        this.array = new int[LIST_SIZE];
+        int threeQuarters = (int) (LIST_SIZE * 0.75);
+        if ("zeroHi".equals(this.listType)) {
+            for (int i = 0; i < threeQuarters; i++) {
+                this.array[i] = 0;
+            }
+            int k = 1;
+            for (int i = threeQuarters; i < LIST_SIZE; i++) {
+                this.array[i] = k;
+                k++;
+            }
+        }
+        else if ("hiFlatLow".equals(this.listType)) {
+            int oneThird = LIST_SIZE / 3;
+            for (int i = 0; i < oneThird; i++) {
+                this.array[i] = i;
+            }
+            int twoThirds = oneThird * 2;
+            int constant = oneThird - 1;
+            for (int i = oneThird; i < twoThirds; i++) {
+                this.array[i] = constant;
+            }
+            for (int i = twoThirds; i < LIST_SIZE; i++) {
+                this.array[i] = constant - i + twoThirds;
+            }
+        }
+        else if ("hiZeroLow".equals(this.listType)) {
+            int oneThird = LIST_SIZE / 3;
+            for (int i = 0; i < oneThird; i++) {
+                this.array[i] = i;
+            }
+            int twoThirds = oneThird * 2;
+            for (int i = oneThird; i < twoThirds; i++) {
+                this.array[i] = 0;
+            }
+            for (int i = twoThirds; i < LIST_SIZE; i++) {
+                this.array[i] = oneThird - i + twoThirds;
+            }
+        }
+        else if ("identical".equals(this.listType)) {
+            for (int i = 0; i < LIST_SIZE; i++) {
+                this.array[i] = 0;
+            }
+        }
+        else if ("randomDups".equals(this.listType)) {
+            for (int i = 0; i < LIST_SIZE; i++) {
+                this.array[i] = random.nextInt(1000);
+            }
+        }
+        else if ("randomNoDups".equals(this.listType)) {
+            Set<Integer> set = new HashSet();
+            while (set.size() < LIST_SIZE + 1) {
+                set.add(random.nextInt());
+            }
+            List<Integer> list = new ArrayList<>(LIST_SIZE);
+            list.addAll(set);
+            for (int i = 0; i < LIST_SIZE; i++) {
+                this.array[i] = list.get(i);
+            }
+        }
+        else if ("sortedReversedSorted".equals(this.listType)) {
+            for (int i = 0; i < LIST_SIZE / 2; i++) {
+                this.array[i] = i;
+            }
+            int num = 0;
+            for (int i = LIST_SIZE / 2; i < LIST_SIZE; i++) {
+                this.array[i] = LIST_SIZE - num;
+                num++;
+            }
+        }
+        else if ("pairFlip".equals(this.listType)) {
+            for (int i = 0; i < LIST_SIZE; i++) {
+                this.array[i] = i;
+            }
+            for (int i = 0; i < LIST_SIZE; i += 2) {
+                int temp = this.array[i];
+                this.array[i] = this.array[i + 1];
+                this.array[i + 1] = temp;
+            }
+        }
+        else if ("endLessThan".equals(this.listType)) {
+            for (int i = 0; i < LIST_SIZE - 1; i++) {
+                this.array[i] = 3;
+            }
+            this.array[LIST_SIZE - 1] = 1;
+        }
+        else if ("pairFlipZeroPairFlip".equals(this.listType)) {
+            //pairflip
+            for (int i = 0; i < 64; i++) {
+                this.array[i] = i;
+            }
+            for (int i = 0; i < 64; i += 2) {
+                int temp = this.array[i];
+                this.array[i] = this.array[i + 1];
+                this.array[i + 1] = temp;
+            }
+            //zero
+            for (int i = 64; i < this.array.length - 64; i++) {
+                this.array[i] = 0;
+            }
+            //pairflip
+            for (int i = this.array.length - 64; i < this.array.length; i++) {
+                this.array[i] = i;
+            }
+            for (int i = this.array.length - 64; i < this.array.length; i += 2) {
+                int temp = this.array[i];
+                this.array[i] = this.array[i + 1];
+                this.array[i + 1] = temp;
+            }
+        }
+        else if ("pairFlipOneHundredPairFlip".equals(this.listType)) {
+            //10, 5
+            for (int i = 0; i < 64; i++) {
+                if (i % 2 == 0) {
+                    this.array[i] = 10;
+                }
+                else {
+                    this.array[i] = 5;
+                }
+            }
+
+            //100
+            for (int i = 64; i < this.array.length - 64; i++) {
+                this.array[i] = 100;
+            }
+
+            //10, 5
+            for (int i = this.array.length - 64; i < this.array.length; i++) {
+                if (i % 2 == 0) {
+                    this.array[i] = 10;
+                }
+                else {
+                    this.array[i] = 5;
+                }
+            }
+        }
+    }
+
+    @Warmup(iterations = 20)
+    @Measurement(iterations = 10)
+    @Benchmark
+    public void sortNewWay() {
+        for (int i = 0; i < NUMBER_OF_ITERATIONS; i++) {
+            SortingIntTestJMH.sort(this.array, 0, this.array.length - 1, null, 0, 0);
+        }
+    }
+
+    @Warmup(iterations = 20)
+    @Measurement(iterations = 10)
+    @Benchmark
+    public void sortCurrentWay() {
+        for (int i = 0; i < NUMBER_OF_ITERATIONS; i++) {
+            Arrays.sort(this.array);
+        }
+    }
+
+    static void sort(int[] a, int left, int right,
+                     int[] work, int workBase, int workLen) {
+        // Use Quicksort on small arrays
+        if (right - left < QUICKSORT_THRESHOLD) {
+            SortingIntTestJMH.sort(a, left, right, true);
+            return;
+        }
+
+         /*
+         * Index run[i] is the start of i-th run
+         * (ascending or descending sequence).
+         */
+        int[] run = new int[MAX_RUN_COUNT + 1];
+        int count = 0;
+        run[0] = left;
+
+        // Check if the array is nearly sorted
+        for (int k = left; k < right; run[count] = k) {
+            while (k < right && a[k] == a[k + 1])
+                k++;
+            if (k == right) break;
+            if (a[k] < a[k + 1]) { // ascending
+                while (++k <= right && a[k - 1] <= a[k]) ;
+            }
+            else if (a[k] > a[k + 1]) { // descending
+                while (++k <= right && a[k - 1] >= a[k]) ;
+                for (int lo = run[count] - 1, hi = k; ++lo < --hi; ) {
+                    int t = a[lo];
+                    a[lo] = a[hi];
+                    a[hi] = t;
+                }
+            }
+            if (run[count] > left && a[run[count]] >= a[run[count] - 1]) {
+                count--;
+            }
+            /*
+             * The array is not highly structured,
+             * use Quicksort instead of merge sort.
+             */
+            if (++count == MAX_RUN_COUNT) {
+                sort(a, left, right, true);
+                return;
+            }
+        }
+
+        // Check special cases
+        // Implementation note: variable "right" is increased by 1.
+        if (run[count] == right++) {
+            run[++count] = right;
+        }
+        if (count <= 1) { // The array is already sorted
+            return;
+        }
+
+        // Determine alternation base for merge
+        byte odd = 0;
+        for (int n = 1; (n <<= 1) < count; odd ^= 1) {
+        }
+
+        // Use or create temporary array b for merging
+        int[] b;                 // temp array; alternates with a
+        int ao, bo;                 // array offsets from 'left'
+        int blen = right - left; // space needed for b
+        if (work == null || workLen < blen || workBase + blen > work.length) {
+            work = new int[blen];
+            workBase = 0;
+        }
+        if (odd == 0) {
+            System.arraycopy(a, left, work, workBase, blen);
+            b = a;
+            bo = 0;
+            a = work;
+            ao = workBase - left;
+        }
+        else {
+            b = work;
+            ao = 0;
+            bo = workBase - left;
+        }
+
+        // Merging
+        for (int last; count > 1; count = last) {
+            for (int k = (last = 0) + 2; k <= count; k += 2) {
+                int hi = run[k], mi = run[k - 1];
+                for (int i = run[k - 2], p = i, q = mi; i < hi; ++i) {
+                    if (q >= hi || p < mi && a[p + ao] <= a[q + ao]) {
+                        b[i + bo] = a[p++ + ao];
+                    }
+                    else {
+                        b[i + bo] = a[q++ + ao];
+                    }
+                }
+                run[++last] = hi;
+            }
+            if ((count & 1) != 0) {
+                for (int i = right, lo = run[count - 1]; --i >= lo;
+                     b[i + bo] = a[i + ao]
+                        ) {
+                }
+                run[++last] = right;
+            }
+            int[] t = a;
+            a = b;
+            b = t;
+            int o = ao;
+            ao = bo;
+            bo = o;
+        }
+    }
+
+    private static void sort(int[] a, int left, int right, boolean leftmost) {
+        int length = right - left + 1;
+
+        // Use insertion sort on tiny arrays
+        if (length < INSERTION_SORT_THRESHOLD) {
+            if (leftmost) {
+                /*
+                 * Traditional (without sentinel) insertion sort,
+                 * optimized for server VM, is used in case of
+                 * the leftmost part.
+                 */
+                for (int i = left, j = i; i < right; j = ++i) {
+                    int ai = a[i + 1];
+                    while (ai < a[j]) {
+                        a[j + 1] = a[j];
+                        if (j-- == left) {
+                            break;
+                        }
+                    }
+                    a[j + 1] = ai;
+                }
+            }
+            else {
+                /*
+                 * Skip the longest ascending sequence.
+                 */
+                do {
+                    if (left >= right) {
+                        return;
+                    }
+                }
+                while (a[++left] >= a[left - 1]);
+
+                /*
+                 * Every element from adjoining part plays the role
+                 * of sentinel, therefore this allows us to avoid the
+                 * left range check on each iteration. Moreover, we use
+                 * the more optimized algorithm, so called pair insertion
+                 * sort, which is faster (in the context of Quicksort)
+                 * than traditional implementation of insertion sort.
+                 */
+                for (int k = left; ++left <= right; k = ++left) {
+                    int a1 = a[k], a2 = a[left];
+
+                    if (a1 < a2) {
+                        a2 = a1;
+                        a1 = a[left];
+                    }
+                    while (a1 < a[--k]) {
+                        a[k + 2] = a[k];
+                    }
+                    a[++k + 1] = a1;
+
+                    while (a2 < a[--k]) {
+                        a[k + 1] = a[k];
+                    }
+                    a[k + 1] = a2;
+                }
+                int last = a[right];
+
+                while (last < a[--right]) {
+                    a[right + 1] = a[right];
+                }
+                a[right + 1] = last;
+            }
+            return;
+        }
+
+        // Inexpensive approximation of length / 7
+        int seventh = (length >> 3) + (length >> 6) + 1;
+
+        /*
+         * Sort five evenly spaced elements around (and including) the
+         * center element in the range. These elements will be used for
+         * pivot selection as described below. The choice for spacing
+         * these elements was empirically determined to work well on
+         * a wide variety of inputs.
+         */
+        int e3 = (left + right) >>> 1; // The midpoint
+        int e2 = e3 - seventh;
+        int e1 = e2 - seventh;
+        int e4 = e3 + seventh;
+        int e5 = e4 + seventh;
+
+        // Sort these elements using insertion sort
+        if (a[e2] < a[e1]) {
+            int t = a[e2];
+            a[e2] = a[e1];
+            a[e1] = t;
+        }
+
+        if (a[e3] < a[e2]) {
+            int t = a[e3];
+            a[e3] = a[e2];
+            a[e2] = t;
+            if (t < a[e1]) {
+                a[e2] = a[e1];
+                a[e1] = t;
+            }
+        }
+        if (a[e4] < a[e3]) {
+            int t = a[e4];
+            a[e4] = a[e3];
+            a[e3] = t;
+            if (t < a[e2]) {
+                a[e3] = a[e2];
+                a[e2] = t;
+                if (t < a[e1]) {
+                    a[e2] = a[e1];
+                    a[e1] = t;
+                }
+            }
+        }
+        if (a[e5] < a[e4]) {
+            int t = a[e5];
+            a[e5] = a[e4];
+            a[e4] = t;
+            if (t < a[e3]) {
+                a[e4] = a[e3];
+                a[e3] = t;
+                if (t < a[e2]) {
+                    a[e3] = a[e2];
+                    a[e2] = t;
+                    if (t < a[e1]) {
+                        a[e2] = a[e1];
+                        a[e1] = t;
+                    }
+                }
+            }
+        }
+
+        // Pointers
+        int less = left;  // The index of the first element of center part
+        int great = right; // The index before the first element of right part
+
+        if (a[e1] != a[e2] && a[e2] != a[e3] && a[e3] != a[e4] && a[e4] != a[e5]) {
+            /*
+             * Use the second and fourth of the five sorted elements as pivots.
+             * These values are inexpensive approximations of the first and
+             * second terciles of the array. Note that pivot1 <= pivot2.
+             */
+            int pivot1 = a[e2];
+            int pivot2 = a[e4];
+
+            /*
+             * The first and the last elements to be sorted are moved to the
+             * locations formerly occupied by the pivots. When partitioning
+             * is complete, the pivots are swapped back into their final
+             * positions, and excluded from subsequent sorting.
+             */
+            a[e2] = a[left];
+            a[e4] = a[right];
+
+            /*
+             * Skip elements, which are less or greater than pivot values.
+             */
+            while (a[++less] < pivot1) {
+            }
+            while (a[--great] > pivot2) {
+            }
+
+            /*
+             * Partitioning:
+             *
+             *   left part           center part                   right part
+             * +--------------------------------------------------------------+
+             * |  < pivot1  |  pivot1 <= && <= pivot2  |    ?    |  > pivot2  |
+             * +--------------------------------------------------------------+
+             *               ^                          ^       ^
+             *               |                          |       |
+             *              less                        k     great
+             *
+             * Invariants:
+             *
+             *              all in (left, less)   < pivot1
+             *    pivot1 <= all in [less, k)      <= pivot2
+             *              all in (great, right) > pivot2
+             *
+             * Pointer k is the first index of ?-part.
+             */
+            outer:
+            for (int k = less - 1; ++k <= great; ) {
+                int ak = a[k];
+                if (ak < pivot1) { // Move a[k] to left part
+                    a[k] = a[less];
+                    /*
+                     * Here and below we use "a[i] = b; i++;" instead
+                     * of "a[i++] = b;" due to performance issue.
+                     */
+                    a[less] = ak;
+                    ++less;
+                }
+                else if (ak > pivot2) { // Move a[k] to right part
+                    while (a[great] > pivot2) {
+                        if (great-- == k) {
+                            break outer;
+                        }
+                    }
+                    if (a[great] < pivot1) { // a[great] <= pivot2
+                        a[k] = a[less];
+                        a[less] = a[great];
+                        ++less;
+                    }
+                    else { // pivot1 <= a[great] <= pivot2
+                        a[k] = a[great];
+                    }
+                    /*
+                     * Here and below we use "a[i] = b; i--;" instead
+                     * of "a[i--] = b;" due to performance issue.
+                     */
+                    a[great] = ak;
+                    --great;
+                }
+            }
+
+            // Swap pivots into their final positions
+            a[left] = a[less - 1];
+            a[less - 1] = pivot1;
+            a[right] = a[great + 1];
+            a[great + 1] = pivot2;
+
+            // Sort left and right parts recursively, excluding known pivots
+            SortingIntTestJMH.sort(a, left, less - 2, leftmost);
+            SortingIntTestJMH.sort(a, great + 2, right, false);
+
+            /*
+             * If center part is too large (comprises > 4/7 of the array),
+             * swap internal pivot values to ends.
+             */
+            if (less < e1 && e5 < great) {
+                /*
+                 * Skip elements, which are equal to pivot values.
+                 */
+                while (a[less] == pivot1) {
+                    ++less;
+                }
+
+                while (a[great] == pivot2) {
+                    --great;
+                }
+
+                /*
+                 * Partitioning:
+                 *
+                 *   left part         center part                  right part
+                 * +----------------------------------------------------------+
+                 * | == pivot1 |  pivot1 < && < pivot2  |    ?    | == pivot2 |
+                 * +----------------------------------------------------------+
+                 *              ^                        ^       ^
+                 *              |                        |       |
+                 *             less                      k     great
+                 *
+                 * Invariants:
+                 *
+                 *              all in (*,  less) == pivot1
+                 *     pivot1 < all in [less,  k)  < pivot2
+                 *              all in (great, *) == pivot2
+                 *
+                 * Pointer k is the first index of ?-part.
+                 */
+                outer:
+                for (int k = less - 1; ++k <= great; ) {
+                    int ak = a[k];
+                    if (ak == pivot1) { // Move a[k] to left part
+                        a[k] = a[less];
+                        a[less] = ak;
+                        ++less;
+                    }
+                    else if (ak == pivot2) { // Move a[k] to right part
+                        while (a[great] == pivot2) {
+                            if (great-- == k) {
+                                break outer;
+                            }
+                        }
+                        if (a[great] == pivot1) { // a[great] < pivot2
+                            a[k] = a[less];
+                            /*
+                             * Even though a[great] equals to pivot1, the
+                             * assignment a[less] = pivot1 may be incorrect,
+                             * if a[great] and pivot1 are floating-point zeros
+                             * of different signs. Therefore in float and
+                             * double sorting methods we have to use more
+                             * accurate assignment a[less] = a[great].
+                             */
+                            a[less] = pivot1;
+                            ++less;
+                        }
+                        else { // pivot1 < a[great] < pivot2
+                            a[k] = a[great];
+                        }
+                        a[great] = ak;
+                        --great;
+                    }
+                }
+            }
+
+            // Sort center part recursively
+            SortingIntTestJMH.sort(a, less, great, false);
+        }
+        else { // Partitioning with one pivot
+            /*
+             * Use the third of the five sorted elements as pivot.
+             * This value is inexpensive approximation of the median.
+             */
+            int pivot = a[e3];
+
+            /*
+             * Partitioning degenerates to the traditional 3-way
+             * (or "Dutch National Flag") schema:
+             *
+             *   left part    center part              right part
+             * +-------------------------------------------------+
+             * |  < pivot  |   == pivot   |     ?    |  > pivot  |
+             * +-------------------------------------------------+
+             *              ^              ^        ^
+             *              |              |        |
+             *             less            k      great
+             *
+             * Invariants:
+             *
+             *   all in (left, less)   < pivot
+             *   all in [less, k)     == pivot
+             *   all in (great, right) > pivot
+             *
+             * Pointer k is the first index of ?-part.
+             */
+            for (int k = less; k <= great; ++k) {
+                if (a[k] == pivot) {
+                    continue;
+                }
+                int ak = a[k];
+                if (ak < pivot) { // Move a[k] to left part
+                    a[k] = a[less];
+                    a[less] = ak;
+                    ++less;
+                }
+                else { // a[k] > pivot - Move a[k] to right part
+                    while (a[great] > pivot) {
+                        --great;
+                    }
+                    if (a[great] < pivot) { // a[great] <= pivot
+                        a[k] = a[less];
+                        a[less] = a[great];
+                        ++less;
+                    }
+                    else { // a[great] == pivot
+                        /*
+                         * Even though a[great] equals to pivot, the
+                         * assignment a[k] = pivot may be incorrect,
+                         * if a[great] and pivot are floating-point
+                         * zeros of different signs. Therefore in float
+                         * and double sorting methods we have to use
+                         * more accurate assignment a[k] = a[great].
+                         */
+                        a[k] = pivot;
+                    }
+                    a[great] = ak;
+                    --great;
+                }
+            }
+
+            /*
+             * Sort left and right parts recursively.
+             * All elements from center part are equal
+             * and, therefore, already sorted.
+             */
+            SortingIntTestJMH.sort(a, left, less - 1, leftmost);
+            SortingIntTestJMH.sort(a, great + 1, right, false);
+        }
+    }
+
+    private static void swap(int[] arr, int i, int j) {
+        int tmp = arr[i];
+        arr[i] = arr[j];
+        arr[j] = tmp;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/util/Arrays/SortingLongBenchmarkTestJMH.java	Thu Jun 11 20:18:55 2015 -0700
@@ -0,0 +1,725 @@
+/*
+ * Copyright 2015 Goldman Sachs.
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import org.openjdk.jmh.annotations.Benchmark;
+import org.openjdk.jmh.annotations.BenchmarkMode;
+import org.openjdk.jmh.annotations.Measurement;
+import org.openjdk.jmh.annotations.Mode;
+import org.openjdk.jmh.annotations.OutputTimeUnit;
+import org.openjdk.jmh.annotations.Param;
+import org.openjdk.jmh.annotations.Scope;
+import org.openjdk.jmh.annotations.Setup;
+import org.openjdk.jmh.annotations.State;
+import org.openjdk.jmh.annotations.Warmup;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Random;
+import java.util.Set;
+import java.util.concurrent.TimeUnit;
+
+@State(Scope.Thread)
+@BenchmarkMode(Mode.Throughput)
+@OutputTimeUnit(TimeUnit.SECONDS)
+public class SortingLongBenchmarkTestJMH {
+    private static final int QUICKSORT_THRESHOLD = 286;
+    private static final int MAX_RUN_COUNT = 67;
+    private static final int INSERTION_SORT_THRESHOLD = 47;
+    public static final int MAX_VALUE = 1_000_000;
+
+    @Param({"pairFlipZeroPairFlip", "descendingAscending", "zeroHi", "hiZeroLow", "hiFlatLow", "identical",
+            "randomDups", "randomNoDups", "sortedReversedSorted", "pairFlip", "endLessThan"})
+    public String listType;
+
+    private long[] array;
+    private static final int LIST_SIZE = 10_000_000;
+    public static final int NUMBER_OF_ITERATIONS = 10;
+
+    @Setup
+    public void setUp() {
+        Random random = new Random(123456789012345L);
+        this.array = new long[LIST_SIZE];
+        int threeQuarters = (int) (LIST_SIZE * 0.75);
+        if ("zeroHi".equals(this.listType)) {
+            for (int i = 0; i < threeQuarters; i++) {
+                this.array[i] = 0;
+            }
+            int k = 1;
+            for (int i = threeQuarters; i < LIST_SIZE; i++) {
+                this.array[i] = k;
+                k++;
+            }
+        }
+        else if ("hiFlatLow".equals(this.listType)) {
+            int oneThird = LIST_SIZE / 3;
+            for (int i = 0; i < oneThird; i++) {
+                this.array[i] = i;
+            }
+            int twoThirds = oneThird * 2;
+            int constant = oneThird - 1;
+            for (int i = oneThird; i < twoThirds; i++) {
+                this.array[i] = constant;
+            }
+            for (int i = twoThirds; i < LIST_SIZE; i++) {
+                this.array[i] = constant - i + twoThirds;
+            }
+        }
+        else if ("hiZeroLow".equals(this.listType)) {
+            int oneThird = LIST_SIZE / 3;
+            for (int i = 0; i < oneThird; i++) {
+                this.array[i] = i;
+            }
+            int twoThirds = oneThird * 2;
+            for (int i = oneThird; i < twoThirds; i++) {
+                this.array[i] = 0;
+            }
+            for (int i = twoThirds; i < LIST_SIZE; i++) {
+                this.array[i] = oneThird - i + twoThirds;
+            }
+        }
+        else if ("identical".equals(this.listType)) {
+            for (int i = 0; i < LIST_SIZE; i++) {
+                this.array[i] = 0;
+            }
+        }
+        else if ("randomDups".equals(this.listType)) {
+            for (int i = 0; i < LIST_SIZE; i++) {
+                this.array[i] = random.nextInt(1000);
+            }
+        }
+        else if ("randomNoDups".equals(this.listType)) {
+            Set<Integer> set = new HashSet<>();
+            while (set.size() < LIST_SIZE + 1) {
+                set.add(random.nextInt());
+            }
+            List<Integer> list = new ArrayList<>(LIST_SIZE);
+            list.addAll(set);
+            for (int i = 0; i < LIST_SIZE; i++) {
+                this.array[i] = list.get(i);
+            }
+        }
+        else if ("sortedReversedSorted".equals(this.listType)) {
+            for (int i = 0; i < LIST_SIZE / 2; i++) {
+                this.array[i] = i;
+            }
+            int num = 0;
+            for (int i = LIST_SIZE / 2; i < LIST_SIZE; i++) {
+                this.array[i] = LIST_SIZE - num;
+                num++;
+            }
+        }
+        else if ("pairFlip".equals(this.listType)) {
+            for (int i = 0; i < LIST_SIZE; i++) {
+                this.array[i] = i;
+            }
+            for (int i = 0; i < LIST_SIZE; i += 2) {
+                long temp = this.array[i];
+                this.array[i] = this.array[i + 1];
+                this.array[i + 1] = temp;
+            }
+        }
+        else if ("endLessThan".equals(this.listType)) {
+            for (int i = 0; i < LIST_SIZE - 1; i++) {
+                this.array[i] = 3;
+            }
+            this.array[LIST_SIZE - 1] = 1;
+        }
+        else if ("pairFlipZeroPairFlip".equals(this.listType)) {
+            //pairflip
+            for (int i = 0; i < 64; i++) {
+                this.array[i] = i;
+            }
+            for (int i = 0; i < 64; i += 2) {
+                long temp = this.array[i];
+                this.array[i] = this.array[i + 1];
+                this.array[i + 1] = temp;
+            }
+            //zero
+            for (int i = 64; i < this.array.length - 64; i++) {
+                this.array[i] = 0;
+            }
+            //pairflip
+            for (int i = this.array.length - 64; i < this.array.length; i++) {
+                this.array[i] = i;
+            }
+            for (int i = this.array.length - 64; i < this.array.length; i += 2) {
+                long temp = this.array[i];
+                this.array[i] = this.array[i + 1];
+                this.array[i + 1] = temp;
+            }
+        }
+        else if ("pairFlipOneHundredPairFlip".equals(this.listType)) {
+            //10, 5
+            for (int i = 0; i < 64; i++) {
+                if (i % 2 == 0) {
+                    this.array[i] = 10;
+                }
+                else {
+                    this.array[i] = 5;
+                }
+            }
+
+            //100
+            for (int i = 64; i < this.array.length - 64; i++) {
+                this.array[i] = 100;
+            }
+
+            //10, 5
+            for (int i = this.array.length - 64; i < this.array.length; i++) {
+                if (i % 2 == 0) {
+                    this.array[i] = 10;
+                }
+                else {
+                    this.array[i] = 5;
+                }
+            }
+        }
+    }
+
+    @Warmup(iterations = 20)
+    @Measurement(iterations = 10)
+    @Benchmark
+    public void sortNewWay() {
+        for (int i = 0; i < NUMBER_OF_ITERATIONS; i++) {
+            SortingLongTestJMH.sort(this.array, 0, this.array.length - 1, null, 0, 0);
+        }
+    }
+
+    @Warmup(iterations = 20)
+    @Measurement(iterations = 10)
+    @Benchmark
+    public void sortOldWay() {
+        for (int i = 0; i < NUMBER_OF_ITERATIONS; i++) {
+            Arrays.sort(this.array);
+        }
+    }
+
+    /**
+     * Sorts the specified range of the array using the given
+     * workspace array slice if possible for merging
+     *
+     * @param a the array to be sorted
+     * @param left the index of the first element, inclusive, to be sorted
+     * @param right the index of the last element, inclusive, to be sorted
+     * @param work a workspace array (slice)
+     * @param workBase origin of usable space in work array
+     * @param workLen usable size of work array
+     */
+    static void sort(long[] a, int left, int right,
+                     long[] work, int workBase, int workLen) {
+// Use Quicksort on small arrays
+        if (right - left < QUICKSORT_THRESHOLD) {
+            SortingLongTestJMH.sort(a, left, right, true);
+            return;
+        }
+
+          /*
+         * Index run[i] is the start of i-th run
+         * (ascending or descending sequence).
+         */
+        int[] run = new int[MAX_RUN_COUNT + 1];
+        int count = 0;
+        run[0] = left;
+
+        // Check if the array is nearly sorted
+        for (int k = left; k < right; run[count] = k) {
+            while (k < right && a[k] == a[k + 1])
+                k++;
+            if (k == right) break;
+            if (a[k] < a[k + 1]) { // ascending
+                while (++k <= right && a[k - 1] <= a[k]) ;
+            }
+            else if (a[k] > a[k + 1]) { // descending
+                while (++k <= right && a[k - 1] >= a[k]) ;
+                for (int lo = run[count] - 1, hi = k; ++lo < --hi; ) {
+                    long t = a[lo];
+                    a[lo] = a[hi];
+                    a[hi] = t;
+                }
+            }
+            if (run[count] > left && a[run[count]] >= a[run[count] - 1]) {
+                count--;
+            }
+            /*
+             * The array is not highly structured,
+             * use Quicksort instead of merge sort.
+             */
+            if (++count == MAX_RUN_COUNT) {
+                sort(a, left, right, true);
+                return;
+            }
+        }
+
+        // Check special cases
+        // Implementation note: variable "right" is increased by 1.
+        if (run[count] == right++) {
+            run[++count] = right;
+        }
+        if (count <= 1) { // The array is already sorted
+            return;
+        }
+
+        // Determine alternation base for merge
+        byte odd = 0;
+        for (int n = 1; (n <<= 1) < count; odd ^= 1) {
+        }
+
+        // Use or create temporary array b for merging
+        long[] b;                  // temp array; alternates with a
+        int ao, bo;                 // array offsets from 'left'
+        int blen = right - left; // space needed for b
+        if (work == null || workLen < blen || workBase + blen > work.length) {
+            work = new long[blen];
+            workBase = 0;
+        }
+        if (odd == 0) {
+            System.arraycopy(a, left, work, workBase, blen);
+            b = a;
+            bo = 0;
+            a = work;
+            ao = workBase - left;
+        }
+        else {
+            b = work;
+            ao = 0;
+            bo = workBase - left;
+        }
+
+        // Merging
+        for (int last; count > 1; count = last) {
+            for (int k = (last = 0) + 2; k <= count; k += 2) {
+                int hi = run[k], mi = run[k - 1];
+                for (int i = run[k - 2], p = i, q = mi; i < hi; ++i) {
+                    if (q >= hi || p < mi && a[p + ao] <= a[q + ao]) {
+                        b[i + bo] = a[p++ + ao];
+                    }
+                    else {
+                        b[i + bo] = a[q++ + ao];
+                    }
+                }
+                run[++last] = hi;
+            }
+            if ((count & 1) != 0) {
+                for (int i = right, lo = run[count - 1]; --i >= lo;
+                     b[i + bo] = a[i + ao]
+                        ) {
+                }
+                run[++last] = right;
+            }
+            long[] t = a;
+            a = b;
+            b = t;
+            int o = ao;
+            ao = bo;
+            bo = o;
+        }
+    }
+
+    /**
+     * Sorts the specified range of the array by Dual-Pivot Quicksort.
+     *
+     * @param a the array to be sorted
+     * @param left the index of the first element, inclusive, to be sorted
+     * @param right the index of the last element, inclusive, to be sorted
+     * @param leftmost indicates if this part is the leftmost in the range
+     */
+    private static void sort(long[] a, int left, int right, boolean leftmost) {
+        int length = right - left + 1;
+
+        // Use insertion sort on tiny arrays
+        if (length < INSERTION_SORT_THRESHOLD) {
+            if (leftmost) {
+                /*
+                 * Traditional (without sentinel) insertion sort,
+                 * optimized for server VM, is used in case of
+                 * the leftmost part.
+                 */
+                for (int i = left, j = i; i < right; j = ++i) {
+                    long ai = a[i + 1];
+                    while (ai < a[j]) {
+                        a[j + 1] = a[j];
+                        if (j-- == left) {
+                            break;
+                        }
+                    }
+                    a[j + 1] = ai;
+                }
+            }
+            else {
+                /*
+                 * Skip the longest ascending sequence.
+                 */
+                do {
+                    if (left >= right) {
+                        return;
+                    }
+                }
+                while (a[++left] >= a[left - 1]);
+
+                /*
+                 * Every element from adjoining part plays the role
+                 * of sentinel, therefore this allows us to avoid the
+                 * left range check on each iteration. Moreover, we use
+                 * the more optimized algorithm, so called pair insertion
+                 * sort, which is faster (in the context of Quicksort)
+                 * than traditional implementation of insertion sort.
+                 */
+                for (int k = left; ++left <= right; k = ++left) {
+                    long a1 = a[k], a2 = a[left];
+
+                    if (a1 < a2) {
+                        a2 = a1;
+                        a1 = a[left];
+                    }
+                    while (a1 < a[--k]) {
+                        a[k + 2] = a[k];
+                    }
+                    a[++k + 1] = a1;
+
+                    while (a2 < a[--k]) {
+                        a[k + 1] = a[k];
+                    }
+                    a[k + 1] = a2;
+                }
+                long last = a[right];
+
+                while (last < a[--right]) {
+                    a[right + 1] = a[right];
+                }
+                a[right + 1] = last;
+            }
+            return;
+        }
+
+        // Inexpensive approximation of length / 7
+        int seventh = (length >> 3) + (length >> 6) + 1;
+
+        /*
+         * Sort five evenly spaced elements around (and including) the
+         * center element in the range. These elements will be used for
+         * pivot selection as described below. The choice for spacing
+         * these elements was empirically determined to work well on
+         * a wide variety of inputs.
+         */
+        int e3 = (left + right) >>> 1; // The midpoint
+        int e2 = e3 - seventh;
+        int e1 = e2 - seventh;
+        int e4 = e3 + seventh;
+        int e5 = e4 + seventh;
+
+        // Sort these elements using insertion sort
+        if (a[e2] < a[e1]) {
+            long t = a[e2];
+            a[e2] = a[e1];
+            a[e1] = t;
+        }
+
+        if (a[e3] < a[e2]) {
+            long t = a[e3];
+            a[e3] = a[e2];
+            a[e2] = t;
+            if (t < a[e1]) {
+                a[e2] = a[e1];
+                a[e1] = t;
+            }
+        }
+        if (a[e4] < a[e3]) {
+            long t = a[e4];
+            a[e4] = a[e3];
+            a[e3] = t;
+            if (t < a[e2]) {
+                a[e3] = a[e2];
+                a[e2] = t;
+                if (t < a[e1]) {
+                    a[e2] = a[e1];
+                    a[e1] = t;
+                }
+            }
+        }
+        if (a[e5] < a[e4]) {
+            long t = a[e5];
+            a[e5] = a[e4];
+            a[e4] = t;
+            if (t < a[e3]) {
+                a[e4] = a[e3];
+                a[e3] = t;
+                if (t < a[e2]) {
+                    a[e3] = a[e2];
+                    a[e2] = t;
+                    if (t < a[e1]) {
+                        a[e2] = a[e1];
+                        a[e1] = t;
+                    }
+                }
+            }
+        }
+
+        // Pointers
+        int less = left;  // The index of the first element of center part
+        int great = right; // The index before the first element of right part
+
+        if (a[e1] != a[e2] && a[e2] != a[e3] && a[e3] != a[e4] && a[e4] != a[e5]) {
+            /*
+             * Use the second and fourth of the five sorted elements as pivots.
+             * These values are inexpensive approximations of the first and
+             * second terciles of the array. Note that pivot1 <= pivot2.
+             */
+            long pivot1 = a[e2];
+            long pivot2 = a[e4];
+
+            /*
+             * The first and the last elements to be sorted are moved to the
+             * locations formerly occupied by the pivots. When partitioning
+             * is complete, the pivots are swapped back into their final
+             * positions, and excluded from subsequent sorting.
+             */
+            a[e2] = a[left];
+            a[e4] = a[right];
+
+            /*
+             * Skip elements, which are less or greater than pivot values.
+             */
+            while (a[++less] < pivot1) {
+            }
+            while (a[--great] > pivot2) {
+            }
+
+            /*
+             * Partitioning:
+             *
+             *   left part           center part                   right part
+             * +--------------------------------------------------------------+
+             * |  < pivot1  |  pivot1 <= && <= pivot2  |    ?    |  > pivot2  |
+             * +--------------------------------------------------------------+
+             *               ^                          ^       ^
+             *               |                          |       |
+             *              less                        k     great
+             *
+             * Invariants:
+             *
+             *              all in (left, less)   < pivot1
+             *    pivot1 <= all in [less, k)      <= pivot2
+             *              all in (great, right) > pivot2
+             *
+             * Pointer k is the first index of ?-part.
+             */
+            outer:
+            for (int k = less - 1; ++k <= great; ) {
+                long ak = a[k];
+                if (ak < pivot1) { // Move a[k] to left part
+                    a[k] = a[less];
+                    /*
+                     * Here and below we use "a[i] = b; i++;" instead
+                     * of "a[i++] = b;" due to performance issue.
+                     */
+                    a[less] = ak;
+                    ++less;
+                }
+                else if (ak > pivot2) { // Move a[k] to right part
+                    while (a[great] > pivot2) {
+                        if (great-- == k) {
+                            break outer;
+                        }
+                    }
+                    if (a[great] < pivot1) { // a[great] <= pivot2
+                        a[k] = a[less];
+                        a[less] = a[great];
+                        ++less;
+                    }
+                    else { // pivot1 <= a[great] <= pivot2
+                        a[k] = a[great];
+                    }
+                    /*
+                     * Here and below we use "a[i] = b; i--;" instead
+                     * of "a[i--] = b;" due to performance issue.
+                     */
+                    a[great] = ak;
+                    --great;
+                }
+            }
+
+            // Swap pivots into their final positions
+            a[left] = a[less - 1];
+            a[less - 1] = pivot1;
+            a[right] = a[great + 1];
+            a[great + 1] = pivot2;
+
+            // Sort left and right parts recursively, excluding known pivots
+            SortingLongTestJMH.sort(a, left, less - 2, leftmost);
+            SortingLongTestJMH.sort(a, great + 2, right, false);
+
+            /*
+             * If center part is too large (comprises > 4/7 of the array),
+             * swap internal pivot values to ends.
+             */
+            if (less < e1 && e5 < great) {
+                /*
+                 * Skip elements, which are equal to pivot values.
+                 */
+                while (a[less] == pivot1) {
+                    ++less;
+                }
+
+                while (a[great] == pivot2) {
+                    --great;
+                }
+
+                /*
+                 * Partitioning:
+                 *
+                 *   left part         center part                  right part
+                 * +----------------------------------------------------------+
+                 * | == pivot1 |  pivot1 < && < pivot2  |    ?    | == pivot2 |
+                 * +----------------------------------------------------------+
+                 *              ^                        ^       ^
+                 *              |                        |       |
+                 *             less                      k     great
+                 *
+                 * Invariants:
+                 *
+                 *              all in (*,  less) == pivot1
+                 *     pivot1 < all in [less,  k)  < pivot2
+                 *              all in (great, *) == pivot2
+                 *
+                 * Pointer k is the first index of ?-part.
+                 */
+                outer:
+                for (int k = less - 1; ++k <= great; ) {
+                    long ak = a[k];
+                    if (ak == pivot1) { // Move a[k] to left part
+                        a[k] = a[less];
+                        a[less] = ak;
+                        ++less;
+                    }
+                    else if (ak == pivot2) { // Move a[k] to right part
+                        while (a[great] == pivot2) {
+                            if (great-- == k) {
+                                break outer;
+                            }
+                        }
+                        if (a[great] == pivot1) { // a[great] < pivot2
+                            a[k] = a[less];
+                            /*
+                             * Even though a[great] equals to pivot1, the
+                             * assignment a[less] = pivot1 may be incorrect,
+                             * if a[great] and pivot1 are floating-point zeros
+                             * of different signs. Therefore in float and
+                             * double sorting methods we have to use more
+                             * accurate assignment a[less] = a[great].
+                             */
+                            a[less] = pivot1;
+                            ++less;
+                        }
+                        else { // pivot1 < a[great] < pivot2
+                            a[k] = a[great];
+                        }
+                        a[great] = ak;
+                        --great;
+                    }
+                }
+            }
+
+            // Sort center part recursively
+            SortingLongTestJMH.sort(a, less, great, false);
+        }
+        else { // Partitioning with one pivot
+            /*
+             * Use the third of the five sorted elements as pivot.
+             * This value is inexpensive approximation of the median.
+             */
+            long pivot = a[e3];
+
+            /*
+             * Partitioning degenerates to the traditional 3-way
+             * (or "Dutch National Flag") schema:
+             *
+             *   left part    center part              right part
+             * +-------------------------------------------------+
+             * |  < pivot  |   == pivot   |     ?    |  > pivot  |
+             * +-------------------------------------------------+
+             *              ^              ^        ^
+             *              |              |        |
+             *             less            k      great
+             *
+             * Invariants:
+             *
+             *   all in (left, less)   < pivot
+             *   all in [less, k)     == pivot
+             *   all in (great, right) > pivot
+             *
+             * Pointer k is the first index of ?-part.
+             */
+            for (int k = less; k <= great; ++k) {
+                if (a[k] == pivot) {
+                    continue;
+                }
+                long ak = a[k];
+                if (ak < pivot) { // Move a[k] to left part
+                    a[k] = a[less];
+                    a[less] = ak;
+                    ++less;
+                }
+                else { // a[k] > pivot - Move a[k] to right part
+                    while (a[great] > pivot) {
+                        --great;
+                    }
+                    if (a[great] < pivot) { // a[great] <= pivot
+                        a[k] = a[less];
+                        a[less] = a[great];
+                        ++less;
+                    }
+                    else { // a[great] == pivot
+                        /*
+                         * Even though a[great] equals to pivot, the
+                         * assignment a[k] = pivot may be incorrect,
+                         * if a[great] and pivot are floating-point
+                         * zeros of different signs. Therefore in float
+                         * and double sorting methods we have to use
+                         * more accurate assignment a[k] = a[great].
+                         */
+                        a[k] = pivot;
+                    }
+                    a[great] = ak;
+                    --great;
+                }
+            }
+
+            /*
+             * Sort left and right parts recursively.
+             * All elements from center part are equal
+             * and, therefore, already sorted.
+             */
+            SortingLongTestJMH.sort(a, left, less - 1, leftmost);
+            SortingLongTestJMH.sort(a, great + 1, right, false);
+        }
+    }
+
+    private static void swap(long[] arr, int i, int j) {
+        long tmp = arr[i];
+        arr[i] = arr[j];
+        arr[j] = tmp;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/util/Arrays/SortingNearlySortedPrimitive.java	Thu Jun 11 20:18:55 2015 -0700
@@ -0,0 +1,274 @@
+/*
+ * Copyright 2015 Goldman Sachs.
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+/*
+ * @test
+ * @summary Tests the sorting of a large array of sorted primitive values,
+ *          predominently for cases where the array is nearly sorted. This tests
+ *          code that detects patterns in the array to determine if it is nearly
+ *          sorted and if so employs and optimizes merge sort rather than a
+ *          Dual-Pivot QuickSort.
+ *
+ * @run testng SortingNearlySortedPrimitive
+ */
+
+import org.testng.Assert;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+
+import java.util.Arrays;
+import java.util.function.Supplier;
+
+public class SortingNearlySortedPrimitive {
+    private static final int ARRAY_SIZE = 1_000_000;
+
+    @DataProvider(name = "arrays")
+    public Object[][] createData() {
+        return new Object[][]{
+                {"hiZeroLowTest", (Supplier<int[]>) this::hiZeroLowData},
+                {"endLessThanTest", (Supplier<int[]>) this::endLessThanData},
+                {"highFlatLowTest", (Supplier<int[]>) this::highFlatLowData},
+                {"identicalTest", (Supplier<int[]>) this::identicalData},
+                {"sortedReversedSortedTest", (Supplier<int[]>) this::sortedReversedSortedData},
+                {"pairFlipTest", (Supplier<int[]>) this::pairFlipData},
+                {"zeroHiTest", (Supplier<int[]>) this::zeroHiData},
+        };
+    }
+
+    @Test(dataProvider = "arrays")
+    public void runTests(String testName, Supplier<int[]> dataMethod) throws Exception {
+        int[] intSourceArray = dataMethod.get();
+
+        // Clone source array to ensure it is not modified
+        this.sortAndAssert(intSourceArray.clone());
+        this.sortAndAssert(floatCopyFromInt(intSourceArray));
+        this.sortAndAssert(doubleCopyFromInt(intSourceArray));
+        this.sortAndAssert(longCopyFromInt(intSourceArray));
+        this.sortAndAssert(shortCopyFromInt(intSourceArray));
+        this.sortAndAssert(charCopyFromInt(intSourceArray));
+    }
+
+    private float[] floatCopyFromInt(int[] src) {
+        float[] result = new float[src.length];
+        for (int i = 0; i < result.length; i++) {
+            result[i] = src[i];
+        }
+        return result;
+    }
+
+    private double[] doubleCopyFromInt(int[] src) {
+        double[] result = new double[src.length];
+        for (int i = 0; i < result.length; i++) {
+            result[i] = src[i];
+        }
+        return result;
+    }
+
+    private long[] longCopyFromInt(int[] src) {
+        long[] result = new long[src.length];
+        for (int i = 0; i < result.length; i++) {
+            result[i] = src[i];
+        }
+        return result;
+    }
+
+    private short[] shortCopyFromInt(int[] src) {
+        short[] result = new short[src.length];
+        for (int i = 0; i < result.length; i++) {
+            result[i] = (short) src[i];
+        }
+        return result;
+    }
+
+    private char[] charCopyFromInt(int[] src) {
+        char[] result = new char[src.length];
+        for (int i = 0; i < result.length; i++) {
+            result[i] = (char) src[i];
+        }
+        return result;
+    }
+
+    private void sortAndAssert(int[] array) {
+        Arrays.sort(array);
+        for (int i = 1; i < ARRAY_SIZE; i++) {
+            if (array[i] < array[i - 1]) {
+                throw new AssertionError("not sorted");
+            }
+        }
+        Assert.assertEquals(ARRAY_SIZE, array.length);
+    }
+
+    private void sortAndAssert(char[] array) {
+        Arrays.sort(array);
+        for (int i = 1; i < ARRAY_SIZE; i++) {
+            if (array[i] < array[i - 1]) {
+                throw new AssertionError("not sorted");
+            }
+        }
+        Assert.assertEquals(ARRAY_SIZE, array.length);
+    }
+
+    private void sortAndAssert(short[] array) {
+        Arrays.sort(array);
+        for (int i = 1; i < ARRAY_SIZE; i++) {
+            if (array[i] < array[i - 1]) {
+                throw new AssertionError("not sorted");
+            }
+        }
+        Assert.assertEquals(ARRAY_SIZE, array.length);
+    }
+
+    private void sortAndAssert(double[] array) {
+        Arrays.sort(array);
+        for (int i = 1; i < ARRAY_SIZE; i++) {
+            if (array[i] < array[i - 1]) {
+                throw new AssertionError("not sorted");
+            }
+        }
+        Assert.assertEquals(ARRAY_SIZE, array.length);
+    }
+
+    private void sortAndAssert(float[] array) {
+        Arrays.sort(array);
+        for (int i = 1; i < ARRAY_SIZE; i++) {
+            if (array[i] < array[i - 1]) {
+                throw new AssertionError("not sorted");
+            }
+        }
+        Assert.assertEquals(ARRAY_SIZE, array.length);
+    }
+
+    private void sortAndAssert(long[] array) {
+        Arrays.sort(array);
+        for (int i = 1; i < ARRAY_SIZE; i++) {
+            if (array[i] < array[i - 1]) {
+                throw new AssertionError("not sorted");
+            }
+        }
+        Assert.assertEquals(ARRAY_SIZE, array.length);
+    }
+
+    private int[] zeroHiData() {
+        int[] array = new int[ARRAY_SIZE];
+
+        int threeQuarters = (int) (ARRAY_SIZE * 0.75);
+        for (int i = 0; i < threeQuarters; i++) {
+            array[i] = 0;
+        }
+        int k = 1;
+        for (int i = threeQuarters; i < ARRAY_SIZE; i++) {
+            array[i] = k;
+            k++;
+        }
+
+        return array;
+    }
+
+    private int[] hiZeroLowData() {
+        int[] array = new int[ARRAY_SIZE];
+
+        int oneThird = ARRAY_SIZE / 3;
+        for (int i = 0; i < oneThird; i++) {
+            array[i] = i;
+        }
+        int twoThirds = oneThird * 2;
+        for (int i = oneThird; i < twoThirds; i++) {
+            array[i] = 0;
+        }
+        for (int i = twoThirds; i < ARRAY_SIZE; i++) {
+            array[i] = oneThird - i + twoThirds;
+        }
+        return array;
+    }
+
+    private int[] highFlatLowData() {
+        int[] array = new int[ARRAY_SIZE];
+
+        int oneThird = ARRAY_SIZE / 3;
+        for (int i = 0; i < oneThird; i++) {
+            array[i] = i;
+        }
+        int twoThirds = oneThird * 2;
+        int constant = oneThird - 1;
+        for (int i = oneThird; i < twoThirds; i++) {
+            array[i] = constant;
+        }
+        for (int i = twoThirds; i < ARRAY_SIZE; i++) {
+            array[i] = constant - i + twoThirds;
+        }
+
+        return array;
+    }
+
+    private int[] identicalData() {
+        int[] array = new int[ARRAY_SIZE];
+        int listNumber = 24;
+
+        for (int i = 0; i < ARRAY_SIZE; i++) {
+            array[i] = listNumber;
+        }
+
+        return array;
+    }
+
+    private int[] endLessThanData() {
+        int[] array = new int[ARRAY_SIZE];
+
+        for (int i = 0; i < ARRAY_SIZE - 1; i++) {
+            array[i] = 3;
+        }
+        array[ARRAY_SIZE - 1] = 1;
+
+        return array;
+    }
+
+    private int[] sortedReversedSortedData() {
+        int[] array = new int[ARRAY_SIZE];
+
+        for (int i = 0; i < ARRAY_SIZE / 2; i++) {
+            array[i] = i;
+        }
+        int num = 0;
+        for (int i = ARRAY_SIZE / 2; i < ARRAY_SIZE; i++) {
+            array[i] = ARRAY_SIZE - num;
+            num++;
+        }
+
+        return array;
+    }
+
+    private int[] pairFlipData() {
+        int[] array = new int[ARRAY_SIZE];
+
+        for (int i = 0; i < ARRAY_SIZE; i++) {
+            array[i] = i;
+        }
+        for (int i = 0; i < ARRAY_SIZE; i += 2) {
+            int temp = array[i];
+            array[i] = array[i + 1];
+            array[i + 1] = temp;
+        }
+
+        return array;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/util/PropertyPermission/PropertyPermissionCollection.java	Thu Jun 11 20:18:55 2015 -0700
@@ -0,0 +1,162 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8056179
+ * @summary Unit test for PropertyPermissionCollection subclass
+ */
+
+import java.security.Permission;
+import java.security.PermissionCollection;
+import java.security.SecurityPermission;
+import java.util.Enumeration;
+import java.util.PropertyPermission;
+
+public class PropertyPermissionCollection {
+
+    public static void main(String[] args) throws Exception {
+
+        int testFail = 0;
+
+        PropertyPermission perm = new PropertyPermission("user.home", "read");
+        PermissionCollection perms = perm.newPermissionCollection();
+
+        // test 1
+        System.out.println
+            ("test 1: add throws IllegalArgExc for wrong perm type");
+        try {
+            perms.add(new SecurityPermission("createAccessControlContext"));
+            System.err.println("Expected IllegalArgumentException");
+            testFail++;
+        } catch (IllegalArgumentException iae) {}
+
+        // test 2
+        System.out.println("test 2: implies returns false for wrong perm type");
+        if (perms.implies(new SecurityPermission("getPolicy"))) {
+            System.err.println("Expected false, returned true");
+            testFail++;
+        }
+
+        // test 3
+        System.out.println
+            ("test 3: implies returns true for match on name and action");
+        perms.add(new PropertyPermission("user.home", "read"));
+        if (!perms.implies(new PropertyPermission("user.home", "read"))) {
+            System.err.println("Expected true, returned false");
+            testFail++;
+        }
+
+        // test 4
+        System.out.println
+            ("test 4: implies returns false for match on name but not action");
+        if (perms.implies(new PropertyPermission("user.home", "write"))) {
+            System.err.println("Expected false, returned true");
+            testFail++;
+        }
+
+        // test 5
+        System.out.println("test 5: implies returns true for match " +
+                           "on name and subset of actions");
+        perms.add(new PropertyPermission("java.home", "read, write"));
+        if (!perms.implies(new PropertyPermission("java.home", "write"))) {
+            System.err.println("Expected true, returned false");
+            testFail++;
+        }
+
+        // test 6
+        System.out.println("test 6: implies returns true for aggregate " +
+                           "match on name and action");
+        perms.add(new PropertyPermission("user.name", "read"));
+        perms.add(new PropertyPermission("user.name", "write"));
+        if (!perms.implies(new PropertyPermission("user.name", "read"))) {
+            System.err.println("Expected true, returned false");
+            testFail++;
+        }
+        if (!perms.implies(new PropertyPermission("user.name", "write,read"))) {
+            System.err.println("Expected true, returned false");
+            testFail++;
+        }
+
+        // test 7
+        System.out.println("test 7: implies returns true for wildcard " +
+                           "and match on action");
+        perms.add(new PropertyPermission("foo.*", "read"));
+        if (!perms.implies(new PropertyPermission("foo.bar", "read"))) {
+            System.err.println("Expected true, returned false");
+            testFail++;
+        }
+
+        // test 8
+        System.out.println("test 8: implies returns true for deep " +
+                           "wildcard and match on action");
+        if (!perms.implies(new PropertyPermission("foo.bar.baz", "read"))) {
+            System.err.println("Expected true, returned false");
+            testFail++;
+        }
+
+        // test 8
+        System.out.println
+            ("test 8: implies returns false for invalid wildcard");
+        perms.add(new PropertyPermission("baz*", "read"));
+        if (perms.implies(new PropertyPermission("baz.foo", "read"))) {
+            System.err.println("Expected false, returned true");
+            testFail++;
+        }
+
+        // test 9
+        System.out.println("test 9: implies returns true for all " +
+                           "wildcard and match on action");
+        perms.add(new PropertyPermission("*", "read"));
+        if (!perms.implies(new PropertyPermission("java.version", "read"))) {
+            System.err.println("Expected true, returned false");
+            testFail++;
+        }
+
+        // test 10
+        System.out.println("test 10: implies returns false for wildcard " +
+                           "and non-match on action");
+        if (perms.implies(new PropertyPermission("java.version", "write"))) {
+            System.err.println("Expected false, returned true");
+            testFail++;
+        }
+
+        // test 11
+        System.out.println("test 11: elements returns correct number of perms");
+        int numPerms = 0;
+        Enumeration<Permission> e = perms.elements();
+        while (e.hasMoreElements()) {
+            numPerms++;
+            System.out.println(e.nextElement());
+        }
+        // the 2 user.name permissions added were combined into one
+        if (numPerms != 6) {
+            System.err.println("Expected 6, got " + numPerms);
+            testFail++;
+        }
+
+        if (testFail > 0) {
+            throw new Exception(testFail + " test(s) failed");
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/net/ssl/DTLS/DTLSBufferOverflowUnderflowTest.java	Thu Jun 11 20:18:55 2015 -0700
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8043758
+ * @summary Testing DTLS buffer overflow and underflow status when dealing with
+ *          application data.
+ * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @run main/othervm -Dtest.security.protocol=DTLS
+ *      -Dtest.mode=norm DTLSBufferOverflowUnderflowTest
+ * @run main/othervm -Dtest.security.protocol=DTLS
+ *      -Dtest.mode=norm_sni DTLSBufferOverflowUnderflowTest
+ * @run main/othervm -Dtest.security.protocol=DTLS
+ *      -Dtest.mode=krb DTLSBufferOverflowUnderflowTest
+ */
+
+/**
+ * Testing DTLS incorrect app data packages unwrapping.
+ */
+public class DTLSBufferOverflowUnderflowTest {
+    public static void main(String[] args) {
+        BufferOverflowUnderflowTest.main(args);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/net/ssl/DTLS/DTLSDataExchangeTest.java	Thu Jun 11 20:18:55 2015 -0700
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8043758
+ * @summary Testing DTLS application data exchange using each of the supported
+ *          cipher suites.
+ * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @run main/othervm -Dtest.security.protocol=DTLS
+ *      -Dtest.mode=norm DTLSDataExchangeTest
+ * @run main/othervm -Dtest.security.protocol=DTLS
+ *      -Dtest.mode=norm_sni DTLSDataExchangeTest
+ * @run main/othervm -Dtest.security.protocol=DTLS
+ *      -Dtest.mode=krb DTLSDataExchangeTest
+ */
+
+/**
+ * Testing DTLS application data exchange using each of the supported cipher
+ * suites.
+ */
+public class DTLSDataExchangeTest {
+    public static void main(String[] args) {
+        DataExchangeTest.main(args);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/net/ssl/DTLS/DTLSEnginesClosureTest.java	Thu Jun 11 20:18:55 2015 -0700
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8043758
+ * @summary Testing DTLS engines closing using each of the supported
+ *          cipher suites.
+ * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @run main/othervm -Dtest.security.protocol=DTLS
+ *      -Dtest.mode=norm DTLSEnginesClosureTest
+ * @run main/othervm -Dtest.security.protocol=DTLS
+ *      -Dtest.mode=norm_sni DTLSEnginesClosureTest
+ * @run main/othervm -Dtest.security.protocol=DTLS
+ *      -Dtest.mode=krb DTLSEnginesClosureTest
+ */
+
+/**
+ * Testing DTLS engines closing using each of the supported cipher suites.
+ */
+public class DTLSEnginesClosureTest {
+    public static void main(String[] args) {
+        EnginesClosureTest.main(args);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/net/ssl/DTLS/DTLSHandshakeTest.java	Thu Jun 11 20:18:55 2015 -0700
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8043758
+ * @summary Testing DTLS engines handshake using each of the supported
+ *          cipher suites.
+ * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @run main/othervm -Dtest.security.protocol=DTLS
+ *      -Dtest.mode=norm DTLSHandshakeTest
+ * @run main/othervm -Dtest.security.protocol=DTLS
+ *      -Dtest.mode=norm_sni DTLSHandshakeTest
+ * @run main/othervm -Dtest.security.protocol=DTLS
+ *      -Dtest.mode=krb DTLSHandshakeTest
+ */
+
+/**
+ * Testing DTLS engines handshake using each of the supported cipher suites.
+ */
+public class DTLSHandshakeTest {
+    public static void main(String[] args) {
+        HandshakeTest.main(args);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/net/ssl/DTLS/DTLSHandshakeWithReplicatedPacketsTest.java	Thu Jun 11 20:18:55 2015 -0700
@@ -0,0 +1,70 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8043758
+ * @summary Testing DTLS engines handshake using each of the supported
+ *          cipher suites with replicated packets check.
+ * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @run main/othervm -Dtest.security.protocol=DTLS
+ *      -Dtest.mode=norm DTLSHandshakeWithReplicatedPacketsTest
+ * @run main/othervm -Dtest.security.protocol=DTLS
+ *      -Dtest.mode=norm_sni DTLSHandshakeWithReplicatedPacketsTest
+ * @run main/othervm -Dtest.security.protocol=DTLS
+ *      -Dtest.mode=krb DTLSHandshakeWithReplicatedPacketsTest
+ */
+
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.SSLEngine;
+import javax.net.ssl.SSLException;
+
+/**
+ * Testing DTLS engines handshake using each of the supported cipher suites with
+ * replicated packets check.
+ */
+public class DTLSHandshakeWithReplicatedPacketsTest extends SSLEngineTestCase {
+
+    private static String testMode;
+
+    public static void main(String[] args) {
+        DTLSHandshakeWithReplicatedPacketsTest test
+                = new DTLSHandshakeWithReplicatedPacketsTest();
+        setUpAndStartKDCIfNeeded();
+        test.runTests();
+    }
+
+    @Override
+    protected void testOneCipher(String cipher) throws SSLException {
+        SSLContext context = getContext();
+        int maxPacketSize = getMaxPacketSize();
+        boolean useSNI = !TEST_MODE.equals("norm");
+        SSLEngine clientEngine = getClientSSLEngine(context, useSNI);
+        SSLEngine serverEngine = getServerSSLEngine(context, useSNI);
+        clientEngine.setEnabledCipherSuites(new String[]{cipher});
+        serverEngine.setEnabledCipherSuites(new String[]{cipher});
+        serverEngine.setNeedClientAuth(!cipher.contains("anon"));
+        doHandshake(clientEngine, serverEngine, maxPacketSize,
+                HandshakeMode.INITIAL_HANDSHAKE, true);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/net/ssl/DTLS/DTLSIncorrectAppDataTest.java	Thu Jun 11 20:18:55 2015 -0700
@@ -0,0 +1,101 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8043758
+ * @summary Testing DTLS incorrect app data packages unwrapping.
+ * @key randomness
+ * @library /sun/security/krb5/auto /lib/testlibrary /javax/net/ssl/TLSCommon
+ * @run main/othervm -Dtest.security.protocol=DTLS
+ *      -Dtest.mode=norm DTLSIncorrectAppDataTest
+ * @run main/othervm -Dtest.security.protocol=DTLS
+ *      -Dtest.mode=norm_sni DTLSIncorrectAppDataTest
+ * @run main/othervm -Dtest.security.protocol=DTLS
+ *      -Dtest.mode=krb DTLSIncorrectAppDataTest
+ */
+
+import java.nio.ByteBuffer;
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.SSLEngine;
+import javax.net.ssl.SSLEngineResult;
+import javax.net.ssl.SSLException;
+import java.util.Random;
+import jdk.testlibrary.RandomFactory;
+
+/**
+ * Testing DTLS incorrect app data packages unwrapping. Incorrect application
+ * data packages should be ignored by DTLS SSLEngine.
+ */
+public class DTLSIncorrectAppDataTest extends SSLEngineTestCase {
+
+    private final String MESSAGE = "Hello peer!";
+
+    public static void main(String[] s) {
+        DTLSIncorrectAppDataTest test = new DTLSIncorrectAppDataTest();
+        setUpAndStartKDCIfNeeded();
+        test.runTests();
+    }
+
+    @Override
+    protected void testOneCipher(String cipher) {
+        SSLContext context = getContext();
+        int maxPacketSize = getMaxPacketSize();
+        boolean useSNI = !TEST_MODE.equals("norm");
+        SSLEngine clientEngine = getClientSSLEngine(context, useSNI);
+        SSLEngine serverEngine = getServerSSLEngine(context, useSNI);
+        clientEngine.setEnabledCipherSuites(new String[]{cipher});
+        serverEngine.setEnabledCipherSuites(new String[]{cipher});
+        serverEngine.setNeedClientAuth(!cipher.contains("anon"));
+        try {
+            doHandshake(clientEngine, serverEngine, maxPacketSize,
+                    HandshakeMode.INITIAL_HANDSHAKE);
+            checkIncorrectAppDataUnwrap(clientEngine, serverEngine);
+            checkIncorrectAppDataUnwrap(serverEngine, clientEngine);
+        } catch (SSLException ssle) {
+            throw new AssertionError("Error during handshake or sending app data",
+                    ssle);
+        }
+    }
+
+    private void checkIncorrectAppDataUnwrap(SSLEngine sendEngine,
+            SSLEngine recvEngine) throws SSLException {
+        String direction = sendEngine.getUseClientMode() ? "client"
+                : "server";
+        System.out.println("================================================="
+                + "===========");
+        System.out.println("Testing DTLS incorrect app data packages unwrapping"
+                + " by sending data from " + direction);
+        ByteBuffer app = ByteBuffer.wrap(MESSAGE.getBytes());
+        ByteBuffer net = doWrap(sendEngine, direction, 0, app);
+        final Random RNG = RandomFactory.getRandom();
+        int randomPlace = RNG.nextInt(net.remaining());
+        net.array()[randomPlace] += 1;
+        app = ByteBuffer.allocate(recvEngine.getSession()
+                .getApplicationBufferSize());
+        recvEngine.unwrap(net, app);
+        app.flip();
+        int length = app.remaining();
+        System.out.println("Unwrapped " + length + " bytes.");
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/net/ssl/DTLS/DTLSMFLNTest.java	Thu Jun 11 20:18:55 2015 -0700
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8043758
+ * @summary Testing DTLS engines handshake using each of the supported
+ *          cipher suites with different maximum fragment length. Testing of
+ *          MFLN extension.
+ * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @run main/othervm -Dtest.security.protocol=DTLS
+ *      -Dtest.mode=norm DTLSMFLNTest
+ * @run main/othervm -Dtest.security.protocol=DTLS
+ *      -Dtest.mode=norm_sni DTLSMFLNTest
+ * @run main/othervm -Dtest.security.protocol=DTLS
+ *      -Dtest.mode=krb DTLSMFLNTest
+ */
+
+/**
+ * Testing DTLS engines handshake using each of the supported cipher suites with
+ * different maximum fragment length. Testing of MFLN extension.
+ */
+public class DTLSMFLNTest {
+    public static void main(String[] args) {
+        MFLNTest.main(args);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/net/ssl/DTLS/DTLSNotEnabledRC4Test.java	Thu Jun 11 20:18:55 2015 -0700
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8043758
+ * @summary Testing DTLS engines do not enable RC4 ciphers by default.
+ * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @run main/othervm -Dtest.security.protocol=DTLS DTLSNotEnabledRC4Test
+ */
+
+/**
+ * Testing DTLS engines do not enable RC4 ciphers by default.
+ */
+public class DTLSNotEnabledRC4Test {
+    public static void main(String[] args) throws Exception {
+        NotEnabledRC4Test.main(args);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/net/ssl/DTLS/DTLSRehandshakeTest.java	Thu Jun 11 20:18:55 2015 -0700
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8043758
+ * @summary Testing DTLS engines re-handshaking using each of the supported
+ *          cipher suites.
+ * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @run main/othervm -Dtest.security.protocol=DTLS
+ *      -Dtest.mode=norm DTLSRehandshakeTest
+ * @run main/othervm -Dtest.security.protocol=DTLS
+ *      -Dtest.mode=norm_sni DTLSRehandshakeTest
+ * @run main/othervm -Dtest.security.protocol=DTLS
+ *      -Dtest.mode=krb DTLSRehandshakeTest
+ */
+
+/**
+ * Testing DTLS engines re-handshaking using each of the supported cipher
+ * suites.
+ */
+public class DTLSRehandshakeTest {
+    public static void main(String[] args) {
+        RehandshakeTest.main(args);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/net/ssl/DTLS/DTLSRehandshakeWithCipherChangeTest.java	Thu Jun 11 20:18:55 2015 -0700
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8043758
+ * @summary Testing DTLS engines re-handshaking with cipher change. New cipher
+ *          is taken randomly from the supporetd ciphers list.
+ * @key randomness
+ * @library /sun/security/krb5/auto /lib/testlibrary /javax/net/ssl/TLSCommon
+ * @run main/othervm -Dtest.security.protocol=DTLS
+ *      DTLSRehandshakeWithCipherChangeTest
+ */
+
+/**
+ * Testing DTLS engines re-handshaking with cipher change. New cipher is taken
+ * randomly from the supported ciphers list.
+ */
+public class DTLSRehandshakeWithCipherChangeTest {
+    public static void main(String[] args) {
+        RehandshakeWithCipherChangeTest.main(args);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/net/ssl/DTLS/DTLSRehandshakeWithDataExTest.java	Thu Jun 11 20:18:55 2015 -0700
@@ -0,0 +1,48 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8043758
+ * @summary Testing DTLS engines re-handshaking using each of the supported
+ *          cipher suites with application data exchange before and after
+ *          re-handshake and closing of the engines.
+ * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @run main/othervm -Dtest.security.protocol=DTLS
+ *      -Dtest.mode=norm DTLSRehandshakeWithDataExTest
+ * @run main/othervm -Dtest.security.protocol=DTLS
+ *      -Dtest.mode=norm_sni DTLSRehandshakeWithDataExTest
+ * @run main/othervm -Dtest.security.protocol=DTLS
+ *      -Dtest.mode=krb DTLSRehandshakeWithDataExTest
+ */
+
+/**
+ * Testing DTLS engines re-handshaking using each of the supported cipher suites
+ * with application data exchange before and after re-handshake and closing of
+ * the engines.
+ */
+public class DTLSRehandshakeWithDataExTest {
+    public static void main(String[] args) {
+        RehandshakeWithDataExTest.main(args);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/net/ssl/DTLS/DTLSSequenceNumberTest.java	Thu Jun 11 20:18:55 2015 -0700
@@ -0,0 +1,176 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8043758
+ * @summary Testing DTLS records sequence number property support in application
+ *          data exchange.
+ * @key randomness
+ * @library /sun/security/krb5/auto /lib/testlibrary /javax/net/ssl/TLSCommon
+ * @run main/othervm -Dtest.security.protocol=DTLS
+ *      -Dtest.mode=norm DTLSSequenceNumberTest
+ * @run main/othervm -Dtest.security.protocol=DTLS
+ *      -Dtest.mode=norm_sni DTLSSequenceNumberTest
+ * @run main/othervm -Dtest.security.protocol=DTLS
+ *      -Dtest.mode=krb DTLSSequenceNumberTest
+ */
+
+import java.nio.ByteBuffer;
+import java.util.TreeMap;
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.SSLEngine;
+import javax.net.ssl.SSLEngineResult;
+import javax.net.ssl.SSLException;
+import java.util.Random;
+import jdk.testlibrary.RandomFactory;
+
+/**
+ * Testing DTLS records sequence number property support in application data
+ * exchange.
+ */
+public class DTLSSequenceNumberTest extends SSLEngineTestCase {
+
+    private final String BIG_MESSAGE = "Very very big message. One two three"
+            + " four five six seven eight nine ten eleven twelve thirteen"
+            + " fourteen fifteen sixteen seventeen eighteen nineteen twenty.";
+    private final byte[] BIG_MESSAGE_BYTES = BIG_MESSAGE.getBytes();
+    private final int PIECES_NUMBER = 15;
+
+    public static void main(String[] args) {
+        DTLSSequenceNumberTest test = new DTLSSequenceNumberTest();
+        setUpAndStartKDCIfNeeded();
+        test.runTests();
+    }
+
+    @Override
+    protected void testOneCipher(String cipher) throws SSLException {
+        SSLContext context = getContext();
+        int maxPacketSize = getMaxPacketSize();
+        boolean useSNI = !TEST_MODE.equals("norm");
+        SSLEngine clientEngine = getClientSSLEngine(context, useSNI);
+        SSLEngine serverEngine = getServerSSLEngine(context, useSNI);
+        clientEngine.setEnabledCipherSuites(new String[]{cipher});
+        serverEngine.setEnabledCipherSuites(new String[]{cipher});
+        serverEngine.setNeedClientAuth(!cipher.contains("anon"));
+        doHandshake(clientEngine, serverEngine, maxPacketSize,
+                HandshakeMode.INITIAL_HANDSHAKE);
+        checkSeqNumPropertyWithAppDataSend(clientEngine, serverEngine);
+        checkSeqNumPropertyWithAppDataSend(serverEngine, clientEngine);
+    }
+
+    private void checkSeqNumPropertyWithAppDataSend(SSLEngine sendEngine,
+            SSLEngine recvEngine) throws SSLException {
+        String sender, reciever;
+        if (sendEngine.getUseClientMode() && !recvEngine.getUseClientMode()) {
+            sender = "Client";
+            reciever = "Server";
+        } else if (recvEngine.getUseClientMode() && !sendEngine.getUseClientMode()) {
+            sender = "Server";
+            reciever = "Client";
+        } else {
+            throw new Error("Both engines are in the same mode");
+        }
+        System.out.println("================================================="
+                + "===========");
+        System.out.println("Checking DTLS sequence number support"
+                + " by sending data from " + sender + " to " + reciever);
+        ByteBuffer[] sentMessages = new ByteBuffer[PIECES_NUMBER];
+        ByteBuffer[] netBuffers = new ByteBuffer[PIECES_NUMBER];
+        TreeMap<Long, ByteBuffer> recvMap = new TreeMap<>(Long::compareUnsigned);
+        int symbolsInAMessage;
+        int symbolsInTheLastMessage;
+        int[] recievingSequence = new int[PIECES_NUMBER];
+        for (int i = 0; i < PIECES_NUMBER; i++) {
+            recievingSequence[i] = i;
+        }
+        shuffleArray(recievingSequence);
+        if (BIG_MESSAGE.length() % PIECES_NUMBER == 0) {
+            symbolsInAMessage = BIG_MESSAGE.length() / PIECES_NUMBER;
+            symbolsInTheLastMessage = symbolsInAMessage;
+        } else {
+            symbolsInAMessage = BIG_MESSAGE.length() / (PIECES_NUMBER - 1);
+            symbolsInTheLastMessage = BIG_MESSAGE.length() % (PIECES_NUMBER - 1);
+        }
+        for (int i = 0; i < PIECES_NUMBER - 1; i++) {
+            sentMessages[i] = ByteBuffer.wrap(BIG_MESSAGE_BYTES,
+                    i * symbolsInAMessage, symbolsInAMessage);
+        }
+        sentMessages[PIECES_NUMBER - 1] = ByteBuffer.wrap(BIG_MESSAGE_BYTES,
+                (PIECES_NUMBER - 1) * symbolsInAMessage, symbolsInTheLastMessage);
+        long prevSeqNum = 0L;
+        //Wrapping massages in direct order
+        for (int i = 0; i < PIECES_NUMBER; i++) {
+            netBuffers[i] = ByteBuffer.allocate(sendEngine.getSession()
+                    .getPacketBufferSize());
+            SSLEngineResult[] r = new SSLEngineResult[1];
+            netBuffers[i] = doWrap(sendEngine, sender, 0, sentMessages[i], r);
+            long seqNum = r[0].sequenceNumber();
+            if (Long.compareUnsigned(seqNum, prevSeqNum) <= 0) {
+                throw new AssertionError("Sequence number of the wrapped "
+                        + "message is less or equal than that of the"
+                        + " previous one! "
+                        + "Was " + prevSeqNum + ", now " + seqNum + ".");
+            }
+            prevSeqNum = seqNum;
+        }
+        //Unwrapping messages in random order and trying to reconstruct order
+        //from sequence number.
+        for (int i = 0; i < PIECES_NUMBER; i++) {
+            int recvNow = recievingSequence[i];
+            SSLEngineResult[] r = new SSLEngineResult[1];
+            ByteBuffer recvMassage = doUnWrap(recvEngine, reciever,
+                    netBuffers[recvNow], r);
+            long seqNum = r[0].sequenceNumber();
+            recvMap.put(seqNum, recvMassage);
+        }
+        int mapSize = recvMap.size();
+        if (mapSize != PIECES_NUMBER) {
+            throw new AssertionError("The number of received massages "
+                    + mapSize + " is not equal to the number of sent messages "
+                    + PIECES_NUMBER + "!");
+        }
+        byte[] recvBigMsgBytes = new byte[BIG_MESSAGE_BYTES.length];
+        int counter = 0;
+        for (ByteBuffer msg : recvMap.values()) {
+            System.arraycopy(msg.array(), 0, recvBigMsgBytes,
+                    counter * symbolsInAMessage, msg.remaining());
+            counter++;
+        }
+        String recvBigMsg = new String(recvBigMsgBytes);
+        if (!recvBigMsg.equals(BIG_MESSAGE)) {
+            throw new AssertionError("Received big message is not equal to"
+                    + " one that was sent! Received message is: " + recvBigMsg);
+        }
+    }
+
+    private static void shuffleArray(int[] ar) {
+        final Random RNG = RandomFactory.getRandom();
+        for (int i = ar.length - 1; i > 0; i--) {
+            int index = RNG.nextInt(i + 1);
+            int a = ar[index];
+            ar[index] = ar[i];
+            ar[i] = a;
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/net/ssl/DTLS/DTLSUnsupportedCiphersTest.java	Thu Jun 11 20:18:55 2015 -0700
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8043758
+ * @summary Testing that try to enable unsupported ciphers
+ *          causes IllegalArgumentException.
+ * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @run main/othervm -Dtest.security.protocol=DTLS DTLSUnsupportedCiphersTest
+ */
+
+/**
+ * Testing that a try to enable unsupported ciphers causes IllegalArgumentException.
+ */
+public class DTLSUnsupportedCiphersTest {
+    public static void main(String[] args) {
+        UnsupportedCiphersTest.main(args);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/net/ssl/DTLS/TEST.properties	Thu Jun 11 20:18:55 2015 -0700
@@ -0,0 +1,1 @@
+modules=java.base java.security.jgss
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/net/ssl/DTLSv10/DTLSv10BufferOverflowUnderflowTest.java	Thu Jun 11 20:18:55 2015 -0700
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8043758
+ * @summary Testing DTLS buffer overflow and underflow status when dealing with
+ *          application data.
+ * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @run main/othervm -Dtest.security.protocol=DTLSv1.0
+ *      -Dtest.mode=norm DTLSv10BufferOverflowUnderflowTest
+ * @run main/othervm -Dtest.security.protocol=DTLSv1.0
+ *      -Dtest.mode=norm_sni DTLSv10BufferOverflowUnderflowTest
+ * @run main/othervm -Dtest.security.protocol=DTLSv1.0
+ *      -Dtest.mode=krb DTLSv10BufferOverflowUnderflowTest
+ */
+
+/**
+ * Testing DTLS incorrect app data packages unwrapping.
+ */
+public class DTLSv10BufferOverflowUnderflowTest {
+    public static void main(String[] args) {
+        BufferOverflowUnderflowTest.main(args);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/net/ssl/DTLSv10/DTLSv10DataExchangeTest.java	Thu Jun 11 20:18:55 2015 -0700
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8043758
+ * @summary Testing DTLS application data exchange using each of the supported
+ *          cipher suites.
+ * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @run main/othervm -Dtest.security.protocol=DTLSv1.0
+ *      -Dtest.mode=norm DTLSv10DataExchangeTest
+ * @run main/othervm -Dtest.security.protocol=DTLSv1.0
+ *      -Dtest.mode=norm_sni DTLSv10DataExchangeTest
+ * @run main/othervm -Dtest.security.protocol=DTLSv1.0
+ *      -Dtest.mode=krb DTLSv10DataExchangeTest
+ */
+
+/**
+ * Testing DTLS application data exchange using each of the supported cipher
+ * suites.
+ */
+public class DTLSv10DataExchangeTest {
+    public static void main(String[] args) {
+        DataExchangeTest.main(args);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/net/ssl/DTLSv10/DTLSv10EnginesClosureTest.java	Thu Jun 11 20:18:55 2015 -0700
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8043758
+ * @summary Testing DTLS engines closing using each of the supported
+ *          cipher suites.
+ * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @run main/othervm -Dtest.security.protocol=DTLSv1.0
+ *      -Dtest.mode=norm DTLSv10EnginesClosureTest
+ * @run main/othervm -Dtest.security.protocol=DTLSv1.0
+ *      -Dtest.mode=norm_sni DTLSv10EnginesClosureTest
+ * @run main/othervm -Dtest.security.protocol=DTLSv1.0
+ *      -Dtest.mode=krb DTLSv10EnginesClosureTest
+ */
+
+/**
+ * Testing DTLS engines closing using each of the supported cipher suites.
+ */
+public class DTLSv10EnginesClosureTest {
+    public static void main(String[] args) {
+        EnginesClosureTest.main(args);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/net/ssl/DTLSv10/DTLSv10HandshakeTest.java	Thu Jun 11 20:18:55 2015 -0700
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8043758
+ * @summary Testing DTLS engines handshake using each of the supported
+ *          cipher suites.
+ * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @run main/othervm -Dtest.security.protocol=DTLSv1.0
+ *      -Dtest.mode=norm DTLSv10HandshakeTest
+ * @run main/othervm -Dtest.security.protocol=DTLSv1.0
+ *      -Dtest.mode=norm_sni DTLSv10HandshakeTest
+ * @run main/othervm -Dtest.security.protocol=DTLSv1.0
+ *      -Dtest.mode=krb DTLSv10HandshakeTest
+ */
+
+/**
+ * Testing DTLS engines handshake using each of the supported cipher suites.
+ */
+public class DTLSv10HandshakeTest {
+    public static void main(String[] args) {
+        HandshakeTest.main(args);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/net/ssl/DTLSv10/DTLSv10HandshakeWithReplicatedPacketsTest.java	Thu Jun 11 20:18:55 2015 -0700
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8043758
+ * @summary Testing DTLS engines handshake using each of the supported
+ *          cipher suites with replicated packets check.
+ * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon /javax/net/ssl/DTLS
+ * @run main/othervm -Dtest.security.protocol=DTLSv1.0
+ *      -Dtest.mode=norm DTLSv10HandshakeWithReplicatedPacketsTest
+ * @run main/othervm -Dtest.security.protocol=DTLSv1.0
+ *      -Dtest.mode=norm_sni DTLSv10HandshakeWithReplicatedPacketsTest
+ * @run main/othervm -Dtest.security.protocol=DTLSv1.0
+ *      -Dtest.mode=krb DTLSv10HandshakeWithReplicatedPacketsTest
+ */
+
+/**
+ * Testing DTLS engines handshake using each of the supported cipher suites with
+ * replicated packets check.
+ */
+public class DTLSv10HandshakeWithReplicatedPacketsTest {
+    public static void main(String[] args) {
+        DTLSHandshakeWithReplicatedPacketsTest.main(args);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/net/ssl/DTLSv10/DTLSv10IncorrectAppDataTest.java	Thu Jun 11 20:18:55 2015 -0700
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8043758
+ * @summary Testing DTLS incorrect app data packages unwrapping.
+ * @key randomness
+ * @library /sun/security/krb5/auto /lib/testlibrary /javax/net/ssl/TLSCommon /javax/net/ssl/DTLS
+ * @run main/othervm -Dtest.security.protocol=DTLSv1.0
+ *      -Dtest.mode=norm DTLSIncorrectAppDataTest
+ * @run main/othervm -Dtest.security.protocol=DTLSv1.0
+ *      -Dtest.mode=norm_sni DTLSIncorrectAppDataTest
+ * @run main/othervm -Dtest.security.protocol=DTLSv1.0
+ *      -Dtest.mode=krb DTLSIncorrectAppDataTest
+ */
+
+/**
+ * Testing DTLS incorrect app data packages unwrapping. Incorrect application
+ * data packages should be ignored by DTLS SSLEngine.
+ */
+public class DTLSv10IncorrectAppDataTest {
+    public static void main(String[] args) {
+        DTLSIncorrectAppDataTest.main(args);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/net/ssl/DTLSv10/DTLSv10MFLNTest.java	Thu Jun 11 20:18:55 2015 -0700
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8043758
+ * @summary Testing DTLS engines handshake using each of the supported
+ *          cipher suites with different maximum fragment length. Testing of
+ *          MFLN extension.
+ * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @run main/othervm -Dtest.security.protocol=DTLSv1.0
+ *      -Dtest.mode=norm DTLSv10MFLNTest
+ * @run main/othervm -Dtest.security.protocol=DTLSv1.0
+ *      -Dtest.mode=norm_sni DTLSv10MFLNTest
+ * @run main/othervm -Dtest.security.protocol=DTLSv1.0
+ *      -Dtest.mode=krb DTLSv10MFLNTest
+ */
+
+/**
+ * Testing DTLS engines handshake using each of the supported cipher suites with
+ * different maximum fragment length. Testing of MFLN extension.
+ */
+public class DTLSv10MFLNTest {
+    public static void main(String[] args) {
+        MFLNTest.main(args);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/net/ssl/DTLSv10/DTLSv10NotEnabledRC4Test.java	Thu Jun 11 20:18:55 2015 -0700
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8043758
+ * @summary Testing DTLS engines do not enable RC4 ciphers by default.
+ * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @run main/othervm -Dtest.security.protocol=DTLSv1.0 DTLSv10NotEnabledRC4Test
+ */
+
+/**
+ * Testing DTLS engines do not enable RC4 ciphers by default.
+ */
+public class DTLSv10NotEnabledRC4Test {
+    public static void main(String[] args) throws Exception {
+        NotEnabledRC4Test.main(args);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/net/ssl/DTLSv10/DTLSv10RehandshakeTest.java	Thu Jun 11 20:18:55 2015 -0700
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8043758
+ * @summary Testing DTLS engines re-handshaking using each of the supported
+ *          cipher suites.
+ * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @run main/othervm -Dtest.security.protocol=DTLSv1.0
+ *      -Dtest.mode=norm DTLSv10RehandshakeTest
+ * @run main/othervm -Dtest.security.protocol=DTLSv1.0
+ *      -Dtest.mode=norm_sni DTLSv10RehandshakeTest
+ * @run main/othervm -Dtest.security.protocol=DTLSv1.0
+ *      -Dtest.mode=krb DTLSv10RehandshakeTest
+ */
+
+/**
+ * Testing DTLS engines re-handshaking using each of the supported cipher
+ * suites.
+ */
+public class DTLSv10RehandshakeTest {
+    public static void main(String[] args) {
+        RehandshakeTest.main(args);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/net/ssl/DTLSv10/DTLSv10RehandshakeWithCipherChangeTest.java	Thu Jun 11 20:18:55 2015 -0700
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8043758
+ * @summary Testing DTLS engines re-handshaking with cipher change. New cipher
+ *          is taken randomly from the supporetd ciphers list.
+ * @key randomness
+ * @library /sun/security/krb5/auto /lib/testlibrary /javax/net/ssl/TLSCommon
+ * @run main/othervm -Dtest.security.protocol=DTLSv1.0
+ *      DTLSv10RehandshakeWithCipherChangeTest
+ */
+
+/**
+ * Testing DTLS engines re-handshaking with cipher change. New cipher is taken
+ * randomly from the supported ciphers list.
+ */
+public class DTLSv10RehandshakeWithCipherChangeTest {
+    public static void main(String[] args) {
+        RehandshakeWithCipherChangeTest.main(args);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/net/ssl/DTLSv10/DTLSv10RehandshakeWithDataExTest.java	Thu Jun 11 20:18:55 2015 -0700
@@ -0,0 +1,48 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8043758
+ * @summary Testing DTLS engines re-handshaking using each of the supported
+ *          cipher suites with application data exchange before and after
+ *          re-handshake and closing of the engines.
+ * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @run main/othervm -Dtest.security.protocol=DTLSv1.0
+ *      -Dtest.mode=norm DTLSv10RehandshakeWithDataExTest
+ * @run main/othervm -Dtest.security.protocol=DTLSv1.0
+ *      -Dtest.mode=norm_sni DTLSv10RehandshakeWithDataExTest
+ * @run main/othervm -Dtest.security.protocol=DTLSv1.0
+ *      -Dtest.mode=krb DTLSv10RehandshakeWithDataExTest
+ */
+
+/**
+ * Testing DTLS engines re-handshaking using each of the supported cipher suites
+ * with application data exchange before and after re-handshake and closing of
+ * the engines.
+ */
+public class DTLSv10RehandshakeWithDataExTest {
+    public static void main(String[] args) {
+        RehandshakeWithDataExTest.main(args);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/net/ssl/DTLSv10/DTLSv10SequenceNumberTest.java	Thu Jun 11 20:18:55 2015 -0700
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8043758
+ * @summary Testing DTLS records sequence number property support in application
+ *          data exchange.
+ * @key randomness
+ * @library /sun/security/krb5/auto /lib/testlibrary /javax/net/ssl/TLSCommon /javax/net/ssl/DTLS
+ * @run main/othervm -Dtest.security.protocol=DTLSv1.0
+ *      -Dtest.mode=norm DTLSv10SequenceNumberTest
+ * @run main/othervm -Dtest.security.protocol=DTLSv1.0
+ *      -Dtest.mode=norm_sni DTLSv10SequenceNumberTest
+ * @run main/othervm -Dtest.security.protocol=DTLSv1.0
+ *      -Dtest.mode=krb DTLSv10SequenceNumberTest
+ */
+
+/**
+ * Testing DTLS records sequence number property support in application data
+ * exchange.
+ */
+public class DTLSv10SequenceNumberTest {
+    public static void main(String[] args) {
+        DTLSHandshakeWithReplicatedPacketsTest.main(args);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/net/ssl/DTLSv10/DTLSv10UnsupportedCiphersTest.java	Thu Jun 11 20:18:55 2015 -0700
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8043758
+ * @summary Testing that try to enable unsupported ciphers
+ *          causes IllegalArgumentException.
+ * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @run main/othervm -Dtest.security.protocol=DTLSv1.0
+ *      DTLSv10UnsupportedCiphersTest
+ */
+
+/**
+ * Testing that a try to enable unsupported ciphers causes IllegalArgumentException.
+ */
+public class DTLSv10UnsupportedCiphersTest {
+    public static void main(String[] args) {
+        UnsupportedCiphersTest.main(args);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/net/ssl/DTLSv10/TEST.properties	Thu Jun 11 20:18:55 2015 -0700
@@ -0,0 +1,1 @@
+modules=java.base java.security.jgss
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/net/ssl/TLS/TLSDataExchangeTest.java	Thu Jun 11 20:18:55 2015 -0700
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8085979
+ * @summary Testing TLS application data exchange using each of the supported
+ *          cipher suites.
+ * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @run main/othervm -Dtest.security.protocol=TLS -Dtest.mode=norm TLSDataExchangeTest
+ * @run main/othervm -Dtest.security.protocol=TLS -Dtest.mode=norm_sni TLSDataExchangeTest
+ * @run main/othervm -Dtest.security.protocol=TLS -Dtest.mode=krb TLSDataExchangeTest
+ */
+
+/**
+ * Testing TLS application data exchange using each of the supported cipher
+ * suites.
+ */
+public class TLSDataExchangeTest {
+    public static void main(String[] args) {
+        DataExchangeTest.main(args);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/net/ssl/TLS/TLSEnginesClosureTest.java	Thu Jun 11 20:18:55 2015 -0700
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8085979
+ * @summary Testing TLS engines closing using each of the supported
+ *          cipher suites.
+ * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @run main/othervm -Dtest.security.protocol=TLS -Dtest.mode=norm TLSEnginesClosureTest
+ * @run main/othervm -Dtest.security.protocol=TLS -Dtest.mode=norm_sni TLSEnginesClosureTest
+ * @run main/othervm -Dtest.security.protocol=TLS -Dtest.mode=krb TLSEnginesClosureTest
+ */
+
+/**
+ * Testing TLS engines closing using each of the supported cipher suites.
+ */
+public class TLSEnginesClosureTest {
+    public static void main(String[] args) {
+        EnginesClosureTest.main(args);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/net/ssl/TLS/TLSHandshakeTest.java	Thu Jun 11 20:18:55 2015 -0700
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8085979
+ * @summary Testing TLS engines handshake using each of the supported
+ *          cipher suites.
+ * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @run main/othervm -Dtest.security.protocol=TLS -Dtest.mode=norm TLSHandshakeTest
+ * @run main/othervm -Dtest.security.protocol=TLS -Dtest.mode=norm_sni TLSHandshakeTest
+ * @run main/othervm -Dtest.security.protocol=TLS -Dtest.mode=krb TLSHandshakeTest
+ */
+
+/**
+ * Testing TLS engines handshake using each of the supported cipher suites.
+ */
+public class TLSHandshakeTest {
+    public static void main(String[] args) {
+        HandshakeTest.main(args);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/net/ssl/TLS/TLSMFLNTest.java	Thu Jun 11 20:18:55 2015 -0700
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8085979
+ * @summary Testing TLS engines handshake using each of the supported
+ *          cipher suites with different maximum fragment length. Testing of
+ *          MFLN extension.
+ * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @run main/othervm -Dtest.security.protocol=TLS -Dtest.mode=norm TLSMFLNTest
+ * @run main/othervm -Dtest.security.protocol=TLS -Dtest.mode=norm_sni TLSMFLNTest
+ * @run main/othervm -Dtest.security.protocol=TLS -Dtest.mode=krb TLSMFLNTest
+ */
+
+/**
+ * Testing TLS engines handshake using each of the supported cipher suites with
+ * different maximum fragment length. Testing of MFLN extension.
+ */
+public class TLSMFLNTest {
+    public static void main(String[] args) {
+        MFLNTest.main(args);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/net/ssl/TLS/TLSNotEnabledRC4Test.java	Thu Jun 11 20:18:55 2015 -0700
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8085979
+ * @summary Testing TLS engines do not enable RC4 ciphers by default.
+ * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @run main/othervm -Dtest.security.protocol=TLS TLSNotEnabledRC4Test
+ */
+
+/**
+ * Testing DTLS engines do not enable RC4 ciphers by default.
+ */
+public class TLSNotEnabledRC4Test {
+    public static void main(String[] args) throws Exception {
+        NotEnabledRC4Test.main(args);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/net/ssl/TLS/TLSRehandshakeTest.java	Thu Jun 11 20:18:55 2015 -0700
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8085979
+ * @summary Testing TLS engines re-handshaking using each of the supported
+ *          cipher suites.
+ * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @run main/othervm -Dtest.security.protocol=TLS -Dtest.mode=norm TLSRehandshakeTest
+ * @run main/othervm -Dtest.security.protocol=TLS -Dtest.mode=norm_sni TLSRehandshakeTest
+ * @run main/othervm -Dtest.security.protocol=TLS -Dtest.mode=krb TLSRehandshakeTest
+ */
+
+/**
+ * Testing TLS engines re-handshaking using each of the supported cipher
+ * suites.
+ */
+public class TLSRehandshakeTest {
+    public static void main(String[] args) {
+        RehandshakeTest.main(args);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/net/ssl/TLS/TLSRehandshakeWithCipherChangeTest.java	Thu Jun 11 20:18:55 2015 -0700
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8085979
+ * @summary Testing TLS engines re-handshaking with cipher change. New cipher
+ *          is taken randomly from the supporetd ciphers list.
+ * @key randomness
+ * @library /sun/security/krb5/auto /lib/testlibrary /javax/net/ssl/TLSCommon
+ * @run main/othervm -Dtest.security.protocol=TLS TLSRehandshakeWithCipherChangeTest
+ */
+
+/**
+ * Testing TLS engines re-handshaking with cipher change. New cipher is taken
+ * randomly from the supported ciphers list.
+ */
+public class TLSRehandshakeWithCipherChangeTest {
+    public static void main(String[] args) {
+        RehandshakeWithCipherChangeTest.main(args);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/net/ssl/TLS/TLSRehandshakeWithDataExTest.java	Thu Jun 11 20:18:55 2015 -0700
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8085979
+ * @summary Testing TLS engines re-handshaking using each of the supported
+ *          cipher suites with application data exchange before and after
+ *          re-handshake and closing of the engines.
+ * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @run main/othervm -Dtest.security.protocol=TLS -Dtest.mode=norm TLSRehandshakeWithDataExTest
+ * @run main/othervm -Dtest.security.protocol=TLS -Dtest.mode=norm_sni TLSRehandshakeWithDataExTest
+ * @run main/othervm -Dtest.security.protocol=TLS -Dtest.mode=krb TLSRehandshakeWithDataExTest
+ */
+
+/**
+ * Testing TLS engines re-handshaking using each of the supported cipher suites
+ * with application data exchange before and after re-handshake and closing of
+ * the engines.
+ */
+public class TLSRehandshakeWithDataExTest {
+    public static void main(String[] args) {
+        RehandshakeWithDataExTest.main(args);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/net/ssl/TLS/TLSUnsupportedCiphersTest.java	Thu Jun 11 20:18:55 2015 -0700
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8085979
+ * @summary Testing that try to enable unsupported ciphers
+ *          causes IllegalArgumentException.
+ * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @run main/othervm -Dtest.security.protocol=TLS TLSUnsupportedCiphersTest
+ */
+
+/**
+ * Testing that a try to enable unsupported ciphers causes IllegalArgumentException.
+ */
+public class TLSUnsupportedCiphersTest {
+    public static void main(String[] args) {
+        UnsupportedCiphersTest.main(args);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/net/ssl/TLSCommon/BufferOverflowUnderflowTest.java	Thu Jun 11 20:18:55 2015 -0700
@@ -0,0 +1,135 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.nio.ByteBuffer;
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.SSLEngine;
+import javax.net.ssl.SSLEngineResult;
+import javax.net.ssl.SSLException;
+
+/**
+ * Testing SSLEngine incorrect app data packages unwrapping.
+ */
+public class BufferOverflowUnderflowTest extends SSLEngineTestCase {
+
+    private final String MESSAGE = "Hello peer!";
+
+    public static void main(String[] args) {
+        BufferOverflowUnderflowTest test = new BufferOverflowUnderflowTest();
+        setUpAndStartKDCIfNeeded();
+        test.runTests();
+    }
+
+    @Override
+    protected void testOneCipher(String cipher) throws SSLException {
+        SSLContext context = getContext();
+        int maxPacketSize = getMaxPacketSize();
+        boolean useSNI = !TEST_MODE.equals("norm");
+        SSLEngine clientEngine = getClientSSLEngine(context, useSNI);
+        SSLEngine serverEngine = getServerSSLEngine(context, useSNI);
+        clientEngine.setEnabledCipherSuites(new String[]{cipher});
+        serverEngine.setEnabledCipherSuites(new String[]{cipher});
+        serverEngine.setNeedClientAuth(!cipher.contains("anon"));
+        doHandshake(clientEngine, serverEngine, maxPacketSize,
+                HandshakeMode.INITIAL_HANDSHAKE);
+        checkBufferOverflowOnWrap(clientEngine);
+        checkBufferOverflowOnWrap(serverEngine);
+        checkBufferOverflowOnUnWrap(clientEngine, serverEngine);
+        checkBufferOverflowOnUnWrap(serverEngine, clientEngine);
+        checkBufferUnderflowOnUnWrap(serverEngine, clientEngine);
+        checkBufferUnderflowOnUnWrap(clientEngine, serverEngine);
+    }
+
+    private void checkBufferOverflowOnWrap(SSLEngine engine)
+            throws SSLException {
+        String mode = engine.getUseClientMode() ? "client"
+                : "server";
+        System.out.println("================================================="
+                + "===========");
+        System.out.println("Testing SSLEngine buffer overflow"
+                + " on wrap by " + mode);
+        ByteBuffer app = ByteBuffer.wrap(MESSAGE.getBytes());
+        //Making net buffer size less than required by 1 byte.
+        ByteBuffer net = ByteBuffer
+                .allocate(engine.getSession().getPacketBufferSize() - 1);
+        SSLEngineResult r = engine.wrap(app, net);
+        checkResult(r, SSLEngineResult.Status.BUFFER_OVERFLOW);
+        System.out.println("Passed");
+    }
+
+    private void checkBufferOverflowOnUnWrap(SSLEngine wrappingEngine,
+            SSLEngine unwrappingEngine)
+            throws SSLException {
+        String wrapperMode = wrappingEngine.getUseClientMode() ? "client"
+                : "server";
+        String unwrapperMode = unwrappingEngine.getUseClientMode() ? "client"
+                : "server";
+        if (wrapperMode.equals(unwrapperMode)) {
+            throw new Error("Test error: both engines are in the same mode!");
+        }
+        System.out.println("================================================="
+                + "===========");
+        System.out.println("Testing SSLEngine buffer overflow"
+                + " on unwrap by " + unwrapperMode);
+        ByteBuffer app = ByteBuffer.wrap(MESSAGE.getBytes());
+        ByteBuffer net = ByteBuffer
+                .allocate(wrappingEngine.getSession().getPacketBufferSize());
+        SSLEngineResult r = wrappingEngine.wrap(app, net);
+        checkResult(r, SSLEngineResult.Status.OK);
+        //Making app buffer size less than required by 1 byte.
+        app = ByteBuffer.allocate(MESSAGE.length() - 1);
+        net.flip();
+        r = unwrappingEngine.unwrap(net, app);
+        checkResult(r, SSLEngineResult.Status.BUFFER_OVERFLOW);
+        System.out.println("Passed");
+    }
+
+    private void checkBufferUnderflowOnUnWrap(SSLEngine wrappingEngine,
+            SSLEngine unwrappingEngine)
+            throws SSLException {
+        String wrapperMode = wrappingEngine.getUseClientMode() ? "client"
+                : "server";
+        String unwrapperMode = unwrappingEngine.getUseClientMode() ? "client"
+                : "server";
+        if (wrapperMode.equals(unwrapperMode)) {
+            throw new Error("Test error: both engines are in the same mode!");
+        }
+        System.out.println("================================================="
+                + "===========");
+        System.out.println("Testing SSLEngine buffer underflow"
+                + " on unwrap by " + unwrapperMode);
+        ByteBuffer app = ByteBuffer.wrap(MESSAGE.getBytes());
+        ByteBuffer net = ByteBuffer
+                .allocate(wrappingEngine.getSession().getPacketBufferSize());
+        SSLEngineResult r = wrappingEngine.wrap(app, net);
+        checkResult(r, SSLEngineResult.Status.OK);
+        app = ByteBuffer.allocate(unwrappingEngine.getSession()
+                .getApplicationBufferSize());
+        net.flip();
+        //Making net buffer size less than size of dtls message.
+        net.limit(net.limit() - 1);
+        r = unwrappingEngine.unwrap(net, app);
+        checkResult(r, SSLEngineResult.Status.BUFFER_UNDERFLOW);
+        System.out.println("Passed");
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/net/ssl/TLSCommon/DataExchangeTest.java	Thu Jun 11 20:18:55 2015 -0700
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.SSLEngine;
+import javax.net.ssl.SSLException;
+
+/**
+ * Testing SSLEngine application data exchange using each of the supported cipher
+ * suites.
+ */
+public class DataExchangeTest extends SSLEngineTestCase {
+
+    public static void main(String[] args) {
+        DataExchangeTest test = new DataExchangeTest();
+        setUpAndStartKDCIfNeeded();
+        test.runTests();
+    }
+
+    @Override
+    protected void testOneCipher(String cipher) throws SSLException {
+        SSLContext context = getContext();
+        int maxPacketSize = getMaxPacketSize();
+        boolean useSNI = !TEST_MODE.equals("norm");
+        SSLEngine clientEngine = getClientSSLEngine(context, useSNI);
+        SSLEngine serverEngine = getServerSSLEngine(context, useSNI);
+        clientEngine.setEnabledCipherSuites(new String[]{cipher});
+        serverEngine.setEnabledCipherSuites(new String[]{cipher});
+        serverEngine.setNeedClientAuth(!cipher.contains("anon"));
+        doHandshake(clientEngine, serverEngine, maxPacketSize,
+                HandshakeMode.INITIAL_HANDSHAKE);
+        sendApplicationData(clientEngine, serverEngine);
+        sendApplicationData(serverEngine, clientEngine);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/net/ssl/TLSCommon/EnginesClosureTest.java	Thu Jun 11 20:18:55 2015 -0700
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.SSLEngine;
+import javax.net.ssl.SSLException;
+
+/**
+ * Testing SSLEngines closing using each of the supported cipher suites.
+ */
+public class EnginesClosureTest extends SSLEngineTestCase {
+
+    public static void main(String[] args) {
+        EnginesClosureTest test = new EnginesClosureTest();
+        setUpAndStartKDCIfNeeded();
+        test.runTests();
+    }
+
+    @Override
+    protected void testOneCipher(String cipher) throws SSLException {
+        closingTest(cipher, true);
+        closingTest(cipher, false);
+    }
+
+    private void closingTest(String cipher, boolean clientCloses)
+            throws SSLException {
+        SSLContext context = getContext();
+        int maxPacketSize = getMaxPacketSize();
+        boolean useSNI = !TEST_MODE.equals("norm");
+        SSLEngine clientEngine = getClientSSLEngine(context, useSNI);
+        SSLEngine serverEngine = getServerSSLEngine(context, useSNI);
+        clientEngine.setEnabledCipherSuites(new String[]{cipher});
+        serverEngine.setEnabledCipherSuites(new String[]{cipher});
+        serverEngine.setNeedClientAuth(!cipher.contains("anon"));
+        doHandshake(clientEngine, serverEngine, maxPacketSize,
+                HandshakeMode.INITIAL_HANDSHAKE);
+        if (clientCloses) {
+            closeEngines(clientEngine, serverEngine);
+        } else {
+            closeEngines(serverEngine, clientEngine);
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/net/ssl/TLSCommon/HandshakeTest.java	Thu Jun 11 20:18:55 2015 -0700
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.SSLEngine;
+import javax.net.ssl.SSLException;
+
+/**
+ * Testing SSLEngines handshake using each of the supported cipher suites.
+ */
+public class HandshakeTest extends SSLEngineTestCase {
+
+    public static void main(String[] args) {
+        HandshakeTest test = new HandshakeTest();
+        setUpAndStartKDCIfNeeded();
+        test.runTests();
+    }
+
+    @Override
+    protected void testOneCipher(String cipher) throws SSLException {
+        SSLContext context = getContext();
+        int maxPacketSize = getMaxPacketSize();
+        boolean useSNI = !TEST_MODE.equals("norm");
+        SSLEngine clientEngine = getClientSSLEngine(context, useSNI);
+        SSLEngine serverEngine = getServerSSLEngine(context, useSNI);
+        clientEngine.setEnabledCipherSuites(new String[]{cipher});
+        serverEngine.setEnabledCipherSuites(new String[]{cipher});
+        serverEngine.setNeedClientAuth(!cipher.contains("anon"));
+        doHandshake(clientEngine, serverEngine, maxPacketSize,
+                HandshakeMode.INITIAL_HANDSHAKE);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/net/ssl/TLSCommon/MFLNTest.java	Thu Jun 11 20:18:55 2015 -0700
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.SSLEngine;
+import javax.net.ssl.SSLException;
+
+/**
+ * Testing SSLEngines handshake using each of the supported cipher suites with
+ * different maximum fragment length. Testing of MFLN extension.
+ */
+public class MFLNTest extends SSLEngineTestCase {
+
+    public static void main(String[] args) {
+        setUpAndStartKDCIfNeeded();
+        System.setProperty("jsse.enableMFLNExtension", "true");
+        for (int mfl = 4096; mfl >= 256; mfl /= 2) {
+            System.out.println("=============================================="
+                    + "==============");
+            System.out.printf("Testsing DTLS handshake with MFL = %d%n", mfl);
+            MFLNTest test = new MFLNTest(mfl);
+            test.runTests();
+        }
+    }
+
+    protected MFLNTest(int maxPacketSize) {
+        super(maxPacketSize);
+    }
+
+    @Override
+    protected void testOneCipher(String cipher) throws SSLException {
+        SSLContext context = getContext();
+        int maxPacketSize = getMaxPacketSize();
+        boolean useSNI = !TEST_MODE.equals("norm");
+        SSLEngine clientEngine = getClientSSLEngine(context, useSNI);
+        SSLEngine serverEngine = getServerSSLEngine(context, useSNI);
+        clientEngine.setEnabledCipherSuites(new String[]{cipher});
+        serverEngine.setEnabledCipherSuites(new String[]{cipher});
+        serverEngine.setNeedClientAuth(!cipher.contains("anon"));
+        doHandshake(clientEngine, serverEngine, maxPacketSize,
+                HandshakeMode.INITIAL_HANDSHAKE);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/net/ssl/TLSCommon/NotEnabledRC4Test.java	Thu Jun 11 20:18:55 2015 -0700
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.SSLEngine;
+
+/**
+ * Testing SSLEngines do not enable RC4 ciphers by default.
+ */
+public class NotEnabledRC4Test {
+
+    public static void main(String[] s) throws Exception {
+        SSLContext context = SSLEngineTestCase.getContext();
+        SSLEngine clientEngine = context.createSSLEngine();
+        clientEngine.setUseClientMode(true);
+        SSLEngine serverEngine = context.createSSLEngine();
+        serverEngine.setUseClientMode(false);
+        String[] cliEnabledCiphers = clientEngine.getEnabledCipherSuites();
+        rc4Test(cliEnabledCiphers, true);
+        String[] srvEnabledCiphers = serverEngine.getEnabledCipherSuites();
+        rc4Test(srvEnabledCiphers, false);
+    }
+
+    private static void rc4Test(String[] ciphers, boolean isClient) {
+        String mode = isClient ? "client" : "server";
+        for (String cipher : ciphers) {
+            if (cipher.contains("RC4")) {
+                throw new AssertionError("RC4 cipher " + cipher + " is enabled"
+                        + " by default on " + mode + " SSLEngine,"
+                        + " but it should not!");
+            }
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/net/ssl/TLSCommon/RehandshakeTest.java	Thu Jun 11 20:18:55 2015 -0700
@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.SSLEngine;
+import javax.net.ssl.SSLException;
+
+/**
+ * Testing SSLEngines re-handshaking using each of the supported cipher
+ * suites.
+ */
+public class RehandshakeTest extends SSLEngineTestCase {
+
+    public static void main(String[] args) {
+        RehandshakeTest test = new RehandshakeTest();
+        setUpAndStartKDCIfNeeded();
+        test.runTests();
+    }
+
+    @Override
+    protected void testOneCipher(String cipher) throws SSLException {
+        SSLContext context = getContext();
+        int maxPacketSize = getMaxPacketSize();
+        boolean useSNI = !TEST_MODE.equals("norm");
+        SSLEngine clientEngine = getClientSSLEngine(context, useSNI);
+        SSLEngine serverEngine = getServerSSLEngine(context, useSNI);
+        clientEngine.setEnabledCipherSuites(new String[]{cipher});
+        serverEngine.setEnabledCipherSuites(new String[]{cipher});
+        serverEngine.setNeedClientAuth(!cipher.contains("anon"));
+        doHandshake(clientEngine, serverEngine, maxPacketSize,
+                HandshakeMode.INITIAL_HANDSHAKE);
+        doHandshake(clientEngine, serverEngine, maxPacketSize,
+                HandshakeMode.REHANDSHAKE_BEGIN_CLIENT);
+        doHandshake(clientEngine, serverEngine, maxPacketSize,
+                HandshakeMode.REHANDSHAKE_BEGIN_SERVER);
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/net/ssl/TLSCommon/RehandshakeWithCipherChangeTest.java	Thu Jun 11 20:18:55 2015 -0700
@@ -0,0 +1,85 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.SSLEngine;
+import javax.net.ssl.SSLEngineResult;
+import javax.net.ssl.SSLException;
+import java.util.Random;
+import jdk.testlibrary.RandomFactory;
+
+/**
+ * Testing SSLEngines re-handshaking with cipher change. New cipher is taken
+ * randomly from the supported ciphers list.
+ */
+public class RehandshakeWithCipherChangeTest extends SSLEngineTestCase {
+
+    public static void main(String[] s) {
+        RehandshakeWithCipherChangeTest test
+                = new RehandshakeWithCipherChangeTest();
+        test.runTests(Ciphers.ENABLED_NON_KRB_NOT_ANON_CIPHERS);
+    }
+
+    @Override
+    protected void testOneCipher(String cipher) throws SSLException {
+        SSLContext context = getContext();
+        int maxPacketSize = getMaxPacketSize();
+        SSLEngine clientEngine = context.createSSLEngine();
+        clientEngine.setUseClientMode(true);
+        SSLEngine serverEngine = context.createSSLEngine();
+        serverEngine.setUseClientMode(false);
+        clientEngine.setEnabledCipherSuites(new String[]{cipher});
+        serverEngine.setEnabledCipherSuites(
+                Ciphers.ENABLED_NON_KRB_NOT_ANON_CIPHERS.ciphers);
+        String randomCipher;
+        serverEngine.setNeedClientAuth(true);
+        long initialEpoch = 0;
+        long secondEpoch = 0;
+        SSLEngineResult r;
+        doHandshake(clientEngine, serverEngine, maxPacketSize,
+                HandshakeMode.INITIAL_HANDSHAKE);
+        sendApplicationData(clientEngine, serverEngine);
+        r = sendApplicationData(serverEngine, clientEngine);
+        if (TESTED_SECURITY_PROTOCOL.contains("DTLS")) {
+            initialEpoch = r.sequenceNumber() >> 48;
+        }
+        final Random RNG = RandomFactory.getRandom();
+        randomCipher = Ciphers.ENABLED_NON_KRB_NOT_ANON_CIPHERS.ciphers[RNG
+                .nextInt(Ciphers.ENABLED_NON_KRB_NOT_ANON_CIPHERS.ciphers.length)];
+        clientEngine.setEnabledCipherSuites(new String[]{randomCipher});
+        doHandshake(clientEngine, serverEngine, maxPacketSize,
+                HandshakeMode.REHANDSHAKE_BEGIN_CLIENT);
+        sendApplicationData(clientEngine, serverEngine);
+        r = sendApplicationData(serverEngine, clientEngine);
+        if (TESTED_SECURITY_PROTOCOL.contains("DTLS")) {
+            secondEpoch = r.sequenceNumber() >> 48;
+            AssertionError epochError = new AssertionError("Epoch number"
+                    + " did not grow after re-handshake! "
+                    + " Was " + initialEpoch + ", now " + secondEpoch + ".");
+            if (Long.compareUnsigned(secondEpoch, initialEpoch) <= 0) {
+                throw epochError;
+            }
+        }
+        closeEngines(clientEngine, serverEngine);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/net/ssl/TLSCommon/RehandshakeWithDataExTest.java	Thu Jun 11 20:18:55 2015 -0700
@@ -0,0 +1,89 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.SSLEngine;
+import javax.net.ssl.SSLEngineResult;
+import javax.net.ssl.SSLException;
+
+/**
+ * Testing SSLEngines re-handshaking using each of the supported cipher suites
+ * with application data exchange before and after re-handshake and closing of
+ * the engines.
+ */
+public class RehandshakeWithDataExTest extends SSLEngineTestCase {
+
+    public static void main(String[] args) {
+        RehandshakeWithDataExTest test = new RehandshakeWithDataExTest();
+        setUpAndStartKDCIfNeeded();
+        test.runTests();
+    }
+
+    @Override
+    protected void testOneCipher(String cipher) throws SSLException {
+        SSLContext context = getContext();
+        int maxPacketSize = getMaxPacketSize();
+        boolean useSNI = !TEST_MODE.equals("norm");
+        SSLEngine clientEngine = getClientSSLEngine(context, useSNI);
+        SSLEngine serverEngine = getServerSSLEngine(context, useSNI);
+        clientEngine.setEnabledCipherSuites(new String[]{cipher});
+        serverEngine.setEnabledCipherSuites(new String[]{cipher});
+        serverEngine.setNeedClientAuth(!cipher.contains("anon"));
+        long initialEpoch = 0;
+        long secondEpoch = 0;
+        long thirdEpoch = 0;
+        SSLEngineResult r;
+        doHandshake(clientEngine, serverEngine, maxPacketSize,
+                HandshakeMode.INITIAL_HANDSHAKE);
+        sendApplicationData(clientEngine, serverEngine);
+        r = sendApplicationData(serverEngine, clientEngine);
+        if (TESTED_SECURITY_PROTOCOL.contains("DTLS")) {
+            initialEpoch = r.sequenceNumber() >> 48;
+        }
+        doHandshake(clientEngine, serverEngine, maxPacketSize,
+                HandshakeMode.REHANDSHAKE_BEGIN_CLIENT);
+        sendApplicationData(clientEngine, serverEngine);
+        r = sendApplicationData(serverEngine, clientEngine);
+        AssertionError epochError = new AssertionError("Epoch number"
+                + " did not grow after re-handshake! "
+                + " Was " + initialEpoch + ", now " + secondEpoch + ".");
+        if (TESTED_SECURITY_PROTOCOL.contains("DTLS")) {
+            secondEpoch = r.sequenceNumber() >> 48;
+            if (Long.compareUnsigned(secondEpoch, initialEpoch) <= 0) {
+                throw epochError;
+            }
+        }
+        doHandshake(clientEngine, serverEngine, maxPacketSize,
+                HandshakeMode.REHANDSHAKE_BEGIN_SERVER);
+        sendApplicationData(clientEngine, serverEngine);
+        r = sendApplicationData(serverEngine, clientEngine);
+        if (TESTED_SECURITY_PROTOCOL.contains("DTLS")) {
+        thirdEpoch = r.sequenceNumber() >> 48;
+            if (Long.compareUnsigned(thirdEpoch, secondEpoch) <= 0) {
+                throw epochError;
+            }
+        }
+        closeEngines(clientEngine, serverEngine);
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/net/ssl/TLSCommon/SSLEngineTestCase.java	Thu Jun 11 20:18:55 2015 -0700
@@ -0,0 +1,1081 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import javax.net.ssl.KeyManagerFactory;
+import javax.net.ssl.SNIHostName;
+import javax.net.ssl.SNIMatcher;
+import javax.net.ssl.SNIServerName;
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.SSLEngine;
+import javax.net.ssl.SSLEngineResult;
+import javax.net.ssl.SSLException;
+import javax.net.ssl.SSLParameters;
+import javax.net.ssl.TrustManagerFactory;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.nio.ByteBuffer;
+import java.security.KeyManagementException;
+import java.security.KeyStore;
+import java.security.KeyStoreException;
+import java.security.NoSuchAlgorithmException;
+import java.security.UnrecoverableKeyException;
+import java.security.cert.CertificateException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Basic class to inherit SSLEngine test cases from it. Tests apply for
+ * the TLS or DTLS security protocols and their versions.
+ */
+abstract public class SSLEngineTestCase {
+
+    public enum Ciphers {
+
+        /**
+         * Ciphers supported by the tested SSLEngine without those with kerberos
+         * authentication.
+         */
+        SUPPORTED_NON_KRB_CIPHERS(SSLEngineTestCase.SUPPORTED_NON_KRB_CIPHERS,
+                "Supported non kerberos"),
+        /**
+         * Ciphers supported by the tested SSLEngine without those with kerberos
+         * authentication and without those with SHA256 ans SHA384.
+         */
+        SUPPORTED_NON_KRB_NON_SHA_CIPHERS(SSLEngineTestCase.SUPPORTED_NON_KRB_NON_SHA_CIPHERS,
+                "Supported non kerberos non SHA256 and SHA384"),
+        /**
+         * Ciphers supported by the tested SSLEngine with kerberos authentication.
+         */
+        SUPPORTED_KRB_CIPHERS(SSLEngineTestCase.SUPPORTED_KRB_CIPHERS,
+                "Supported kerberos"),
+        /**
+         * Ciphers enabled by default for the tested SSLEngine without kerberos
+         * and anon.
+         */
+        ENABLED_NON_KRB_NOT_ANON_CIPHERS(
+                SSLEngineTestCase.ENABLED_NON_KRB_NOT_ANON_CIPHERS,
+                "Enabled by default non kerberos not anonymous"),
+        /**
+         * Ciphers unsupported by the tested SSLEngine.
+         */
+        UNSUPPORTED_CIPHERS(SSLEngineTestCase.UNSUPPORTED_CIPHERS,
+                "Unsupported");
+
+        Ciphers(String[] ciphers, String description) {
+            this.ciphers = ciphers;
+            this.description = description;
+        }
+
+        final String[] ciphers;
+        final String description;
+    }
+
+    /**
+     * Enumeration used to distinguish handshake mode in
+     * {@link SSLEngineTestCase#doHandshake(javax.net.ssl.SSLEngine,
+     * javax.net.ssl.SSLEngine, int, SSLEngineTestCase.HandshakeMode, boolean)
+     * SSLEngineTestCase.doHandshake} method.
+     */
+    public enum HandshakeMode {
+
+        /**
+         * Initial handshake done for the first time: both engines call
+         * {@link SSLEngine#beginHandshake()} method.
+         */
+        INITIAL_HANDSHAKE,
+        /**
+         * Repeated handshake done by client: client engine calls
+         * {@link SSLEngine#beginHandshake()} method.
+         */
+        REHANDSHAKE_BEGIN_CLIENT,
+        /**
+         * Repeated handshake done by server: server engine calls
+         * {@link SSLEngine#beginHandshake()} method.
+         */
+        REHANDSHAKE_BEGIN_SERVER;
+    }
+    /**
+     * Security protocol to be tested: "TLS" or "DTLS" or their versions,
+     * e.g. "TLSv1", "TLSv1.1", "TLSv1.2", "DTLSv1.0", "DTLSv1.2".
+     */
+    public static final String TESTED_SECURITY_PROTOCOL
+            = System.getProperty("test.security.protocol", "TLS");
+    /**
+     * Test mode: "norm", "norm_sni" or "krb".
+     * Modes "norm" and "norm_sni" are used to run
+     * with all supported non-kerberos ciphers.
+     * Mode "krb" is used to run with kerberos ciphers.
+     */
+    public static final String TEST_MODE
+            = System.getProperty("test.mode", "norm");
+
+    private static final String FS = System.getProperty("file.separator", "/");
+    private static final String PATH_TO_STORES = ".." + FS + "etc";
+    private static final String KEY_STORE_FILE = "keystore";
+    private static final String TRUST_STORE_FILE = "truststore";
+    private static final String PASSWD = "passphrase";
+
+    private static final String KEY_FILE_NAME
+            = System.getProperty("test.src", ".") + FS + PATH_TO_STORES
+            + FS + KEY_STORE_FILE;
+    private static final String TRUST_FILE_NAME
+            = System.getProperty("test.src", ".") + FS + PATH_TO_STORES
+            + FS + TRUST_STORE_FILE;
+
+    private static ByteBuffer net;
+    private static ByteBuffer netReplicatedClient;
+    private static ByteBuffer netReplicatedServer;
+    private static final int MAX_HANDSHAKE_LOOPS = 100;
+    private static final String EXCHANGE_MSG_SENT = "Hello, peer!";
+    private static boolean doUnwrapForNotHandshakingStatus;
+    private static boolean endHandshakeLoop = false;
+    private static final String TEST_SRC = System.getProperty("test.src", ".");
+    private static final String KTAB_FILENAME = "krb5.keytab.data";
+    private static final String KRB_REALM = "TEST.REALM";
+    private static final String KRBTGT_PRINCIPAL = "krbtgt/" + KRB_REALM;
+    private static final String KRB_USER = "USER";
+    private static final String KRB_USER_PASSWORD = "password";
+    private static final String KRB_USER_PRINCIPAL = KRB_USER + "@" + KRB_REALM;
+    private static final String KRB5_CONF_FILENAME = "krb5.conf";
+    private static final String PATH_TO_COMMON = ".." + FS + "TLSCommon";
+    private static final String JAAS_CONF_FILE = PATH_TO_COMMON
+            + FS + "jaas.conf";
+    private static final int DELAY = 1000;
+    private static final String HOST = "localhost";
+    private static final String SERVER_NAME = "service.localhost";
+    private static final String SNI_PATTERN = ".*";
+
+    private static final String[] SUPPORTED_NON_KRB_CIPHERS;
+
+    static {
+        try {
+            String[] allSupportedCiphers = getContext()
+                    .createSSLEngine().getSupportedCipherSuites();
+            List<String> supportedCiphersList = new LinkedList<>();
+            for (String cipher : allSupportedCiphers) {
+                if (!cipher.contains("KRB5")
+                        && !cipher.contains("TLS_EMPTY_RENEGOTIATION_INFO_SCSV")) {
+                    supportedCiphersList.add(cipher);
+                }
+            }
+            SUPPORTED_NON_KRB_CIPHERS = supportedCiphersList.toArray(new String[0]);
+        } catch (Exception ex) {
+            throw new Error("Unexpected issue", ex);
+        }
+    }
+
+    private static final String[] SUPPORTED_NON_KRB_NON_SHA_CIPHERS;
+
+    static {
+        try {
+            String[] allSupportedCiphers = getContext()
+                    .createSSLEngine().getSupportedCipherSuites();
+            List<String> supportedCiphersList = new LinkedList<>();
+            for (String cipher : allSupportedCiphers) {
+                if (!cipher.contains("KRB5")
+                        && !cipher.contains("TLS_EMPTY_RENEGOTIATION_INFO_SCSV")
+                        && !cipher.endsWith("_SHA256")
+                        && !cipher.endsWith("_SHA384")) {
+                    supportedCiphersList.add(cipher);
+                }
+            }
+            SUPPORTED_NON_KRB_NON_SHA_CIPHERS
+                    = supportedCiphersList.toArray(new String[0]);
+        } catch (Exception ex) {
+            throw new Error("Unexpected issue", ex);
+        }
+    }
+
+    private static final String[] SUPPORTED_KRB_CIPHERS;
+
+    static {
+        try {
+            String[] allSupportedCiphers = getContext()
+                    .createSSLEngine().getSupportedCipherSuites();
+            List<String> supportedCiphersList = new LinkedList<>();
+            for (String cipher : allSupportedCiphers) {
+                if (cipher.contains("KRB5")
+                        && !cipher.contains("TLS_EMPTY_RENEGOTIATION_INFO_SCSV")) {
+                    supportedCiphersList.add(cipher);
+                }
+            }
+            SUPPORTED_KRB_CIPHERS = supportedCiphersList.toArray(new String[0]);
+        } catch (Exception ex) {
+            throw new Error("Unexpected issue", ex);
+        }
+    }
+
+    private static final String[] ENABLED_NON_KRB_NOT_ANON_CIPHERS;
+
+    static {
+        try {
+            SSLEngine temporary = getContext().createSSLEngine();
+            temporary.setUseClientMode(true);
+            String[] enabledCiphers = temporary.getEnabledCipherSuites();
+            List<String> enabledCiphersList = new LinkedList<>();
+            for (String cipher : enabledCiphers) {
+                if (!cipher.contains("anon") && !cipher.contains("KRB5")
+                        && !cipher.contains("TLS_EMPTY_RENEGOTIATION_INFO_SCSV")) {
+                    enabledCiphersList.add(cipher);
+                }
+            }
+            ENABLED_NON_KRB_NOT_ANON_CIPHERS = enabledCiphersList.toArray(new String[0]);
+        } catch (Exception ex) {
+            throw new Error("Unexpected issue", ex);
+        }
+    }
+
+    private static final String[] UNSUPPORTED_CIPHERS = {
+            "SSL_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA",
+            "SSL_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA",
+            "SSL_DHE_DSS_WITH_RC4_128_SHA",
+            "SSL_DH_DSS_EXPORT_WITH_DES40_CBC_SHA",
+            "SSL_DH_DSS_WITH_3DES_EDE_CBC_SHA",
+            "SSL_DH_DSS_WITH_DES_CBC_SHA",
+            "SSL_DH_RSA_EXPORT_WITH_DES40_CBC_SHA",
+            "SSL_DH_RSA_WITH_3DES_EDE_CBC_SHA",
+            "SSL_DH_RSA_WITH_DES_CBC_SHA",
+            "SSL_FORTEZZA_DMS_WITH_FORTEZZA_CBC_SHA",
+            "SSL_FORTEZZA_DMS_WITH_NULL_SHA",
+            "SSL_RSA_EXPORT1024_WITH_DES_CBC_SHA",
+            "SSL_RSA_EXPORT1024_WITH_RC4_56_SHA",
+            "SSL_RSA_EXPORT_WITH_RC2_CBC_40_MD5",
+            "SSL_RSA_FIPS_WITH_3DES_EDE_CBC_SHA",
+            "SSL_RSA_FIPS_WITH_DES_CBC_SHA",
+            "TLS_KRB5_EXPORT_WITH_RC2_CBC_40_MD5",
+            "TLS_KRB5_EXPORT_WITH_RC2_CBC_40_SHA",
+            "TLS_KRB5_WITH_IDEA_CBC_MD5",
+            "TLS_KRB5_WITH_IDEA_CBC_SHA",
+            "SSL_RSA_WITH_IDEA_CBC_SHA",
+            "TLS_DH_RSA_WITH_AES_128_GCM_SHA256",
+            "TLS_DH_RSA_WITH_AES_256_GCM_SHA384",
+            "TLS_DH_DSS_WITH_AES_128_GCM_SHA256",
+            "TLS_DH_DSS_WITH_AES_256_GCM_SHA384"
+    };
+
+    private final int maxPacketSize;
+
+    /**
+     * Constructs test case with the given MFLN maxMacketSize.
+     *
+     * @param maxPacketSize - MLFN extension max packet size.
+     */
+    public SSLEngineTestCase(int maxPacketSize) {
+        this.maxPacketSize = maxPacketSize;
+    }
+
+    /**
+     * Constructs test case with {@code maxPacketSize = 0}.
+     */
+    public SSLEngineTestCase() {
+        this.maxPacketSize = 0;
+    }
+
+    /**
+     * Wraps data with the specified engine.
+     *
+     * @param engine        - SSLEngine that wraps data.
+     * @param wrapper       - Set wrapper id, e.g. "server" of "client". Used for
+     *                      logging only.
+     * @param maxPacketSize - Max packet size to check that MFLN extension works
+     *                      or zero for no check.
+     * @param app           - Buffer with data to wrap.
+     * @return - Buffer with wrapped data.
+     * @throws SSLException - thrown on engine errors.
+     */
+    public static ByteBuffer doWrap(SSLEngine engine, String wrapper,
+                                    int maxPacketSize, ByteBuffer app)
+            throws SSLException {
+        return doWrap(engine, wrapper, maxPacketSize,
+                app, SSLEngineResult.Status.OK, null);
+    }
+
+    /**
+     * Wraps data with the specified engine.
+     *
+     * @param engine        - SSLEngine that wraps data.
+     * @param wrapper       - Set wrapper id, e.g. "server" of "client". Used for
+     *                      logging only.
+     * @param maxPacketSize - Max packet size to check that MFLN extension works
+     *                      or zero for no check.
+     * @param app           - Buffer with data to wrap.
+     * @param result        - Array which first element will be used to output wrap
+     *                      result object.
+     * @return - Buffer with wrapped data.
+     * @throws SSLException - thrown on engine errors.
+     */
+    public static ByteBuffer doWrap(SSLEngine engine, String wrapper,
+                                    int maxPacketSize, ByteBuffer app,
+                                    SSLEngineResult[] result)
+            throws SSLException {
+        return doWrap(engine, wrapper, maxPacketSize,
+                app, SSLEngineResult.Status.OK, result);
+    }
+
+    /**
+     * Wraps data with the specified engine.
+     *
+     * @param engine        - SSLEngine that wraps data.
+     * @param wrapper       - Set wrapper id, e.g. "server" of "client". Used for
+     *                      logging only.
+     * @param maxPacketSize - Max packet size to check that MFLN extension works
+     *                      or zero for no check.
+     * @param app           - Buffer with data to wrap.
+     * @param wantedStatus  - Specifies expected result status of wrapping.
+     * @return - Buffer with wrapped data.
+     * @throws SSLException - thrown on engine errors.
+     */
+    public static ByteBuffer doWrap(SSLEngine engine, String wrapper,
+                                    int maxPacketSize, ByteBuffer app,
+                                    SSLEngineResult.Status wantedStatus)
+            throws SSLException {
+        return doWrap(engine, wrapper, maxPacketSize,
+                app, wantedStatus, null);
+    }
+
+    /**
+     * Wraps data with the specified engine.
+     *
+     * @param engine        - SSLEngine that wraps data.
+     * @param wrapper       - Set wrapper id, e.g. "server" of "client". Used for
+     *                      logging only.
+     * @param maxPacketSize - Max packet size to check that MFLN extension works
+     *                      or zero for no check.
+     * @param app           - Buffer with data to wrap.
+     * @param wantedStatus  - Specifies expected result status of wrapping.
+     * @param result        - Array which first element will be used to output wrap
+     *                      result object.
+     * @return - Buffer with wrapped data.
+     * @throws SSLException - thrown on engine errors.
+     */
+    public static ByteBuffer doWrap(SSLEngine engine, String wrapper,
+                                    int maxPacketSize, ByteBuffer app,
+                                    SSLEngineResult.Status wantedStatus,
+                                    SSLEngineResult[] result)
+            throws SSLException {
+        ByteBuffer net = ByteBuffer.allocate(engine.getSession()
+                .getPacketBufferSize());
+        SSLEngineResult r = engine.wrap(app, net);
+        net.flip();
+        int length = net.remaining();
+        System.out.println(wrapper + " wrapped " + length + " bytes.");
+        System.out.println(wrapper + " handshake status is "
+                + engine.getHandshakeStatus());
+        if (maxPacketSize < length && maxPacketSize != 0) {
+            throw new AssertionError("Handshake wrapped net buffer length "
+                    + length + " exceeds maximum packet size "
+                    + maxPacketSize);
+        }
+        checkResult(r, wantedStatus);
+        if (result != null && result.length > 0) {
+            result[0] = r;
+        }
+        return net;
+    }
+
+    /**
+     * Unwraps data with the specified engine.
+     *
+     * @param engine    - SSLEngine that unwraps data.
+     * @param unwrapper - Set unwrapper id, e.g. "server" of "client". Used for
+     *                  logging only.
+     * @param net       - Buffer with data to unwrap.
+     * @return - Buffer with unwrapped data.
+     * @throws SSLException - thrown on engine errors.
+     */
+    public static ByteBuffer doUnWrap(SSLEngine engine, String unwrapper,
+                                      ByteBuffer net)
+            throws SSLException {
+        return doUnWrap(engine, unwrapper, net, SSLEngineResult.Status.OK, null);
+    }
+
+    /**
+     * Unwraps data with the specified engine.
+     *
+     * @param engine    - SSLEngine that unwraps data.
+     * @param unwrapper - Set unwrapper id, e.g. "server" of "client". Used for
+     *                  logging only.
+     * @param net       - Buffer with data to unwrap.
+     * @param result    - Array which first element will be used to output wrap
+     *                  result object.
+     * @return - Buffer with unwrapped data.
+     * @throws SSLException - thrown on engine errors.
+     */
+    public static ByteBuffer doUnWrap(SSLEngine engine, String unwrapper,
+                                      ByteBuffer net, SSLEngineResult[] result)
+            throws SSLException {
+        return doUnWrap(engine, unwrapper, net, SSLEngineResult.Status.OK, result);
+    }
+
+    /**
+     * Unwraps data with the specified engine.
+     *
+     * @param engine       - SSLEngine that unwraps data.
+     * @param unwrapper    - Set unwrapper id, e.g. "server" of "client". Used for
+     *                     logging only.
+     * @param net          - Buffer with data to unwrap.
+     * @param wantedStatus - Specifies expected result status of wrapping.
+     * @return - Buffer with unwrapped data.
+     * @throws SSLException - thrown on engine errors.
+     */
+    public static ByteBuffer doUnWrap(SSLEngine engine, String unwrapper,
+                                      ByteBuffer net,
+                                      SSLEngineResult.Status wantedStatus)
+            throws SSLException {
+        return doUnWrap(engine, unwrapper, net, wantedStatus, null);
+    }
+
+    /**
+     * Unwraps data with the specified engine.
+     *
+     * @param engine       - SSLEngine that unwraps data.
+     * @param unwrapper    - Set unwrapper id, e.g. "server" of "client". Used for
+     *                     logging only.
+     * @param net          - Buffer with data to unwrap.
+     * @param wantedStatus - Specifies expected result status of wrapping.
+     * @param result       - Array which first element will be used to output wrap
+     *                     result object.
+     * @return - Buffer with unwrapped data.
+     * @throws SSLException - thrown on engine errors.
+     */
+    public static ByteBuffer doUnWrap(SSLEngine engine, String unwrapper,
+                                      ByteBuffer net,
+                                      SSLEngineResult.Status wantedStatus,
+                                      SSLEngineResult[] result)
+            throws SSLException {
+        ByteBuffer app = ByteBuffer.allocate(engine.getSession()
+                .getApplicationBufferSize());
+        int length = net.remaining();
+        System.out.println(unwrapper + " unwrapping "
+                + length + " bytes...");
+        SSLEngineResult r = engine.unwrap(net, app);
+        app.flip();
+        System.out.println(unwrapper + " handshake status is "
+                + engine.getHandshakeStatus());
+        checkResult(r, wantedStatus);
+        if (result != null && result.length > 0) {
+            result[0] = r;
+        }
+        return app;
+    }
+
+    /**
+     * Does the handshake of the two specified engines according to the
+     * {@code mode} specified.
+     *
+     * @param clientEngine  - Client SSLEngine.
+     * @param serverEngine  - Server SSLEngine.
+     * @param maxPacketSize - Maximum packet size for MFLN of zero for no limit.
+     * @param mode          - Handshake mode according to {@link HandshakeMode} enum.
+     * @throws SSLException - thrown on engine errors.
+     */
+    public static void doHandshake(SSLEngine clientEngine,
+                                   SSLEngine serverEngine,
+                                   int maxPacketSize, HandshakeMode mode)
+            throws SSLException {
+        doHandshake(clientEngine, serverEngine, maxPacketSize, mode, false);
+    }
+
+    /**
+     * Does the handshake of the two specified engines according to the
+     * {@code mode} specified.
+     *
+     * @param clientEngine          - Client SSLEngine.
+     * @param serverEngine          - Server SSLEngine.
+     * @param maxPacketSize         - Maximum packet size for MFLN of zero for no limit.
+     * @param mode                  - Handshake mode according to {@link HandshakeMode} enum.
+     * @param enableReplicatedPacks - Set {@code true} to enable replicated
+     *                              packet sending.
+     * @throws SSLException - thrown on engine errors.
+     */
+    public static void doHandshake(SSLEngine clientEngine,
+                                   SSLEngine serverEngine, int maxPacketSize,
+                                   HandshakeMode mode,
+                                   boolean enableReplicatedPacks)
+            throws SSLException {
+        System.out.println("================================================="
+                + "===========");
+        System.out.println("Starting handshake " + mode.name());
+        int loop = 0;
+        if (maxPacketSize < 0) {
+            throw new Error("Test issue: maxPacketSize is less than zero!");
+        }
+        SSLParameters params = clientEngine.getSSLParameters();
+        params.setMaximumPacketSize(maxPacketSize);
+        clientEngine.setSSLParameters(params);
+        params = serverEngine.getSSLParameters();
+        params.setMaximumPacketSize(maxPacketSize);
+        serverEngine.setSSLParameters(params);
+        SSLEngine firstEngine;
+        SSLEngine secondEngine;
+        switch (mode) {
+            case INITIAL_HANDSHAKE:
+                firstEngine = clientEngine;
+                secondEngine = serverEngine;
+                doUnwrapForNotHandshakingStatus = false;
+                clientEngine.beginHandshake();
+                serverEngine.beginHandshake();
+                break;
+            case REHANDSHAKE_BEGIN_CLIENT:
+                firstEngine = clientEngine;
+                secondEngine = serverEngine;
+                doUnwrapForNotHandshakingStatus = true;
+                clientEngine.beginHandshake();
+                break;
+            case REHANDSHAKE_BEGIN_SERVER:
+                firstEngine = serverEngine;
+                secondEngine = clientEngine;
+                doUnwrapForNotHandshakingStatus = true;
+                serverEngine.beginHandshake();
+                break;
+            default:
+                throw new Error("Test issue: unknown handshake mode");
+        }
+        endHandshakeLoop = false;
+        while (!endHandshakeLoop) {
+            if (++loop > MAX_HANDSHAKE_LOOPS) {
+                throw new Error("Too much loops for handshaking");
+            }
+            System.out.println("==============================================");
+            System.out.println("Handshake loop " + loop);
+            SSLEngineResult.HandshakeStatus clientHSStatus
+                    = clientEngine.getHandshakeStatus();
+            SSLEngineResult.HandshakeStatus serverHSStatus
+                    = serverEngine.getHandshakeStatus();
+            System.out.println("Client handshake status "
+                    + clientHSStatus.name());
+            System.out.println("Server handshake status "
+                    + serverHSStatus.name());
+            handshakeProcess(firstEngine, secondEngine, maxPacketSize,
+                    enableReplicatedPacks);
+            handshakeProcess(secondEngine, firstEngine, maxPacketSize,
+                    enableReplicatedPacks);
+        }
+    }
+
+    /**
+     * Routine to send application data from one SSLEngine to another.
+     *
+     * @param fromEngine - Sending engine.
+     * @param toEngine   - Receiving engine.
+     * @return - Result of unwrap method of the receiving engine.
+     * @throws SSLException - thrown on engine errors.
+     */
+    public static SSLEngineResult sendApplicationData(SSLEngine fromEngine,
+                                                      SSLEngine toEngine)
+            throws SSLException {
+        String sender = null;
+        String reciever = null;
+        String excMsgSent = EXCHANGE_MSG_SENT;
+        if (fromEngine.getUseClientMode() && !toEngine.getUseClientMode()) {
+            sender = "Client";
+            reciever = "Server";
+            excMsgSent += " Client.";
+        } else if (toEngine.getUseClientMode() && !fromEngine.getUseClientMode()) {
+            sender = "Server";
+            reciever = "Client";
+            excMsgSent += " Server.";
+        } else {
+            throw new Error("Test issue: both engines are in the same mode");
+        }
+        System.out.println("================================================="
+                + "===========");
+        System.out.println("Trying to send application data from " + sender
+                + " to " + reciever);
+        ByteBuffer clientAppSent
+                = ByteBuffer.wrap(excMsgSent.getBytes());
+        net = doWrap(fromEngine, sender, 0, clientAppSent);
+        SSLEngineResult[] r = new SSLEngineResult[1];
+        ByteBuffer serverAppRecv = doUnWrap(toEngine, reciever, net, r);
+        byte[] serverAppRecvTrunc = Arrays.copyOf(serverAppRecv.array(),
+                serverAppRecv.limit());
+        String msgRecv = new String(serverAppRecvTrunc);
+        if (!msgRecv.equals(excMsgSent)) {
+            throw new AssertionError(sender + " to " + reciever
+                    + ": application data"
+                    + " has been altered while sending."
+                    + " Message sent: " + "\"" + excMsgSent + "\"."
+                    + " Message recieved: " + "\"" + msgRecv + "\".");
+        }
+        System.out.println("Successful sending application data from " + sender
+                + " to " + reciever);
+        return r[0];
+    }
+
+    /**
+     * Close engines by sending "close outbound" message from one SSLEngine to
+     * another.
+     *
+     * @param fromEngine - Sending engine.
+     * @param toEngine   - Receiving engine.
+     * @throws SSLException - thrown on engine errors.
+     */
+    public static void closeEngines(SSLEngine fromEngine,
+                                    SSLEngine toEngine) throws SSLException {
+        String from = null;
+        String to = null;
+        ByteBuffer app;
+        if (fromEngine.getUseClientMode() && !toEngine.getUseClientMode()) {
+            from = "Client";
+            to = "Server";
+        } else if (toEngine.getUseClientMode() && !fromEngine.getUseClientMode()) {
+            from = "Server";
+            to = "Client";
+        } else {
+            throw new Error("Both engines are in the same mode");
+        }
+        System.out.println("=========================================================");
+        System.out.println("Trying to close engines from " + from + " to " + to);
+        // Sending close outbound request to peer
+        fromEngine.closeOutbound();
+        app = ByteBuffer.allocate(fromEngine.getSession().getApplicationBufferSize());
+        net = doWrap(fromEngine, from, 0, app, SSLEngineResult.Status.CLOSED);
+        doUnWrap(toEngine, to, net, SSLEngineResult.Status.CLOSED);
+        app = ByteBuffer.allocate(fromEngine.getSession().getApplicationBufferSize());
+        net = doWrap(toEngine, to, 0, app, SSLEngineResult.Status.CLOSED);
+        doUnWrap(fromEngine, from, net, SSLEngineResult.Status.CLOSED);
+        if (!toEngine.isInboundDone()) {
+            throw new AssertionError(from + " sent close request to " + to
+                    + ", but " + to + "did not close inbound.");
+        }
+        // Executing close inbound
+        fromEngine.closeInbound();
+        app = ByteBuffer.allocate(fromEngine.getSession().getApplicationBufferSize());
+        net = doWrap(fromEngine, from, 0, app, SSLEngineResult.Status.CLOSED);
+        doUnWrap(toEngine, to, net, SSLEngineResult.Status.CLOSED);
+        if (!toEngine.isOutboundDone()) {
+            throw new AssertionError(from + "sent close request to " + to
+                    + ", but " + to + "did not close outbound.");
+        }
+        System.out.println("Successful closing from " + from + " to " + to);
+    }
+
+    /**
+     * Runs the same test case for all given {@code ciphers}. Method counts all
+     * failures and throws {@code AssertionError} if one or more tests fail.
+     *
+     * @param ciphers - Ciphers that should be tested.
+     */
+    public void runTests(Ciphers ciphers) {
+        int total = ciphers.ciphers.length;
+        int failed = testSomeCiphers(ciphers);
+        if (failed > 0) {
+            throw new AssertionError("" + failed + " of " + total
+                    + " tests failed!");
+        }
+        System.out.println("All tests passed!");
+    }
+
+    /**
+     * Runs test cases for ciphers defined by the test mode.
+     */
+    public void runTests() {
+        switch (TEST_MODE) {
+            case "norm":
+            case "norm_sni":
+                switch (TESTED_SECURITY_PROTOCOL) {
+                    case "DTLSv1.0":
+                    case "TLSv1":
+                    case "TLSv1.1":
+                        runTests(Ciphers.SUPPORTED_NON_KRB_NON_SHA_CIPHERS);
+                        break;
+                    default:
+                        runTests(Ciphers.SUPPORTED_NON_KRB_CIPHERS);
+                }
+                break;
+            case "krb":
+                runTests(Ciphers.SUPPORTED_KRB_CIPHERS);
+                break;
+            default:
+                throw new Error("Test error: unexpected test mode: " + TEST_MODE);
+        }
+    }
+
+    /**
+     * Returns maxPacketSize value used for MFLN extension testing
+     *
+     * @return - MLFN extension max packet size.
+     */
+    public int getMaxPacketSize() {
+        return maxPacketSize;
+    }
+
+    /**
+     * Checks that status of result {@code r} is {@code wantedStatus}.
+     *
+     * @param r            - Result.
+     * @param wantedStatus - Wanted status of the result.
+     * @throws AssertionError - if status or {@code r} is not
+     *                        {@code wantedStatus}.
+     */
+    public static void checkResult(SSLEngineResult r,
+                                   SSLEngineResult.Status wantedStatus) {
+        SSLEngineResult.Status rs = r.getStatus();
+        if (!rs.equals(wantedStatus)) {
+            throw new AssertionError("Unexpected status " + rs.name()
+                    + ", should be " + wantedStatus.name());
+        }
+    }
+
+    /**
+     * Returns SSLContext with TESTED_SECURITY_PROTOCOL protocol and sets up keys.
+     *
+     * @return - SSLContext with a protocol specified by TESTED_SECURITY_PROTOCOL.
+     */
+    public static SSLContext getContext() {
+        try {
+            KeyStore ks = KeyStore.getInstance("JKS");
+            KeyStore ts = KeyStore.getInstance("JKS");
+            char[] passphrase = PASSWD.toCharArray();
+            try (FileInputStream keyFileStream = new FileInputStream(KEY_FILE_NAME)) {
+                ks.load(keyFileStream, passphrase);
+            }
+            try (FileInputStream trustFileStream = new FileInputStream(TRUST_FILE_NAME)) {
+                ts.load(trustFileStream, passphrase);
+            }
+            KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
+            kmf.init(ks, passphrase);
+            TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509");
+            tmf.init(ts);
+            SSLContext sslCtx = SSLContext.getInstance(TESTED_SECURITY_PROTOCOL);
+            sslCtx.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
+            return sslCtx;
+        } catch (KeyStoreException | IOException | NoSuchAlgorithmException |
+                CertificateException | UnrecoverableKeyException |
+                KeyManagementException ex) {
+            throw new Error("Unexpected exception", ex);
+        }
+    }
+
+    /**
+     * Sets up and starts kerberos KDC server.
+     */
+    public static void setUpAndStartKDC() {
+        String servicePrincipal = "host/" + SERVER_NAME + "@" + KRB_REALM;
+        Map<String, String> principals = new HashMap<>();
+        principals.put(KRB_USER_PRINCIPAL, KRB_USER_PASSWORD);
+        principals.put(KRBTGT_PRINCIPAL, null);
+        principals.put(servicePrincipal, null);
+        System.setProperty("java.security.krb5.conf", KRB5_CONF_FILENAME);
+        startKDC(KRB_REALM, principals, KTAB_FILENAME);
+        System.setProperty("java.security.auth.login.config",
+                TEST_SRC + FS + JAAS_CONF_FILE);
+        System.setProperty("javax.security.auth.useSubjectCredsOnly", "false");
+    }
+
+    /**
+     * Sets up and starts kerberos KDC server if SSLEngineTestCase.TEST_MODE is "krb".
+     */
+    public static void setUpAndStartKDCIfNeeded() {
+        if (TEST_MODE.equals("krb")) {
+            setUpAndStartKDC();
+        }
+    }
+
+    /**
+     * Returns client ssl engine.
+     *
+     * @param context - SSLContext to get SSLEngine from.
+     * @param useSNI  - flag used to enable or disable using SNI extension.
+     *                Needed for Kerberos.
+     */
+    public static SSLEngine getClientSSLEngine(SSLContext context, boolean useSNI) {
+        SSLEngine clientEngine = context.createSSLEngine(HOST, 80);
+        clientEngine.setUseClientMode(true);
+        if (useSNI) {
+            SNIHostName serverName = new SNIHostName(SERVER_NAME);
+            List<SNIServerName> serverNames = new ArrayList<>();
+            serverNames.add(serverName);
+            SSLParameters params = clientEngine.getSSLParameters();
+            params.setServerNames(serverNames);
+            clientEngine.setSSLParameters(params);
+        }
+        return clientEngine;
+    }
+
+    /**
+     * Returns server ssl engine.
+     *
+     * @param context - SSLContext to get SSLEngine from.
+     * @param useSNI  - flag used to enable or disable using SNI extension.
+     *                Needed for Kerberos.
+     */
+    public static SSLEngine getServerSSLEngine(SSLContext context, boolean useSNI) {
+        SSLEngine serverEngine = context.createSSLEngine();
+        serverEngine.setUseClientMode(false);
+        if (useSNI) {
+            SNIMatcher matcher = SNIHostName.createSNIMatcher(SNI_PATTERN);
+            List<SNIMatcher> matchers = new ArrayList<>();
+            matchers.add(matcher);
+            SSLParameters params = serverEngine.getSSLParameters();
+            params.setSNIMatchers(matchers);
+            serverEngine.setSSLParameters(params);
+        }
+        return serverEngine;
+    }
+
+    /**
+     * Runs the test case for one cipher suite.
+     *
+     * @param cipher - Cipher suite name.
+     * @throws SSLException - If tests fails.
+     */
+    abstract protected void testOneCipher(String cipher)
+            throws SSLException;
+
+    /**
+     * Iterates through an array of ciphers and runs the same test case for
+     * every entry.
+     *
+     * @param ciphers - Array of cipher names.
+     * @return - Number of tests failed.
+     */
+    protected int testSomeCiphers(Ciphers ciphers) {
+        int failedNum = 0;
+        String description = ciphers.description;
+        System.out.println("==================================================="
+                + "=========");
+        System.out.println(description + " ciphers testing");
+        System.out.println("==================================================="
+                + "=========");
+        for (String cs : ciphers.ciphers) {
+            System.out.println("-----------------------------------------------"
+                    + "-------------");
+            System.out.println("Testing cipher suite " + cs);
+            System.out.println("-----------------------------------------------"
+                    + "-------------");
+            Throwable error = null;
+            try {
+                testOneCipher(cs);
+            } catch (Throwable t) {
+                error = t;
+            }
+            switch (ciphers) {
+                case SUPPORTED_NON_KRB_CIPHERS:
+                case SUPPORTED_NON_KRB_NON_SHA_CIPHERS:
+                case SUPPORTED_KRB_CIPHERS:
+                case ENABLED_NON_KRB_NOT_ANON_CIPHERS:
+                    if (error != null) {
+                        System.out.println("Test Failed: " + cs);
+                        System.err.println("Test Exception for " + cs);
+                        error.printStackTrace();
+                        failedNum++;
+                    } else {
+                        System.out.println("Test Passed: " + cs);
+                    }
+                    break;
+                case UNSUPPORTED_CIPHERS:
+                    if (error == null) {
+                        System.out.println("Test Failed: " + cs);
+                        System.err.println("Test for " + cs + " should have thrown"
+                                + " IllegalArgumentException, but it has not!");
+                        failedNum++;
+                    } else if (!(error instanceof IllegalArgumentException)) {
+                        System.out.println("Test Failed: " + cs);
+                        System.err.println("Test Exception for " + cs);
+                        error.printStackTrace();
+                        failedNum++;
+                    } else {
+                        System.out.println("Test Passed: " + cs);
+                    }
+                    break;
+                default:
+                    throw new Error("Test issue: unexpected ciphers: "
+                            + ciphers.name());
+            }
+        }
+        return failedNum;
+    }
+
+    /**
+     * Method used for the handshake routine.
+     *
+     * @param wrapingEngine         - Engine that is expected to wrap data.
+     * @param unwrapingEngine       - Engine that is expected to unwrap data.
+     * @param maxPacketSize         - Maximum packet size for MFLN of zero for no limit.
+     * @param enableReplicatedPacks - Set {@code true} to enable replicated
+     *                              packet sending.
+     * @throws SSLException - thrown on engine errors.
+     */
+    private static void handshakeProcess(SSLEngine wrapingEngine,
+                                         SSLEngine unwrapingEngine,
+                                         int maxPacketSize,
+                                         boolean enableReplicatedPacks)
+            throws SSLException {
+        SSLEngineResult.HandshakeStatus wrapingHSStatus = wrapingEngine
+                .getHandshakeStatus();
+        SSLEngineResult.HandshakeStatus unwrapingHSStatus = unwrapingEngine
+                .getHandshakeStatus();
+        SSLEngineResult r;
+        String wrapper, unwrapper;
+        if (wrapingEngine.getUseClientMode()
+                && !unwrapingEngine.getUseClientMode()) {
+            wrapper = "Client";
+            unwrapper = "Server";
+        } else if (unwrapingEngine.getUseClientMode()
+                && !wrapingEngine.getUseClientMode()) {
+            wrapper = "Server";
+            unwrapper = "Client";
+        } else {
+            throw new Error("Both engines are in the same mode");
+        }
+        switch (wrapingHSStatus) {
+            case NEED_WRAP:
+                if (enableReplicatedPacks) {
+                    if (net != null) {
+                        net.flip();
+                        if (net.remaining() != 0) {
+                            if (wrapingEngine.getUseClientMode()) {
+                                netReplicatedServer = net;
+                            } else {
+                                netReplicatedClient = net;
+                            }
+                        }
+                    }
+                }
+                ByteBuffer app = ByteBuffer.allocate(wrapingEngine.getSession()
+                        .getApplicationBufferSize());
+                net = doWrap(wrapingEngine, wrapper, maxPacketSize, app);
+            case NOT_HANDSHAKING:
+                switch (unwrapingHSStatus) {
+                    case NEED_TASK:
+                        runDelegatedTasks(unwrapingEngine);
+                    case NEED_UNWRAP:
+                        doUnWrap(unwrapingEngine, unwrapper, net);
+                        if (enableReplicatedPacks) {
+                            System.out.println("Unwrapping replicated packet...");
+                            if (unwrapingEngine.getHandshakeStatus()
+                                    .equals(SSLEngineResult.HandshakeStatus.NEED_TASK)) {
+                                runDelegatedTasks(unwrapingEngine);
+                            }
+                            runDelegatedTasks(unwrapingEngine);
+                            ByteBuffer netReplicated;
+                            if (unwrapingEngine.getUseClientMode()) {
+                                netReplicated = netReplicatedClient;
+                            } else {
+                                netReplicated = netReplicatedServer;
+                            }
+                            if (netReplicated != null) {
+                                doUnWrap(unwrapingEngine, unwrapper, netReplicated);
+                            } else {
+                                net.flip();
+                                doUnWrap(unwrapingEngine, unwrapper, net);
+                            }
+                        }
+                        break;
+                    case NEED_UNWRAP_AGAIN:
+                        break;
+                    case NOT_HANDSHAKING:
+                        if (doUnwrapForNotHandshakingStatus) {
+                            doUnWrap(unwrapingEngine, unwrapper, net);
+                            doUnwrapForNotHandshakingStatus = false;
+                            break;
+                        } else {
+                            endHandshakeLoop = true;
+                        }
+                        break;
+                    default:
+                        throw new Error("Unexpected unwraping engine handshake status "
+                                + unwrapingHSStatus.name());
+                }
+                break;
+            case NEED_UNWRAP:
+                break;
+            case NEED_UNWRAP_AGAIN:
+                net.flip();
+                doUnWrap(wrapingEngine, wrapper, net);
+                break;
+            case NEED_TASK:
+                runDelegatedTasks(wrapingEngine);
+                break;
+            default:
+                throw new Error("Unexpected wraping engine handshake status "
+                        + wrapingHSStatus.name());
+        }
+    }
+
+    private static void runDelegatedTasks(SSLEngine engine) {
+        Runnable runnable;
+        System.out.println("Running delegated tasks...");
+        while ((runnable = engine.getDelegatedTask()) != null) {
+            runnable.run();
+        }
+        SSLEngineResult.HandshakeStatus hs = engine.getHandshakeStatus();
+        if (hs == SSLEngineResult.HandshakeStatus.NEED_TASK) {
+            throw new Error("Handshake shouldn't need additional tasks.");
+        }
+    }
+
+    /**
+     * Start a KDC server:
+     * - create a KDC instance
+     * - create Kerberos principals
+     * - save Kerberos configuration
+     * - save keys to keytab file
+     * - no pre-auth is required
+     */
+    private static void startKDC(String realm, Map<String, String> principals,
+                                 String ktab) {
+        try {
+            KDC kdc = KDC.create(realm, HOST, 0, true);
+            kdc.setOption(KDC.Option.PREAUTH_REQUIRED, Boolean.FALSE);
+            if (principals != null) {
+                principals.entrySet().stream().forEach((entry) -> {
+                    String name = entry.getKey();
+                    String password = entry.getValue();
+                    if (password == null || password.isEmpty()) {
+                        System.out.println("KDC: add a principal '" + name
+                                + "' with a random password");
+                        kdc.addPrincipalRandKey(name);
+                    } else {
+                        System.out.println("KDC: add a principal '" + name
+                                + "' with '" + password + "' password");
+                        kdc.addPrincipal(name, password.toCharArray());
+                    }
+                });
+            }
+            KDC.saveConfig(KRB5_CONF_FILENAME, kdc);
+            if (ktab != null) {
+                File ktabFile = new File(ktab);
+                if (ktabFile.exists()) {
+                    System.out.println("KDC: append keys to an exising "
+                            + "keytab file " + ktab);
+                    kdc.appendKtab(ktab);
+                } else {
+                    System.out.println("KDC: create a new keytab file "
+                            + ktab);
+                    kdc.writeKtab(ktab);
+                }
+            }
+            System.out.println("KDC: started on " + HOST + ":" + kdc.getPort()
+                    + " with '" + realm + "' realm");
+        } catch (Exception e) {
+            throw new RuntimeException("KDC: unexpected exception", e);
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/net/ssl/TLSCommon/UnsupportedCiphersTest.java	Thu Jun 11 20:18:55 2015 -0700
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.SSLEngine;
+
+/**
+ * Testing that try to enable unsupported ciphers causes IllegalArgumentException.
+ */
+public class UnsupportedCiphersTest extends SSLEngineTestCase {
+
+    public static void main(String[] s) {
+        UnsupportedCiphersTest test = new UnsupportedCiphersTest();
+        test.runTests(Ciphers.UNSUPPORTED_CIPHERS);
+    }
+
+    @Override
+    protected void testOneCipher(String cipher) {
+        unsupTest(cipher, true);
+        unsupTest(cipher, false);
+    }
+
+    private void unsupTest(String cipher, boolean clientTest) {
+        SSLContext context = getContext();
+        SSLEngine clientEngine = context.createSSLEngine();
+        clientEngine.setUseClientMode(true);
+        SSLEngine serverEngine = context.createSSLEngine();
+        serverEngine.setUseClientMode(false);
+        if (clientTest) {
+            clientEngine.setEnabledCipherSuites(new String[]{cipher});
+        } else {
+            serverEngine.setEnabledCipherSuites(new String[]{cipher});
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/net/ssl/TLSCommon/jaas.conf	Thu Jun 11 20:18:55 2015 -0700
@@ -0,0 +1,17 @@
+com.sun.net.ssl.client {
+    com.sun.security.auth.module.Krb5LoginModule required
+    principal="USER@TEST.REALM"
+    doNotPrompt=true
+    useKeyTab=true
+    keyTab="krb5.keytab.data";
+};
+
+com.sun.net.ssl.server {
+    com.sun.security.auth.module.Krb5LoginModule required
+    principal="host/service.localhost@TEST.REALM"
+    isInitiator=false
+    useKeyTab=true
+    keyTab="krb5.keytab.data"
+    storeKey=true;
+};
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/net/ssl/TLSv1/TLSDataExchangeTest.java	Thu Jun 11 20:18:55 2015 -0700
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8085979
+ * @summary Testing TLS application data exchange using each of the supported
+ *          cipher suites.
+ * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @run main/othervm -Dtest.security.protocol=TLSv1 -Dtest.mode=norm TLSDataExchangeTest
+ * @run main/othervm -Dtest.security.protocol=TLSv1 -Dtest.mode=norm_sni TLSDataExchangeTest
+ * @run main/othervm -Dtest.security.protocol=TLSv1 -Dtest.mode=krb TLSDataExchangeTest
+ */
+
+/**
+ * Testing TLS application data exchange using each of the supported cipher
+ * suites.
+ */
+public class TLSDataExchangeTest {
+    public static void main(String[] args) {
+        DataExchangeTest.main(args);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/net/ssl/TLSv1/TLSEnginesClosureTest.java	Thu Jun 11 20:18:55 2015 -0700
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8085979
+ * @summary Testing TLS engines closing using each of the supported
+ *          cipher suites.
+ * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @run main/othervm -Dtest.security.protocol=TLSv1 -Dtest.mode=norm TLSEnginesClosureTest
+ * @run main/othervm -Dtest.security.protocol=TLSv1 -Dtest.mode=norm_sni TLSEnginesClosureTest
+ * @run main/othervm -Dtest.security.protocol=TLSv1 -Dtest.mode=krb TLSEnginesClosureTest
+ */
+
+/**
+ * Testing TLS engines closing using each of the supported cipher suites.
+ */
+public class TLSEnginesClosureTest {
+    public static void main(String[] args) {
+        EnginesClosureTest.main(args);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/net/ssl/TLSv1/TLSHandshakeTest.java	Thu Jun 11 20:18:55 2015 -0700
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8085979
+ * @summary Testing TLS engines handshake using each of the supported
+ *          cipher suites.
+ * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @run main/othervm -Dtest.security.protocol=TLSv1 -Dtest.mode=norm TLSHandshakeTest
+ * @run main/othervm -Dtest.security.protocol=TLSv1 -Dtest.mode=norm_sni TLSHandshakeTest
+ * @run main/othervm -Dtest.security.protocol=TLSv1 -Dtest.mode=krb TLSHandshakeTest
+ */
+
+/**
+ * Testing TLS engines handshake using each of the supported cipher suites.
+ */
+public class TLSHandshakeTest {
+    public static void main(String[] args) {
+        HandshakeTest.main(args);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/net/ssl/TLSv1/TLSMFLNTest.java	Thu Jun 11 20:18:55 2015 -0700
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8085979
+ * @summary Testing TLS engines handshake using each of the supported
+ *          cipher suites with different maximum fragment length. Testing of
+ *          MFLN extension.
+ * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @run main/othervm -Dtest.security.protocol=TLSv1 -Dtest.mode=norm TLSMFLNTest
+ * @run main/othervm -Dtest.security.protocol=TLSv1 -Dtest.mode=norm_sni TLSMFLNTest
+ * @run main/othervm -Dtest.security.protocol=TLSv1 -Dtest.mode=krb TLSMFLNTest
+ */
+
+/**
+ * Testing TLS engines handshake using each of the supported cipher suites with
+ * different maximum fragment length. Testing of MFLN extension.
+ */
+public class TLSMFLNTest {
+    public static void main(String[] args) {
+        MFLNTest.main(args);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/net/ssl/TLSv1/TLSNotEnabledRC4Test.java	Thu Jun 11 20:18:55 2015 -0700
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8085979
+ * @summary Testing TLS engines do not enable RC4 ciphers by default.
+ * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @run main/othervm -Dtest.security.protocol=TLSv1 TLSNotEnabledRC4Test
+ */
+
+/**
+ * Testing DTLS engines do not enable RC4 ciphers by default.
+ */
+public class TLSNotEnabledRC4Test {
+    public static void main(String[] args) throws Exception {
+        NotEnabledRC4Test.main(args);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/net/ssl/TLSv1/TLSRehandshakeTest.java	Thu Jun 11 20:18:55 2015 -0700
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8085979
+ * @summary Testing TLS engines re-handshaking using each of the supported
+ *          cipher suites.
+ * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @run main/othervm -Dtest.security.protocol=TLSv1 -Dtest.mode=norm TLSRehandshakeTest
+ * @run main/othervm -Dtest.security.protocol=TLSv1 -Dtest.mode=norm_sni TLSRehandshakeTest
+ * @run main/othervm -Dtest.security.protocol=TLSv1 -Dtest.mode=krb TLSRehandshakeTest
+ */
+
+/**
+ * Testing TLS engines re-handshaking using each of the supported cipher
+ * suites.
+ */
+public class TLSRehandshakeTest {
+    public static void main(String[] args) {
+        RehandshakeTest.main(args);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/net/ssl/TLSv1/TLSRehandshakeWithCipherChangeTest.java	Thu Jun 11 20:18:55 2015 -0700
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8085979
+ * @summary Testing TLS engines re-handshaking with cipher change. New cipher
+ *          is taken randomly from the supporetd ciphers list.
+ * @key randomness
+ * @library /sun/security/krb5/auto /lib/testlibrary /javax/net/ssl/TLSCommon
+ * @run main/othervm -Dtest.security.protocol=TLSv1 TLSRehandshakeWithCipherChangeTest
+ */
+
+/**
+ * Testing TLS engines re-handshaking with cipher change. New cipher is taken
+ * randomly from the supported ciphers list.
+ */
+public class TLSRehandshakeWithCipherChangeTest {
+    public static void main(String[] args) {
+        RehandshakeWithCipherChangeTest.main(args);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/net/ssl/TLSv1/TLSRehandshakeWithDataExTest.java	Thu Jun 11 20:18:55 2015 -0700
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8085979
+ * @summary Testing TLS engines re-handshaking using each of the supported
+ *          cipher suites with application data exchange before and after
+ *          re-handshake and closing of the engines.
+ * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @run main/othervm -Dtest.security.protocol=TLSv1 -Dtest.mode=norm TLSRehandshakeWithDataExTest
+ * @run main/othervm -Dtest.security.protocol=TLSv1 -Dtest.mode=norm_sni TLSRehandshakeWithDataExTest
+ * @run main/othervm -Dtest.security.protocol=TLSv1 -Dtest.mode=krb TLSRehandshakeWithDataExTest
+ */
+
+/**
+ * Testing TLS engines re-handshaking using each of the supported cipher suites
+ * with application data exchange before and after re-handshake and closing of
+ * the engines.
+ */
+public class TLSRehandshakeWithDataExTest {
+    public static void main(String[] args) {
+        RehandshakeWithDataExTest.main(args);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/net/ssl/TLSv1/TLSUnsupportedCiphersTest.java	Thu Jun 11 20:18:55 2015 -0700
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8085979
+ * @summary Testing that try to enable unsupported ciphers
+ *          causes IllegalArgumentException.
+ * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @run main/othervm -Dtest.security.protocol=TLSv1 TLSUnsupportedCiphersTest
+ */
+
+/**
+ * Testing that a try to enable unsupported ciphers causes IllegalArgumentException.
+ */
+public class TLSUnsupportedCiphersTest {
+    public static void main(String[] args) {
+        UnsupportedCiphersTest.main(args);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/net/ssl/TLSv11/TLSDataExchangeTest.java	Thu Jun 11 20:18:55 2015 -0700
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8085979
+ * @summary Testing TLS application data exchange using each of the supported
+ *          cipher suites.
+ * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @run main/othervm -Dtest.security.protocol=TLSv1.1 -Dtest.mode=norm TLSDataExchangeTest
+ * @run main/othervm -Dtest.security.protocol=TLSv1.1 -Dtest.mode=norm_sni TLSDataExchangeTest
+ * @run main/othervm -Dtest.security.protocol=TLSv1.1 -Dtest.mode=krb TLSDataExchangeTest
+ */
+
+/**
+ * Testing TLS application data exchange using each of the supported cipher
+ * suites.
+ */
+public class TLSDataExchangeTest {
+    public static void main(String[] args) {
+        DataExchangeTest.main(args);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/net/ssl/TLSv11/TLSEnginesClosureTest.java	Thu Jun 11 20:18:55 2015 -0700
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8085979
+ * @summary Testing TLS engines closing using each of the supported
+ *          cipher suites.
+ * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @run main/othervm -Dtest.security.protocol=TLSv1.1 -Dtest.mode=norm TLSEnginesClosureTest
+ * @run main/othervm -Dtest.security.protocol=TLSv1.1 -Dtest.mode=norm_sni TLSEnginesClosureTest
+ * @run main/othervm -Dtest.security.protocol=TLSv1.1 -Dtest.mode=krb TLSEnginesClosureTest
+ */
+
+/**
+ * Testing TLS engines closing using each of the supported cipher suites.
+ */
+public class TLSEnginesClosureTest {
+    public static void main(String[] args) {
+        EnginesClosureTest.main(args);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/net/ssl/TLSv11/TLSHandshakeTest.java	Thu Jun 11 20:18:55 2015 -0700
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8085979
+ * @summary Testing TLS engines handshake using each of the supported
+ *          cipher suites.
+ * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @run main/othervm -Dtest.security.protocol=TLSv1.1 -Dtest.mode=norm TLSHandshakeTest
+ * @run main/othervm -Dtest.security.protocol=TLSv1.1 -Dtest.mode=norm_sni TLSHandshakeTest
+ * @run main/othervm -Dtest.security.protocol=TLSv1.1 -Dtest.mode=krb TLSHandshakeTest
+ */
+
+/**
+ * Testing TLS engines handshake using each of the supported cipher suites.
+ */
+public class TLSHandshakeTest {
+    public static void main(String[] args) {
+        HandshakeTest.main(args);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/net/ssl/TLSv11/TLSMFLNTest.java	Thu Jun 11 20:18:55 2015 -0700
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8085979
+ * @summary Testing TLS engines handshake using each of the supported
+ *          cipher suites with different maximum fragment length. Testing of
+ *          MFLN extension.
+ * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @run main/othervm -Dtest.security.protocol=TLSv1.1 -Dtest.mode=norm TLSMFLNTest
+ * @run main/othervm -Dtest.security.protocol=TLSv1.1 -Dtest.mode=norm_sni TLSMFLNTest
+ * @run main/othervm -Dtest.security.protocol=TLSv1.1 -Dtest.mode=krb TLSMFLNTest
+ */
+
+/**
+ * Testing TLS engines handshake using each of the supported cipher suites with
+ * different maximum fragment length. Testing of MFLN extension.
+ */
+public class TLSMFLNTest {
+    public static void main(String[] args) {
+        MFLNTest.main(args);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/net/ssl/TLSv11/TLSNotEnabledRC4Test.java	Thu Jun 11 20:18:55 2015 -0700
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8085979
+ * @summary Testing TLS engines do not enable RC4 ciphers by default.
+ * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @run main/othervm -Dtest.security.protocol=TLSv1.1 TLSNotEnabledRC4Test
+ */
+
+/**
+ * Testing DTLS engines do not enable RC4 ciphers by default.
+ */
+public class TLSNotEnabledRC4Test {
+    public static void main(String[] args) throws Exception {
+        NotEnabledRC4Test.main(args);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/net/ssl/TLSv11/TLSRehandshakeTest.java	Thu Jun 11 20:18:55 2015 -0700
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8085979
+ * @summary Testing TLS engines re-handshaking using each of the supported
+ *          cipher suites.
+ * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @run main/othervm -Dtest.security.protocol=TLSv1.1 -Dtest.mode=norm TLSRehandshakeTest
+ * @run main/othervm -Dtest.security.protocol=TLSv1.1 -Dtest.mode=norm_sni TLSRehandshakeTest
+ * @run main/othervm -Dtest.security.protocol=TLSv1.1 -Dtest.mode=krb TLSRehandshakeTest
+ */
+
+/**
+ * Testing TLS engines re-handshaking using each of the supported cipher
+ * suites.
+ */
+public class TLSRehandshakeTest {
+    public static void main(String[] args) {
+        RehandshakeTest.main(args);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/net/ssl/TLSv11/TLSRehandshakeWithCipherChangeTest.java	Thu Jun 11 20:18:55 2015 -0700
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8085979
+ * @summary Testing TLS engines re-handshaking with cipher change. New cipher
+ *          is taken randomly from the supporetd ciphers list.
+ * @key randomness
+ * @library /sun/security/krb5/auto /lib/testlibrary /javax/net/ssl/TLSCommon
+ * @run main/othervm -Dtest.security.protocol=TLSv1.1 TLSRehandshakeWithCipherChangeTest
+ */
+
+/**
+ * Testing TLS engines re-handshaking with cipher change. New cipher is taken
+ * randomly from the supported ciphers list.
+ */
+public class TLSRehandshakeWithCipherChangeTest {
+    public static void main(String[] args) {
+        RehandshakeWithCipherChangeTest.main(args);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/net/ssl/TLSv11/TLSRehandshakeWithDataExTest.java	Thu Jun 11 20:18:55 2015 -0700
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8085979
+ * @summary Testing TLS engines re-handshaking using each of the supported
+ *          cipher suites with application data exchange before and after
+ *          re-handshake and closing of the engines.
+ * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @run main/othervm -Dtest.security.protocol=TLSv1.1 -Dtest.mode=norm TLSRehandshakeWithDataExTest
+ * @run main/othervm -Dtest.security.protocol=TLSv1.1 -Dtest.mode=norm_sni TLSRehandshakeWithDataExTest
+ * @run main/othervm -Dtest.security.protocol=TLSv1.1 -Dtest.mode=krb TLSRehandshakeWithDataExTest
+ */
+
+/**
+ * Testing TLS engines re-handshaking using each of the supported cipher suites
+ * with application data exchange before and after re-handshake and closing of
+ * the engines.
+ */
+public class TLSRehandshakeWithDataExTest {
+    public static void main(String[] args) {
+        RehandshakeWithDataExTest.main(args);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/net/ssl/TLSv11/TLSUnsupportedCiphersTest.java	Thu Jun 11 20:18:55 2015 -0700
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8085979
+ * @summary Testing that try to enable unsupported ciphers
+ *          causes IllegalArgumentException.
+ * @library /sun/security/krb5/auto /javax/net/ssl/TLSCommon
+ * @run main/othervm -Dtest.security.protocol=TLSv1.1 TLSUnsupportedCiphersTest
+ */
+
+/**
+ * Testing that a try to enable unsupported ciphers causes IllegalArgumentException.
+ */
+public class TLSUnsupportedCiphersTest {
+    public static void main(String[] args) {
+        UnsupportedCiphersTest.main(args);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/security/auth/kerberos/DelegationPermissionCollection.java	Thu Jun 11 20:18:55 2015 -0700
@@ -0,0 +1,98 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8056179
+ * @summary Unit test for DelegationPermissionCollection subclass
+ */
+
+import java.security.Permission;
+import java.security.PermissionCollection;
+import java.security.SecurityPermission;
+import java.util.Enumeration;
+import javax.security.auth.kerberos.DelegationPermission;
+
+public class DelegationPermissionCollection {
+
+    private static final String FOO = "\"host/foo.example.com@EXAMPLE.COM\"";
+    private static final String BAR = "\"host/bar.example.com@EXAMPLE.COM\"";
+    private static final String TGT = "\"krbtgt/EXAMPLE.COM@EXAMPLE.COM\"";
+
+    public static void main(String[] args) throws Exception {
+
+        int testFail = 0;
+
+        DelegationPermission perm = new DelegationPermission(FOO + " " + TGT);
+        PermissionCollection perms = perm.newPermissionCollection();
+
+        // test 1
+        System.out.println
+            ("test 1: add throws IllegalArgException for wrong perm type");
+        try {
+            perms.add(new SecurityPermission("createAccessControlContext"));
+            System.err.println("Expected IllegalArgumentException");
+            testFail++;
+        } catch (IllegalArgumentException iae) {}
+
+        // test 2
+        System.out.println("test 2: implies returns false for wrong perm type");
+        if (perms.implies(new SecurityPermission("getPolicy"))) {
+            System.err.println("Expected false, returned true");
+            testFail++;
+        }
+
+        // test 3
+        System.out.println("test 3: implies returns true for match on name");
+        perms.add(new DelegationPermission(FOO + " " + TGT));
+        if (!perms.implies(new DelegationPermission(FOO + " " + TGT))) {
+            System.err.println("Expected true, returned false");
+            testFail++;
+        }
+
+        // test 4
+        System.out.println
+            ("test 4: implies returns false for non-match on name");
+        if (perms.implies(new DelegationPermission(BAR + " " + TGT))) {
+            System.err.println("Expected false, returned true");
+            testFail++;
+        }
+
+        // test 5
+        System.out.println("test 5: elements returns correct number of perms");
+        int numPerms = 0;
+        Enumeration<Permission> e = perms.elements();
+        while (e.hasMoreElements()) {
+            numPerms++;
+            System.out.println(e.nextElement());
+        }
+        if (numPerms != 1) {
+            System.err.println("Expected 1, got " + numPerms);
+            testFail++;
+        }
+
+        if (testFail > 0) {
+            throw new Exception(testFail + " test(s) failed");
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/security/auth/kerberos/ServicePermissionCollection.java	Thu Jun 11 20:18:55 2015 -0700
@@ -0,0 +1,133 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8056179
+ * @summary Unit test for ServicePermissionCollection subclass
+ */
+
+import java.security.Permission;
+import java.security.PermissionCollection;
+import java.security.SecurityPermission;
+import java.util.Enumeration;
+import javax.security.auth.kerberos.ServicePermission;
+
+public class ServicePermissionCollection {
+
+    private static final String FOO = "host/foo.example.com@EXAMPLE.COM";
+    private static final String BAR = "host/bar.example.com@EXAMPLE.COM";
+    private static final String BAZ = "host/baz.example.com@EXAMPLE.COM";
+
+    public static void main(String[] args) throws Exception {
+
+        int testFail = 0;
+
+        ServicePermission perm = new ServicePermission(FOO, "accept");
+        PermissionCollection perms = perm.newPermissionCollection();
+
+        // test 1
+        System.out.println
+            ("test 1: add throws IllegalArgExc for wrong permission type");
+        try {
+            perms.add(new SecurityPermission("createAccessControlContext"));
+            System.err.println("Expected IllegalArgumentException");
+            testFail++;
+        } catch (IllegalArgumentException iae) {}
+
+        // test 2
+        System.out.println("test 2: implies returns false for wrong perm type");
+        if (perms.implies(new SecurityPermission("getPolicy"))) {
+            System.err.println("Expected false, returned true");
+            testFail++;
+        }
+
+        // test 3
+        System.out.println
+            ("test 3: implies returns true for match on name and action");
+        perms.add(new ServicePermission(FOO, "accept"));
+        if (!perms.implies(new ServicePermission(FOO, "accept"))) {
+            System.err.println("Expected true, returned false");
+            testFail++;
+        }
+
+        // test 4
+        System.out.println
+            ("test 4: implies returns false for match on name but not action");
+        if (perms.implies(new ServicePermission(FOO, "initiate"))) {
+            System.err.println("Expected false, returned true");
+            testFail++;
+        }
+
+        // test 5
+        System.out.println("test 5: implies returns true for match on " +
+                           "name and subset of actions");
+        perms.add(new ServicePermission(BAR, "accept, initiate"));
+        if (!perms.implies(new ServicePermission(BAR, "accept"))) {
+            System.err.println("Expected true, returned false");
+            testFail++;
+        }
+
+        // test 6
+        System.out.println("test 6: implies returns false for aggregate " +
+                           "match on name and action");
+        perms.add(new ServicePermission(BAZ, "accept"));
+        perms.add(new ServicePermission(BAZ, "initiate"));
+        if (!perms.implies(new ServicePermission(BAZ, "initiate"))) {
+            System.err.println("Expected true, returned false");
+            testFail++;
+        }
+        if (!perms.implies(new ServicePermission(BAZ, "initiate, accept"))) {
+            System.err.println("Expected true, returned false");
+            testFail++;
+        }
+
+        // test 7
+        System.out.println("test 7: implies returns true for wildcard " +
+                           "match on name and action");
+        perms.add(new ServicePermission("*", "initiate"));
+        if (!perms.implies(new ServicePermission("Duke", "initiate"))) {
+            System.err.println("Expected true, returned false");
+            testFail++;
+        }
+
+        // test 8
+        System.out.println("test 8: elements returns correct number of perms");
+        int numPerms = 0;
+        Enumeration<Permission> e = perms.elements();
+        while (e.hasMoreElements()) {
+            numPerms++;
+            System.out.println(e.nextElement());
+        }
+        // the 2 FOO permissions and the 2 BAZ permisssions
+        // are combined into one
+        if (numPerms != 4) {
+            System.err.println("Expected 4, got " + numPerms);
+            testFail++;
+        }
+
+        if (testFail > 0) {
+            throw new Exception(testFail + " test(s) failed");
+        }
+    }
+}
--- a/jdk/test/sun/text/resources/LocaleData	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/test/sun/text/resources/LocaleData	Thu Jun 11 20:18:55 2015 -0700
@@ -5414,11 +5414,13 @@
 FormatData/en_SG/TimePatterns/1=h:mm:ss a z
 FormatData/en_SG/TimePatterns/2=h:mm:ss a
 FormatData/en_SG/TimePatterns/3=h:mm a
-FormatData/en_SG/DatePatterns/0=EEEE, MMMM d, yyyy
-FormatData/en_SG/DatePatterns/1=MMMM d, yyyy
-FormatData/en_SG/DatePatterns/2=MMM d, yyyy
-FormatData/en_SG/DatePatterns/3=M/d/yy
 FormatData/en_SG/DateTimePatterns/0={1} {0}
+# bug# 8080774
+# Day should precede month for all date formats in en_SG - CLDR 27.0.0
+FormatData/en_SG/DatePatterns/0=EEEE, d MMMM, yyyy
+FormatData/en_SG/DatePatterns/1=d MMMM, yyyy
+FormatData/en_SG/DatePatterns/2=d MMM, yyyy
+FormatData/en_SG/DatePatterns/3=d/M/yy
 # Use approved data
 FormatData/ms/Eras/0=BCE
 FormatData/ms/Eras/1=CE
--- a/jdk/test/sun/text/resources/LocaleDataTest.java	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/test/sun/text/resources/LocaleDataTest.java	Thu Jun 11 20:18:55 2015 -0700
@@ -36,7 +36,7 @@
  *      6919624 6998391 7019267 7020960 7025837 7020583 7036905 7066203 7101495
  *      7003124 7085757 7028073 7171028 7189611 8000983 7195759 8004489 8006509
  *      7114053 7074882 7040556 8013836 8021121 6192407 6931564 8027695 8017142
- *      8037343 8055222 8042126 8074791 8075173
+ *      8037343 8055222 8042126 8074791 8075173 8080774
  * @summary Verify locale data
  *
  */
--- a/jdk/test/sun/tools/jmap/heapconfig/JMapHeapConfigTest.java	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/test/sun/tools/jmap/heapconfig/JMapHeapConfigTest.java	Thu Jun 11 20:18:55 2015 -0700
@@ -21,25 +21,29 @@
  * questions.
  */
 
-/*
- * @test
- * @bug 8042397
- * @summary Unit test for jmap utility test heap configuration reader
- * @library /lib/testlibrary
- * @modules java.management
- * @build jdk.testlibrary.*
- * @build JMapHeapConfigTest LingeredApp TmtoolTestScenario
- * @run main JMapHeapConfigTest
- */
 import java.io.IOException;
 import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+
+import jdk.test.lib.apps.LingeredApp;
 import jdk.testlibrary.Utils;
 import jdk.testlibrary.Platform;
 
+/*
+ * @test
+ * @bug 8042397
+ * @summary Unit test for jmap utility test heap configuration reader
+ * @library /../../test/lib/share/classes
+ * @library /lib/testlibrary
+ * @modules java.management
+ * @build jdk.testlibrary.*
+ * @build jdk.test.lib.apps.*
+ * @build JMapHeapConfigTest TmtoolTestScenario
+ * @run main JMapHeapConfigTest
+ */
 public class JMapHeapConfigTest {
 
     static final String expectedJMapValues[] = {
--- a/jdk/test/sun/tools/jmap/heapconfig/LingeredApp.java	Thu Jun 11 10:44:14 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,431 +0,0 @@
-/*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code 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 General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.nio.file.Files;
-import java.nio.file.NoSuchFileException;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.nio.file.attribute.BasicFileAttributes;
-import java.nio.file.attribute.FileTime;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
-
-/**
- * This is a framework to launch an app that could be synchronized with caller
- * to make further attach actions reliable across supported platforms
-
- * Caller example:
- *   SmartTestApp a = SmartTestApp.startApp(cmd);
- *     // do something
- *   a.stopApp();
- *
- *   or fine grained control
- *
- *   a = new SmartTestApp("MyLock.lck");
- *   a.createLock();
- *   a.runApp();
- *   a.waitAppReady();
- *     // do something
- *   a.deleteLock();
- *   a.waitAppTerminate();
- *
- *  Then you can work with app output and process object
- *
- *   output = a.getAppOutput();
- *   process = a.getProcess();
- *
- */
-public class LingeredApp {
-
-    private static final long spinDelay = 1000;
-
-    private final String lockFileName;
-    private long lockCreationTime;
-    private Process appProcess;
-    private final ArrayList<String> storedAppOutput;
-
-    /*
-     * Drain child process output, store it into string array
-     */
-    class InputGobbler extends Thread {
-
-        InputStream is;
-        List<String> astr;
-
-        InputGobbler(InputStream is, List<String> astr) {
-            this.is = is;
-            this.astr = astr;
-        }
-
-        public void run() {
-            try {
-                InputStreamReader isr = new InputStreamReader(is);
-                BufferedReader br = new BufferedReader(isr);
-                String line = null;
-                while ((line = br.readLine()) != null) {
-                    astr.add(line);
-                }
-            } catch (IOException ex) {
-                // pass
-            }
-        }
-    }
-
-    /**
-     * Create LingeredApp object on caller side. Lock file have be a valid filename
-     * at writable location
-     *
-     * @param lockFileName - the name of lock file
-     */
-    public LingeredApp(String lockFileName) {
-        this.lockFileName = lockFileName;
-        this.storedAppOutput = new ArrayList();
-    }
-
-    /**
-     *
-     * @return name of lock file
-     */
-    public String getLockFileName() {
-        return this.lockFileName;
-    }
-
-    /**
-     *
-     * @return name of testapp
-     */
-    public String getAppName() {
-        return this.getClass().getName();
-    }
-
-    /**
-     *
-     *  @return pid of java process running testapp
-     */
-    public long getPid() {
-        if (appProcess == null) {
-            throw new RuntimeException("Process is not alive");
-        }
-        return appProcess.getPid();
-    }
-
-    /**
-     *
-     * @return process object
-     */
-    public Process getProcess() {
-        return appProcess;
-    }
-
-    /**
-     *
-     * @return application output as string array. Empty array if application produced no output
-     */
-    List<String> getAppOutput() {
-        if (appProcess.isAlive()) {
-            throw new RuntimeException("Process is still alive. Can't get its output.");
-        }
-        return storedAppOutput;
-    }
-
-    /* Make sure all part of the app use the same method to get dates,
-     as different methods could produce different results
-     */
-    private static long epoch() {
-        return new Date().getTime();
-    }
-
-    private static long lastModified(String fileName) throws IOException {
-        Path path = Paths.get(fileName);
-        BasicFileAttributes attr = Files.readAttributes(path, BasicFileAttributes.class);
-        return attr.lastModifiedTime().toMillis();
-    }
-
-    private static void setLastModified(String fileName, long newTime) throws IOException {
-        Path path = Paths.get(fileName);
-        FileTime fileTime = FileTime.fromMillis(newTime);
-        Files.setLastModifiedTime(path, fileTime);
-    }
-
-    /**
-     * create lock
-     *
-     * @throws IOException
-     */
-    public void createLock() throws IOException {
-        Path path = Paths.get(lockFileName);
-        // Files.deleteIfExists(path);
-        Files.createFile(path);
-        lockCreationTime = lastModified(lockFileName);
-    }
-
-    /**
-     * Delete lock
-     *
-     * @throws IOException
-     */
-    public void deleteLock() throws IOException {
-        try {
-            Path path = Paths.get(lockFileName);
-            Files.delete(path);
-        } catch (NoSuchFileException ex) {
-            // Lock already deleted. Ignore error
-        }
-    }
-
-    public void waitAppTerminate() {
-        while (true) {
-            try {
-                appProcess.waitFor();
-                break;
-            } catch (InterruptedException ex) {
-                // pass
-            }
-        }
-    }
-
-    /**
-     * The app touches the lock file when it's started
-     * wait while it happens. Caller have to delete lock on wait error.
-     *
-     * @param timeout
-     * @throws java.io.IOException
-     */
-    public void waitAppReady(long timeout) throws IOException {
-        long here = epoch();
-        while (true) {
-            long epoch = epoch();
-            if (epoch - here > (timeout * 1000)) {
-                throw new IOException("App waiting timeout");
-            }
-
-            // Live process should touch lock file every second
-            long lm = lastModified(lockFileName);
-            if (lm > lockCreationTime) {
-                break;
-            }
-
-            // Make sure process didn't already exit
-            if (!appProcess.isAlive()) {
-                throw new IOException("App exited unexpectedly with " + appProcess.exitValue());
-            }
-
-            try {
-                Thread.sleep(spinDelay);
-            } catch (InterruptedException ex) {
-                // pass
-            }
-        }
-    }
-
-    /**
-     * Run the app
-     *
-     * @param vmArguments
-     * @throws IOException
-     */
-    public void runApp(List<String> vmArguments)
-            throws IOException {
-
-        // We should always use testjava or throw an exception,
-        // so we can't use JDKToolFinder.getJDKTool("java");
-        // that falls back to compile java on error
-        String jdkPath = System.getProperty("test.jdk");
-        if (jdkPath == null) {
-            // we are not under jtreg, try env
-            Map<String, String> env = System.getenv();
-            jdkPath = env.get("TESTJAVA");
-        }
-
-        if (jdkPath == null) {
-            throw new RuntimeException("Can't determine jdk path neither test.jdk property no TESTJAVA env are set");
-        }
-
-        String osname = System.getProperty("os.name");
-        String javapath = jdkPath + ((osname.startsWith("window")) ? "/bin/java.exe" : "/bin/java");
-
-        List<String> cmd = new ArrayList();
-        cmd.add(javapath);
-
-
-        if (vmArguments == null) {
-            // Propagate test.vm.options to LingeredApp, filter out possible empty options
-            String testVmOpts[] = System.getProperty("test.vm.opts","").split("\\s+");
-            for (String s : testVmOpts) {
-                if (!s.equals("")) {
-                    cmd.add(s);
-                }
-            }
-        }
-        else{
-            // Lets user manage LingerApp options
-            cmd.addAll(vmArguments);
-        }
-
-        // Make sure we set correct classpath to run the app
-        cmd.add("-cp");
-        String classpath = System.getProperty("test.class.path");
-        cmd.add((classpath == null) ? "." : classpath);
-
-        cmd.add(this.getAppName());
-        cmd.add(lockFileName);
-
-        // Reporting
-        StringBuilder cmdLine = new StringBuilder();
-        for (String strCmd : cmd) {
-            cmdLine.append("'").append(strCmd).append("' ");
-        }
-
-        // A bit of verbosity
-        System.out.println("Command line: [" + cmdLine.toString() + "]");
-
-        ProcessBuilder pb = new ProcessBuilder(cmd);
-        // we don't expect any error output but make sure we are not stuck on pipe
-        // pb.redirectErrorStream(false);
-        pb.redirectError(ProcessBuilder.Redirect.INHERIT);
-
-        appProcess = pb.start();
-
-        // Create pipe reader for process, and read stdin and stderr to array of strings
-        InputGobbler gb = new InputGobbler(appProcess.getInputStream(), storedAppOutput);
-        gb.start();
-    }
-
-    /**
-     *  High level interface for test writers
-     */
-    /**
-     * Factory method that creates SmartAppTest object with ready to use application
-     * lock name is autogenerated, wait timeout is hardcoded
-     * @param cmd - vm options, could be null to auto add testvm.options
-     * @return LingeredApp object
-     * @throws IOException
-     */
-    public static LingeredApp startApp(List<String> cmd) throws IOException {
-        final String lockName = UUID.randomUUID().toString() + ".lck";
-        final int waitTime = 10;
-
-        LingeredApp a = new LingeredApp(lockName);
-        a.createLock();
-        try {
-            a.runApp(cmd);
-            a.waitAppReady(waitTime);
-        } catch (Exception ex) {
-            a.deleteLock();
-            throw ex;
-        }
-
-        return a;
-    }
-
-    public static LingeredApp startApp() throws IOException {
-        return startApp(null);
-    }
-
-    /**
-     * Delete lock file that signal app to terminate, then
-     * waits until app is actually terminated.
-     * @throws IOException
-     */
-    public void stopApp() throws IOException {
-        deleteLock();
-        waitAppTerminate();
-        int exitcode = appProcess.exitValue();
-        if (exitcode != 0) {
-            throw new IOException("LingeredApp terminated with non-zero exit code " + exitcode);
-        }
-    }
-
-    /**
-     * LastModified time might not work correctly in some cases it might
-     * cause later failures
-     */
-
-    public static boolean isLastModifiedWorking() {
-        boolean sane = true;
-        try {
-            long lm = lastModified(".");
-            if (lm == 0) {
-                System.err.println("SANITY Warning! The lastModifiedTime() doesn't work on this system, it returns 0");
-                sane = false;
-            }
-
-            long now = epoch();
-            if (lm > now) {
-                System.err.println("SANITY Warning! The Clock is wrong on this system lastModifiedTime() > getTime()");
-                sane = false;
-            }
-
-            setLastModified(".", epoch());
-            long lm1 = lastModified(".");
-            if (lm1 <= lm) {
-                System.err.println("SANITY Warning! The setLastModified doesn't work on this system");
-                sane = false;
-            }
-        }
-        catch(IOException e) {
-            System.err.println("SANITY Warning! IOException during sanity check " + e);
-            sane = false;
-        }
-
-        return sane;
-    }
-
-    /**
-     * This part is the application it self
-     */
-    public static void main(String args[]) {
-
-        if (args.length != 1) {
-            System.err.println("Lock file name is not specified");
-            System.exit(7);
-        }
-
-        String theLockFileName = args[0];
-
-        try {
-            Path path = Paths.get(theLockFileName);
-
-            while (Files.exists(path)) {
-                // Touch the lock to indicate our readiness
-                setLastModified(theLockFileName, epoch());
-                Thread.sleep(spinDelay);
-            }
-        } catch (NoSuchFileException ex) {
-            // Lock deleted while we are setting last modified time.
-            // Ignore error and lets the app exits
-        } catch (Exception ex) {
-            System.err.println("LingeredApp ERROR: " + ex);
-            // Leave exit_code = 1 to Java launcher
-            System.exit(3);
-        }
-
-        System.exit(0);
-    }
-}
--- a/jdk/test/sun/tools/jmap/heapconfig/LingeredAppTest.java	Thu Jun 11 10:44:14 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,70 +0,0 @@
-/*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code 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 General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- * @test
- * @summary Unit test for LingeredApp
- * @compile LingeredAppTest.java
- * @compile LingeredApp.java
- * @run main LingeredAppTest
- */
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-
-public class LingeredAppTest {
-
-    public static void main(String[] args) {
-        try {
-            System.out.println("Starting LingeredApp with default parameters");
-
-            ArrayList<String> cmd = new ArrayList();
-
-            // Propagate test.vm.options to LingeredApp, filter out possible empty options
-            String testVmOpts[] = System.getProperty("test.vm.opts","").split("\\s+");
-            for (String s : testVmOpts) {
-                if (!s.equals("")) {
-                    cmd.add(s);
-                }
-            }
-
-            cmd.add("-XX:+PrintFlagsFinal");
-
-            LingeredApp a = LingeredApp.startApp(cmd);
-            System.out.printf("App pid: %d\n", a.getPid());
-            a.stopApp();
-
-            System.out.println("App output:");
-            int count = 0;
-            for (String line : a.getAppOutput()) {
-                count += 1;
-            }
-            System.out.println("Found " + count + " lines in VM output");
-            System.out.println("Test PASSED");
-        } catch (IOException ex) {
-            ex.printStackTrace();
-            System.out.println("Test ERROR");
-            System.exit(3);
-        }
-    }
-}
--- a/jdk/test/sun/tools/jmap/heapconfig/TmtoolTestScenario.java	Thu Jun 11 10:44:14 2015 -0700
+++ b/jdk/test/sun/tools/jmap/heapconfig/TmtoolTestScenario.java	Thu Jun 11 20:18:55 2015 -0700
@@ -31,6 +31,8 @@
 import java.util.Map;
 import java.util.logging.Level;
 import java.util.logging.Logger;
+
+import jdk.test.lib.apps.LingeredApp;
 import jdk.testlibrary.JDKToolLauncher;
 import jdk.testlibrary.Utils;