# HG changeset patch # User lana # Date 1434079135 25200 # Node ID d24a2c340a474827ec7862ab411fa48307801fd1 # Parent 07cd15548b1bc458de7c3dc78cb4e4360f2f2d8a# Parent 9bde92d55eaec11ee1db2e481b7f6392a4377f00 Merge diff -r 07cd15548b1b -r d24a2c340a47 jdk/make/lib/Lib-java.instrument.gmk --- 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, \ diff -r 07cd15548b1b -r d24a2c340a47 jdk/make/lib/Lib-java.management.gmk --- 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), \ diff -r 07cd15548b1b -r d24a2c340a47 jdk/make/lib/Lib-jdk.attach.gmk --- 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, \ diff -r 07cd15548b1b -r d24a2c340a47 jdk/make/lib/Lib-jdk.hprof.agent.gmk --- 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) \ diff -r 07cd15548b1b -r d24a2c340a47 jdk/make/lib/Lib-jdk.jdi.gmk --- 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, \ diff -r 07cd15548b1b -r d24a2c340a47 jdk/make/lib/Lib-jdk.jdwp.agent.gmk --- 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, \ diff -r 07cd15548b1b -r d24a2c340a47 jdk/make/lib/Lib-jdk.management.gmk --- 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), \ diff -r 07cd15548b1b -r d24a2c340a47 jdk/make/lib/Lib-jdk.sctp.gmk --- 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), \ diff -r 07cd15548b1b -r d24a2c340a47 jdk/make/mapfiles/libjava/mapfile-vers --- 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; diff -r 07cd15548b1b -r d24a2c340a47 jdk/src/java.base/share/classes/com/sun/net/ssl/SSLContext.java --- 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) { diff -r 07cd15548b1b -r d24a2c340a47 jdk/src/java.base/share/classes/com/sun/net/ssl/SSLContextSpi.java --- 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; diff -r 07cd15548b1b -r d24a2c340a47 jdk/src/java.base/share/classes/com/sun/net/ssl/SSLPermission.java --- 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. - *

* * * diff -r 07cd15548b1b -r d24a2c340a47 jdk/src/java.base/share/classes/java/io/File.java --- 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. - *

+ * * @serialData Default fields followed by separator character. */ private synchronized void writeObject(java.io.ObjectOutputStream s) diff -r 07cd15548b1b -r d24a2c340a47 jdk/src/java.base/share/classes/java/io/FilePermission.java --- 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 @@ * null and is implied by this object, * false otherwise. */ + @Override public boolean implies(Permission p) { if (!(p instanceof FilePermission)) return false; @@ -387,6 +385,7 @@ * pathname and actions as this FilePermission object, * false 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 perms; + private transient ConcurrentHashMap 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 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 permissions = new Vector<>(perms.size()); - synchronized (this) { - permissions.addAll(perms); - } + Vector 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 permissions = (Vector)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); + } } } diff -r 07cd15548b1b -r d24a2c340a47 jdk/src/java.base/share/classes/java/lang/Class.java diff -r 07cd15548b1b -r d24a2c340a47 jdk/src/java.base/share/classes/java/lang/ClassLoader.java --- 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( diff -r 07cd15548b1b -r d24a2c340a47 jdk/src/java.base/share/classes/java/lang/Process.java --- 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. - *

+ * * @apiNote * Using {@link #onExit() onExit} is an alternative to * {@link #waitFor() waitFor} that enables both additional concurrency diff -r 07cd15548b1b -r d24a2c340a47 jdk/src/java.base/share/classes/java/lang/ProcessHandle.java --- 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. - *

+ * * @implSpec * In the case where ProcessHandles cannot be supported then the factory * methods must consistently throw {@link java.lang.UnsupportedOperationException}. diff -r 07cd15548b1b -r d24a2c340a47 jdk/src/java.base/share/classes/java/lang/invoke/CallSite.java --- 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. diff -r 07cd15548b1b -r d24a2c340a47 jdk/src/java.base/share/classes/java/lang/invoke/MethodHandleNatives.java --- 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); } } diff -r 07cd15548b1b -r d24a2c340a47 jdk/src/java.base/share/classes/java/net/SocketPermission.java --- 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 obj 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 perms; + // A ConcurrentSkipListMap is used to preserve order, so that most + // recently added permissions are checked first (see JDK-4301064). + private transient ConcurrentSkipListMap 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 elements() { - // Convert Iterator into Enumeration - synchronized (this) { - return Collections.enumeration((List)(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 permissions = new Vector<>(perms.size()); - - synchronized (this) { - permissions.addAll(perms); - } + Vector 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 permissions = (Vector)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 { + @Override + public int compare(String s1, String s2) { + if (s1.equals(s2)) { + return 0; + } + return -1; + } } } diff -r 07cd15548b1b -r d24a2c340a47 jdk/src/java.base/share/classes/java/security/BasicPermission.java --- 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 perms; + private transient ConcurrentHashMap 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 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 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 permissions = (Hashtable)gfields.get("permissions", null); - perms = new HashMap<>(permissions.size()*2); + perms = new ConcurrentHashMap<>(permissions.size()*2); perms.putAll(permissions); // Get all_allowed diff -r 07cd15548b1b -r d24a2c340a47 jdk/src/java.base/share/classes/java/security/Permissions.java --- 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, PermissionCollection> permsMap; + private transient ConcurrentHashMap, 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 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, 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, PermissionCollection> perms = (Hashtable, 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 permsMap; + private transient ConcurrentHashMap 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 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 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 perms = (Hashtable)gfields.get("perms", null); - permsMap = new HashMap<>(perms.size()*2); + permsMap = new ConcurrentHashMap<>(perms.size()*2); permsMap.putAll(perms); } } diff -r 07cd15548b1b -r d24a2c340a47 jdk/src/java.base/share/classes/java/security/UnresolvedPermissionCollection.java --- 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> perms; + private transient ConcurrentHashMap> 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 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 apply(String key, + List oldValue) { + if (oldValue == null) { + List 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 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 elements() { List results = new ArrayList<>(); // where results are stored // Get iterator of Map values (which are lists of permissions) - synchronized (this) { - for (List l : perms.values()) { - synchronized (l) { - results.addAll(l); - } - } + for (List 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>> set = perms.entrySet(); - for (Map.Entry> e : set) { - // Convert list into Vector - List list = e.getValue(); - Vector vec = new Vector<>(list.size()); - synchronized (list) { - vec.addAll(list); - } + Set>> set = perms.entrySet(); + for (Map.Entry> e : set) { + // Convert list into Vector + List list = e.getValue(); + Vector 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> permissions = (Hashtable>) gfields.get("permissions", null); - perms = new HashMap<>(permissions.size()*2); + perms = new ConcurrentHashMap<>(permissions.size()*2); // Convert each entry (Vector) into a List Set>> set = permissions.entrySet(); for (Map.Entry> e : set) { // Convert Vector into ArrayList Vector vec = e.getValue(); - List list = new ArrayList<>(vec.size()); - list.addAll(vec); + List list = new CopyOnWriteArrayList<>(vec); // Add to Hashtable being serialized perms.put(e.getKey(), list); diff -r 07cd15548b1b -r d24a2c340a47 jdk/src/java.base/share/classes/java/text/SimpleDateFormat.java --- 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. - *

+ * * @exception InvalidObjectException if the pattern is invalid */ private void readObject(ObjectInputStream stream) diff -r 07cd15548b1b -r d24a2c340a47 jdk/src/java.base/share/classes/java/util/DualPivotQuicksort.java --- 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; } diff -r 07cd15548b1b -r d24a2c340a47 jdk/src/java.base/share/classes/java/util/PropertyPermission.java --- 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. *

@@ -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 perms; + private transient ConcurrentHashMap 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 elements() { - // Convert Iterator of Map values into an Enumeration - synchronized (this) { - /** - * Casting to rawtype since Enumeration - * cannot be directly cast to Enumeration - */ - return (Enumeration)Collections.enumeration(perms.values()); - } + /** + * Casting to rawtype since Enumeration + * cannot be directly cast to Enumeration + */ + return (Enumeration)perms.elements(); } private static final long serialVersionUID = 7015263904581634791L; @@ -616,9 +631,7 @@ // Copy perms into a Hashtable Hashtable 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 permissions = (Hashtable)gfields.get("permissions", null); - perms = new HashMap<>(permissions.size()*2); + perms = new ConcurrentHashMap<>(permissions.size()*2); perms.putAll(permissions); } } diff -r 07cd15548b1b -r d24a2c340a47 jdk/src/java.base/share/classes/javax/security/auth/Subject.java --- 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). * - *

- * * @serialData If this is a private credential set, * a security check is performed to ensure that * the caller has permission to access each credential diff -r 07cd15548b1b -r d24a2c340a47 jdk/src/java.base/share/classes/jdk/internal/org/objectweb/asm/util/TraceClassVisitor.java --- 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. *

- * The trace printed when visiting the Hello class is the following: - *

+ * The trace printed when visiting the {@code Hello} class is the following: *

* - *
+ * 
{@code
  * // class version 49.0 (49) // access flags 0x21 public class Hello {
  *
  * // compiled from: Hello.java
  *
- * // access flags 0x1 public <init> ()V ALOAD 0 INVOKESPECIAL
- * java/lang/Object <init> ()V RETURN MAXSTACK = 1 MAXLOCALS = 1
+ * // access flags 0x1 public  ()V ALOAD 0 INVOKESPECIAL
+ * java/lang/Object  ()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 "hello"
+ * java/lang/System out Ljava/io/PrintStream; LDC "hello"
  * INVOKEVIRTUAL java/io/PrintStream println (Ljava/lang/String;)V RETURN
  * MAXSTACK = 2 MAXLOCALS = 1 }
- * 
+ * }
* - *
where Hello is defined by: - *

+ * where {@code Hello} is defined by: *

* - *
+ * 
{@code
  * public class Hello {
  *
  *     public static void main(String[] args) {
- *         System.out.println("hello");
+ *         System.out.println("hello");
  *     }
  * }
- * 
+ * }
* *
* @@ -137,7 +135,7 @@ * * @param cv * the {@link ClassVisitor} to which this visitor delegates - * calls. May be null. + * 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 null. + * calls. May be {@code null}. * @param p * the object that actually converts visit events into text. * @param pw diff -r 07cd15548b1b -r d24a2c340a47 jdk/src/java.base/share/classes/sun/invoke/util/BytecodeName.java --- 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 * dangerous characters: {@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) { diff -r 07cd15548b1b -r d24a2c340a47 jdk/src/java.base/share/classes/sun/misc/ExtensionDependency.java --- 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. - *

- * 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: - *

- *

- * 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 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() { - 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 currentProviders; - synchronized(providers) { - @SuppressWarnings("unchecked") - Vector tmp = - (Vector) providers.clone(); - currentProviders = tmp; - } - for (Enumeration 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() { - 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 urls = new Vector(); - 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() { - 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() { - 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{@code - * < 0 if source < version - * > 0 if source > version - * = 0 if source = version} - */ - 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

{@code
-     *   < 0 if source < version
-     *   > 0 if source > version
-     *   = 0 if source = version}
- */ - 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; - } - } - } - } -} diff -r 07cd15548b1b -r d24a2c340a47 jdk/src/java.base/share/classes/sun/misc/ExtensionInstallationException.java --- 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; - - /* - *

- * Construct a new exception with an exception reason - *

- */ - public ExtensionInstallationException(String s) { - super(s); - } -} diff -r 07cd15548b1b -r d24a2c340a47 jdk/src/java.base/share/classes/sun/misc/ExtensionInstallationProvider.java --- 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 { - - /* - *

- * Request the installation of an extension in the extension directory - *

- * - * @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; -} diff -r 07cd15548b1b -r d24a2c340a47 jdk/src/java.base/share/classes/sun/net/TelnetInputStream.java --- 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 character. + * are terminated with a single newline {@literal } character. * * This is the relevant section of RFC 824 regarding CRLF processing: * diff -r 07cd15548b1b -r d24a2c340a47 jdk/src/java.base/share/classes/sun/net/TelnetOutputStream.java --- 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 character. + * are terminated with a single newline {@literal } character. * * This is the relevant section of RFC 824 regarding CRLF processing: * diff -r 07cd15548b1b -r d24a2c340a47 jdk/src/java.base/share/classes/sun/net/URLCanonicalizer.java --- 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: + *
{@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/...
+ * }
* * Full URLs (those including a protocol name) are passed through unchanged. * diff -r 07cd15548b1b -r d24a2c340a47 jdk/src/java.base/share/classes/sun/net/ftp/impl/FtpClient.java --- 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 OutputStream is not closed by this method at the end * of the transfer. * - * @param name a String 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 OutputStream the file should be written to. * @throws IOException if the transfer fails. diff -r 07cd15548b1b -r d24a2c340a47 jdk/src/java.base/share/classes/sun/net/www/MessageHeader.java --- 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 ""; diff -r 07cd15548b1b -r d24a2c340a47 jdk/src/java.base/share/classes/sun/net/www/http/HttpClient.java --- 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 comment\r\n". */ + something like: {@literal "HTTP/1.0 comment\r\n"}. */ public boolean parseHTTP(MessageHeader responses, ProgressSource pi, HttpURLConnection httpuc) throws IOException { diff -r 07cd15548b1b -r d24a2c340a47 jdk/src/java.base/share/classes/sun/net/www/protocol/ftp/FtpURLConnection.java --- 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 @@ *
  • Disconnect
  • * * 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 : - *

    - * URL url = new URL("ftp://ftp.sun.com/pub/test.txt");

    - * UrlConnection con = url.openConnection();

    - * InputStream is = con.getInputStream();

    - * ...

    - * is.close(); + * in a abstract layer. Here is an example of how to use the class: + *

    {@code
    + * URL url = new URL("ftp://ftp.sun.com/pub/test.txt");
    + * UrlConnection con = url.openConnection();
    + * InputStream is = con.getInputStream();
    + * ...
    + * is.close();
    + * }
    * * @see sun.net.ftp.FtpClient */ @@ -158,7 +159,7 @@ /** * Creates an FtpURLConnection from a URL. * - * @param url The URL 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 InputStream 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 OutputStream 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 Permission associated with the host & port. + * Gets the {@code Permission} associated with the host and port. * - * @return The Permission 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., "accept"). + * (e.g., "{@code accept}"). * @param value the value associated with it. * @throws IllegalStateException if already connected * @see #getRequestProperty(java.lang.String) diff -r 07cd15548b1b -r d24a2c340a47 jdk/src/java.base/share/classes/sun/net/www/protocol/http/HttpAuthenticator.java --- 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. *

    * Example: + *

    {@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}
          *  YAY!!!
    +     * 
    */ public String authString (URL u, String scheme, String realm); diff -r 07cd15548b1b -r d24a2c340a47 jdk/src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java --- 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; diff -r 07cd15548b1b -r d24a2c340a47 jdk/src/java.base/share/classes/sun/net/www/protocol/jar/JarURLConnection.java --- 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 ifModifiedSince field of * this URLConnection to the specified value. * - * @param value the new value. + * @param ifmodifiedsince the new value. * @see java.net.URLConnection#ifModifiedSince */ public void setIfModifiedSince(long ifmodifiedsince) { diff -r 07cd15548b1b -r d24a2c340a47 jdk/src/java.base/share/classes/sun/reflect/Reflection.java diff -r 07cd15548b1b -r d24a2c340a47 jdk/src/java.base/share/classes/sun/reflect/annotation/AnnotationParser.java --- 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 type, final Map memberValues) diff -r 07cd15548b1b -r d24a2c340a47 jdk/src/java.base/share/classes/sun/reflect/annotation/AnnotationType.java --- 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 annotationClass) @@ -183,7 +183,7 @@ /** * Returns member types for this annotation type - * (member name -> type mapping). + * (member name {@literal ->} type mapping). */ public Map> 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 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 memberDefaults() { return memberDefaults; diff -r 07cd15548b1b -r d24a2c340a47 jdk/src/java.base/share/classes/sun/reflect/annotation/TypeAnnotationParser.java --- 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 Annotation[] parseTypeVariableAnnotations(D genericDecl, diff -r 07cd15548b1b -r d24a2c340a47 jdk/src/java.base/share/classes/sun/reflect/generics/reflectiveObjects/ParameterizedTypeImpl.java --- 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 @@ *

    This method throws a MalformedParameterizedTypeException * under the following circumstances: * If the number of actual type arguments (i.e., the size of the - * array typeArgs) 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 ParameterizedType - * @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 Type objects representing the actual type + * Returns an array of {@code Type} objects representing the actual type * arguments to this type. * *

    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 Type objects representing the actual type + * @return an array of {@code Type} objects representing the actual type * arguments to this type - * @throws TypeNotPresentException if any of the + * @throws TypeNotPresentException if any of the * actual type arguments refers to a non-existent type declaration - * @throws MalformedParameterizedTypeException 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 Type object representing the class or interface + * Returns the {@code Type} object representing the class or interface * that declared this type. * - * @return the Type 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 Type object representing the type that this type - * is a member of. For example, if this type is O.I, - * return a representation of O. + * Returns a {@code Type} object representing the type that this type + * is a member of. For example, if this type is {@code O.I}, + * return a representation of {@code O}. * - *

    If this type is a top-level type, null is returned. + *

    If this type is a top-level type, {@code null} is returned. * - * @return a Type 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, - * null is returned - * @throws TypeNotPresentException if the owner type + * {@code null} is returned + * @throws TypeNotPresentException if the owner type * refers to a non-existent type declaration - * @throws MalformedParameterizedTypeException if the owner type + * @throws MalformedParameterizedTypeException if the owner type * refers to a parameterized type that cannot be instantiated * for any reason * diff -r 07cd15548b1b -r d24a2c340a47 jdk/src/java.base/share/classes/sun/reflect/generics/scope/ConstructorScope.java --- 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 Constructor 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) { diff -r 07cd15548b1b -r d24a2c340a47 jdk/src/java.base/share/classes/sun/security/ssl/SignatureAndHashAlgorithm.java --- 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, diff -r 07cd15548b1b -r d24a2c340a47 jdk/src/java.base/share/classes/sun/text/resources/en/FormatData_en_SG.java --- 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 + } + }, }; } } diff -r 07cd15548b1b -r d24a2c340a47 jdk/src/java.base/share/classes/sun/util/PreHashedMap.java --- 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 @@ *

    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); diff -r 07cd15548b1b -r d24a2c340a47 jdk/src/java.base/share/classes/sun/util/calendar/BaseCalendar.java --- 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 BaseCalendar 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 CalendarDate. The - * CalendarDate must be normalized to get a correct + * the specified {@code CalendarDate}. The + * {@code CalendarDate} must be normalized to get a correct * value. * - * @param a CalendarDate + * @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 - * CalendarDate. + * {@code CalendarDate}. */ // should be 'protected' public void getCalendarDateFromFixedDate(CalendarDate date, diff -r 07cd15548b1b -r d24a2c340a47 jdk/src/java.base/share/classes/sun/util/calendar/CalendarUtils.java --- 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 @@ * 0 and -1%4 is -1. * * @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 * mod(n, d) is returned. * @return the floor of the quotient. @@ -117,7 +117,7 @@ * 0 and -1%4 is -1. * * @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 * mod(n, d) is returned. * @return the floor of the quotient. diff -r 07cd15548b1b -r d24a2c340a47 jdk/src/java.base/share/classes/sun/util/calendar/ZoneInfo.java --- 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 standard local time. + * @param milliseconds The milliseconds in day in standard local time. * @return The milliseconds to add to UTC to get local time. */ public int getOffset(int era, int year, int month, int day, diff -r 07cd15548b1b -r d24a2c340a47 jdk/src/java.base/share/classes/sun/util/locale/provider/LocaleNameProviderImpl.java --- 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 locale, * (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 locale, * (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 locale, * 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. diff -r 07cd15548b1b -r d24a2c340a47 jdk/src/java.base/share/classes/sun/util/locale/provider/TimeZoneNameProviderImpl.java --- 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} diff -r 07cd15548b1b -r d24a2c340a47 jdk/src/java.base/share/classes/sun/util/logging/PlatformLogger.java --- 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: - * /conf/logging.properties is the system-wide logging + * {@code /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 /conf/logging.properties + * Platform loggers will not detect if {@code /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. diff -r 07cd15548b1b -r d24a2c340a47 jdk/src/java.base/share/classes/sun/util/resources/TimeZoneNamesBundle.java --- 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 getKeys. *

  • Inserts the time zone ID (the key of the bundle entries) into * the string arrays returned by handleGetObject. - *
      + *
    * All TimeZoneNames resource bundles must extend this * class and implement the getContents method. */ diff -r 07cd15548b1b -r d24a2c340a47 jdk/src/java.base/share/native/libjava/ClassLoader.c --- 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) { diff -r 07cd15548b1b -r d24a2c340a47 jdk/src/java.base/unix/classes/sun/misc/FileURLMapper.java --- 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. */ diff -r 07cd15548b1b -r d24a2c340a47 jdk/src/java.base/unix/classes/sun/net/www/protocol/http/ntlm/NTLMAuthentication.java --- 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 domainusername in the application Authenticator. + * Username may be specified as {@literal domainusername} + * in the application Authenticator. * If this notation is not used, then the domain will be taken * from a system property: "http.auth.ntlm.domain". */ diff -r 07cd15548b1b -r d24a2c340a47 jdk/src/java.base/unix/native/libnet/Inet4AddressImpl.c --- 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 { diff -r 07cd15548b1b -r d24a2c340a47 jdk/src/java.base/unix/native/libnet/Inet6AddressImpl.c --- 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 { diff -r 07cd15548b1b -r d24a2c340a47 jdk/src/java.base/windows/classes/sun/misc/FileURLMapper.java --- 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 */ diff -r 07cd15548b1b -r d24a2c340a47 jdk/src/java.base/windows/classes/sun/net/www/protocol/http/ntlm/NTLMAuthentication.java --- 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 domainusername in the application Authenticator. + * Username may be specified as {@literal domainusername} + * in the application Authenticator. * If this notation is not used, then the domain will be taken * from a system property: "http.auth.ntlm.domain". */ diff -r 07cd15548b1b -r d24a2c340a47 jdk/src/java.datatransfer/share/classes/sun/datatransfer/DataFlavorUtil.java --- 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 { diff -r 07cd15548b1b -r d24a2c340a47 jdk/src/java.desktop/macosx/classes/com/apple/eio/FileManager.java --- 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 ) into an int. + * Converts an OSType (e.g. "macs" + * from {@literal }) 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 * diff -r 07cd15548b1b -r d24a2c340a47 jdk/src/java.desktop/share/classes/sun/applet/AppletPanel.java --- 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 * + *
    {@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 --> ...
    +     * }
    * * 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() { diff -r 07cd15548b1b -r d24a2c340a47 jdk/src/java.desktop/share/classes/sun/applet/AppletViewer.java --- 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 tags + * Scan an html file for {@code } tags */ public static void parse(URL url, String enc) throws IOException { encoding = enc; diff -r 07cd15548b1b -r d24a2c340a47 jdk/src/java.naming/share/classes/com/sun/jndi/ldap/LdapName.java --- 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) diff -r 07cd15548b1b -r d24a2c340a47 jdk/src/java.security.jgss/share/classes/javax/security/auth/kerberos/DelegationPermission.java --- 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 perms; + private transient ConcurrentHashMap perms; public KrbDelegationPermissionCollection() { - perms = new ArrayList(); + 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 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 permissions = new Vector<>(perms.size()); - - synchronized (this) { - permissions.addAll(perms); - } + Vector permissions = new Vector<>(perms.keySet()); ObjectOutputStream.PutField pfields = out.putFields(); pfields.put("permissions", permissions); @@ -379,8 +369,10 @@ // Get the one we want Vector permissions = - (Vector)gfields.get("permissions", null); - perms = new ArrayList(permissions.size()); - perms.addAll(permissions); + (Vector)gfields.get("permissions", null); + perms = new ConcurrentHashMap<>(permissions.size()); + for (Permission perm : permissions) { + perms.put(perm, Boolean.TRUE); + } } } diff -r 07cd15548b1b -r d24a2c340a47 jdk/src/java.security.jgss/share/classes/javax/security/auth/kerberos/ServicePermission.java --- 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 perms; + private transient ConcurrentHashMap perms; public KrbServicePermissionCollection() { - perms = new ArrayList(); + 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 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 permissions = new Vector<>(perms.size()); - - synchronized (this) { - permissions.addAll(perms); - } + Vector permissions = new Vector<>(perms.values()); ObjectOutputStream.PutField pfields = out.putFields(); pfields.put("permissions", permissions); @@ -589,7 +617,9 @@ // Get the one we want Vector permissions = (Vector)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); + } } } diff -r 07cd15548b1b -r d24a2c340a47 jdk/src/java.sql.rowset/share/classes/com/sun/rowset/JdbcRowSetImpl.java --- 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 JdbcRowSet 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 Connection 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 PreparedStatement 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 - * execute creates the PreparedStatement + * {@code execute} creates the {@code PreparedStatement} * object. */ private PreparedStatement ps; /** - * The ResultSet 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 - * execute executes the rowset's command and thereby - * creates the rowset's ResultSet object. + * {@code execute} executes the rowset's command and thereby + * creates the rowset's {@code ResultSet} object. */ private ResultSet rs; /** - * The RowSetMetaDataImpl object that is constructed when - * a ResultSet object is passed to the JdbcRowSet + * 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 ResultSet object using the setter methods of - * RowSetMetaDataImpl. + * with the {@code ResultSet} object using the setter methods of + * {@code RowSetMetaDataImpl}. */ private RowSetMetaDataImpl rowsMD; /** - * The ResultSetMetaData object from which this - * RowSetMetaDataImpl 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 JdbcRowSet object. - * The new instance of JdbcRowSet will serve as a proxy - * for the ResultSet 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. *

    - * The following is true of a default JdbcRowSet instance: + * The following is true of a default {@code JdbcRowSet} instance: *

      *
    • Does not show deleted rows *
    • Has no time limit for how long a driver may take to @@ -114,17 +114,17 @@ * made by others *
    • Will not see uncommitted data (make "dirty" reads) *
    • Has escape processing turned on - *
    • Has its connection's type map set to null - *
    • Has an empty Hashtable object for storing any + *
    • Has its connection's type map set to {@code null} + *
    • Has an empty {@code Hashtable} object for storing any * parameters that are set *
    - * A newly created JdbcRowSet object must have its - * execute 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 execute 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 JdbcRowSet object given a - * valid Connection object. The new - * instance of JdbcRowSet will serve as a proxy for - * the ResultSet 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. *

    - * The following is true of a default JdbcRowSet instance: + * The following is true of a default {@code JdbcRowSet} instance: *

      *
    • Does not show deleted rows *
    • Has no time limit for how long a driver may take to @@ -235,17 +235,17 @@ * made by others *
    • Will not see uncommitted data (make "dirty" reads) *
    • Has escape processing turned on - *
    • Has its connection's type map set to null - *
    • Has an empty Hashtable object for storing any + *
    • Has its connection's type map set to {@code null} + *
    • Has an empty {@code Hashtable} object for storing any * parameters that are set *
    - * A newly created JdbcRowSet object must have its - * execute 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 execute 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 JdbcRowSet object using the + * Constructs a default {@code JdbcRowSet} object using the * URL, username, and password arguments supplied. The new - * instance of JdbcRowSet will serve as a proxy for - * the ResultSet 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. * *

    - * The following is true of a default JdbcRowSet instance: + * The following is true of a default {@code JdbcRowSet} instance: *

      *
    • Does not show deleted rows *
    • Has no time limit for how long a driver may take to @@ -308,17 +308,17 @@ * made by others *
    • Will not see uncommitted data (make "dirty" reads) *
    • Has escape processing turned on - *
    • Has its connection's type map set to null - *
    • Has an empty Hashtable object for storing any + *
    • Has its connection's type map set to {@code null} + *
    • Has an empty {@code Hashtable} object for storing any * parameters that are set *
    * - * @param url - a JDBC URL for the database to which this JdbcRowSet + * @param url a JDBC URL for the database to which this {@code JdbcRowSet} * object will be connected. The form for a JDBC URL is - * jdbc:subprotocol:subname. - * @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 JdbcRowSet object using the given valid - * ResultSet object. The new - * instance of JdbcRowSet will serve as a proxy for - * the ResultSet 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. * *

    - * The following is true of a default JdbcRowSet instance: + * The following is true of a default {@code JdbcRowSet} instance: *

      *
    • Does not show deleted rows *
    • Has no time limit for how long a driver may take to @@ -391,12 +391,12 @@ * made by others *
    • Will not see uncommitted data (make "dirty" reads) *
    • Has escape processing turned on - *
    • Has its connection's type map set to null - *
    • Has an empty Hashtable object for storing any + *
    • Has its connection's type map set to {@code null} + *
    • Has an empty {@code Hashtable} object for storing any * parameters that are set *
    * - * @param res a valid ResultSet 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 RowSetMetaData object with the values - * in the given ResultSetMetaData object. - * - * @param md the RowSetMetaData object for this - * JdbcRowSetImpl 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 ResultSetMetaData 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 ResultSet object for which this - * JdbcRowSet 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. *

    * 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 DataSource + * 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 - * DriverManager 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. *

    * Other properties have default values that may optionally be set - * to new values. The execute method will use the value - * for the command property to create a PreparedStatement + * 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 ResultSet + * Moves the cursor for this rowset's {@code ResultSet} * object down one row from its current position. - * A ResultSet cursor is initially positioned + * A {@code ResultSet} cursor is initially positioned * before the first row; the first call to the method - * next 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. * *

    If an input stream is open for the current row, a call - * to the method next will - * implicitly close it. A ResultSet 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 true if the new current row is valid; - * false 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 ResultSet 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. * - *

    Note: A ResultSet object + *

    Note: A {@code ResultSet} object * is automatically closed by the - * Statement object that generated it when - * that Statement 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 ResultSet 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 - * ResultSet object had a value of SQL NULL. - * Note that you must first call one of the getXXX 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 wasNull to see if the value read was - * SQL NULL. - * - * @return true if the last column value read was SQL - * NULL and false 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 ResultSet object as - * a String. + * 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 NULL, the - * value returned is null + * @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 ResultSet object as - * a boolean. + * 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 NULL, the - * value returned is false + * @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 ResultSet object as - * a byte. + * 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 NULL, the - * value returned is 0 + * @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 ResultSet object as - * a short. + * 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 NULL, the - * value returned is 0 + * @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 ResultSet object as - * an int. + * 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 NULL, the - * value returned is 0 + * @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 ResultSet object as - * a long. + * 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 NULL, the - * value returned is 0 + * @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 ResultSet object as - * a float. + * 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 NULL, the - * value returned is 0 + * @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 ResultSet object as - * a double. + * 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 NULL, the - * value returned is 0 + * @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 ResultSet object as - * a java.sql.BigDecimal. + * 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 NULL, the - * value returned is null + * @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 ResultSet object as - * a byte 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 NULL, the - * value returned is null + * @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 ResultSet object as - * a java.sql.Date 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 NULL, the - * value returned is null + * @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 ResultSet object as - * a java.sql.Time 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 NULL, the - * value returned is null + * @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 ResultSet object as - * a java.sql.Timestamp 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 NULL, the - * value returned is null + * @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 ResultSet 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 LONGVARCHAR values. + * suitable for retrieving large {@code LONGVARCHAR} values. * The JDBC driver will * do any necessary conversion from the database format into ASCII. * *

    Note: All the data in the returned stream must be * read prior to getting the value of any other column. The next - * call to a getXXX method implicitly closes the stream. Also, a - * stream may return 0 when the method - * InputStream.available + * 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 NULL, the - * value returned is null + * 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 ResultSet 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 largeLONGVARCHARvalues. 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. * *

    Note: All the data in the returned stream must be * read prior to getting the value of any other column. The next - * call to a getXXX method implicitly closes the stream. Also, a - * stream may return 0 when the method - * InputStream.available + * 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 NULL, the value returned is null + * 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 getCharacterStream in place of - * getUnicodeStream + * @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 ResultSet 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 LONGVARBINARY values. + * suitable for retrieving large {@code LONGVARBINARY} values. * *

    Note: All the data in the returned stream must be * read prior to getting the value of any other column. The next - * call to a getXXX method implicitly closes the stream. Also, a - * stream may return 0 when the method - * InputStream.available + * 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 NULL, the value returned is null + * 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 ResultSet object as - * a String. + * 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 NULL, the - * value returned is null + * @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 ResultSet object as - * a boolean. + * 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 NULL, the - * value returned is false + * @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 ResultSet object as - * a byte. + * 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 NULL, the - * value returned is 0 + * @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 ResultSet object as - * a short. + * 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 NULL, the - * value returned is 0 + * @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 ResultSet object as - * an int. + * 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 NULL, the - * value returned is 0 + * @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 ResultSet object as - * a long. + * 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 NULL, the - * value returned is 0 + * @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 ResultSet object as - * a float. + * 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 NULL, the - * value returned is 0 + * @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 ResultSet object as - * a double. + * 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 NULL, the - * value returned is 0 + * @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 ResultSet object as - * a java.math.BigDecimal. + * 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 NULL, the - * value returned is null + * @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 ResultSet object as - * a byte 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 NULL, the - * value returned is null + * @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 ResultSet object as - * a java.sql.Date 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 NULL, the - * value returned is null + * @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 ResultSet object as - * a java.sql.Time 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 NULL, - * the value returned is null + * 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 ResultSet object as - * a java.sql.Timestamp 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 NULL, the - * value returned is null + * @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 ResultSet 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 LONGVARCHAR values. + * suitable for retrieving large {@code LONGVARCHAR} values. * The JDBC driver will * do any necessary conversion from the database format into ASCII. * *

    Note: All the data in the returned stream must be * read prior to getting the value of any other column. The next - * call to a getXXX method implicitly closes the stream. Also, a - * stream may return 0 when the method available + * 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 NULL, - * the value returned is null. + * 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 ResultSet 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 LONGVARCHAR 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 @@ * *

    Note: All the data in the returned stream must be * read prior to getting the value of any other column. The next - * call to a getXXX method implicitly closes the stream. Also, a - * stream may return 0 when the method available + * 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 NULL, - * the value returned is null. + * 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 ResultSet object as a stream of uninterpreted - * bytes. + * 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 LONGVARBINARY + * suitable for retrieving large {@code LONGVARBINARY} * values. * *

    Note: All the data in the returned stream must be * read prior to getting the value of any other column. The next - * call to a getXXX method implicitly closes the stream. Also, a - * stream may return 0 when the method available + * 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 NULL, the result is null + * 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 - * ResultSet object. - * Subsequent warnings on this rowset's ResultSet object - * will be chained to the SQLWarning 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. * *

    The warning chain is automatically cleared each time a new * row is read. * *

    Note: This warning chain only covers warnings caused - * by ResultSet methods. Any warning caused by - * Statement methods + * by {@code ResultSet} methods. Any warning caused by + * {@code Statement} methods * (such as reading OUT parameters) will be chained on the - * Statement object. - * - * @return the first SQLWarning object reported or null + * {@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 ResultSet object. - * After this method is called, the method getWarnings - * returns null until a new warning is - * reported for this rowset's ResultSet 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 ResultSet + * Gets the name of the SQL cursor used by this rowset's {@code ResultSet} * object. * *

    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 select 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. * *

    The JDBC API supports this SQL feature by providing the name of the - * SQL cursor used by a ResultSet object. - * The current row of a ResultSet 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. * *

    Note: If positioned update is not supported, a - * SQLException is thrown. - * - * @return the SQL name for this rowset's ResultSet 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 ResultSet object's columns. - * - * @return the description of this rowset's ResultSet + * 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 @@ /** *

    Gets the value of the designated column in the current row - * of this rowset's ResultSet object as - * an Object. + * of this rowset's {@code ResultSet} object as + * an {@code Object}. * *

    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 - * getObject 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: getObject(columnIndex, - * this.getStatement().getConnection().getTypeMap()). + * 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 java.lang.Object 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 @@ /** *

    Gets the value of the designated column in the current row - * of this rowset's ResultSet object as - * an Object. + * of this rowset's {@code ResultSet} object as + * an {@code Object}. * *

    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 - * getObject 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: getObject(columnIndex, - * this.getStatement().getConnection().getTypeMap()). + * if it were a call to: {@code getObject(columnIndex, + * this.getStatement().getConnection().getTypeMap())}. * * @param columnName the SQL name of the column - * @return a java.lang.Object 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 JdbcRowSetImpl column name to its - * JdbcRowSetImpl column index and reflects this on - * the internal ResultSet 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 ResultSet object as a - * java.io.Reader object. - * @return a java.io.Reader object that contains the column - * value; if the value is SQL NULL, the value returned is - * null. + * 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 ResultSet object as a - * java.io.Reader object. - * - * @return a java.io.Reader object that contains the column - * value; if the value is SQL NULL, the value returned is - * null. + * 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 java.io.Reader + * @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 ResultSet object as a - * java.math.BigDecimal 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 NULL, the value returned is - * null. + * 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 ResultSet object as a - * java.math.BigDecimal 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 NULL, the value returned is - * null. + * 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 ResultSet object. - * - * @return true if the cursor is before the first row; - * false 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 ResultSet object. - * - * @return true if the cursor is after the last row; - * false 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 ResultSet object. - * - * @return true if the cursor is on the first row; - * false 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 ResultSet object. - * Note: Calling the method isLast 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 true if the cursor is on the last row; - * false 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 ResultSet 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 TYPE_FORWARD_ONLY, + * (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 ResultSet 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 TYPE_FORWARD_ONLY, + * (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 ResultSet object. - * - * @return true if the cursor is on a valid row; - * false 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 TYPE_FORWARD_ONLY, + * (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 ResultSet object. - * - * @return true if the cursor is on a valid row; - * false 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 TYPE_FORWARD_ONLY, + * (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; 0 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 ResultSet object. + * this rowset's internal {@code ResultSet} object. * *

    If the row number is positive, the cursor moves to * the given row number with respect to the @@ -1937,23 +1937,23 @@ *

    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 - * absolute(-1) positions the - * cursor on the last row, calling the method absolute(-2) + * {@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. * *

    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. * - *

    Note: Calling absolute(1) is the same - * as calling first(). Calling absolute(-1) - * is the same as calling last(). - * - * @return true if the cursor is on the result set; - * false otherwise + *

    Note: 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 0, (3) the result set - * type is TYPE_FORWARD_ONLY, 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 relative(0) is valid, but does + * the first/last row. Calling {@code relative(0)} is valid, but does * not change the cursor position. * - *

    Note: Calling the method relative(1) - * is different from calling the method next() - * because is makes sense to call next() when there + *

    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 true if the cursor is on a row; - * false 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 TYPE_FORWARD_ONLY, 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 - * ResultSet object. - * - *

    Note: Calling the method previous() is not the same as - * calling the method relative(-1) because it - * makes sense to call previous() when there is no current row. - * - * @return true if the cursor is on a valid row; - * false if it is off the result set + * {@code ResultSet} object. + * + *

    Note: 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 TYPE_FORWARD_ONLY, + * (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 - * ResultSet object will be processed. + * {@code ResultSet} object will be processed. * The initial value is determined by the - * Statement object - * that produced this rowset's ResultSet 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 TYPE_FORWARD_ONLY - * and the fetch direction is not FETCH_FORWARD, + * (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 - * ResultSet object. + * {@code ResultSet} object. * * @return the current fetch direction for this rowset's - * ResultSet 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 - * ResultSet 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 - * Statement 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 0 <= rows <= this.getMaxRows() 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 - * ResultSet object. - * - * @return the current fetch size for this rowset's ResultSet 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 ResultSet object. + * Returns the concurrency mode of this rowset's {@code ResultSet} object. * The concurrency used is determined by the - * Statement object that created the result set. - * - * @return the concurrency type, either CONCUR_READ_ONLY - * or CONCUR_UPDATABLE + * {@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 true 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 - * ResultSet object can detect visible inserts. - * - * @return true if a row has had an insertion - * and insertions are detected; false 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 ResultSet object can detect deletions. - * - * @return true if a row was deleted and deletions are detected; - * false 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 updateXXX methods are used to update column values in the - * current row or the insert row. The updateXXX methods do not - * update the underlying database; instead the updateRow - * or insertRow 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 boolean value. - * The updateXXX methods are used to update column values in the - * current row or the insert row. The updateXXX methods do not - * update the underlying database; instead the updateRow or - * insertRow 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 byte value. - * The updateXXX methods are used to update column values in the - * current row or the insert row. The updateXXX methods do not - * update the underlying database; instead the updateRow or - * insertRow 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 short value. - * The updateXXX methods are used to update column values in the - * current row or the insert row. The updateXXX methods do not - * update the underlying database; instead the updateRow or - * insertRow 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 int value. - * The updateXXX methods are used to update column values in the - * current row or the insert row. The updateXXX methods do not - * update the underlying database; instead the updateRow or - * insertRow 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 long value. - * The updateXXX methods are used to update column values in the - * current row or the insert row. The updateXXX methods do not - * update the underlying database; instead the updateRow or - * insertRow 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 float value. - * The updateXXX methods are used to update column values in the - * current row or the insert row. The updateXXX methods do not - * update the underlying database; instead the updateRow or - * insertRow 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 double value. - * The updateXXX methods are used to update column values in the - * current row or the insert row. The updateXXX methods do not - * update the underlying database; instead the updateRow or - * insertRow 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 java.math.BigDecimal + * Updates the designated column with a {@code java.math.BigDecimal} * value. - * The updateXXX methods are used to update column values in the - * current row or the insert row. The updateXXX methods do not - * update the underlying database; instead the updateRow or - * insertRow 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 String value. - * The updateXXX methods are used to update column values in the - * current row or the insert row. The updateXXX methods do not - * update the underlying database; instead the updateRow or - * insertRow 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 byte array value. - * The updateXXX methods are used to update column values in the - * current row or the insert row. The updateXXX methods do not - * update the underlying database; instead the updateRow or - * insertRow 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 java.sql.Date value. - * The updateXXX methods are used to update column values in the - * current row or the insert row. The updateXXX methods do not - * update the underlying database; instead the updateRow or - * insertRow 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 java.sql.Time value. - * The updateXXX methods are used to update column values in the - * current row or the insert row. The updateXXX methods do not - * update the underlying database; instead the updateRow or - * insertRow 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 java.sql.Timestamp + * Updates the designated column with a {@code java.sql.Timestamp} * value. - * The updateXXX methods are used to update column values in the - * current row or the insert row. The updateXXX methods do not - * update the underlying database; instead the updateRow or - * insertRow 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 updateXXX methods are used to update column values in the - * current row or the insert row. The updateXXX methods do not - * update the underlying database; instead the updateRow or - * insertRow 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 updateXXX methods are used to update column values in the - * current row or the insert row. The updateXXX methods do not - * update the underlying database; instead the updateRow or - * insertRow 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 updateXXX methods are used to update column values in the - * current row or the insert row. The updateXXX methods do not - * update the underlying database; instead the updateRow or - * insertRow 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 Object value. - * The updateXXX methods are used to update column values in the - * current row or the insert row. The updateXXX methods do not - * update the underlying database; instead the updateRow or - * insertRow 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 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. + * @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 Object value. - * The updateXXX methods are used to update column values in the - * current row or the insert row. The updateXXX methods do not - * update the underlying database; instead the updateRow or - * insertRow 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 null value. - * The updateXXX methods are used to update column values in the - * current row or the insert row. The updateXXX methods do not - * update the underlying database; instead the updateRow or - * insertRow 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 boolean value. - * The updateXXX methods are used to update column values in the - * current row or the insert row. The updateXXX methods do not - * update the underlying database; instead the updateRow or - * insertRow 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 byte value. - * The updateXXX methods are used to update column values in the - * current row or the insert row. The updateXXX methods do not - * update the underlying database; instead the updateRow or - * insertRow 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 short value. - * The updateXXX methods are used to update column values in the - * current row or the insert row. The updateXXX methods do not - * update the underlying database; instead the updateRow or - * insertRow 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 int value. - * The updateXXX methods are used to update column values in the - * current row or the insert row. The updateXXX methods do not - * update the underlying database; instead the updateRow or - * insertRow 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 long value. - * The updateXXX methods are used to update column values in the - * current row or the insert row. The updateXXX methods do not - * update the underlying database; instead the updateRow or - * insertRow 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 float value. - * The updateXXX methods are used to update column values in the - * current row or the insert row. The updateXXX methods do not - * update the underlying database; instead the updateRow or - * insertRow 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 double value. - * The updateXXX methods are used to update column values in the - * current row or the insert row. The updateXXX methods do not - * update the underlying database; instead the updateRow or - * insertRow 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 java.sql.BigDecimal + * Updates the designated column with a {@code java.sql.BigDecimal} * value. - * The updateXXX methods are used to update column values in the - * current row or the insert row. The updateXXX methods do not - * update the underlying database; instead the updateRow or - * insertRow 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 String value. - * The updateXXX methods are used to update column values in the - * current row or the insert row. The updateXXX methods do not - * update the underlying database; instead the updateRow or - * insertRow 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 boolean value. - * The updateXXX methods are used to update column values in the - * current row or the insert row. The updateXXX methods do not - * update the underlying database; instead the updateRow or - * insertRow 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 updateXXX methods are used to update column values in the - * current row, or the insert row. The updateXXX methods do not - * update the underlying database; instead the updateRow or insertRow + * 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 java.sql.Date value. - * The updateXXX methods are used to update column values in the - * current row or the insert row. The updateXXX methods do not - * update the underlying database; instead the updateRow or - * insertRow 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 java.sql.Time value. - * The updateXXX methods are used to update column values in the - * current row or the insert row. The updateXXX methods do not - * update the underlying database; instead the updateRow or - * insertRow 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 java.sql.Timestamp + * Updates the designated column with a {@code java.sql.Timestamp} * value. - * The updateXXX methods are used to update column values in the - * current row or the insert row. The updateXXX methods do not - * update the underlying database; instead the updateRow or - * insertRow 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 updateXXX methods are used to update column values in the - * current row or the insert row. The updateXXX methods do not - * update the underlying database; instead the updateRow or - * insertRow 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 updateXXX methods are used to update column values in the - * current row or the insert row. The updateXXX methods do not - * update the underlying database; instead the updateRow or - * insertRow 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 updateXXX methods are used to update column values - * in the current row or the insert row. The updateXXX + * 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 - * updateRow or insertRow 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 Reader 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 Object value. - * The updateXXX methods are used to update column values in the - * current row or the insert row. The updateXXX methods do not - * update the underlying database; instead the updateRow or - * insertRow 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 java.sql.Types.DECIMAL - * or java.sql.Types.NUMERIC 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 Object value. - * The updateXXX methods are used to update column values in the - * current row or the insert row. The updateXXX methods do not - * update the underlying database; instead the updateRow or - * insertRow 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 - * ResultSet 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 ResultSet 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 ResultSet.CONCUR_READ_ONLY, 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 ResultSet 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 ResultSet.CONCUR_READ_ONLY, 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 ResultSet + * 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. * - *

    The refreshRow method provides a way for an + *

    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 - * refreshRow 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. * *

    All values are refetched subject to the transaction isolation - * level and cursor sensitivity. If refreshRow is called after - * calling an updateXXX method, but before calling - * the method updateRow, 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 - * refreshRow 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 - * ResultSet 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 - * updateXXX method(s) and before calling - * the method updateRow 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 - * updateRow 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 updateXXX methods prior to + * be constructed by calling the {@code updateXXX} methods prior to * inserting the row into the result set. * - * Only the updateXXX, getXXX, - * and insertRow 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 insertRow. - * An updateXXX method must be called before a - * getXXX 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 ResultSet 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 ResultSet 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 Statement object that produced this - * ResultSet 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 - * DatabaseMetaData method, this method returns - * null. - * - * @return the Statement object that produced - * this rowset's ResultSet object or null + * {@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 ResultSet object as an Object. - * This method uses the given Map 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 java.util.Map object that contains the mapping - * from SQL type names to classes in the Java programming language - * @return an Object 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 ResultSet object as a Ref 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 Ref object representing an SQL REF 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 ResultSet object as a Blob 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 Blob object representing the SQL BLOB + * @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 ResultSet object as a Clob 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 Clob object representing the SQL CLOB + * @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 ResultSet object as an Array 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 Array object representing the SQL ARRAY + * @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 ResultSet object as an Object. - * This method uses the specified Map 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 java.util.Map 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 Object 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 ResultSet object as a Ref object. + * of this rowset's {@code ResultSet} object as a {@code Ref} object. * * @param colName the column name - * @return a Ref object representing the SQL REF 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 ResultSet object as a Blob 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 Blob object representing the SQL BLOB + * @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 ResultSet object as a Clob 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 Clob object representing the SQL CLOB + * @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 ResultSet object as an Array 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 Array object representing the SQL ARRAY + * @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 ResultSet object as a java.sql.Date + * 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 java.util.Calendar object + * @param cal the {@code java.util.Calendar} object * to use in constructing the date - * @return the column value as a java.sql.Date object; - * if the value is SQL NULL, - * the value returned is null + * @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 ResultSet object as a java.sql.Date + * 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 java.util.Calendar object + * @param cal the {@code java.util.Calendar} object * to use in constructing the date - * @return the column value as a java.sql.Date object; - * if the value is SQL NULL, - * the value returned is null + * @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 ResultSet object as a java.sql.Time + * 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 java.util.Calendar object + * @param cal the {@code java.util.Calendar} object * to use in constructing the time - * @return the column value as a java.sql.Time object; - * if the value is SQL NULL, - * the value returned is null 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 ResultSet object as a java.sql.Time + * 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 java.util.Calendar object + * @param cal the {@code java.util.Calendar} object * to use in constructing the time - * @return the column value as a java.sql.Time object; - * if the value is SQL NULL, - * the value returned is null 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 ResultSet object as a - * java.sql.Timestamp 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 java.util.Calendar object + * @param cal the {@code java.util.Calendar} object * to use in constructing the timestamp - * @return the column value as a java.sql.Timestamp object; - * if the value is SQL NULL, - * the value returned is null + * @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 ResultSet object as a - * java.sql.Timestamp 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 java.util.Calendar object + * @param cal the {@code java.util.Calendar} object * to use in constructing the timestamp - * @return the column value as a java.sql.Timestamp object; - * if the value is SQL NULL, - * the value returned is null + * @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 JdbcRowSetImpl object with the given - * double 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 1, the second - * is 2, and so on; must be 1 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 Ref 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 - * ResultSet.CONCUR_READ_ONLY + * {@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 JdbcRowSetImpl object with the given - * double 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 String 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 ResultSet.CONCUR_READ_ONLY + * 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 JdbcRowSetImpl object with the given - * double 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 1, the second - * is 2, and so on; must be 1 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 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 - * ResultSet.CONCUR_READ_ONLY + * {@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 JdbcRowSetImpl object with the given - * double 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 String 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 Clob 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 ResultSet.CONCUR_READ_ONLY + * 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 JdbcRowSetImpl object with the given - * java.sql.Blob 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 1, the second - * is 2, and so on; must be 1 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 Blob 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 - * ResultSet.CONCUR_READ_ONLY + * {@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 JdbcRowSetImpl object with the given - * java.sql.Blob 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 String 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 Blob 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 ResultSet.CONCUR_READ_ONLY + * 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 JdbcRowSetImpl object with the given - * java.sql.Array 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 1, the second - * is 2, and so on; must be 1 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 Array 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 - * ResultSet.CONCUR_READ_ONLY + * {@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 JdbcRowSetImpl object with the given - * java.sql.Array 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 String 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 Array 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 ResultSet.CONCUR_READ_ONLY + * 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 - * JdbcRowSetImpl + * {@code JdbcRowSetImpl} */ public RowSetWarning getRowSetWarnings() throws SQLException { return null; } /** * Unsets the designated parameter to the given int array. - * This was set using setMatchColumn + * This was set using {@code setMatchColumn} * as the column which will form the basis of the join. *

    * 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 setMatchColumn(int []) + * 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 setMatchColumn + * This was set using {@code setMatchColumn} * as the column which will form the basis of the join. *

    * 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 setMatchColumn(String []) + * 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 String array - * that was set using setMatchColumn(String []) + * Retrieves the column name as {@code String} array + * that was set using {@code setMatchColumn(String [])} * for this rowset. * - * @return a String 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 int array that was set using - * setMatchColumn(int []) for this rowset. - * - * @return a int 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 - * JoinRowSet as the column which will form the basis of the + * {@code JoinRowSet} as the column which will form the basis of the * join. *

    * 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 getMatchColumnIndexes 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 - * 0 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 - * JoinRowSet as the column which will form the basis of the + * {@code JoinRowSet} as the column which will form the basis of the * join. *

    * 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 getMatchColumn 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 int + /** + * Sets the designated parameter to the given {@code int} * object. This forms the basis of the join for the - * JoinRowSet as the column which will form the basis of the + * {@code JoinRowSet} as the column which will form the basis of the * join. *

    * 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 getMatchColumn 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 - * 0 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 String + * Sets the designated parameter to the given {@code String} * object. This forms the basis of the join for the - * JoinRowSet as the column which will form the basis of the + * {@code JoinRowSet} as the column which will form the basis of the * join. *

    * 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 getMatchColumn 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 int - * object. This was set using setMatchColumn + * 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. *

    * 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 setMatchColumn(int) + * 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 String - * object. This was set using setMatchColumn + * 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. *

    * 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 setMatchColumn(String) + * 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 DatabaseMetaData associated with + * Retrieves the {@code DatabaseMetaData} associated with * the connection handle associated with this - * JdbcRowSet object. - * - * @return the DatabaseMetadata 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 ParameterMetaData associated with + * Retrieves the {@code ParameterMetaData} associated with * the connection handle associated with this - * JdbcRowSet object. - * - * @return the ParameterMetadata 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 JdbcRowSet object by - * wrapping the internal Connection object and calling - * its commit method. - * This method sets this JdbcRowSet object's private field - * rs to null after saving its value to another - * object, but only if the ResultSet - * constant HOLD_CURSORS_OVER_COMMIT has not been set. - * (The field rs is this JdbcRowSet object's - * ResultSet 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 Connection object with this - * JdbcRowSet + * 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 JdbcRowSet. + * 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 JdbcRowSet object by - * wrapping the internal Connection object and calling its - * rollback method. - * This method sets this JdbcRowSet object's private field - * rs to null after saving its value to another object. - * (The field rs is this JdbcRowSet object's - * internal ResultSet 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 JdbcRowSet back to the - * last Savepoint transaction marker. Wraps the internal - * Connection object and call it's rollback method - * - * @param s the Savepoint 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 JdbcRowSet object's Connection property - * - * - * @return the Connection 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 JdbcRowSet object's connection property - * to the given Connection object. - * - * @param connection the Connection 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 JdbcRowSet object's PreparedStatement property - * - * - * @return the PreparedStatement 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 JdbcRowSet object's preparedtsatement property - * to the given PreparedStatemennt object. - * - * @param preparedStatement the PreparedStatement 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 JdbcRowSet object's ResultSet property - * - * - * @return the ResultSet 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 JdbcRowSet object's resultset property - * to the given ResultSet object. - * - * @param resultSet the ResultSet 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 JdbcRowSet object's command property to - * the given String 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 command 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 String object supplied, - * this method sets this JdbcRowSet object's private fields - * ps and rs to null. - * (The field ps is its PreparedStatement object, and - * the field rs is its ResultSet 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.) *

    - * The command property may not be needed if the RowSet + * 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 null. - * - * @param command a String object containing an SQL query - * that will be set as this RowSet object's command - * property; may be null 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 dataSourceName property for this JdbcRowSet - * object to the given logical name and sets this JdbcRowSet object's - * Url property to null. In addition, if the dataSourceName + * 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 JdbcRowSet object's private fields - * ps, rs, and conn to null. - * (The field ps is its PreparedStatement object, - * the field rs is its ResultSet object, and - * the field conn is its Connection 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.) *

    * The name supplied to this method must have been bound to a - * DataSource 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 - * DataSource object bound to it. The DataSource + * {@code DataSource} object bound to it. The {@code DataSource} * object can then be used to establish a connection to the data source it * represents. *

    * 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 String 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 - * DataSource object that can be used to get a connection; - * may be null + * {@code DataSource} object that can be used to get a connection; + * may be {@code null} * @throws SQLException if there is a problem setting the - * dataSourceName property + * {@code dataSourceName} property * @see #getDataSourceName */ public void setDataSourceName(String dsName) throws SQLException{ @@ -4310,42 +4310,42 @@ /** - * Sets the Url property for this JdbcRowSet object - * to the given String object and sets the dataSource name - * property to null. In addition, if the Url property has - * previously been set to a non null 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 JdbcRowSet object's private fields - * ps, rs, and conn to null. - * (The field ps is its PreparedStatement object, - * the field rs is its ResultSet object, and - * the field conn is its Connection 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.) *

    * 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 DriverManager. + * ("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 String object except - * one with a length of 0 (an empty string). + * a driver vendor can specify any {@code String} object except + * one with a length of {@code 0} (an empty string). *

    * Setting the Url property is optional if connections are established using - * a DataSource object instead of the DriverManager. + * 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 - * RowSet object to connect to a database. The RowSet + * {@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 String 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 - * RowSet object; may be null 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 0 (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 JdbcRowSet 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 execute. In addition, - * if the username property is already set with a - * non-null value and that value is different from the String + * 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 JdbcRowSet object's private fields - * ps, rs, and conn to null. - * (The field ps is its PreparedStatement object, - * rs is its ResultSet object, and - * conn is its Connection object.) - * Setting these fields to null 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 String 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 JdbcRowSet object - * to the given String 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 execute. Its default valus is - * null. In addition, - * if the password 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 JdbcRowSet object's private fields - * ps, rs, and conn to null. - * (The field ps is its PreparedStatement object, - * rs is its ResultSet object, and - * conn is its Connection object.) - * Setting these fields to null 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 String 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 RowSet object to the specified type. - * The default type is ResultSet.TYPE_SCROLL_INSENSITIVE. + * 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: - * ResultSet.TYPE_FORWARD_ONLY, - * ResultSet.TYPE_SCROLL_INSENSITIVE, or - * ResultSet.TYPE_SCROLL_SENSITIVE + * {@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: - * ResultSet.TYPE_FORWARD_ONLY or - * ResultSet.TYPE_SCROLL_INSENSITIVE - * ResultSet.TYPE_SCROLL_SENSITIVE + * {@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 RowSet object to - * the specified concurrency. The default concurrency for any RowSet - * object (connected or disconnected) is ResultSet.CONCUR_UPDATABLE, + * 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: - * ResultSet.CONCUR_READ_ONLY or - * ResultSet.CONCUR_UPDATABLE + * {@code ResultSet.CONCUR_READ_ONLY} or + * {@code ResultSet.CONCUR_UPDATABLE} * @throws SQLException if the parameter supplied is not one of the * following constants: - * ResultSet.CONCUR_UPDATABLE or - * ResultSet.CONCUR_READ_ONLY + * {@code ResultSet.CONCUR_UPDATABLE} or + * {@code ResultSet.CONCUR_READ_ONLY} * @see #getConcurrency * @see #isReadOnly */ @@ -4500,8 +4500,8 @@ } /** - * Retrieves the value of the designated SQL XML parameter as a - * SQLXML 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 SQL XML parameter as a - * SQLXML 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 - * ResultSet 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 NULL the - * value returned is null + * @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 - * ResultSet 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 NULL the - * value returned is null + * @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 RowId 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 updateRow or insertRow 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 RowId 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 updateRow or insertRow 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 NCLOB type that maps - * to java.sql.Types.NCLOB + * 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 NCLOB type that maps - * to java.sql.Types.NCLOB + * 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 ResultSet object as a NClob 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 NClob object representing the SQL - * NCLOB 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 ResultSet object as a NClob 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 NClob object representing the SQL NCLOB + * @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 java.sql.SQLXML object. The driver converts this to an - * SQL XML 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 SQLXML object that maps an SQL XML 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 java.sql.SQLXML object. The driver converts this to an - * SQL XML 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 SQLXML object that maps an SQL XML 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 java.sql.RowId object. The - * driver converts this to a SQL ROWID 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 java.sql.RowId object. The - * driver converts this to a SQL ROWID 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 String object. - * The driver converts this to a SQL NCHAR or - * NVARCHAR or LONGNVARCHAR 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 NVARCHAR 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 RowSet object's command - * to a Reader object. The - * Reader 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. *

    Note: Consult your JDBC driver documentation to determine if * it might be more efficient to use a version of - * setNCharacterStream 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 PreparedStatement + * 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 java.sql.NClob object. The object - * implements the java.sql.NClob interface. This NClob - * object maps to a SQL NCLOB. + * 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 ResultSet object as a - * java.io.Reader object. + * of this {@code ResultSet} object as a + * {@code java.io.Reader} object. * It is intended for use when - * accessing NCHAR,NVARCHAR - * and LONGNVARCHAR columns. - * - * @return a java.io.Reader object that contains the column - * value; if the value is SQL NULL, the value returned is - * null 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 ResultSet object as a - * java.io.Reader object. + * of this {@code ResultSet} object as a + * {@code java.io.Reader} object. * It is intended for use when - * accessing NCHAR,NVARCHAR - * and LONGNVARCHAR columns. + * accessing {@code NCHAR},{@code NVARCHAR} + * and {@code LONGNVARCHAR} columns. * * @param columnName the name of the column - * @return a java.io.Reader object that contains the column - * value; if the value is SQL NULL, the value returned is - * null 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 java.sql.SQLXML 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 updateRow or insertRow 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 java.sql.SQLXML 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 updateRow or insertRow 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 ResultSet object as - * a String 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 NCHAR,NVARCHAR - * and LONGNVARCHAR 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 NULL, the - * value returned is null + * @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 ResultSet object as - * a String 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 NCHAR,NVARCHAR - * and LONGNVARCHAR 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 NULL, the - * value returned is null + * @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 NCHAR,NVARCHAR - * and LONGNVARCHAR 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 updateRow or - * insertRow 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. * *

    Note: Consult your JDBC driver documentation to determine if * it might be more efficient to use a version of - * updateNCharacterStream 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 CONCUR_READ_ONLY 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 NCHAR,NVARCHAR - * and LONGNVARCHAR 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 updateRow or - * insertRow 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. * *

    Note: Consult your JDBC driver documentation to determine if * it might be more efficient to use a version of - * 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 la -bel is the name of the column - * @param reader the java.io.Reader 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 CONCUR_READ_ONLY 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 LONGVARCHAR + * When a very large ASCII value is input to a {@code LONGVARCHAR} * parameter, it may be more practical to send it via a - * java.io.InputStream. 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 @@ *

    * 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. + * 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 CONCUR_READ_ONLY - * 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 LONGVARCHAR + * When a very large ASCII value is input to a {@code LONGVARCHAR} * parameter, it may be more practical to send it via a - * java.io.InputStream. 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 @@ *

    * 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. - * - * @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 CONCUR_READ_ONLY - * 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 LONGVARCHAR + * When a very large ASCII value is input to a {@code LONGVARCHAR} * parameter, it may be more practical to send it via a - * java.io.InputStream. 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. * - *

    Note: Consult your JDBC driver documentation to determine if + *

    Note: Consult your JDBC driver documentation to determine if * it might be more efficient to use a version of - * updateBlob which takes a length parameter. + * {@code updateBlob} which takes a length parameter. *

    * 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. + * 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 CONCUR_READ_ONLY - * 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 LONGVARCHAR + * When a very large ASCII value is input to a {@code LONGVARCHAR} * parameter, it may be more practical to send it via a - * java.io.InputStream. 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. *

    Note: Consult your JDBC driver documentation to determine if * it might be more efficient to use a version of - * updateBlob which takes a length parameter. + * {@code updateBlob} which takes a length parameter. *

    * 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. - * - * @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 CONCUR_READ_ONLY - * 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 Reader + * 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 LONGVARCHAR + * When a very large UNICODE value is input to a {@code LONGVARCHAR} * parameter, it may be more practical to send it via a - * java.io.Reader 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 @@ *

    * 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. + * 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 CONCUR_READ_ONLY - * 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 Reader + * 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 LONGVARCHAR + * When a very large UNICODE value is input to a {@code LONGVARCHAR} * parameter, it may be more practical to send it via a - * java.io.Reader 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 @@ *

    * 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. - * - * @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 CONCUR_READ_ONLY - * 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 Reader + * Updates the designated column using the given {@code Reader} * object. - * When a very large UNICODE value is input to a LONGVARCHAR + * When a very large UNICODE value is input to a {@code LONGVARCHAR} * parameter, it may be more practical to send it via a - * java.io.Reader 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. * *

    Note: This stream object can either be a standard * Java stream object or your own subclass that implements the * standard interface. - *

    Note: Consult your JDBC driver documentation to determine if + *

    Note: Consult your JDBC driver documentation to determine if * it might be more efficient to use a version of - * updateClob which takes a length parameter. + * {@code updateClob} which takes a length parameter. *

    * 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. + * 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 CONCUR_READ_ONLY - * 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 Reader + * Updates the designated column using the given {@code Reader} * object. - * When a very large UNICODE value is input to a LONGVARCHAR + * When a very large UNICODE value is input to a {@code LONGVARCHAR} * parameter, it may be more practical to send it via a - * java.io.Reader 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. * *

    Note: This stream object can either be a standard * Java stream object or your own subclass that implements the * standard interface. - *

    Note: Consult your JDBC driver documentation to determine if + *

    Note: Consult your JDBC driver documentation to determine if * it might be more efficient to use a version of - * updateClob which takes a length parameter. + * {@code updateClob} which takes a length parameter. *

    * 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. - * - * @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 CONCUR_READ_ONLY - * 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 Reader + * 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 LONGVARCHAR + * When a very large UNICODE value is input to a {@code LONGVARCHAR} * parameter, it may be more practical to send it via a - * java.io.Reader 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 @@ *

    * 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. + * 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 CONCUR_READ_ONLY + * 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 Reader + * 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 LONGVARCHAR + * When a very large UNICODE value is input to a {@code LONGVARCHAR} * parameter, it may be more practical to send it via a - * java.io.Reader 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 @@ *

    * 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. - * - * @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 CONCUR_READ_ONLY + * 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 Reader + * Updates the designated column using the given {@code Reader} * object. - * When a very large UNICODE value is input to a LONGVARCHAR + * When a very large UNICODE value is input to a {@code LONGVARCHAR} * parameter, it may be more practical to send it via a - * java.io.Reader 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. *

    Note: Consult your JDBC driver documentation to determine if * it might be more efficient to use a version of - * updateNClob which takes a length parameter. + * {@code updateNClob} which takes a length parameter. *

    * 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. + * 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 CONCUR_READ_ONLY + * 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 Reader + * Updates the designated column using the given {@code Reader} * object. - * When a very large UNICODE value is input to a LONGVARCHAR + * When a very large UNICODE value is input to a {@code LONGVARCHAR} * parameter, it may be more practical to send it via a - * java.io.Reader 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. *

    Note: Consult your JDBC driver documentation to determine if * it might be more efficient to use a version of - * updateNClob which takes a length parameter. + * {@code updateNClob} which takes a length parameter. *

    * 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. - * - * @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 CONCUR_READ_ONLY + * 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 updateRow or - * insertRow 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 CONCUR_READ_ONLY - * 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 updateRow or - * insertRow 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 CONCUR_READ_ONLY - * 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 updateRow or - * insertRow 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 CONCUR_READ_ONLY - * 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 updateRow or - * 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 + * 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 CONCUR_READ_ONLY - * 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 updateRow or - * insertRow 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. * *

    Note: Consult your JDBC driver documentation to determine if * it might be more efficient to use a version of - * updateAsciiStream 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 CONCUR_READ_ONLY - * 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 updateRow or - * insertRow 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. * *

    Note: Consult your JDBC driver documentation to determine if * it might be more efficient to use a version of - * 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 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 CONCUR_READ_ONLY - * 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 updateRow or - * 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 + * 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 CONCUR_READ_ONLY - * 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 updateRow or - * insertRow 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. * *

    Note: Consult your JDBC driver documentation to determine if * it might be more efficient to use a version of - * updateBinaryStream 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 CONCUR_READ_ONLY - * 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 updateRow or - * insertRow 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. * *

    Note: Consult your JDBC driver documentation to determine if * it might be more efficient to use a version of - * 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 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 CONCUR_READ_ONLY - * 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 updateRow or - * 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 java.io.Reader 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 CONCUR_READ_ONLY - * 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 updateRow or - * insertRow 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. * *

    Note: Consult your JDBC driver documentation to determine if * it might be more efficient to use a version of - * updateCharacterStream 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 CONCUR_READ_ONLY - * 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 updateRow or - * insertRow 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. * *

    Note: Consult your JDBC driver documentation to determine if * it might be more efficient to use a version of - * 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 la -bel is the name of the column - * @param reader the java.io.Reader 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 CONCUR_READ_ONLY - * 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 java.net.URL value. - * The driver converts this to an SQL DATALINK value - * when it sends it to the database. - * - * @param parameterIndex the first parameter is 1, the second is 2, ... - * @param x the java.net.URL object to be set - * @exception SQLException if a database access error occurs or - * this method is called on a closed PreparedStatement - * @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 Reader object. - * This method differs from the setCharacterStream (int, Reader) method - * because it informs the driver that the parameter value should be sent to - * the server as a NCLOB. When the 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 LONGNVARCHAR or a NCLOB - *

    Note: Consult your JDBC driver documentation to determine if - * it might be more efficient to use a version of - * 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 PreparedStatement - * @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} + *

    Note: 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 Reader object. The reader must contain the number - * of characters specified by length otherwise a SQLException will be - * generated when the CallableStatement is executed. - * This method differs from the setCharacterStream (int, Reader, int) method - * because it informs the driver that the parameter value should be sent to - * the server as a NCLOB. When the 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 LONGNVARCHAR or a 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 CallableStatement - * @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 Reader object. - * This method differs from the setCharacterStream (int, Reader) 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 NCLOB. When the setCharacterStream 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 LONGNVARCHAR or a NCLOB + * data should be send to the server as a {@code LONGNVARCHAR} or a {@code NCLOB} *

    Note: Consult your JDBC driver documentation to determine if * it might be more efficient to use a version of - * setNClob 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 CallableStatement + * 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 SQLException will becontain the number - * generated when the PreparedStatement is executed. - * This method differs from the setCharacterStream (int, Reader, int) 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 NCLOB. When the setCharacterStream 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 LONGNVARCHAR or a NCLOB + * 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 PreparedStatement + * 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 java.sql.NClob object. The driver converts this to -a - * SQL NCLOB 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 String object. - * The driver converts this to a SQL NCHAR or - * NVARCHAR or LONGNVARCHAR + * 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 Reader object. The - * Reader 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 Reader object. The - * Reader 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 Reader object. The - * Reader 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. *

    Note: Consult your JDBC driver documentation to determine if * it might be more efficient to use a version of - * setNCharacterStream 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 CallableStatement + * 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 java.sql.Timestamp value, - * using the given Calendar object. The driver uses - * the Calendar object to construct an SQL TIMESTAMP 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 Calendar 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 - * Calendar 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 Calendar 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 CallableStatement + * 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 Reader object. The reader must contain the number - * of characters specified by length otherwise a SQLException will be - * generated when the CallableStatement is executed. - * This method differs from the setCharacterStream (int, Reader, int) method - * because it informs the driver that the parameter value should be sent to - * the server as a CLOB. When the 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 LONGVARCHAR or a 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 CallableStatement - * @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 java.sql.Clob object. - * The driver converts this to an SQL CLOB 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 Clob object that maps an SQL CLOB 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 CallableStatement + * 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 Reader object. - * This method differs from the setCharacterStream (int, Reader) 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 CLOB. When the setCharacterStream 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 LONGVARCHAR or a CLOB + * data should be send to the server as a {@code LONGVARCHAR} or a {@code CLOB} * *

    Note: Consult your JDBC driver documentation to determine if * it might be more efficient to use a version of - * setClob 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 CallableStatement + * 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 java.sql.Date 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 DATE 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 CallableStatement + * 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 java.sql.Date value, - * using the given Calendar object. The driver uses - * the Calendar object to construct an SQL DATE 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 Calendar 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 - * Calendar 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 Calendar 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 CallableStatement + * 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 java.sql.Time value. + * Sets the designated parameter to the given {@code java.sql.Time} value. * The driver converts this - * to an SQL TIME 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 CallableStatement + * 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 java.sql.Time value, - * using the given Calendar object. The driver uses - * the Calendar object to construct an SQL TIME 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 Calendar 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 - * Calendar 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 Calendar 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 CallableStatement + * 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 Reader object. - * This method differs from the setCharacterStream (int, Reader) 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 CLOB. When the setCharacterStream 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 LONGVARCHAR or a CLOB + * data should be sent to the server as a {@code LONGVARCHAR} or a {@code CLOB} * *

    Note: Consult your JDBC driver documentation to determine if * it might be more efficient to use a version of - * setClob 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 PreparedStatementor 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 Reader object. The reader must contain the number - * of characters specified by length otherwise a SQLException will be - * generated when the PreparedStatement is executed. - *This method differs from the setCharacterStream (int, Reader, int) 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 CLOB. When the setCharacterStream 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 LONGVARCHAR or a CLOB + * 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 PreparedStatement, 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 InputStream object. The inputstream must contain the number - * of characters specified by length otherwise a SQLException will be - * generated when the PreparedStatement is executed. - * This method differs from the setBinaryStream (int, InputStream, int) + /** + * 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 BLOB. When the setBinaryStream 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 LONGVARBINARY or a BLOB + * 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 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. + * 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 InputStream object. - * This method differs from the setBinaryStream (int, InputStream) - * This method differs from the setBinaryStream (int, InputStream) + * 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 BLOB. When the setBinaryStream 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 LONGVARBINARY or a BLOB + * data should be sent to the server as a {@code LONGVARBINARY} or a {@code BLOB} * *

    Note: Consult your JDBC driver documentation to determine if * it might be more efficient to use a version of - * setBlob 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 PreparedStatement 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 InputStream object. The inputstream must contain the number - * of characters specified by length, otherwise a SQLException will be - * generated when the CallableStatement is executed. - * This method differs from the setBinaryStream (int, InputStream, int) - * method because it informs the driver that the parameter value should be - * sent to the server as a BLOB. When the 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 LONGVARBINARY or a 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 CallableStatement - * @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 java.sql.Blob object. - * The driver converts this to an SQL BLOB 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 Blob object that maps an SQL BLOB 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 CallableStatement + * 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 InputStream object. - * This method differs from the setBinaryStream (int, InputStream) + /** + * 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 BLOB. When the setBinaryStream 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 LONGVARBINARY or a BLOB + * data should be send to the server as a {@code LONGVARBINARY} or a {@code BLOB} * *

    Note: Consult your JDBC driver documentation to determine if * it might be more efficient to use a version of - * setBlob 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 CallableStatement + * 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 - * java.lang equivalent objects should be used. + * {@code java.lang} equivalent objects should be used. * *

    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 SQLData), - * the JDBC driver should call the method SQLData.writeSQL 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 - * Ref, Blob, Clob, NClob, - * Struct, java.net.URL, - * or Array, 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. *

    * 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 CallableStatement - * @exception SQLFeatureNotSupportedException if targetSqlType is - * a ARRAY, BLOB, CLOB, - * DATALINK, JAVA_OBJECT, NCHAR, - * NCLOB, NVARCHAR, LONGNVARCHAR, - * REF, ROWID, SQLXML - * or STRUCT 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 setObject + * 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 CallableStatement - * @exception SQLFeatureNotSupportedException if targetSqlType is - * a ARRAY, BLOB, CLOB, - * DATALINK, JAVA_OBJECT, NCHAR, - * NCLOB, NVARCHAR, LONGNVARCHAR, - * REF, ROWID, SQLXML - * or STRUCT 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 Object; therefore, the - * java.lang 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. * *

    The JDBC specification specifies a standard mapping from - * Java Object 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 SQLData, - * the JDBC driver should call the method SQLData.writeSQL + * 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 - * Ref, Blob, Clob, NClob, - * Struct, java.net.URL, - * or Array, 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. *

    * 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 CallableStatement or if the given - * Object 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 LONGVARCHAR + * When a very large ASCII value is input to a {@code LONGVARCHAR} * parameter, it may be more practical to send it via a - * java.io.InputStream. 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 CallableStatement + * 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 LONGVARBINARY + * When a very large binary value is input to a {@code LONGVARBINARY} * parameter, it may be more practical to send it via a - * java.io.InputStream 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. * *

    Note: 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 CallableStatement + * 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 Reader + * 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 LONGVARCHAR + * When a very large UNICODE value is input to a {@code LONGVARCHAR} * parameter, it may be more practical to send it via a - * java.io.Reader 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 java.io.Reader 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 CallableStatement + * 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 LONGVARCHAR + * When a very large ASCII value is input to a {@code LONGVARCHAR} * parameter, it may be more practical to send it via a - * java.io.InputStream. 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. *

    Note: Consult your JDBC driver documentation to determine if * it might be more efficient to use a version of - * setAsciiStream 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 CallableStatement + * 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 LONGVARBINARY + * When a very large binary value is input to a {@code LONGVARBINARY} * parameter, it may be more practical to send it via a - * java.io.InputStream 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. * *

    Note: This stream object can either be a standard @@ -6574,12 +6596,12 @@ * standard interface. *

    Note: Consult your JDBC driver documentation to determine if * it might be more efficient to use a version of - * setBinaryStream 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 CallableStatement + * 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 Reader + * Sets the designated parameter to the given {@code Reader} * object. - * When a very large UNICODE value is input to a LONGVARCHAR + * When a very large UNICODE value is input to a {@code LONGVARCHAR} * parameter, it may be more practical to send it via a - * java.io.Reader 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. *

    Note: Consult your JDBC driver documentation to determine if * it might be more efficient to use a version of - * setCharacterStream which takes a length parameter. + * {@code setCharacterStream} which takes a length parameter. * * @param parameterName the name of the parameter - * @param reader the java.io.Reader 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 CallableStatement + * 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 - * java.math.BigDecimal value. - * The driver converts this to an SQL NUMERIC 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 CallableStatement + * 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 String value. + /** + * Sets the designated parameter to the given Java {@code String} value. * The driver converts this - * to an SQL VARCHAR or LONGVARCHAR value + * to an SQL {@code VARCHAR} or {@code LONGVARCHAR} value * (depending on the argument's - * size relative to the driver's limits on VARCHAR 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 CallableStatement + * 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 VARBINARY or - * LONGVARBINARY (depending on the argument's size relative - * to the driver's limits on VARBINARY 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 CallableStatement + * 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 java.sql.Timestamp value. + * Sets the designated parameter to the given {@code java.sql.Timestamp} value. * The driver - * converts this to an SQL TIMESTAMP 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 CallableStatement + * 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 NULL. + * Sets the designated parameter to SQL {@code NULL}. * *

    Note: You must specify the parameter's SQL type. * * @param parameterName the name of the parameter - * @param sqlType the SQL type code defined in java.sql.Types + * @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 CallableStatement + * 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 NULL. - * This version of the method setNull 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 java.sql.Types + * @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 REF value + * SQL {@code REF} value * @exception SQLException if a database access error occurs or - * this method is called on a closed CallableStatement + * 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 boolean value. + * Sets the designated parameter to the given Java {@code boolean} value. * The driver converts this - * to an SQL BIT or BOOLEAN 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 CallableStatement + * 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 byte value. + * Sets the designated parameter to the given Java {@code byte} value. * The driver converts this - * to an SQL TINYINT 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 CallableStatement + * 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 short value. + * Sets the designated parameter to the given Java {@code short} value. * The driver converts this - * to an SQL SMALLINT 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 CallableStatement + * 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 int value. + * Sets the designated parameter to the given Java {@code int} value. * The driver converts this - * to an SQL INTEGER 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 CallableStatement + * 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 long value. + /** + * Sets the designated parameter to the given Java {@code long} value. * The driver converts this - * to an SQL BIGINT 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 CallableStatement + * 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 float value. + /** + * Sets the designated parameter to the given Java {@code float} value. * The driver converts this - * to an SQL FLOAT 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 CallableStatement + * 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 double value. + /** + * Sets the designated parameter to the given Java {@code double} value. * The driver converts this - * to an SQL DOUBLE 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 CallableStatement + * 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 diff -r 07cd15548b1b -r d24a2c340a47 jdk/src/java.sql.rowset/share/classes/com/sun/rowset/internal/CachedRowSetWriter.java --- 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 RIOptimisticProvider 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. *

    - * A CachedRowSetWriter object, called a writer, has the public - * method writeData 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 CachedRowSetReader 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 - * writeData. + * {@code writeData}. *

    - * Typically the SyncFactory manages the RowSetReader and - * the RowSetWriter implementations using SyncProvider 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 SyncProvider.getRowSetWriter() 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 Connection 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 SELECT command that this writer will call - * internally. The method initSQLStatements 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 UPDATE 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 initSQLStatements builds this String + * The method {@code initSQLStatements} builds this {@code String} * object. * * @serial @@ -96,8 +96,8 @@ private String updateCmd; /** - * The SQL WHERE clause the writer will use for update - * statements in the PreparedStatement 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 DELETE 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 WHERE clause the writer will use for delete - * statements in the PreparedStatement 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 INSERT INTO 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 - * initSQLStatements 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 CachedRowSet object - * for which this CachedRowSetWriter 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 PreparedStatement object that this + * placeholders in a {@code PreparedStatement} object that this * writer will execute. * * @serial @@ -150,33 +150,33 @@ private Object[] params; /** - * The CachedRowSetReader object that has been - * set as the reader for the CachedRowSet object - * for which this CachedRowSetWriter 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 ResultSetMetaData object that contains information - * about the columns in the CachedRowSet object - * for which this CachedRowSetWriter 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 CachedRowSet object - * for which this CachedRowSetWriter 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 CachedRowSet 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 RowSet object - * back to its underlying data source and returns true + * 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. *

    * This method is called by the rowset internally when - * the application invokes the method acceptChanges. - * The writeData 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 - * writeData does, much of which is accomplished + * {@code writeData} does, much of which is accomplished * through calls to its own internal methods. *

      - *
    1. Creates a CachedRowSet object from the given - * RowSet object + *
    2. Creates a {@code CachedRowSet} object from the given + * {@code RowSet} object *
    3. Makes a connection with the data source *
        *
      • Disables autocommit mode if it is not already disabled @@ -237,32 +237,32 @@ *
      *
    4. Checks to see if the reader has read new data since the writer * was last called and, if so, calls the method - * initSQLStatements to initialize new SQL statements + * {@code initSQLStatements} to initialize new SQL statements *
        - *
      • Builds new SELECT, UPDATE, - * INSERT, and DELETE statements - *
      • Uses the CachedRowSet object's metadata to + *
      • Builds new {@code SELECT}, {@code UPDATE}, + * {@code INSERT}, and {@code DELETE} statements + *
      • Uses the {@code CachedRowSet} object's metadata to * determine the table name, column names, and the columns * that make up the primary key *
      *
    5. When there is no conflict, propagates changes made to the - * CachedRowSet object back to its underlying data source + * {@code CachedRowSet} object back to its underlying data source *
        - *
      • Iterates through each row of the CachedRowSet object + *
      • Iterates through each row of the {@code CachedRowSet} object * to determine whether it has been updated, inserted, or deleted *
      • 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 *
      • If any data in the data source does not match the original values - * for the CachedRowSet 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. *
      *
    * - * @return true 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; - * false otherwise + * {@code false} otherwise */ public boolean writeData(RowSetInternal caller) throws SQLException { long conflicts = 0; @@ -434,25 +434,25 @@ } //end writeData -/** - * Updates the given CachedRowSet object's underlying data - * source so that updates to the rowset are reflected in the original - * data source, and returns false if the update was successful. - * A return value of 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. - *

    - * This method is called internally by the method writeData - * if a row in the CachedRowSet object for which this - * CachedRowSetWriter object is the writer has been updated. - * - * @return false if the update to the underlying data source is - * successful; true 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. + *

    + * 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 - * CachedRowSet object into the data source from which - * the rowset is derived, returning false 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 CachedRowSet 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 PreparedStatement object that will be used + * @param pstmt the {@code PreparedStatement} object that will be used * to execute the insertion - * @return false to indicate that the insertion was successful; - * true 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 CachedRowSet object - * and returns false if the deletion was successful. - *

    - * This method is called internally by this writer's 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 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 deleteOriginalRow - * returns true to indicate that there was a conflict. - * - * - * @return false if the deletion was successful, which means that - * there was no conflict; true 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. + *

    + * 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 SELECT, UPDATE, INSERT, - * and DELETE statement that can be used by this writer to - * write data to the data source backing the given CachedRowSet + * 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 CachedRowSet object for which this - * CachedRowSetWriter 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 DatabaseMetaData object that contains metadata - * about this writer's CachedRowSet object - * @param catalog a String 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 String 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 String 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 CachedRowSet object's - * params + * 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 buildWhereClause. + * values by the method {@code buildWhereClause}. *

    - * If the CachedRowSet object's keyCols - * field has length 0 or is null, 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 keyCols 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 CachedRowSet object for which this - * CachedRowSetWriter 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 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 WHERE clause can be added to - * a PreparedStatement object that updates, inserts, or - * deletes a row. - *

    - * This method uses the given result set to access values in the - * 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 - * PreparedStatement object that is sent to the - * CachedRowSet object's underlying data source. - * - * @param whereClause a String object that is an empty - * string ("") - * @param rs a ResultSet object that can be used - * to access the CachedRowSet object's data - * @return a WHERE clause of the form "WHERE - * 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. + *

    + * 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 "; diff -r 07cd15548b1b -r d24a2c340a47 jdk/src/java.sql.rowset/share/classes/com/sun/rowset/internal/SyncResolverImpl.java --- 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 SyncProvider will utilize the - * SyncResolver 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 CachedRowSet object + * This will contain the size of the {@code CachedRowSet} object */ private int sz; /** - * The Connection 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 CachedRowSet 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 - * SyncResolver, which indicates the operationthe RowSet + * {@code SyncResolver}, which indicates the operationthe {@code RowSet} * object was attempting when the conflict occurred. * * @return one of the following constants: - * SyncResolver.UPDATE_ROW_CONFLICT, - * SyncResolver.DELETE_ROW_CONFLICT, or - * SyncResolver.INSERT_ROW_CONFLICT + * {@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 - * SyncResolver object, which is the value that caused a conflict. - * - * @param index int designating the column in this row of this - * SyncResolver 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 - * SyncResolver object, which is the value that caused a conflict. - * - * @param columnName a String object designating the column in this row of this - * SyncResolver 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 obj as the value in column index in the current row of the - * RowSet 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 int 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 Object 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 CachedRowSet 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 Connection 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 CachedRowSet 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 obj as the value in column columnName in the current row of the - * RowSet 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 String 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 Object 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 SyncResolver + * 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 nextConflict() 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. *

    * If an input stream is open for the current row, a call to the method next will - * implicitly close it. A SyncResolver 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 SyncResolver object. - * - * @return true if the cursor is on a valid row; false + * 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 CachedRowSetImpl object's command property - * to the given String 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. *

    * 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 null. - * - * @param cmd a String object containing an SQL query - * that will be set as the command; may be null + * 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 CachedRowSetImpl object with data from - * the given ResultSet object. This - * method is an alternative to the method execute - * for filling the rowset with data. The method populate + * 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 - * execute, such as the command property, - * be set. This is true because the method populate - * is given the ResultSet 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 - * CachedRowSetImpl object's command. + * {@code CachedRowSetImpl} object's command. *

    * After populating this rowset with data, the method - * populate sets the rowset's metadata and - * then sends a RowSetChangedEvent 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 ResultSet object containing the data - * to be read into this CachedRowSetImpl 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 CachedRowSetImpl 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 execute + * create a new database connection. The form of {@code execute} * that is given a connection ignores these properties. * - * @param conn A standard JDBC Connection object that this - * CachedRowSet 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 Connection 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 CachedRowSetImpl + * underlying data source backing this {@code CachedRowSetImpl} * object. *

    * NoteIn the reference implementation an optimistic concurrency implementation - * is provided as a sample implementation of a the SyncProvider + * is provided as a sample implementation of a the {@code SyncProvider} * abstract class. *

    * 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. *

    - * If no SyncProvider is configured, the reference implementation - * leverages the RIOptimisticProvider 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 - * RowSets. + * {@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 - * SyncProvider instance during either during the - * process or at any time when the SyncProvider + * {@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 CachedRowSetImpl object - * using the given Connection object. + * data source backing this {@code CachedRowSetImpl} object + * using the given {@code Connection} object. *

    - * The reference implementation RIOptimisticProvider + * 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 SyncProvider to ensure the synchronization - * occurs according to the updated JDBC Connection + * via the {@code SyncProvider} to ensure the synchronization + * occurs according to the updated JDBC {@code Connection} * properties. * - * @param con a standard JDBC Connection 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 CachedRowSetImpl object to its original state, + * Restores this {@code CachedRowSetImpl} object to its original state, * that is, its state before the last set of changes. *

    * Before returning, this method moves the cursor before the first row - * and sends a rowSetChanged 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 CachedRowSetImpl - * object and sends a rowSetChanged 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 - * CachedRowSetImpl 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 - * (acceptChanges) 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. *

    - * undoUpdateRowSet object backed by the same data as - * that of this CachedRowSetImpl 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 RowSet object that is a copy of this CachedRowSetImpl + * @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 RowSet object containing by the same data - * as this CachedRowSetImpl object. This method - * differs from the method createCopy in that it throws a - * CloneNotSupportedException object instead of an - * SQLException object, as the method createShared - * does. This clone - * method is called internally by the method createShared, - * which catches the CloneNotSupportedException object - * and in turn throws a new SQLException object. - * - * @return a copy of this CachedRowSetImpl 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 CachedRowSetImpl object + * attempting to clone this {@code CachedRowSetImpl} object * @see #createShared */ protected Object clone() throws CloneNotSupportedException { @@ -770,8 +770,8 @@ } /** - * Creates a RowSet object that is a deep copy of - * this CachedRowSetImpl 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 CachedRowSet object that is a deep copy - * of this CachedRowSet object and is - * completely independent from this CachedRowSetImpl + * @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 CachedRowSetImpl + * of the {@code CachedRowSetImpl} * @see #createShared * @see javax.sql.RowSetEvent * @see javax.sql.RowSetListener @@ -795,21 +795,21 @@ } /** - * Creates a RowSet object that is a copy of - * this CachedRowSetImpl 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. *

    * This helps in getting the underlying XML schema which can - * be used as the basis for populating a WebRowSet. - * - * @return a new CachedRowSet object that is a copy - * of this CachedRowSetImpl 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 CachedRowSet object + * of the {@code CachedRowSet} object * @see #createShared * @see #createCopy * @see #createCopyNoConstraints @@ -821,17 +821,17 @@ } /** - * Creates a CachedRowSet object that is a copy of - * this CachedRowSetImpl 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 CachedRowSet object that is a deep copy - * of this CachedRowSetImpl object and is - * completely independent from this CachedRowSetImpl 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 CachedRowSet + * of the {@code CachedRowSet} * @see #createShared * @see #createCopy * @see #createCopySchema @@ -843,15 +843,15 @@ } /** - * Converts this CachedRowSetImpl object to a collection - * of tables. The sample implementation utilitizes the TreeMap + * 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 Collection object consisting of tables, + * @return a {@code Collection} object consisting of tables, * each of which is a copy of a row in this - * CachedRowSetImpl 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 CachedRowSetImpl object - * as a Collection object. This method makes a copy of the - * column's data and utilitizes the Vector to establish the - * collection. The Vector 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 Collection object that contains the value(s) + * @return a {@code Collection} object that contains the value(s) * stored in the specified column of this - * CachedRowSetImpl + * {@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 CachedRowSetImpl object - * as a Collection object. This method makes a copy of the - * column's data and utilitizes the Vector to establish the - * collection. The Vector 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 Collection object that contains the value(s) + * @return a {@code Collection} object that contains the value(s) * stored in the specified column of this - * CachedRowSetImpl + * {@code CachedRowSetImpl} * object * @throws SQLException if an error occurs generated the collection; or * an invalid column is provided. @@ -914,25 +914,25 @@ /** - * Returns the SyncProvider implementation being used - * with this CachedRowSetImpl 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 - * SyncProvider instance. + * {@code SyncProvider} instance. */ public SyncProvider getSyncProvider() throws SQLException { throw new UnsupportedOperationException(); } /** - * Sets the active SyncProvider and attempts to load - * load the new provider using the SyncFactory 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 - * SyncProvider. + * {@code SyncProvider}. */ public void setSyncProvider(String providerStr) throws SQLException { throw new UnsupportedOperationException(); @@ -953,23 +953,23 @@ //--------------------------------------------------------------------- /** - * Populates this CachedRowSetImpl 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. *

    - * Another form of this method uses an existing JDBC Connection + * 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. *

    * The query specified by the command property is executed to create a - * ResultSet 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. *

    - * The method execute 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 true if the new cursor position is a + * returns {@code true} if the new cursor position is a * valid row. - * The cursor for a new ResultSet object is initially + * The cursor for a new {@code ResultSet} object is initially * positioned before the first row. The first call to the method - * next 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. * *

    If an input stream from the previous row is open, it is - * implicitly closed. The ResultSet object's warning + * implicitly closed. The {@code ResultSet} object's warning * chain is cleared when a new row is read. * - * @return true if the new current row is valid; - * false 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 CachedRowSetImpl object's cursor to the next - * row and returns true if the cursor is still in the rowset; - * returns false 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. *

    * 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. *

    - * The method internalNext is called by methods such as - * next, absolute, and relative, + * 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. *

    * This is a implementation only method and is not required as a standard - * implementation of the CachedRowSet interface. - * - * @return true if the cursor is on a valid row in this - * rowset; false 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 CachedRowSetImpl 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 CachedRowSetImpl object + * by this {@code CachedRowSetImpl} object */ public void close() throws SQLException { throw new UnsupportedOperationException(); } /** - * Reports whether the last column read was SQL NULL. - * Note that you must first call the method getXXX + * 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 - * wasNull to determine whether the value was - * SQL NULL. - * - * @return true if the value in the last column read - * was SQL NULL; false 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 - * CachedRowSetImplobject. - * - * @return the Row object on which this CachedRowSetImpl + * {@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. *

    * This is a implementation only method and is not required as a standard - * implementation of the CachedRowSet 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 CachedRowSetImpl object as a - * String object. - * - * @param columnIndex the first column is 1, the second - * is 2, and so on; must be 1 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 NULL, the - * result is null + * @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 TINYINT, SMALLINT, INTEGER, BIGINT, REAL, - * FLOAT, DOUBLE, DECIMAL, NUMERIC, BIT, CHAR, VARCHAR - * or LONGVARCHAR value. The bold SQL type designates the + * SQL {@code TINYINT, SMALLINT, INTEGER, BIGINT, REAL, + * FLOAT, DOUBLE, DECIMAL, NUMERIC, BIT,} {@code CHAR, VARCHAR} + * 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 CachedRowSetImpl object as a - * boolean value. - * - * @param columnIndex the first column is 1, the second - * is 2, and so on; must be 1 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 boolean in the Java progamming language; - * if the value is SQL NULL, the result is false + * @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 BOOLEAN 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 CachedRowSetImpl object as a - * byte value. - * - * @param columnIndex the first column is 1, the second - * is 2, and so on; must be 1 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 byte in the Java programming - * language; if the value is SQL NULL, the result is 0 + * @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 TINYINT, SMALLINT, INTEGER, BIGINT, REAL, - * FLOAT, DOUBLE, DECIMAL, NUMERIC, BIT, CHAR, VARCHAR - * or LONGVARCHAR value. The bold SQL type + * SQL {@code TINYINT}, {@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 CachedRowSetImpl object as a - * short value. - * - * @param columnIndex the first column is 1, the second - * is 2, and so on; must be 1 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 NULL, the - * result is 0 + * @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 TINYINT, SMALLINT, INTEGER, BIGINT, REAL - * FLOAT, DOUBLE, DECIMAL, NUMERIC, BIT, CHAR, VARCHAR - * or LONGVARCHAR 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}, {@code SMALLINT}, + * {@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 CachedRowSetImpl object as an - * int value. - * - * @param columnIndex the first column is 1, the second - * is 2, and so on; must be 1 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 NULL, the - * result is 0 + * @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 TINYINT, SMALLINT, INTEGER, BIGINT, REAL - * FLOAT, DOUBLE, DECIMAL, NUMERIC, BIT, CHAR, VARCHAR - * or LONGVARCHAR 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,} {@code INTEGER}, + * {@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 CachedRowSetImpl object as a - * long value. - * - * @param columnIndex the first column is 1, the second - * is 2, and so on; must be 1 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 NULL, the - * result is 0 + * @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 TINYINT, SMALLINT, INTEGER, BIGINT, REAL - * FLOAT, DOUBLE, DECIMAL, NUMERIC, BIT, CHAR, VARCHAR - * or LONGVARCHAR 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,} + * {@code BIGINT}, {@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 CachedRowSetImpl object as a - * float value. - * - * @param columnIndex the first column is 1, the second - * is 2, and so on; must be 1 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 NULL, the - * result is 0 + * @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 TINYINT, SMALLINT, INTEGER, BIGINT, REAL, - * FLOAT, DOUBLE, DECIMAL, NUMERIC, BIT, CHAR, VARCHAR - * or LONGVARCHAR 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,} + * {@code REAL}, {@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 CachedRowSetImpl object as a - * double value. - * - * @param columnIndex the first column is 1, the second - * is 2, and so on; must be 1 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 NULL, the - * result is 0 + * @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 TINYINT, SMALLINT, INTEGER, BIGINT, REAL, - * FLOAT, DOUBLE, DECIMAL, NUMERIC, BIT, CHAR, VARCHAR - * or LONGVARCHAR 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,} + * {@code FLOAT, DOUBLE}, + * {@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 CachedRowSetImpl object as a - * java.math.BigDecimal object. + * of this {@code CachedRowSetImpl} object as a + * {@code java.math.BigDecimal} object. *

    - * This method is deprecated; use the version of getBigDecimal + * 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 1, the second - * is 2, and so on; must be 1 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 NULL, the - * result is null + * 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 CachedRowSetImpl object as a - * byte array value. - * - * @param columnIndex the first column is 1, the second - * is 2, and so on; must be 1 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 byte array in the Java programming - * language; if the value is SQL NULL, the - * result is null + * @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 BINARY, VARBINARY or - * LONGVARBINARY 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 BINARY, VARBINARY} 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 CachedRowSetImpl object as a - * java.sql.Date object. - * - * @param columnIndex the first column is 1, the second - * is 2, and so on; must be 1 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 java.sql.Data object; if - * the value is SQL NULL, the - * result is null + * @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 CachedRowSetImpl object as a - * java.sql.Time object. - * - * @param columnIndex the first column is 1, the second - * is 2, and so on; must be 1 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 NULL, the - * result is null + * @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 CachedRowSetImpl object as a - * java.sql.Timestamp object. - * - * @param columnIndex the first column is 1, the second - * is 2, and so on; must be 1 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 NULL, the - * result is null + * @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 - * CachedRowSetImpl object as a java.io.InputStream + * {@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 LONGVARCHAR values. The JDBC + * suitable for retrieving large {@code LONGVARCHAR} values. The JDBC * driver will do any necessary conversion from the database format into ASCII. * *

    Note: 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 0 for CachedRowSetImpl.available() + * stream may return {@code 0} for {@code CachedRowSetImpl.available()} * whether there is data available or not. * - * @param columnIndex the first column is 1, the second - * is 2, and so on; must be 1 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 - * NULL, the result is null. + * {@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 CHAR, VARCHAR, LONGVARCHAR - * BINARY, VARBINARY or LONGVARBINARY 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}, {@code LONGVARCHAR}, + * {@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 1, the second - * is 2, and so on; must be 1 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 - * CachedRowSetImpl object as a java.io.InputStream + * {@code CachedRowSetImpl} object as a {@code java.io.InputStream} * object. *

    * 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 LONGVARBINARY values. + * suitable for retrieving large {@code LONGVARBINARY} values. * *

    Note: 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 0 for - * CachedRowSetImpl.available() 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 1, the second - * is 2, and so on; must be 1 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 NULL - * then the result is null. + * 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 BINARY, VARBINARY or LONGVARBINARY + * SQL {@code BINARY, VARBINARY} or {@code LONGVARBINARY}. * 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 String object. - * - * @param columnName a String object giving the SQL name of - * a column in this CachedRowSetImpl object - * @return the column value; if the value is SQL NULL, - * the result is null + * 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 TINYINT, SMALLINT, INTEGER - * BIGINT, REAL, FLOAT, DOUBLE, DECIMAL, NUMERIC, BIT, CHAR, - * VARCHAR or LONGVARCHAR< 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,} + * {@code CHAR, VARCHAR} 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 boolean value. - * - * @param columnName a String object giving the SQL name of - * a column in this CachedRowSetImpl object - * @return the column value as a boolean in the Java programming - * language; if the value is SQL NULL, - * the result is false + * 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 BOOLEAN 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 byte value. - * - * @param columnName a String object giving the SQL name of - * a column in this CachedRowSetImpl object - * @return the column value as a byte in the Java programming - * language; if the value is SQL NULL, the result is 0 + * 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 TINYINT, SMALLINT, INTEGER, - * BIGINT, REAL, FLOAT, DOUBLE, DECIMAL, NUMERIC, BIT, CHAR, - * VARCHAR or LONGVARCHAR 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 {@code TINYINT}, + * {@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 short value. - * - * @param columnName a String object giving the SQL name of - * a column in this CachedRowSetImpl object - * @return the column value; if the value is SQL NULL, - * the result is 0 + * 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 TINYINT, SMALLINT, INTEGER - * BIGINT, REAL, FLOAT, DOUBLE, DECIMAL, NUMERIC, BIT, CHAR, - * VARCHAR or LONGVARCHAR 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,} + * {@code SMALLINT}, {@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 int value. - * - * @param columnName a String object giving the SQL name of - * a column in this CachedRowSetImpl object - * @return the column value; if the value is SQL NULL, - * the result is 0 + * 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 TINYINT, SMALLINT, INTEGER, BIGINT, REAL - * FLOAT, DOUBLE, DECIMAL, NUMERIC, BIT, CHAR, VARCHAR - * or LONGVARCHAR 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,} {@code INTEGER}, + * {@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 long value. - * - * @param columnName a String object giving the SQL name of - * a column in this CachedRowSetImpl object - * @return the column value; if the value is SQL NULL, - * the result is 0 + * 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 TINYINT, SMALLINT, INTEGER - * BIGINT, REAL, FLOAT, DOUBLE, DECIMAL, NUMERIC, BIT, CHAR, - * VARCHAR or LONGVARCHAR 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,} + * {@code BIGINT}, {@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 float value. - * - * @param columnName a String object giving the SQL name of - * a column in this CachedRowSetImpl object - * @return the column value; if the value is SQL NULL, - * the result is 0 + * 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 TINYINT, SMALLINT, INTEGER - * BIGINT, REAL, FLOAT, DOUBLE, DECIMAL, NUMERIC, BIT, CHAR, - * VARCHAR or LONGVARCHAR 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,} {@code REAL}, {@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 CachedRowSetImpl object - * as a double value. - * - * @param columnName a String object giving the SQL name of - * a column in this CachedRowSetImpl object - * @return the column value; if the value is SQL NULL, - * the result is 0 + * 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 TINYINT, SMALLINT, INTEGER - * BIGINT, REAL, FLOAT, DOUBLE, DECIMAL, NUMERIC, BIT, CHAR, - * VARCHAR or LONGVARCHAR 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,} {@code FLOAT, DOUBLE}, {@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 java.math.BigDecimal object. - * - * @param columnName a String object giving the SQL name of - * a column in this CachedRowSetImpl 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 scale - * number of digits to the right of the decimal point. + * @return a java.math.BugDecimal object with {@code scale} + * 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 TINYINT, SMALLINT, INTEGER - * BIGINT, REAL, FLOAT, DOUBLE, DECIMAL, NUMERIC, BIT CHAR, - * VARCHAR or LONGVARCHAR value. The bold SQL type - * designates the recommended return type that this method is used to - * retrieve. - * @deprecated Use the getBigDecimal(String columnName) + * 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,} {@code DECIMAL, NUMERIC}, + * {@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 byte array. + * of the current row as a {@code byte} array. * The bytes represent the raw values returned by the driver. * - * @param columnName a String object giving the SQL name of - * a column in this CachedRowSetImpl object - * @return the column value as a byte array in the Java programming - * language; if the value is SQL NULL, the result is null + * @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 BINARY, VARBINARY - * or LONGVARBINARY 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 {@code BINARY, VARBINARY} + * 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 java.sql.Date object. - * - * @param columnName a String object giving the SQL name of - * a column in this CachedRowSetImpl object - * @return the column value; if the value is SQL NULL, - * the result is null + * 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 DATE or - * TIMESTAMP 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 java.sql.Time object. - * - * @param columnName a String object giving the SQL name of - * a column in this CachedRowSetImpl object - * @return the column value; if the value is SQL NULL, - * the result is null + * 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 java.sql.Timestamp object. - * - * @param columnName a String object giving the SQL name of - * a column in this CachedRowSetImpl object - * @return the column value; if the value is SQL NULL, - * the result is null + * 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 - * CachedRowSetImpl object as a java.io.InputStream + * {@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 LONGVARCHAR values. The - * SyncProvider 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. * *

    Note: All the data in the returned stream must * be read prior to getting the value of any other column. The - * next call to a getXXX method implicitly closes the stream. - * - * @param columnName a String object giving the SQL name of - * a column in this CachedRowSetImpl 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 - * NULL, the result is null. + * {@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 CHAR, VARCHAR, LONGVARCHAR - * BINARY, VARBINARY or LONGVARBINARY 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}, {@code LONGVARCHAR}, + * {@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 LONGVARCHAR values. + * suitable for retrieving large {@code LONGVARCHAR} values. * The JDBC driver will do any necessary conversion from the database * format into Unicode. * *

    Note: All the data in the returned stream must * be read prior to getting the value of any other column. The - * next call to a getXXX method implicitly closes the stream. - * - * @param columnName a String object giving the SQL name of - * a column in this CachedRowSetImpl 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 NULL, the result is null. + * 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 getCharacterStream 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 - * CachedRowSetImpl object as a java.io.InputStream + * {@code CachedRowSetImpl} object as a {@code java.io.InputStream} * object. *

    * 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 LONGVARBINARY values. + * suitable for retrieving large {@code LONGVARBINARY} values. * *

    Note: 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 0 for CachedRowSetImpl.available() + * stream may return {@code 0} for {@code CachedRowSetImpl.available()} * whether there is data available or not. * - * @param columnName a String object giving the SQL name of - * a column in this CachedRowSetImpl 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 - * NULL, the result is null. + * {@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 BINARY, VARBINARY or LONGVARBINARY - * 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 {@code LONGVARBINARY} + * 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 CachedRowSetImpl - * object is returned. Subsequent CachedRowSetImpl warnings will - * be chained to this SQLWarning. + * The first warning reported by calls on this {@code CachedRowSetImpl} + * object is returned. Subsequent {@code CachedRowSetImpl} warnings will + * be chained to this {@code SQLWarning}. * *

    The warning chain is automatically cleared each time a new * row is read. * *

    Note: This warning chain only covers warnings caused - * by ResultSet 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 - * Statement object. + * {@code Statement} object. * * @return the first SQLWarning or null */ @@ -1850,10 +1856,10 @@ } /** - * Clears all the warnings reporeted for the CachedRowSetImpl - * object. After a call to this method, the getWarnings method - * returns null until a new warning is reported for this - * CachedRowSetImpl 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 - * CachedRowSetImpl object. + * {@code CachedRowSetImpl} object. * *

    In SQL, a result table is retrieved through a cursor that is - * named. The current row of a ResultSet 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 SELECT - * statement should be of the form select for update. - * If the for update 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. * *

    JDBC supports this SQL feature by providing the name of the - * SQL cursor used by a ResultSet 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. * *

    Note: If positioned updates are not supported, an - * SQLException is thrown. - * - * @return the SQL cursor name for this CachedRowSetImpl 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 ResultSetMetaData object instance that - * contains information about the CachedRowSet object. + * Retrieves a {@code ResultSetMetaData} object instance that + * contains information about the {@code CachedRowSet} object. * However, applications should cast the returned object to a - * RowSetMetaData interface implementation. In the + * {@code RowSetMetaData} interface implementation. In the * reference implementation, this cast can be done on the - * RowSetMetaDataImpl class. + * {@code RowSetMetaDataImpl} class. *

    * For example: *

    @@ -1907,10 +1913,10 @@
          * crs.setMetaData(metaData);
          * 
    * - * @return the ResultSetMetaData object that describes this - * CachedRowSetImpl 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 CachedRowSetImpl 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 CachedRowSetImpl object as an - * Object value. + * of this {@code CachedRowSetImpl} object as an + * {@code Object} value. *

    - * The type of the Object 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. *

    - * This implementation of the method getObject 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 Object 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 getObject(columnIndex, - * this.getStatement().getConnection().getTypeMap()). - * - * @param columnIndex the first column is 1, the second - * is 2, and so on; must be 1 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 java.lang.Object holding the column value; - * if the value is SQL NULL, the result is null + * @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 Class 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 CachedRowSetImpl object as an - * Object value. + * of this {@code CachedRowSetImpl} object as an + * {@code Object} value. *

    - * The type of the Object 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. *

    - * This implementation of the method getObject 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 Object 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 getObject(columnIndex, - * this.getStatement().getConnection().getTypeMap()). - * - * @param columnName a String 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 java.lang.Object holding the column value; - * if the value is SQL NULL, the result is null + * @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 Class 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 CachedRowSetImpl + * Maps the given column name for one of this {@code CachedRowSetImpl} * object's columns to its column number. * - * @param columnName a String 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 java.io.Reader object. + * of the current row as a {@code java.io.Reader} object. * *

    Note: All the data in the returned stream must * be read prior to getting the value of any other column. The - * next call to a getXXX method implicitly closes the stream. - * - * @param columnIndex the first column is 1, the second - * is 2, and so on; must be 1 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 - * java.io.Reader object. If the value is - * SQL NULL, the result is null. + * {@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 CHAR, VARCHAR, LONGVARCHAR, BINARY, VARBINARY or - * LONGVARBINARY 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,} {@code LONGVARCHAR}, + * {@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 java.io.Reader object. + * of the current row as a {@code java.io.Reader} object. * *

    Note: All the data in the returned stream must * be read prior to getting the value of any other column. The - * next call to a getXXX method implicitly closes the stream. - * - * @param columnName a String object giving the SQL name of - * a column in this CachedRowSetImpl 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 NULL, the result is null. + * 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 CHAR, VARCHAR, LONGVARCHAR, - * BINARY, VARYBINARY or LONGVARBINARY 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,} + * {@code LONGVARCHAR}, + * {@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 CachedRowSetImpl object as a - * java.math.BigDecimal object. - * - * @param columnIndex the first column is 1, the second - * is 2, and so on; must be 1 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 java.math.BigDecimal value with full precision; - * if the value is SQL NULL, the result is null + * @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 TINYINT, SMALLINT, INTEGER, BIGINT, REAL, - * FLOAT, DOUBLE, DECIMAL, NUMERIC, BIT, CHAR, VARCHAR - * or LONGVARCHAR 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,} {@code DECIMAL, NUMERIC}, + * {@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 CachedRowSetImpl object as a - * java.math.BigDecimal object. - * - * @param columnName a String 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 java.math.BigDecimal value with full precision; - * if the value is SQL NULL, the result is null + * @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 TINYINT, SMALLINT, INTEGER - * BIGINT, REAL, FLOAT, DOUBLE, DECIMAL, NUMERIC, BIT CHAR, - * VARCHAR or LONGVARCHAR 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,} {@code DECIMAL, NUMERIC}, + * {@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 CachedRowSetImpl 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 - * CachedRowSetImpl object. - * - * @return true if the cursor is before the first row; - * false 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 - * CachedRowSetImpl object. - * - * @return true if the cursor is after the last row; - * false 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 - * CachedRowSetImpl object. - * - * @return true if the cursor is on the first row; - * false 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 - * CachedRowSetImpl object. + * {@code CachedRowSetImpl} object. *

    - * Note: Calling the method isLast 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 true if the cursor is on the last row; - * false 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 CachedRowSetImpl 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 ResultSet.TYPE_FORWARD_ONLY + * is {@code ResultSet.TYPE_FORWARD_ONLY} */ public void beforeFirst() throws SQLException { throw new UnsupportedOperationException(); } /** - * Moves this CachedRowSetImpl 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 CachedRowSetImpl object's cursor to the first row - * and returns true 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 true if the cursor is on a valid row; - * false otherwise or if there are no rows in this - * CachedRowSetImpl 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 ResultSet.TYPE_FORWARD_ONLY + * is {@code ResultSet.TYPE_FORWARD_ONLY} */ public boolean first() throws SQLException { throw new UnsupportedOperationException(); } /** - * Moves this CachedRowSetImpl object's cursor to the first - * row and returns true 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. *

    - * This method is called internally by the methods first, - * isFirst, and absolute. - * It in turn calls the method internalNext 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. *

    * This is a implementation only method and is not required as a standard - * implementation of the CachedRowSet interface. - * - * @return true if the cursor moved to the first row; - * false 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 CachedRowSetImpl object's cursor to the last row - * and returns true 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 true if the cursor is on a valid row; - * false otherwise or if there are no rows in this - * CachedRowSetImpl 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 ResultSet.TYPE_FORWARD_ONLY + * is {@code ResultSet.TYPE_FORWARD_ONLY} */ public boolean last() throws SQLException { throw new UnsupportedOperationException(); } /** - * Moves this CachedRowSetImpl object's cursor to the last - * row and returns true 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. *

    - * This method is called internally by the method last + * This method is called internally by the method {@code last} * when rows have been deleted and the deletions are not visible. - * The method internalLast 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 internalPrevious. + * the method {@code internalPrevious}. *

    * This is a implementation only method and is not required as a standard - * implementation of the CachedRowSet interface. - * - * @return true if the cursor moved to the last row; - * false 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 CachedRowSetImpl + * 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; 0 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 CacheRowSetImpl + * @throws SQLException if an error occurs; or if the {@code CacheRowSetImpl} * is empty */ public int getRow() throws SQLException { @@ -2282,51 +2290,51 @@ } /** - * Moves this CachedRowSetImpl object's cursor to the row number + * Moves this {@code CachedRowSetImpl} object's cursor to the row number * specified. * *

    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 - * crs is a CachedRowSetImpl 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. - *

    
    +     * 
    {@code
          *
          *    crs.absolute(4);
          *
    -     *  
    + * }
    *

    * If the number is negative, the cursor moves to an absolute row position * with respect to the end of the rowset. For example, calling - * absolute(-1) positions the cursor on the last row, - * absolute(-2) moves it on the next-to-last row, and so on. - * If the CachedRowSetImpl object crs 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. - *

    
    +     * 
    {@code
          *
          *    crs.absolute(-4);
          *
    -     *  
    + * }
    * * 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. *

    - * Note: Calling absolute(1) is the same as calling the - * method first(). Calling absolute(-1) is the - * same as calling last(). + * 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 1; 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 - * -1; it must not be 0 - * @return true if the cursor is on the rowset; false + * {@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 0 or the - * type of this rowset is ResultSet.TYPE_FORWARD_ONLY + * @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 - * crs is a CachedRowSetImpl 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. - *

    
    +     * 
    {@code
          *
          *    crs.relative(4);
          *
    -     *  
    + * }
    *

    * 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 - * absolute(-1) positions the cursor on the last row, - * absolute(-2) moves it on the next-to-last row, and so on. - * If the CachedRowSetImpl object crs 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. - *

    
    +     * 
    {@code
          *
          *    crs.absolute(-4);
          *
    -     *  
    + * }
    * * 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 SQLException. + * throws an {@code SQLException}. *

    - * Note: Calling absolute(1) is the same as calling the - * method first(). Calling absolute(-1) is the - * same as calling last(). Calling relative(0) + * 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 int 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 true if the cursor is on a row in this - * CachedRowSetImpl object; false + * @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 ResultSet.TYPE_FORWARD_ONLY + * the rowset is type {@code ResultSet.TYPE_FORWARD_ONLY} */ public boolean relative(int rows) throws SQLException { throw new UnsupportedOperationException(); } /** - * Moves this CachedRowSetImpl object's cursor to the - * previous row and returns true if the cursor is on - * a valid row or false 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 - * CachedRowSetImpl object that its cursor has moved. + * {@code CachedRowSetImpl} object that its cursor has moved. *

    - * Note: calling the method previous() is not the same - * as calling the method relative(-1). This is true - * because it is possible to call previous() 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 - * relative may only be called from the current row. + * {@code relative} may only be called from the current row. *

    - * The method previous may used in a while + * 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 previous - * returns false, 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 CachedRowSetImpl object crs, 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 - * previous places the cursor on the last line. - *

     
    +     * {@code previous} places the cursor on the last line.
    +     * 
    {@code
          *
          *     crs.afterLast();
          *     while (previous()) {
    @@ -2423,33 +2431,33 @@
          *         System.out.println(name + "   " + age + "   " + ssn);
          *     }
          *
    -     *  
    - * This method throws an SQLException if the cursor is not + * }
    + * 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 true if the cursor is on a valid row; - * false 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 ResultSet.TYPE_FORWARD_ONLY + * 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 CachedRowSetImpl + * Moves the cursor to the previous row in this {@code CachedRowSetImpl} * object, skipping past deleted rows that are not visible; returns - * true if the cursor is on a row in this rowset and - * false 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. *

    - * This method is called internally by the method previous. + * This method is called internally by the method {@code previous}. *

    * This is a implementation only method and is not required as a standard - * implementation of the CachedRowSet interface. - * - * @return true if the cursor is on a row in this rowset; - * false 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 CachedRowSetImpl + * Indicates whether the current row of this {@code CachedRowSetImpl} * object has been updated. The value returned - * depends on whether this rowset can detect updates: false + * depends on whether this rowset can detect updates: {@code false} * will always be returned if it does not detect updates. * - * @return true 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; - * false 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 CachedRowSetImpl object has been updated. The + * this {@code CachedRowSetImpl} object has been updated. The * value returned depends on whether this rowset can detcted updates: - * false 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 true is the designated column has been updated - * and the rowset detects updates; false 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 CachedRowSetImpl object has been updated. The + * this {@code CachedRowSetImpl} object has been updated. The * value returned depends on whether this rowset can detcted updates: - * false will always be returned if it does not detect updates. - * - * @param columnName the String 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 true is the designated column has been updated - * and the rowset detects updates; false 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 true if a row has been inserted and inserts are detected; - * false 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 false if this rowset cannot detect + * will always return {@code false} if this rowset cannot detect * deletions. * - * @return true 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; - * false 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 CachedRowSetImpl object with - * null value. + * insert row of this {@code CachedRowSetImpl} object with + * {@code null} value. *

    * 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 @@ *

    * 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 updateRow or insertRow. - * - * @param columnIndex the first column is 1, the second - * is 2, and so on; must be 1 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 - * ResultSet.CONCUR_READ_ONLY + * {@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 CachedRowSetImpl object with the given - * boolean value. + * row of this {@code CachedRowSetImpl} object with the given + * {@code boolean} value. *

    * 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 1, the second - * is 2, and so on; must be 1 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 - * ResultSet.CONCUR_READ_ONLY + * {@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 CachedRowSetImpl object with the given - * byte value. + * row of this {@code CachedRowSetImpl} object with the given + * {@code byte} value. *

    * 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 1, the second - * is 2, and so on; must be 1 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 - * ResultSet.CONCUR_READ_ONLY + * {@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 CachedRowSetImpl object with the given - * short value. + * row of this {@code CachedRowSetImpl} object with the given + * {@code short} value. *

    * 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 1, the second - * is 2, and so on; must be 1 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 - * ResultSet.CONCUR_READ_ONLY + * {@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 CachedRowSetImpl object with the given - * int value. + * row of this {@code CachedRowSetImpl} object with the given + * {@code int} value. *

    * 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 1, the second - * is 2, and so on; must be 1 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 - * ResultSet.CONCUR_READ_ONLY + * {@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 CachedRowSetImpl object with the given - * long value. + * row of this {@code CachedRowSetImpl} object with the given + * {@code long} value. *

    * 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 1, the second - * is 2, and so on; must be 1 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 - * ResultSet.CONCUR_READ_ONLY + * {@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 CachedRowSetImpl object with the given - * float value. + * row of this {@code CachedRowSetImpl} object with the given + * {@code float} value. *

    * 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 1, the second - * is 2, and so on; must be 1 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 - * ResultSet.CONCUR_READ_ONLY + * {@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 CachedRowSetImpl object with the given - * double 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 1, the second - * is 2, and so on; must be 1 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 - * ResultSet.CONCUR_READ_ONLY + * {@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 CachedRowSetImpl object with the given - * java.math.BigDecimal object. + * row of this {@code CachedRowSetImpl} object with the given + * {@code java.math.BigDecimal} object. *

    * 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 1, the second - * is 2, and so on; must be 1 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 - * ResultSet.CONCUR_READ_ONLY + * {@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 CachedRowSetImpl object with the given - * String 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 @@ -2810,17 +2818,17 @@ * as inserted. Both of these methods must be called before the * cursor moves to another row. *

    - * The method acceptChanges 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 1, the second - * is 2, and so on; must be 1 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 - * ResultSet.CONCUR_READ_ONLY + * {@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 CachedRowSetImpl object with the given - * byte 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 1, the second - * is 2, and so on; must be 1 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 - * ResultSet.CONCUR_READ_ONLY + * {@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 CachedRowSetImpl object with the given - * Date 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 1, the second - * is 2, and so on; must be 1 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 DATE or TIMESTAMP, or - * (4) this rowset is ResultSet.CONCUR_READ_ONLY + * 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 CachedRowSetImpl object with the given - * Time 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 1, the second - * is 2, and so on; must be 1 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 TIME or TIMESTAMP, or - * (4) this rowset is ResultSet.CONCUR_READ_ONLY + * 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 CachedRowSetImpl object with the given - * Timestamp 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 1, the second - * is 2, and so on; must be 1 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 DATE, TIME, or - * TIMESTAMP, or (4) this rowset is - * ResultSet.CONCUR_READ_ONLY + * 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 CachedRowSetImpl object with the given + * row of this {@code CachedRowSetImpl} object with the given * ASCII stream value. *

    * 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 1, the second - * is 2, and so on; must be 1 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 CachedRowSetImpl object with the given - * java.io.InputStream object. + * row of this {@code CachedRowSetImpl} object with the given + * {@code java.io.InputStream} 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 @@ -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 1, the second - * is 2, and so on; must be 1 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 java.io.InputStream - * containing BINARY, VARBINARY, or - * LONGVARBINARY 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 ResultSet.CONCUR_READ_ONLY + * (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 CachedRowSetImpl object with the given - * java.io.Reader object. + * row of this {@code CachedRowSetImpl} object with the given + * {@code java.io.Reader} 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 @@ -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 1, the second - * is 2, and so on; must be 1 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 java.io.Reader - * containing BINARY, VARBINARY, - * LONGVARBINARY, CHAR, VARCHAR, - * or LONGVARCHAR 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 - * ResultSet.CONCUR_READ_ONLY + * {@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 CachedRowSetImpl object with the given - * Object value. The scale 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 - * DECIMAL or NUMERIC value. + * {@code DECIMAL} or {@code NUMERIC} 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 @@ -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 1, the second - * is 2, and so on; must be 1 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 - * DECIMAL and NUMERIC 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 - * ResultSet.CONCUR_READ_ONLY + * {@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 CachedRowSetImpl object with the given - * Object value. + * row of this {@code CachedRowSetImpl} object with the given + * {@code Object} 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 @@ -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 1, the second - * is 2, and so on; must be 1 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 - * ResultSet.CONCUR_READ_ONLY + * {@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 CachedRowSetImpl object with - * null value. + * insert row of this {@code CachedRowSetImpl} object with + * {@code null} value. *

    * 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 String 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 ResultSet.CONCUR_READ_ONLY + * 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 CachedRowSetImpl object with the given - * boolean value. + * row of this {@code CachedRowSetImpl} object with the given + * {@code boolean} value. *

    * 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 String 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 ResultSet.CONCUR_READ_ONLY + * 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 CachedRowSetImpl object with the given - * byte value. + * row of this {@code CachedRowSetImpl} object with the given + * {@code byte} value. *

    * 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 String 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 ResultSet.CONCUR_READ_ONLY + * 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 CachedRowSetImpl object with the given - * short value. + * row of this {@code CachedRowSetImpl} object with the given + * {@code short} value. *

    * 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 String 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 ResultSet.CONCUR_READ_ONLY + * 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 CachedRowSetImpl object with the given - * int value. + * row of this {@code CachedRowSetImpl} object with the given + * {@code int} value. *

    * 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 String 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 ResultSet.CONCUR_READ_ONLY + * 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 CachedRowSetImpl object with the given - * long value. + * row of this {@code CachedRowSetImpl} object with the given + * {@code long} value. *

    * 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 String 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 ResultSet.CONCUR_READ_ONLY + * 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 CachedRowSetImpl object with the given - * float value. + * row of this {@code CachedRowSetImpl} object with the given + * {@code float} value. *

    * 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 String 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 ResultSet.CONCUR_READ_ONLY + * 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 CachedRowSetImpl object with the given - * double 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 String 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 ResultSet.CONCUR_READ_ONLY + * 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 CachedRowSetImpl object with the given - * java.math.BigDecimal object. + * row of this {@code CachedRowSetImpl} object with the given + * {@code java.math.BigDecimal} object. *

    * 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 String 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 ResultSet.CONCUR_READ_ONLY + * 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 CachedRowSetImpl object with the given - * String 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 String 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 ResultSet.CONCUR_READ_ONLY + * 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 CachedRowSetImpl object with the given - * byte 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 String 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 ResultSet.CONCUR_READ_ONLY + * 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 CachedRowSetImpl object with the given - * Date 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 String 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 DATE or - * TIMESTAMP, or (4) this rowset is - * ResultSet.CONCUR_READ_ONLY + * 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 CachedRowSetImpl object with the given - * Time 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 String 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 TIME or - * TIMESTAMP, or (4) this rowset is - * ResultSet.CONCUR_READ_ONLY + * 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 CachedRowSetImpl object with the given - * Timestamp 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 String 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 DATE, - * TIME, or TIMESTAMP, or (4) this - * rowset is ResultSet.CONCUR_READ_ONLY + * 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 CachedRowSetImpl object with the given + * row of this {@code CachedRowSetImpl} object with the given * ASCII stream value. *

    * 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 String 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 CachedRowSetImpl object with the given - * java.io.InputStream object. + * row of this {@code CachedRowSetImpl} object with the given + * {@code java.io.InputStream} 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 @@ -3495,17 +3503,17 @@ * and the database. Both of these methods must be called before the * cursor moves to another row. * - * @param columnName a String 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 java.io.InputStream - * containing BINARY, VARBINARY, or - * LONGVARBINARY 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 - * ResultSet.CONCUR_READ_ONLY + * {@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 CachedRowSetImpl object with the given - * java.io.Reader object. + * row of this {@code CachedRowSetImpl} object with the given + * {@code java.io.Reader} 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 @@ -3525,18 +3533,18 @@ * and the database. Both of these methods must be called before the * cursor moves to another row. * - * @param columnName a String 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 - * java.io.Reader containing BINARY, - * VARBINARY, LONGVARBINARY, CHAR, - * VARCHAR, or LONGVARCHAR 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 ResultSet.CONCUR_READ_ONLY + * 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 CachedRowSetImpl object with the given - * Object value. The scale 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 DECIMAL or NUMERIC value. + * mapped to an SQL {@code DECIMAL} or {@code NUMERIC} 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 @@ -3561,15 +3569,15 @@ * and the database. Both of these methods must be called before the * cursor moves to another row. * - * @param columnName a String 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 - * DECIMAL and NUMERIC 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 ResultSet.CONCUR_READ_ONLY + * 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 CachedRowSetImpl object with the given - * Object value. + * row of this {@code CachedRowSetImpl} object with the given + * {@code Object} 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 @@ -3589,20 +3597,20 @@ * and the database. Both of these methods must be called before the * cursor moves to another row. * - * @param columnName a String 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 ResultSet.CONCUR_READ_ONLY + * rowset is {@code ResultSet.CONCUR_READ_ONLY} */ public void updateObject(String columnName, Object x) throws SQLException { throw new UnsupportedOperationException(); } /** - * Inserts the contents of this CachedRowSetImpl 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 - * ResultSet.CONCUR_READ_ONLY + * {@code ResultSet.CONCUR_READ_ONLY} */ public void insertRow() throws SQLException { throw new UnsupportedOperationException(); } /** - * Marks the current row of this CachedRowSetImpl 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. *

    @@ -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 ResultSet.CONCUR_READ_ONLY + * rowset is {@code ResultSet.CONCUR_READ_ONLY} */ public void updateRow() throws SQLException { throw new UnsupportedOperationException(); } /** - * Deletes the current row from this CachedRowSetImpl 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. *

    * This method marks the current row as deleted, but it does not delete * the row from the underlying data source. The method - * acceptChanges 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 - * ResultSet.CONCUR_READ_ONLY + * {@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 updateRow or deleteRow. + * 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 - * CachedRowSetImpl 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 updateXXX method has been - * called and before the method updateRow has been called. - * If no updates have been made or the method updateRow + * 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 CachedRowSetImpl 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. *

    * 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 updateXXX + * 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 insertRow must be called + * of this rowset, the method {@code insertRow} must be called * before the cursor is moved back to the rowset. *

    * 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 updateXXX - * and insertRow methods, only the getXXX methods - * may be called when the cursor is on the insert row. A getXXX - * method should be called on a column only after an updateXXX + * 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 CachedRowSetImpl object is - * ResultSet.CONCUR_READ_ONLY + * @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 CachedRowSetImpl 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 moveToInsertRow was called. + * when the method {@code moveToInsertRow} was called. *

    * Calling this method has no effect unless it is called while the * cursor is on the insert row. @@ -3731,9 +3739,9 @@ } /** - * Returns null. - * - * @return null + * 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 - * CachedRowSetImpl object as an Object in + * {@code CachedRowSetImpl} object as an {@code Object} in * the Java programming language, using the given - * java.util.Map 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 1, the second - * is 2, and so on; must be 1 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 java.util.Map 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 Object 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 - * CachedRowSetImpl object as a Ref object + * {@code CachedRowSetImpl} object as a {@code Ref} object * in the Java programming language. * - * @param columnIndex the first column is 1, the second - * is 2, and so on; must be 1 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 Ref object representing an SQL REF 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 REF 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 - * CachedRowSetImpl object as a Blob object + * {@code CachedRowSetImpl} object as a {@code Blob} object * in the Java programming language. * - * @param columnIndex the first column is 1, the second - * is 2, and so on; must be 1 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 Blob object representing an SQL BLOB 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 BLOB 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 - * CachedRowSetImpl object as a Clob object + * {@code CachedRowSetImpl} object as a {@code Clob} object * in the Java programming language. * - * @param columnIndex the first column is 1, the second - * is 2, and so on; must be 1 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 Clob object representing an SQL CLOB 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 CLOB 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 - * CachedRowSetImpl object as an Array object + * {@code CachedRowSetImpl} object as an {@code Array} object * in the Java programming language. * - * @param columnIndex the first column is 1, the second - * is 2, and so on; must be 1 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 Array object representing an SQL - * ARRAY 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 ARRAY 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 - * CachedRowSetImpl object as an Object in + * {@code CachedRowSetImpl} object as an {@code Object} in * the Java programming language, using the given - * java.util.Map object to custom map the value if + * {@code java.util.Map} object to custom map the value if * appropriate. * - * @param columnName a String 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 java.util.Map 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 Object 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 - * CachedRowSetImpl object as a Ref object + * {@code CachedRowSetImpl} object as a {@code Ref} object * in the Java programming language. * - * @param colName a String 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 Ref object representing an SQL REF 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 REF 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 - * CachedRowSetImpl object as a Blob object + * {@code CachedRowSetImpl} object as a {@code Blob} object * in the Java programming language. * - * @param colName a String 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 Blob object representing an SQL BLOB 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 BLOB 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 - * CachedRowSetImpl object as a Clob object + * {@code CachedRowSetImpl} object as a {@code Clob} object * in the Java programming language. * - * @param colName a String 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 Clob object representing an SQL - * CLOB 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 CLOB 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 - * CachedRowSetImpl object as an Array object + * {@code CachedRowSetImpl} object as an {@code Array} object * in the Java programming langugage. * - * @param colName a String 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 Array object representing an SQL - * ARRAY 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 ARRAY 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 CachedRowSetImpl object as a java.sql.Date - * object, using the given Calendar 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 1, the second - * is 2, and so on; must be 1 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 java.util.Calendar 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 NULL, - * the result is null + * @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 DATE or - * TIMESTAMP 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 CachedRowSetImpl object as a java.sql.Date - * object, using the given Calendar 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 String 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 java.util.Calendar 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 NULL, - * the result is null + * @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 DATE or - * TIMESTAMP 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 CachedRowSetImpl object as a java.sql.Time - * object, using the given Calendar 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 1, the second - * is 2, and so on; must be 1 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 java.util.Calendar 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 NULL, - * the result is null + * @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 TIME or - * TIMESTAMP 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 CachedRowSetImpl object as a java.sql.Time - * object, using the given Calendar 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 String 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 java.util.Calendar 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 NULL, - * the result is null + * @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 TIME or - * TIMESTAMP 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 CachedRowSetImpl object as a java.sql.Timestamp - * object, using the given Calendar 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 1, the second - * is 2, and so on; must be 1 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 java.util.Calendar 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 NULL, - * the result is null + * @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 TIME or - * TIMESTAMP 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 CachedRowSetImpl object as a - * java.sql.Timestamp object, using the given - * Calendar 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 String 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 java.util.Calendar 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 NULL, - * the result is null + * @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 DATE, - * TIME, or TIMESTAMP 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 Connection object passed to this - * CachedRowSetImpl 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 Connection object passed to this rowset; - * may be null 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 CachedRowSetImpl object - * with the given RowSetMetaData object. - * - * @param md a RowSetMetaData 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 CachedRowSetImpl 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. *

    * The cursor is positioned before the first row in the result set. - * Only rows contained in the result set returned by getOriginal() + * 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 - * ResultSet 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 CachedRowSetImpl 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 setOriginal 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 String object that identifies the table from - * which this CachedRowSetImpl 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 String object that identifies the - * table from which this CachedRowSetImpl 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 CachedRowSetImpl 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 CachedRowSetImpl object's - * keyCols 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 int indicating the + * @param keys an array of {@code int} indicating the * columns that form a primary key for this - * CachedRowSetImpl object; every + * {@code CachedRowSetImpl} object; every * element in the array must be greater than - * 0 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 CachedRowSetImpl object with the given - * double 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 1, the second - * is 2, and so on; must be 1 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 java.sql.Ref 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 - * ResultSet.CONCUR_READ_ONLY + * {@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 CachedRowSetImpl object with the given - * double 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 String 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 java.sql.Ref 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 ResultSet.CONCUR_READ_ONLY + * 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 CachedRowSetImpl object with the given - * double 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 1, the second - * is 2, and so on; must be 1 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 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 - * ResultSet.CONCUR_READ_ONLY + * {@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 CachedRowSetImpl object with the given - * double 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 String 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 Clobvalue + * @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 ResultSet.CONCUR_READ_ONLY + * 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 CachedRowSetImpl object with the given - * java.sql.Blob 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 1, the second - * is 2, and so on; must be 1 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 Blob 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 - * ResultSet.CONCUR_READ_ONLY + * {@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 CachedRowSetImpl object with the given - * java.sql.Blob 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 String 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 Blob 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 ResultSet.CONCUR_READ_ONLY + * 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 CachedRowSetImpl object with the given - * java.sql.Array 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 1, the second - * is 2, and so on; must be 1 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 Array 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 - * ResultSet.CONCUR_READ_ONLY + * {@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 CachedRowSetImpl object with the given - * java.sql.Array 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 String 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 Array 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 ResultSet.CONCUR_READ_ONLY + * 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 - * CachedRowSetImpl object as a java.net.URL 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 DATALINK 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 - * CachedRowSetImpl object as a java.net.URL 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 DATALINK 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 CachedRowSetImpl - * object is returned. Subsequent CachedRowSetImpl warnings will - * be chained to this SQLWarning. All RowSetWarnings + * 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 getWarnings + * seperate warning chain to that provided by the {@code getWarnings} * method. * *

    The warning chain is automatically cleared each time a new * row is read. * *

    Note: This warning chain only covers warnings caused - * by CachedRowSet (and their child interface) - * methods. All SQLWarnings can be obtained using the - * getWarnings 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 acceptChanges() + * 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 acceptChanges() + * 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 acceptChanges() - * to the last Savepoint 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 setMatchColumn + * This was set using {@code setMatchColumn} * as the column which will form the basis of the join. *

    * 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 setMatchColumn(int []) + * 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 setMatchColumn + * This was set using {@code setMatchColumn} * as the column which will form the basis of the join. *

    * 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 setMatchColumn(String []) + * not the same as set using {@code setMatchColumn(String [])} */ public void unsetMatchColumn(String[] columnIdxes) throws SQLException { throw new UnsupportedOperationException(); } /** - * Retrieves the column name as String array - * that was set using setMatchColumn(String []) + * Retrieves the column name as {@code String} array + * that was set using {@code setMatchColumn(String [])} * for this rowset. * - * @return a String 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 int array that was set using - * setMatchColumn(int []) for this rowset. - * - * @return a int 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 - * JoinRowSet as the column which will form the basis of the + * {@code JoinRowSet} as the column which will form the basis of the * join. *

    * 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 getMatchColumnIndexes 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 - * 0 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 - * JoinRowSet as the column which will form the basis of the + * {@code JoinRowSet} as the column which will form the basis of the * join. *

    * 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 getMatchColumn 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 int + * Sets the designated parameter to the given {@code int} * object. This forms the basis of the join for the - * JoinRowSet as the column which will form the basis of the + * {@code JoinRowSet} as the column which will form the basis of the * join. *

    * 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 getMatchColumn 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 - * 0 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 String + * Sets the designated parameter to the given {@code String} * object. This forms the basis of the join for the - * JoinRowSet as the column which will form the basis of the + * {@code JoinRowSet} as the column which will form the basis of the * join. *

    * 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 getMatchColumn 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 int - * object. This was set using setMatchColumn + * 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. *

    * 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 setMatchColumn(int) + * 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 String - * object. This was set using setMatchColumn + * 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. *

    * 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 setMatchColumn(String) + * 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 numRows parameter - * ensures that this event will only be fired every numRow. + * object has populated a number of additional rows. The {@code numRows} parameter + * ensures that this event will only be fired every {@code numRow}. *

    * The source of the event can be retrieved with the method event.getSource. * - * @param event a RowSetEvent object that contains the - * RowSet 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 - * CachedRowSet populated should fire; the default value - * is zero; cannot be less than fetchSize 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 CachedRowSet object with data from - * the given ResultSet object. While related to the populate(ResultSet) + * 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 ResultSet from where to populate the CachedRowSet + * the {@code ResultSet} from where to populate the CachedRowSet * instance. * - * This method is an alternative to the method execute - * for filling the rowset with data. The method populate + * 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 - * execute, such as the command property, - * be set. This is true because the method populate - * is given the ResultSet 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 - * CachedRowSetImpl object's command. + * {@code CachedRowSetImpl} object's command. *

    * After populating this rowset with data, the method - * populate sets the rowset's metadata and - * then sends a RowSetChangedEvent 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 ResultSet object containing the data - * to be read into this CachedRowSetImpl 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 - * ResultSet object to popultate the - * CachedRowSetImpl 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 CachedRowSetImpl 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 ResultSet.TYPE_FORWARD_ONLY 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. diff -r 07cd15548b1b -r d24a2c340a47 jdk/src/java.sql.rowset/share/classes/com/sun/rowset/internal/WebRowSetXmlWriter.java --- 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 XmlWriter interface, which writes a - * WebRowSet 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 java.io.Writer object to which this WebRowSetXmlWriter - * object will write when its writeXML method is called. The value - * for this field is set with the java.io.Writer object given - * as the second argument to the writeXML 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 java.util.Stack object that this WebRowSetXmlWriter + * The {@code java.util.Stack} object that this {@code WebRowSetXmlWriter} * object will use for storing the tags to be used for writing the calling - * WebRowSet object as an XML document. + * {@code WebRowSet} object as an XML document. */ private java.util.Stack stack; @@ -69,24 +69,24 @@ } /** - * Writes the given WebRowSet object as an XML document - * using the given java.io.Writer object. The XML document - * will include the WebRowSet 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. *

    - * This method is called by the XmlWriter object that is - * referenced in the calling WebRowSet object's - * xmlWriter field. The XmlWriter.writeXML + * 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 WebRowSet object to be written; must - * be a rowset for which this WebRowSetXmlWriter 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 java.io.Writer object to which - * caller 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 WebRowSetXmlWriter 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 WebRowSet object as an XML document - * using the given java.io.OutputStream object. The XML document - * will include the WebRowSet 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. *

    - * Using stream is a faster way than using java.io.Writer + * Using stream is a faster way than using {@code java.io.Writer} * - * This method is called by the XmlWriter object that is - * referenced in the calling WebRowSet object's - * xmlWriter field. The XmlWriter.writeXML + * 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 WebRowSet object to be written; must - * be a rowset for which this WebRowSetXmlWriter 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 java.io.OutputStream object to which - * caller 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 WebRowSetXmlWriter object is not the writer + * this {@code WebRowSetXmlWriter} object is not the writer * for the given rowset * @see XmlWriter#writeXML */ diff -r 07cd15548b1b -r d24a2c340a47 jdk/src/java.sql.rowset/share/classes/javax/sql/rowset/RowSetMetaDataImpl.java --- 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 RowSet object for which this RowSetMetaDataImpl * was created. To be valid, a column number must be greater than * 0 and less than or equal to the number of columns in a row. - * @throws SQLException 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 RowSet object */ diff -r 07cd15548b1b -r d24a2c340a47 jdk/src/jdk.jartool/share/classes/com/sun/jarsigner/ContentSigner.java --- 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 { /** diff -r 07cd15548b1b -r d24a2c340a47 jdk/src/jdk.jartool/share/classes/com/sun/jarsigner/ContentSignerParameters.java --- 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 { /** diff -r 07cd15548b1b -r d24a2c340a47 jdk/src/jdk.jartool/share/classes/com/sun/jarsigner/package-info.java --- 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 jarsigner * tool by supplying an alternative implementation of * {@link com.sun.jarsigner.ContentSigner}. + * + * This package has been deprecated. */ @jdk.Exported +@Deprecated package com.sun.jarsigner; diff -r 07cd15548b1b -r d24a2c340a47 jdk/src/jdk.jartool/share/classes/sun/security/tools/jarsigner/Main.java --- 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; diff -r 07cd15548b1b -r d24a2c340a47 jdk/src/jdk.jartool/share/classes/sun/security/tools/jarsigner/Resources.java --- 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 of digest data in timestamping request"}, {".altsigner.class.class.name.of.an.alternative.signing.mechanism", - "[-altsigner ] class name of an alternative signing mechanism"}, + "[-altsigner ] class name of an alternative signing mechanism\n" + + " (This option has been deprecated.)"}, {".altsignerpath.pathlist.location.of.an.alternative.signing.mechanism", - "[-altsignerpath ] location of an alternative signing mechanism"}, + "[-altsignerpath ] 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", diff -r 07cd15548b1b -r d24a2c340a47 jdk/src/jdk.jartool/share/classes/sun/security/tools/jarsigner/TimestampedSigner.java --- 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 { /* diff -r 07cd15548b1b -r d24a2c340a47 jdk/src/jdk.jdi/share/classes/com/sun/tools/jdi/VirtualMachineManagerService.java --- 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} diff -r 07cd15548b1b -r d24a2c340a47 jdk/src/jdk.jvmstat/share/classes/sun/jvmstat/monitor/HostIdentifier.java --- 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: * *

      - *
    • < null > - transformed into "//localhost"

    • - *
    • localhost - transformed into "//localhost"

    • - *
    • hostname - transformed into "//hostname"

    • - *
    • hostname:port - transformed into "//hostname:port"

    • - *
    • proto:hostname - transformed into "proto://hostname"

    • - *
    • proto:hostname:port - transformed into - * "proto://hostname:port"

    • - *
    • proto://hostname:port

    • + *
    • {@code } - transformed into "//localhost"
    • + *
    • localhost - transformed into "//localhost"
    • + *
    • hostname - transformed into "//hostname"
    • + *
    • hostname:port - transformed into "//hostname:port"
    • + *
    • proto:hostname - transformed into "proto://hostname"
    • + *
    • proto:hostname:port - transformed into + * "proto://hostname:port"
    • + *
    • proto://hostname:port
    • *
    - *

    * * @see URI * @see VmIdentifier diff -r 07cd15548b1b -r d24a2c340a47 jdk/src/jdk.jvmstat/share/classes/sun/jvmstat/monitor/MonitoredVm.java --- 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 - a List of {@link Monitor} objects that can be used to + * @return {@code List} - 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 diff -r 07cd15548b1b -r d24a2c340a47 jdk/src/jdk.jvmstat/share/classes/sun/jvmstat/monitor/VmIdentifier.java --- 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 @@ * [protocol:][//]lvmid[@hostname][:port][/servername] * * The only required component of this string is the Local Virtual Machine - * Identifier, or lvmid, 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: *
      - *
    • protocol - The communications protocol. A VmIdentifier - * omitting the protocol must be resolved against a HostIdentifier - * using {@link HostIdentifier#resolve}. - *

    • - *
    • 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}. - *

    • - *
    • port - The port for the communications protocol. - * Treatment of the port parameter is implementation - * (protocol) specific. A VmIdentifier omitting the protocol should - * be resolved against a HostIdentifier using - * {@link HostIdentifier#resolve}. - *

    • - *
    • 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}. - *

    • + *
    • {@code protocol} - The communications protocol. A VmIdentifier + * omitting the protocol must be resolved against a HostIdentifier + * using {@link HostIdentifier#resolve}. + *
    • + *
    • {@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}. + *
    • + *
    • {@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}. + *
    • + *
    • {@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}. + *
    • *
    *

    * 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. - *

    *

    * With the exception of file: based VmIdentifier strings, all - * VmIdentifier strings must include a lvmid. Attempting to construct - * a non-file based VmIdentifier that doesn't include a lvmid - * component will result in a MonitorException. - *

    + * 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}. *

    * Here are some examples of VmIdentifier strings. *

      - *
    • Relative URIs

    • + *
    • Relative URIs *
        - *
      • 1234 - Specifies the Java Virtual Machine - * identified by lvmid 1234 on an unnamed host. - * This string is transformed into the absolute form - * //1234, which must be resolved against a - * HostIdentifier. - *

      • - *
      • 1234@hostname - Specifies the Java Virtual - * Machine identified by lvmid 1234 on host - * hostname with an unnamed protocol. - * This string is transformed into the absolute form - * //1234@hostname, which must be resolved against - * a HostIdentifier. - *

      • - *
      • 1234@hostname:2099 - Specifies the Java Virtual - * Machine identified by lvmid 1234 on host - * hostname with an unnamed protocol, but with - * port 2099. This string is transformed into - * the absolute form //1234@hostname:2099, which - * must be resolved against a HostIdentifier. - *

      • + *
      • 1234 - Specifies the Java Virtual Machine + * identified by lvmid 1234 on an unnamed host. + * This string is transformed into the absolute form + * //1234, which must be resolved against a + * HostIdentifier. + *
      • + *
      • 1234@hostname - Specifies the Java Virtual + * Machine identified by lvmid 1234 on host + * hostname with an unnamed protocol. + * This string is transformed into the absolute form + * //1234@hostname, which must be resolved against + * a HostIdentifier. + *
      • + *
      • 1234@hostname:2099 - Specifies the Java Virtual + * Machine identified by lvmid 1234 on host + * hostname with an unnamed protocol, but with + * port 2099. This string is transformed into + * the absolute form //1234@hostname:2099, which + * must be resolved against a HostIdentifier. + *
      • *
      - *
    • Absolute URIs

    • + * + *
    • Absolute URIs *
        - *
      • rmi://1234@hostname:2099/remoteobjectname - - * Specifies the Java Virtual Machine identified by lvmid - * 1234 on host hostname accessed - * using the rmi: protocol through the rmi remote - * object named remoteobjectname as registered with - * the rmiserver on port 2099 on host - * hostname. - *

      • - *
      • file:/path/file - Identifies a Java Virtual Machine - * through accessing a special file based protocol to use as - * the communications mechanism. - *

      • + *
      • rmi://1234@hostname:2099/remoteobjectname - + * Specifies the Java Virtual Machine identified by lvmid + * 1234 on host hostname accessed + * using the rmi: protocol through the rmi remote + * object named remoteobjectname as registered with + * the rmiserver on port 2099 on host + * hostname. + *
      • + *
      • file:/path/file - Identifies a Java Virtual Machine + * through accessing a special file based protocol to use as + * the communications mechanism. + *
      • *
      + *
    • *
    - *

    * * @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. - *

    *

    - * For example, a VmIdentifier that specifies only a lvmid + * For example, a VmIdentifier that specifies only a {@code lvmid} * will result in a HostIdentifier for localhost utilizing * the default local protocol, local:. A VmIdentifier that - * specifies both a vmid and a hostname 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, rmi:, using the protocol defaults for the - * port and servername components. - *

    + * {@code port} and {@code servername} components. * * @return HostIdentifier - the host identifier for the host containing * the Java Virtual Machine represented by this diff -r 07cd15548b1b -r d24a2c340a47 jdk/src/jdk.jvmstat/share/classes/sun/jvmstat/perfdata/monitor/AbstractPerfDataBuffer.java --- 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 - a List of {@link Monitor} objects that can be used to + * @return {@code List} - 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 diff -r 07cd15548b1b -r d24a2c340a47 jdk/src/jdk.jvmstat/share/classes/sun/jvmstat/perfdata/monitor/PerfDataBufferImpl.java --- 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 - a List of {@link Monitor} objects that can be used to + * @return {@code List} - 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 diff -r 07cd15548b1b -r d24a2c340a47 jdk/src/jdk.naming.dns/share/classes/com/sun/jndi/dns/DnsName.java --- 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 { diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/com/sun/corba/7130985/CorbaExceptionsCompileTest.java --- /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); + } +} diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/com/sun/corba/7130985/CorbaExceptionsTest.java --- /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; +} + diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/java/io/FilePermission/FilePermissionCollection.java --- /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("<>", "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 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"); + } + } +} diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/java/lang/Runtime/exec/LotsOfOutput.java --- 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); } } diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/java/lang/invoke/8022701/InvokeSeveralWays.java --- 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 { diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/java/lang/invoke/LFCaching/LFGarbageCollectedTest.java --- 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 diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/java/net/SocketPermission/SocketPermissionCollection.java --- /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 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"); + } + } +} diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/java/security/BasicPermission/BasicPermissionCollection.java --- /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 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); + } + } +} diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/java/security/PermissionCollection/Concurrent.java --- 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); } } } diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/java/text/Format/DateFormat/LocaleDateFormats.java --- /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"); +} diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/java/util/Arrays/SortingIntBenchmarkTestJMH.java --- /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 set = new HashSet(); + while (set.size() < LIST_SIZE + 1) { + set.add(random.nextInt()); + } + List 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; + } +} diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/java/util/Arrays/SortingLongBenchmarkTestJMH.java --- /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 set = new HashSet<>(); + while (set.size() < LIST_SIZE + 1) { + set.add(random.nextInt()); + } + List 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; + } +} diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/java/util/Arrays/SortingNearlySortedPrimitive.java --- /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) this::hiZeroLowData}, + {"endLessThanTest", (Supplier) this::endLessThanData}, + {"highFlatLowTest", (Supplier) this::highFlatLowData}, + {"identicalTest", (Supplier) this::identicalData}, + {"sortedReversedSortedTest", (Supplier) this::sortedReversedSortedData}, + {"pairFlipTest", (Supplier) this::pairFlipData}, + {"zeroHiTest", (Supplier) this::zeroHiData}, + }; + } + + @Test(dataProvider = "arrays") + public void runTests(String testName, Supplier 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; + } +} diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/java/util/PropertyPermission/PropertyPermissionCollection.java --- /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 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"); + } + } +} diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/javax/net/ssl/DTLS/DTLSBufferOverflowUnderflowTest.java --- /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); + } +} diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/javax/net/ssl/DTLS/DTLSDataExchangeTest.java --- /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); + } +} diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/javax/net/ssl/DTLS/DTLSEnginesClosureTest.java --- /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); + } +} diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/javax/net/ssl/DTLS/DTLSHandshakeTest.java --- /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); + } +} diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/javax/net/ssl/DTLS/DTLSHandshakeWithReplicatedPacketsTest.java --- /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); + } +} diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/javax/net/ssl/DTLS/DTLSIncorrectAppDataTest.java --- /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."); + } +} diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/javax/net/ssl/DTLS/DTLSMFLNTest.java --- /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); + } +} diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/javax/net/ssl/DTLS/DTLSNotEnabledRC4Test.java --- /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); + } +} diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/javax/net/ssl/DTLS/DTLSRehandshakeTest.java --- /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); + } +} diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/javax/net/ssl/DTLS/DTLSRehandshakeWithCipherChangeTest.java --- /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); + } +} diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/javax/net/ssl/DTLS/DTLSRehandshakeWithDataExTest.java --- /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); + } +} diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/javax/net/ssl/DTLS/DTLSSequenceNumberTest.java --- /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 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; + } + } +} diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/javax/net/ssl/DTLS/DTLSUnsupportedCiphersTest.java --- /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); + } +} diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/javax/net/ssl/DTLS/TEST.properties --- /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 diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/javax/net/ssl/DTLSv10/DTLSv10BufferOverflowUnderflowTest.java --- /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); + } +} diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/javax/net/ssl/DTLSv10/DTLSv10DataExchangeTest.java --- /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); + } +} diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/javax/net/ssl/DTLSv10/DTLSv10EnginesClosureTest.java --- /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); + } +} diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/javax/net/ssl/DTLSv10/DTLSv10HandshakeTest.java --- /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); + } +} diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/javax/net/ssl/DTLSv10/DTLSv10HandshakeWithReplicatedPacketsTest.java --- /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); + } +} diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/javax/net/ssl/DTLSv10/DTLSv10IncorrectAppDataTest.java --- /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); + } +} diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/javax/net/ssl/DTLSv10/DTLSv10MFLNTest.java --- /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); + } +} diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/javax/net/ssl/DTLSv10/DTLSv10NotEnabledRC4Test.java --- /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); + } +} diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/javax/net/ssl/DTLSv10/DTLSv10RehandshakeTest.java --- /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); + } +} diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/javax/net/ssl/DTLSv10/DTLSv10RehandshakeWithCipherChangeTest.java --- /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); + } +} diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/javax/net/ssl/DTLSv10/DTLSv10RehandshakeWithDataExTest.java --- /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); + } +} diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/javax/net/ssl/DTLSv10/DTLSv10SequenceNumberTest.java --- /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); + } +} diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/javax/net/ssl/DTLSv10/DTLSv10UnsupportedCiphersTest.java --- /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); + } +} diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/javax/net/ssl/DTLSv10/TEST.properties --- /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 diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/javax/net/ssl/TLS/TLSDataExchangeTest.java --- /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); + } +} diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/javax/net/ssl/TLS/TLSEnginesClosureTest.java --- /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); + } +} diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/javax/net/ssl/TLS/TLSHandshakeTest.java --- /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); + } +} diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/javax/net/ssl/TLS/TLSMFLNTest.java --- /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); + } +} diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/javax/net/ssl/TLS/TLSNotEnabledRC4Test.java --- /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); + } +} diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/javax/net/ssl/TLS/TLSRehandshakeTest.java --- /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); + } +} diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/javax/net/ssl/TLS/TLSRehandshakeWithCipherChangeTest.java --- /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); + } +} diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/javax/net/ssl/TLS/TLSRehandshakeWithDataExTest.java --- /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); + } +} diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/javax/net/ssl/TLS/TLSUnsupportedCiphersTest.java --- /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); + } +} diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/javax/net/ssl/TLSCommon/BufferOverflowUnderflowTest.java --- /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"); + } +} diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/javax/net/ssl/TLSCommon/DataExchangeTest.java --- /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); + } +} diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/javax/net/ssl/TLSCommon/EnginesClosureTest.java --- /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); + } + } +} diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/javax/net/ssl/TLSCommon/HandshakeTest.java --- /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); + } +} diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/javax/net/ssl/TLSCommon/MFLNTest.java --- /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); + } +} diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/javax/net/ssl/TLSCommon/NotEnabledRC4Test.java --- /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!"); + } + } + } +} diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/javax/net/ssl/TLSCommon/RehandshakeTest.java --- /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); + } + +} diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/javax/net/ssl/TLSCommon/RehandshakeWithCipherChangeTest.java --- /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); + } +} diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/javax/net/ssl/TLSCommon/RehandshakeWithDataExTest.java --- /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); + } + +} diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/javax/net/ssl/TLSCommon/SSLEngineTestCase.java --- /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 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 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 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 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 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 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 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 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); + } + } +} diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/javax/net/ssl/TLSCommon/UnsupportedCiphersTest.java --- /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}); + } + } +} diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/javax/net/ssl/TLSCommon/jaas.conf --- /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; +}; + diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/javax/net/ssl/TLSv1/TLSDataExchangeTest.java --- /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); + } +} diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/javax/net/ssl/TLSv1/TLSEnginesClosureTest.java --- /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); + } +} diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/javax/net/ssl/TLSv1/TLSHandshakeTest.java --- /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); + } +} diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/javax/net/ssl/TLSv1/TLSMFLNTest.java --- /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); + } +} diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/javax/net/ssl/TLSv1/TLSNotEnabledRC4Test.java --- /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); + } +} diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/javax/net/ssl/TLSv1/TLSRehandshakeTest.java --- /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); + } +} diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/javax/net/ssl/TLSv1/TLSRehandshakeWithCipherChangeTest.java --- /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); + } +} diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/javax/net/ssl/TLSv1/TLSRehandshakeWithDataExTest.java --- /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); + } +} diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/javax/net/ssl/TLSv1/TLSUnsupportedCiphersTest.java --- /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); + } +} diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/javax/net/ssl/TLSv11/TLSDataExchangeTest.java --- /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); + } +} diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/javax/net/ssl/TLSv11/TLSEnginesClosureTest.java --- /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); + } +} diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/javax/net/ssl/TLSv11/TLSHandshakeTest.java --- /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); + } +} diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/javax/net/ssl/TLSv11/TLSMFLNTest.java --- /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); + } +} diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/javax/net/ssl/TLSv11/TLSNotEnabledRC4Test.java --- /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); + } +} diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/javax/net/ssl/TLSv11/TLSRehandshakeTest.java --- /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); + } +} diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/javax/net/ssl/TLSv11/TLSRehandshakeWithCipherChangeTest.java --- /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); + } +} diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/javax/net/ssl/TLSv11/TLSRehandshakeWithDataExTest.java --- /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); + } +} diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/javax/net/ssl/TLSv11/TLSUnsupportedCiphersTest.java --- /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); + } +} diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/javax/security/auth/kerberos/DelegationPermissionCollection.java --- /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 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"); + } + } +} diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/javax/security/auth/kerberos/ServicePermissionCollection.java --- /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 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"); + } + } +} diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/sun/text/resources/LocaleData --- 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 diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/sun/text/resources/LocaleDataTest.java --- 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 * */ diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/sun/tools/jmap/heapconfig/JMapHeapConfigTest.java --- 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[] = { diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/sun/tools/jmap/heapconfig/LingeredApp.java --- 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 storedAppOutput; - - /* - * Drain child process output, store it into string array - */ - class InputGobbler extends Thread { - - InputStream is; - List astr; - - InputGobbler(InputStream is, List 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 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 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 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 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 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); - } -} diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/sun/tools/jmap/heapconfig/LingeredAppTest.java --- 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 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); - } - } -} diff -r 07cd15548b1b -r d24a2c340a47 jdk/test/sun/tools/jmap/heapconfig/TmtoolTestScenario.java --- 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;