You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jdo-commits@db.apache.org by mb...@apache.org on 2023/01/12 19:15:56 UTC

[db-jdo] branch main updated: JDO-823: Fix sonarcloud issues of type Code Smells (#67)

This is an automated email from the ASF dual-hosted git repository.

mbo pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/db-jdo.git


The following commit(s) were added to refs/heads/main by this push:
     new f748519a JDO-823: Fix sonarcloud issues of type Code Smells (#67)
f748519a is described below

commit f748519af23dfb257810c8557e04602a99ee7b77
Author: Michael Bouschen <mb...@apache.org>
AuthorDate: Thu Jan 12 20:15:51 2023 +0100

    JDO-823: Fix sonarcloud issues of type Code Smells (#67)
    
    * JDO-823: Methods should not be empty
    
    * JDO-823: Child class fields should not shadow parent class fields
    
    * JDO-823: Tests should include assertions
    
    * JDO-823: String literals should not be duplicated
    
    * JDO-823: A conditionally executed single line should be denoted by indentation
    
    * JDO-823: Constant names should comply with a naming convention
    
    * JDO-823: "switch" statements should have "default" clauses
    
    * JDO-823: "@Override" should be used on overriding and implementing methods
    
    * JDO-823: JUnit assertTrue/assertFalse should be simplified to the corresponding dedicated assertion
    
    * JDO-823: Using Constants prefix when accessing constants from the Constants interface
    
    * JDO-823: Sections of code should not be commented out
    
    * JDO-823: Nested blocks of code should not be left empty
    
    * JDO-823: "toString()" should never be called on a String object
    
    * JDO-823: Local variables should not be declared and then immediately returned or thrown
    
    * JDO-823: Field names should comply with a naming convention
    
    * JDO-823: Collection.isEmpty() should be used to test for emptiness
    
    * JDO-823: Deprecated "${pom}" properties should not be used
    
    * JDO-823: Jump statements should not be redundant
    
    * JDO-823: Review comments from Tilman
---
 api/src/main/java/javax/jdo/Enhancer.java          |  41 +++---
 api/src/main/java/javax/jdo/JDOHelper.java         | 140 ++++++++++++---------
 api/src/main/java/javax/jdo/LegacyJava.java        |  10 +-
 api/src/main/java/javax/jdo/ObjectState.java       |   1 +
 .../java/javax/jdo/datastore/DataStoreCache.java   |  96 ++++++++++----
 .../main/java/javax/jdo/identity/ByteIdentity.java |   4 +
 .../main/java/javax/jdo/identity/CharIdentity.java |   4 +
 .../main/java/javax/jdo/identity/IntIdentity.java  |   4 +
 .../main/java/javax/jdo/identity/LongIdentity.java |   4 +
 .../java/javax/jdo/identity/ShortIdentity.java     |   4 +
 .../java/javax/jdo/identity/StringIdentity.java    |   3 +
 .../javax/jdo/listener/InstanceLifecycleEvent.java |  12 +-
 api/src/main/java/javax/jdo/spi/JDOImplHelper.java |  10 +-
 .../test/java/javax/jdo/AbstractJDOConfigTest.java |   3 +-
 api/src/test/java/javax/jdo/EnhancerTest.java      |   6 +-
 .../test/java/javax/jdo/JDOHelperConfigTest.java   |  85 ++++++++-----
 api/src/test/java/javax/jdo/JDOHelperTest.java     |  53 ++++----
 api/src/test/java/javax/jdo/PMFService.java        |   5 +-
 .../java/javax/jdo/identity/ByteIdentityTest.java  |  16 +--
 .../java/javax/jdo/identity/CharIdentityTest.java  |  16 +--
 .../java/javax/jdo/identity/IntIdentityTest.java   |  16 +--
 .../java/javax/jdo/identity/LongIdentityTest.java  |  18 +--
 .../javax/jdo/identity/ObjectIdentityTest.java     |  83 +++++++-----
 .../java/javax/jdo/identity/ShortIdentityTest.java |  16 +--
 .../javax/jdo/identity/StringIdentityTest.java     |  12 +-
 .../test/java/javax/jdo/spi/JDOImplHelperTest.java |  13 +-
 api/src/test/java/javax/jdo/stub/StubPMF.java      |  52 ++++----
 .../org/apache/jdo/exectck/AbstractTCKMojo.java    |   2 +-
 .../main/java/org/apache/jdo/exectck/Enhance.java  |  53 ++++----
 .../java/org/apache/jdo/exectck/InstallSchema.java |  10 +-
 .../java/org/apache/jdo/exectck/PropertyUtils.java |   4 -
 .../main/java/org/apache/jdo/exectck/RunTCK.java   |  33 ++---
 parent-pom/pom.xml                                 |   4 +-
 .../tck/api/persistencemanager/GetProperties.java  |  46 +++----
 .../SetTransactionIsolationLevel.java              |  16 ++-
 .../jdo/tck/transactions/SetIsolationLevel.java    |   8 +-
 36 files changed, 536 insertions(+), 367 deletions(-)

diff --git a/api/src/main/java/javax/jdo/Enhancer.java b/api/src/main/java/javax/jdo/Enhancer.java
index d8dd9c6c..a0be9bae 100644
--- a/api/src/main/java/javax/jdo/Enhancer.java
+++ b/api/src/main/java/javax/jdo/Enhancer.java
@@ -85,6 +85,11 @@ public class Enhancer {
   /** Class file suffix */
   private static final String CLASS_FILE_SUFFIX = ".class"; // NOI18N
 
+  private static final String MSG_ENHANCER_CLASS_PATH = "MSG_EnhancerClassPath"; // NOI18N
+  private static final String MSG_ENHANCER_PROCESSING = "MSG_EnhancerProcessing"; // NOI18N
+  private static final String MSG_ENHANCER_PROPERTY = "MSG_EnhancerProperty"; // NOI18N
+  private static final String MSG_ENHANCER_USAGE = "MSG_EnhancerUsage"; // NOI18N
+
   /** Error indicator */
   private boolean error = false;
   /** If set, process parameters, print usage, and exit. */
@@ -155,11 +160,11 @@ public class Enhancer {
       properties = enhancer.getProperties();
       addVerboseMessage("MSG_EnhancerClass", enhancer.getClass().getName()); // NOI18N
       addVerboseMessage(
-          "MSG_EnhancerProperty",
-          PROPERTY_ENHANCER_VENDOR_NAME, // NOI18N
+          MSG_ENHANCER_PROPERTY,
+          PROPERTY_ENHANCER_VENDOR_NAME,
           properties.getProperty(PROPERTY_ENHANCER_VENDOR_NAME));
       addVerboseMessage(
-          "MSG_EnhancerProperty",
+          MSG_ENHANCER_PROPERTY,
           PROPERTY_ENHANCER_VERSION_NUMBER, // NOI18N
           properties.getProperty(PROPERTY_ENHANCER_VERSION_NUMBER));
       Set<Entry<Object, Object>> props = properties.entrySet();
@@ -167,7 +172,7 @@ public class Enhancer {
         if (!(PROPERTY_ENHANCER_VENDOR_NAME.equals(entry.getKey())
             || PROPERTY_ENHANCER_VERSION_NUMBER.equals(entry.getKey()))) {
           addVerboseMessage(
-              "MSG_EnhancerProperty",
+              MSG_ENHANCER_PROPERTY,
               (String) entry.getKey(), // NOI18N
               (String) entry.getValue());
         }
@@ -185,7 +190,7 @@ public class Enhancer {
       if (numberOfFiles != 0) {
         enhancer.addFiles(jdoFileNames.toArray(new String[numberOfFiles]));
       }
-      if (0 < jarFileNames.size()) {
+      if (!jarFileNames.isEmpty()) {
         for (String jarFileName : jarFileNames) {
           enhancer.addJar(jarFileName);
         }
@@ -222,11 +227,11 @@ public class Enhancer {
     parseFiles(fileNames.toArray(new String[fileNames.size()]), true, recurse);
     loader = prepareClassLoader(classPath);
     if (error) {
-      addErrorMessage(msg.msg("MSG_EnhancerUsage")); // NOI18N
+      addErrorMessage(msg.msg(MSG_ENHANCER_USAGE)); // NOI18N
       exit(ENHANCER_USAGE_ERROR); // error exit
     }
     if (printAndExit) {
-      addVerboseMessage("MSG_EnhancerUsage"); // NOI18N
+      addVerboseMessage(MSG_ENHANCER_USAGE); // NOI18N
       exit(0); // good exit
     }
   }
@@ -250,19 +255,19 @@ public class Enhancer {
         if (arg.startsWith("-")) { // NOI18N
           String option = arg.substring(1);
           if ("help".equals(option)) { // NOI18N
-            addVerboseMessage("MSG_EnhancerProcessing", "-help"); // NOI18N
+            addVerboseMessage(MSG_ENHANCER_PROCESSING, "-help"); // NOI18N
             setPrintAndExit();
           } else if ("h".equals(option)) { // NOI18N
-            addVerboseMessage("MSG_EnhancerProcessing", "-h"); // NOI18N
+            addVerboseMessage(MSG_ENHANCER_PROCESSING, "-h"); // NOI18N
             setPrintAndExit();
           } else if ("v".equals(option)) { // NOI18N
-            addVerboseMessage("MSG_EnhancerProcessing", "-v"); // NOI18N
+            addVerboseMessage(MSG_ENHANCER_PROCESSING, "-v"); // NOI18N
             verbose = true;
           } else if ("verbose".equals(option)) { // NOI18N
-            addVerboseMessage("MSG_EnhancerProcessing", "-verbose"); // NOI18N
+            addVerboseMessage(MSG_ENHANCER_PROCESSING, "-verbose"); // NOI18N
             verbose = true;
           } else if ("pu".equals(option)) { // NOI18N
-            if (hasNextArgument("MSG_EnhancerProcessing", "-pu", i, args.length)) { // NOI18N
+            if (hasNextArgument(MSG_ENHANCER_PROCESSING, "-pu", i, args.length)) { // NOI18N
               String puName = args[++i];
               addVerboseMessage("MSG_EnhancerPersistenceUnitName", puName); // NOI18N
               persistenceUnitNames.add(puName);
@@ -270,24 +275,24 @@ public class Enhancer {
               setError();
             }
           } else if ("cp".equals(option)) { // NOI18N
-            if (hasNextArgument("MSG_EnhancerProcessing", "-cp", i, args.length)) { // NOI18N
+            if (hasNextArgument(MSG_ENHANCER_PROCESSING, "-cp", i, args.length)) { // NOI18N
               classPath = args[++i];
-              addVerboseMessage("MSG_EnhancerClassPath", classPath); // NOI18N
+              addVerboseMessage(MSG_ENHANCER_CLASS_PATH, classPath); // NOI18N
             } else {
               setError();
             }
           } else if ("d".equals(option)) { // NOI18N
-            if (hasNextArgument("MSG_EnhancerProcessing", "-d", i, args.length)) { // NOI18N
+            if (hasNextArgument(MSG_ENHANCER_PROCESSING, "-d", i, args.length)) { // NOI18N
               directoryName = args[++i];
               addVerboseMessage("MSG_EnhancerOutputDirectory", directoryName); // NOI18N
             } else {
               setError();
             }
           } else if ("checkonly".equals(option)) { // NOI18N
-            addVerboseMessage("MSG_EnhancerProcessing", "-checkonly"); // NOI18N
+            addVerboseMessage(MSG_ENHANCER_PROCESSING, "-checkonly"); // NOI18N
             checkOnly = true;
           } else if ("r".equals(option)) { // NOI18N
-            addVerboseMessage("MSG_EnhancerProcessing", "-r"); // NOI18N
+            addVerboseMessage(MSG_ENHANCER_PROCESSING, "-r"); // NOI18N
             recurse = true;
           } else {
             setError();
@@ -386,7 +391,7 @@ public class Enhancer {
       URI uri = file.toURI();
       try {
         URL url = uri.toURL();
-        addVerboseMessage("MSG_EnhancerClassPath", url.toString());
+        addVerboseMessage(MSG_ENHANCER_CLASS_PATH, url.toString());
         urls.add(url);
       } catch (MalformedURLException e) {
         setError();
diff --git a/api/src/main/java/javax/jdo/JDOHelper.java b/api/src/main/java/javax/jdo/JDOHelper.java
index f1103aef..e4d2268f 100644
--- a/api/src/main/java/javax/jdo/JDOHelper.java
+++ b/api/src/main/java/javax/jdo/JDOHelper.java
@@ -87,6 +87,8 @@ public class JDOHelper implements Constants {
   /** The Internationalization message helper. */
   private static final I18NHelper MSG = I18NHelper.getInstance("javax.jdo.Bundle"); // NOI18N
 
+  private static final String EXC_GET_PMF_IOEXCEPTION_RSRC = "EXC_GetPMFIOExceptionRsrc"; // NOI18N
+
   /**
    * Creates a map from jdoconfig.xsd element attributes to PMF properties.
    *
@@ -95,27 +97,39 @@ public class JDOHelper implements Constants {
   static Map<String, String> createAttributePropertyXref() {
     Map<String, String> xref = new HashMap<>();
 
-    xref.put(PMF_ATTRIBUTE_CLASS, PROPERTY_PERSISTENCE_MANAGER_FACTORY_CLASS);
-    xref.put(PMF_ATTRIBUTE_CONNECTION_DRIVER_NAME, PROPERTY_CONNECTION_DRIVER_NAME);
-    xref.put(PMF_ATTRIBUTE_CONNECTION_FACTORY_NAME, PROPERTY_CONNECTION_FACTORY_NAME);
-    xref.put(PMF_ATTRIBUTE_CONNECTION_FACTORY2_NAME, PROPERTY_CONNECTION_FACTORY2_NAME);
-    xref.put(PMF_ATTRIBUTE_CONNECTION_PASSWORD, PROPERTY_CONNECTION_PASSWORD);
-    xref.put(PMF_ATTRIBUTE_CONNECTION_URL, PROPERTY_CONNECTION_URL);
-    xref.put(PMF_ATTRIBUTE_CONNECTION_USER_NAME, PROPERTY_CONNECTION_USER_NAME);
-    xref.put(PMF_ATTRIBUTE_IGNORE_CACHE, PROPERTY_IGNORE_CACHE);
-    xref.put(PMF_ATTRIBUTE_MAPPING, PROPERTY_MAPPING);
-    xref.put(PMF_ATTRIBUTE_MULTITHREADED, PROPERTY_MULTITHREADED);
-    xref.put(PMF_ATTRIBUTE_NONTRANSACTIONAL_READ, PROPERTY_NONTRANSACTIONAL_READ);
-    xref.put(PMF_ATTRIBUTE_NONTRANSACTIONAL_WRITE, PROPERTY_NONTRANSACTIONAL_WRITE);
-    xref.put(PMF_ATTRIBUTE_OPTIMISTIC, PROPERTY_OPTIMISTIC);
-    xref.put(PMF_ATTRIBUTE_PERSISTENCE_UNIT_NAME, PROPERTY_PERSISTENCE_UNIT_NAME);
-    xref.put(PMF_ATTRIBUTE_NAME, PROPERTY_NAME);
-    xref.put(PMF_ATTRIBUTE_RESTORE_VALUES, PROPERTY_RESTORE_VALUES);
-    xref.put(PMF_ATTRIBUTE_RETAIN_VALUES, PROPERTY_RETAIN_VALUES);
-    xref.put(PMF_ATTRIBUTE_DETACH_ALL_ON_COMMIT, PROPERTY_DETACH_ALL_ON_COMMIT);
-    xref.put(PMF_ATTRIBUTE_SERVER_TIME_ZONE_ID, PROPERTY_SERVER_TIME_ZONE_ID);
-    xref.put(PMF_ATTRIBUTE_DATASTORE_READ_TIMEOUT_MILLIS, PROPERTY_DATASTORE_READ_TIMEOUT_MILLIS);
-    xref.put(PMF_ATTRIBUTE_DATASTORE_WRITE_TIMEOUT_MILLIS, PROPERTY_DATASTORE_WRITE_TIMEOUT_MILLIS);
+    xref.put(Constants.PMF_ATTRIBUTE_CLASS, Constants.PROPERTY_PERSISTENCE_MANAGER_FACTORY_CLASS);
+    xref.put(
+        Constants.PMF_ATTRIBUTE_CONNECTION_DRIVER_NAME, Constants.PROPERTY_CONNECTION_DRIVER_NAME);
+    xref.put(
+        Constants.PMF_ATTRIBUTE_CONNECTION_FACTORY_NAME,
+        Constants.PROPERTY_CONNECTION_FACTORY_NAME);
+    xref.put(
+        Constants.PMF_ATTRIBUTE_CONNECTION_FACTORY2_NAME,
+        Constants.PROPERTY_CONNECTION_FACTORY2_NAME);
+    xref.put(Constants.PMF_ATTRIBUTE_CONNECTION_PASSWORD, Constants.PROPERTY_CONNECTION_PASSWORD);
+    xref.put(Constants.PMF_ATTRIBUTE_CONNECTION_URL, Constants.PROPERTY_CONNECTION_URL);
+    xref.put(Constants.PMF_ATTRIBUTE_CONNECTION_USER_NAME, Constants.PROPERTY_CONNECTION_USER_NAME);
+    xref.put(Constants.PMF_ATTRIBUTE_IGNORE_CACHE, Constants.PROPERTY_IGNORE_CACHE);
+    xref.put(Constants.PMF_ATTRIBUTE_MAPPING, Constants.PROPERTY_MAPPING);
+    xref.put(Constants.PMF_ATTRIBUTE_MULTITHREADED, Constants.PROPERTY_MULTITHREADED);
+    xref.put(
+        Constants.PMF_ATTRIBUTE_NONTRANSACTIONAL_READ, Constants.PROPERTY_NONTRANSACTIONAL_READ);
+    xref.put(
+        Constants.PMF_ATTRIBUTE_NONTRANSACTIONAL_WRITE, Constants.PROPERTY_NONTRANSACTIONAL_WRITE);
+    xref.put(Constants.PMF_ATTRIBUTE_OPTIMISTIC, Constants.PROPERTY_OPTIMISTIC);
+    xref.put(
+        Constants.PMF_ATTRIBUTE_PERSISTENCE_UNIT_NAME, Constants.PROPERTY_PERSISTENCE_UNIT_NAME);
+    xref.put(Constants.PMF_ATTRIBUTE_NAME, Constants.PROPERTY_NAME);
+    xref.put(Constants.PMF_ATTRIBUTE_RESTORE_VALUES, Constants.PROPERTY_RESTORE_VALUES);
+    xref.put(Constants.PMF_ATTRIBUTE_RETAIN_VALUES, Constants.PROPERTY_RETAIN_VALUES);
+    xref.put(Constants.PMF_ATTRIBUTE_DETACH_ALL_ON_COMMIT, Constants.PROPERTY_DETACH_ALL_ON_COMMIT);
+    xref.put(Constants.PMF_ATTRIBUTE_SERVER_TIME_ZONE_ID, Constants.PROPERTY_SERVER_TIME_ZONE_ID);
+    xref.put(
+        Constants.PMF_ATTRIBUTE_DATASTORE_READ_TIMEOUT_MILLIS,
+        Constants.PROPERTY_DATASTORE_READ_TIMEOUT_MILLIS);
+    xref.put(
+        Constants.PMF_ATTRIBUTE_DATASTORE_WRITE_TIMEOUT_MILLIS,
+        Constants.PROPERTY_DATASTORE_WRITE_TIMEOUT_MILLIS);
 
     return Collections.unmodifiableMap(xref);
   }
@@ -146,7 +160,9 @@ public class JDOHelper implements Constants {
    *
    * @since 2.1
    */
-  public JDOHelper() {}
+  public JDOHelper() {
+    // This method is deliberately left empty, see javadoc for more info.
+  }
 
   /**
    * The stateless instance used for handling non-binary-compatible implementations of
@@ -568,7 +584,8 @@ public class JDOHelper implements Constants {
    */
   public static PersistenceManagerFactory getPersistenceManagerFactory() {
     ClassLoader cl = getContextClassLoader();
-    return getPersistenceManagerFactory(null, ANONYMOUS_PERSISTENCE_MANAGER_FACTORY_NAME, cl, cl);
+    return getPersistenceManagerFactory(
+        null, Constants.ANONYMOUS_PERSISTENCE_MANAGER_FACTORY_NAME, cl, cl);
   }
 
   /**
@@ -582,7 +599,7 @@ public class JDOHelper implements Constants {
    */
   public static PersistenceManagerFactory getPersistenceManagerFactory(ClassLoader pmfClassLoader) {
     return getPersistenceManagerFactory(
-        null, ANONYMOUS_PERSISTENCE_MANAGER_FACTORY_NAME, pmfClassLoader, pmfClassLoader);
+        null, Constants.ANONYMOUS_PERSISTENCE_MANAGER_FACTORY_NAME, pmfClassLoader, pmfClassLoader);
   }
 
   /**
@@ -693,7 +710,7 @@ public class JDOHelper implements Constants {
     JDOImplHelper.assertOnlyKnownStandardProperties(props);
 
     // first try to get the class name from the properties object.
-    String pmfClassName = (String) props.get(PROPERTY_PERSISTENCE_MANAGER_FACTORY_CLASS);
+    String pmfClassName = (String) props.get(Constants.PROPERTY_PERSISTENCE_MANAGER_FACTORY_CLASS);
 
     if (!isNullOrBlank(pmfClassName)) {
       // a valid name was returned from the properties.
@@ -719,7 +736,7 @@ public class JDOHelper implements Constants {
        */
       Enumeration<URL> urls = null;
       try {
-        urls = getResources(pmfClassLoader, SERVICE_LOOKUP_PMF_RESOURCE_NAME);
+        urls = getResources(pmfClassLoader, Constants.SERVICE_LOOKUP_PMF_RESOURCE_NAME);
       } catch (Throwable ex) {
         exceptions.add(ex);
       }
@@ -731,10 +748,8 @@ public class JDOHelper implements Constants {
             pmfClassName = getClassNameFromURL(urls.nextElement());
 
             // return the implementation that is valid.
-            PersistenceManagerFactory pmf =
-                invokeGetPersistenceManagerFactoryOnImplementation(
-                    pmfClassName, overrides, props, pmfClassLoader);
-            return pmf;
+            return invokeGetPersistenceManagerFactoryOnImplementation(
+                pmfClassName, overrides, props, pmfClassLoader);
 
           } catch (Throwable ex) {
 
@@ -946,8 +961,8 @@ public class JDOHelper implements Constants {
 
     Map<Object, Object> props = null;
     // trim spaces from name and ensure non-null
-    name = (name == null ? ANONYMOUS_PERSISTENCE_MANAGER_FACTORY_NAME : name.trim());
-    if (!ANONYMOUS_PERSISTENCE_MANAGER_FACTORY_NAME.equals(name)) {
+    name = (name == null ? Constants.ANONYMOUS_PERSISTENCE_MANAGER_FACTORY_NAME : name.trim());
+    if (!Constants.ANONYMOUS_PERSISTENCE_MANAGER_FACTORY_NAME.equals(name)) {
       props = loadPropertiesFromResource(resourceLoader, name);
     }
 
@@ -955,8 +970,8 @@ public class JDOHelper implements Constants {
       // add the SPI property to inform the implementation that
       // the PMF was configured by the given resource name
       // and not via named PMF for proper deserialization
-      props.put(PROPERTY_SPI_RESOURCE_NAME, name);
-      props.remove(PROPERTY_NAME);
+      props.put(Constants.PROPERTY_SPI_RESOURCE_NAME, name);
+      props.remove(Constants.PROPERTY_NAME);
       return getPersistenceManagerFactory(overrides, props, pmfLoader);
     }
     // props were null; try getting from jdoconfig.xml
@@ -964,15 +979,15 @@ public class JDOHelper implements Constants {
     if (props != null) {
       // inform the impl that the config came from a jdoconfig.xml
       // element with the given name
-      props.put(PROPERTY_NAME, name);
-      props.remove(PROPERTY_SPI_RESOURCE_NAME);
+      props.put(Constants.PROPERTY_NAME, name);
+      props.remove(Constants.PROPERTY_SPI_RESOURCE_NAME);
       // we have loaded a Properties, delegate to implementation
       return getPersistenceManagerFactory(overrides, props, pmfLoader);
     }
     // no properties found; last try to see if name is a JPA PU name
-    if (!ANONYMOUS_PERSISTENCE_MANAGER_FACTORY_NAME.equals(name)) {
+    if (!Constants.ANONYMOUS_PERSISTENCE_MANAGER_FACTORY_NAME.equals(name)) {
       props = new Properties();
-      props.put(PROPERTY_PERSISTENCE_UNIT_NAME, name);
+      props.put(Constants.PROPERTY_PERSISTENCE_UNIT_NAME, name);
       return getPersistenceManagerFactory(overrides, props, pmfLoader);
     }
 
@@ -1096,12 +1111,13 @@ public class JDOHelper implements Constants {
         props.load(in);
       }
     } catch (IOException ioe) {
-      throw new JDOFatalUserException(MSG.msg("EXC_GetPMFIOExceptionRsrc", name), ioe); // NOI18N
+      throw new JDOFatalUserException(MSG.msg(EXC_GET_PMF_IOEXCEPTION_RSRC, name), ioe); // NOI18N
     } finally {
       if (in != null) {
         try {
           in.close();
         } catch (IOException ioe) {
+          // this code block is deliberately left empty
         }
       }
     }
@@ -1117,7 +1133,7 @@ public class JDOHelper implements Constants {
    */
   protected static Map<Object, Object> getPropertiesFromJdoconfig(
       String name, ClassLoader resourceLoader) {
-    return getNamedPMFProperties(name, resourceLoader, JDOCONFIG_RESOURCE_NAME);
+    return getNamedPMFProperties(name, resourceLoader, Constants.JDOCONFIG_RESOURCE_NAME);
   }
 
   /**
@@ -1184,7 +1200,7 @@ public class JDOHelper implements Constants {
     } catch (FactoryConfigurationError e) {
       throw new JDOFatalUserException(MSG.msg("ERR_NoDocumentBuilderFactory"), e);
     } catch (IOException ioe) {
-      throw new JDOFatalUserException(MSG.msg("EXC_GetPMFIOExceptionRsrc", name), ioe); // NOI18N
+      throw new JDOFatalUserException(MSG.msg(EXC_GET_PMF_IOEXCEPTION_RSRC, name), ioe); // NOI18N
     }
 
     // done with reading all config resources;
@@ -1266,7 +1282,7 @@ public class JDOHelper implements Constants {
             MSG.msg("EXC_InvalidJDOConfigNoRoot", url.toExternalForm()));
       }
 
-      NodeList pmfs = root.getElementsByTagName(ELEMENT_PERSISTENCE_MANAGER_FACTORY);
+      NodeList pmfs = root.getElementsByTagName(Constants.ELEMENT_PERSISTENCE_MANAGER_FACTORY);
 
       for (int i = 0; i < pmfs.getLength(); i++) {
         Node pmfElement = pmfs.item(i);
@@ -1276,8 +1292,8 @@ public class JDOHelper implements Constants {
         Properties pmfPropertiesFromElements = readPropertiesFromPMFSubelements(pmfElement, url);
 
         // for informative error handling, get name (or names) now
-        String pmfNameFromAtts = pmfPropertiesFromAttributes.getProperty(PROPERTY_NAME);
-        String pmfNameFromElem = pmfPropertiesFromElements.getProperty(PROPERTY_NAME);
+        String pmfNameFromAtts = pmfPropertiesFromAttributes.getProperty(Constants.PROPERTY_NAME);
+        String pmfNameFromElem = pmfPropertiesFromElements.getProperty(Constants.PROPERTY_NAME);
 
         String pmfName = null;
         if (isNullOrBlank(pmfNameFromAtts)) {
@@ -1287,7 +1303,7 @@ public class JDOHelper implements Constants {
             pmfName = pmfNameFromElem;
           } else {
             // PMF name not given at all, means the "anonymous" PMF
-            pmfName = ANONYMOUS_PERSISTENCE_MANAGER_FACTORY_NAME;
+            pmfName = Constants.ANONYMOUS_PERSISTENCE_MANAGER_FACTORY_NAME;
           }
         } else {
           // PMF name given in an attribute
@@ -1335,7 +1351,7 @@ public class JDOHelper implements Constants {
       return propertiesByName;
     } catch (IOException ioe) {
       throw new JDOFatalUserException(
-          MSG.msg("EXC_GetPMFIOExceptionRsrc", url.toString()), ioe); // NOI18N
+          MSG.msg(EXC_GET_PMF_IOEXCEPTION_RSRC, url.toString()), ioe); // NOI18N
     } catch (ParserConfigurationException e) {
       throw new JDOFatalInternalException(MSG.msg("EXC_ParserConfigException"), e);
     } catch (SAXParseException e) {
@@ -1397,11 +1413,11 @@ public class JDOHelper implements Constants {
 
       String elementName = element.getNodeName();
       NamedNodeMap attributes = element.getAttributes();
-      if (ELEMENT_PROPERTY.equalsIgnoreCase(elementName)) {
+      if (Constants.ELEMENT_PROPERTY.equalsIgnoreCase(elementName)) {
         // <property name="..." value="..."/>
 
         // get the "name" attribute's value (required)
-        Node nameAtt = attributes.getNamedItem(PROPERTY_ATTRIBUTE_NAME);
+        Node nameAtt = attributes.getNamedItem(Constants.PROPERTY_ATTRIBUTE_NAME);
         if (nameAtt == null) {
           throw new JDOFatalUserException(MSG.msg("EXC_PropertyElementHasNoNameAttribute", url));
         }
@@ -1424,15 +1440,16 @@ public class JDOHelper implements Constants {
         }
 
         // get the "value" attribute's value (optional)
-        Node valueAtt = attributes.getNamedItem(PROPERTY_ATTRIBUTE_VALUE);
+        Node valueAtt = attributes.getNamedItem(Constants.PROPERTY_ATTRIBUTE_VALUE);
         String value = valueAtt == null ? null : valueAtt.getNodeValue().trim();
 
         p.put(propertyName, value);
-      } else if (ELEMENT_INSTANCE_LIFECYCLE_LISTENER.equals(elementName)) {
+      } else if (Constants.ELEMENT_INSTANCE_LIFECYCLE_LISTENER.equals(elementName)) {
         // <instance-lifecycle-listener listener="..." classes="..."/>
 
         // get the "listener" attribute's value
-        Node listenerAtt = attributes.getNamedItem(INSTANCE_LIFECYCLE_LISTENER_ATTRIBUTE_LISTENER);
+        Node listenerAtt =
+            attributes.getNamedItem(Constants.INSTANCE_LIFECYCLE_LISTENER_ATTRIBUTE_LISTENER);
         if (listenerAtt == null) {
           throw new JDOFatalUserException(MSG.msg("EXC_MissingListenerAttribute", url));
         }
@@ -1443,10 +1460,11 @@ public class JDOHelper implements Constants {
 
         // listener properties are of the form
         // "javax.jdo.option.InstanceLifecycleListener." + listener
-        listener = PROPERTY_PREFIX_INSTANCE_LIFECYCLE_LISTENER + listener;
+        listener = Constants.PROPERTY_PREFIX_INSTANCE_LIFECYCLE_LISTENER + listener;
 
         // get the "classes" attribute's value (optional)
-        Node classesAtt = attributes.getNamedItem(INSTANCE_LIFECYCLE_LISTENER_ATTRIBUTE_CLASSES);
+        Node classesAtt =
+            attributes.getNamedItem(Constants.INSTANCE_LIFECYCLE_LISTENER_ATTRIBUTE_CLASSES);
         String value = classesAtt == null ? "" : classesAtt.getNodeValue().trim();
 
         p.put(listener, value);
@@ -1499,6 +1517,7 @@ public class JDOHelper implements Constants {
         try {
           in.close();
         } catch (IOException ioe) {
+          // this code block is deliberately left empty,
         }
     }
   }
@@ -1629,15 +1648,14 @@ public class JDOHelper implements Constants {
     ArrayList<Throwable> exceptions = new ArrayList<>();
     int numberOfJDOEnhancers = 0;
     try {
-      Enumeration<URL> urls = getResources(loader, SERVICE_LOOKUP_ENHANCER_RESOURCE_NAME);
+      Enumeration<URL> urls = getResources(loader, Constants.SERVICE_LOOKUP_ENHANCER_RESOURCE_NAME);
       if (urls != null) {
         while (urls.hasMoreElements()) {
           numberOfJDOEnhancers++;
           try {
             String enhancerClassName = getClassNameFromURL(urls.nextElement());
             Class<?> enhancerClass = forName(enhancerClassName, true, ctrLoader);
-            JDOEnhancer enhancer = (JDOEnhancer) enhancerClass.newInstance();
-            return enhancer;
+            return (JDOEnhancer) enhancerClass.newInstance();
           } catch (Throwable ex) {
             // remember exceptions from failed enhancer invocations
             exceptions.add(ex);
@@ -1704,9 +1722,13 @@ public class JDOHelper implements Constants {
           (PrivilegedExceptionAction<Object>) () -> method.invoke(instance, parameters));
     } catch (PrivilegedActionException ex) {
       Exception cause = ex.getException();
-      if (cause instanceof IllegalAccessException) throw (IllegalAccessException) cause;
-      else // if (cause instanceof InvocationTargetException)
-      throw (InvocationTargetException) cause;
+      if (cause instanceof IllegalAccessException) {
+        throw (IllegalAccessException) cause;
+      } else if (cause instanceof InvocationTargetException) {
+        throw (InvocationTargetException) cause;
+      } else {
+        throw new RuntimeException(cause);
+      }
     }
   }
 
diff --git a/api/src/main/java/javax/jdo/LegacyJava.java b/api/src/main/java/javax/jdo/LegacyJava.java
index 301633c9..983b9846 100644
--- a/api/src/main/java/javax/jdo/LegacyJava.java
+++ b/api/src/main/java/javax/jdo/LegacyJava.java
@@ -46,9 +46,9 @@ import javax.jdo.spi.JDOPermission;
  */
 public class LegacyJava {
 
-  private static final boolean isSecurityDeprecated = initIsSecurityDeprecated();
+  private static final boolean IS_SECURITY_DEPRECATED = initIsSecurityDeprecated();
   private static final Method getSecurityManager =
-      isSecurityDeprecated ? null : findMethod("java.lang.System", "getSecurityManager");
+      IS_SECURITY_DEPRECATED ? null : findMethod("java.lang.System", "getSecurityManager");
   private static final SecurityManager securityManager =
       getSecurityManager == null ? null : new SecurityManager();
   public static final Method doPrivilegedAction =
@@ -90,7 +90,7 @@ public class LegacyJava {
    * @return 'true' if the security manager is deprecated or does not exist.
    */
   public static boolean isSecurityManagerDeprecated() {
-    return isSecurityDeprecated;
+    return IS_SECURITY_DEPRECATED;
   }
 
   /**
@@ -137,7 +137,7 @@ public class LegacyJava {
   }
 
   private static Method findMethod(String cName, String mName, Class<?>... args) {
-    if (isSecurityDeprecated) {
+    if (IS_SECURITY_DEPRECATED) {
       return null;
     }
     try {
@@ -149,7 +149,7 @@ public class LegacyJava {
   }
 
   private static Method findMethod(String cName, String mName, String cNameAlt, Class<?>... args) {
-    if (isSecurityDeprecated) {
+    if (IS_SECURITY_DEPRECATED) {
       cName = cNameAlt;
     }
     try {
diff --git a/api/src/main/java/javax/jdo/ObjectState.java b/api/src/main/java/javax/jdo/ObjectState.java
index 7b407e36..1956f36b 100644
--- a/api/src/main/java/javax/jdo/ObjectState.java
+++ b/api/src/main/java/javax/jdo/ObjectState.java
@@ -46,6 +46,7 @@ public enum ObjectState {
     this.value = value;
   }
 
+  @Override
   public String toString() {
     return value;
   }
diff --git a/api/src/main/java/javax/jdo/datastore/DataStoreCache.java b/api/src/main/java/javax/jdo/datastore/DataStoreCache.java
index d6d08501..fcdb4e01 100644
--- a/api/src/main/java/javax/jdo/datastore/DataStoreCache.java
+++ b/api/src/main/java/javax/jdo/datastore/DataStoreCache.java
@@ -147,32 +147,74 @@ public interface DataStoreCache {
    */
   public class EmptyDataStoreCache implements DataStoreCache {
 
-    public EmptyDataStoreCache() {}
-
-    public void evict(Object oid) {}
-
-    public void evictAll() {}
-
-    public void evictAll(Object... oids) {}
-
-    public void evictAll(Collection<?> oids) {}
-
-    public void evictAll(boolean subclasses, Class<?> pcClass) {}
-
-    public void pin(Object oid) {}
-
-    public void pinAll(Object... oids) {}
-
-    public void pinAll(Collection<?> oids) {}
-
-    public void pinAll(boolean subclasses, Class<?> pcClass) {}
-
-    public void unpin(Object oid) {}
-
-    public void unpinAll(Object... oids) {}
-
-    public void unpinAll(Collection<?> oids) {}
-
-    public void unpinAll(boolean subclasses, Class<?> pcClass) {}
+    public EmptyDataStoreCache() {
+      // This method is deliberately left empty,
+      // to be used by an implementation that does not support a second-level cache.
+    }
+
+    public void evict(Object oid) {
+      // This method is deliberately left empty,
+      // to be used by an implementation that does not support a second-level cache.
+    }
+
+    public void evictAll() {
+      // This method is deliberately left empty,
+      // to be used by an implementation that does not support a second-level cache.
+    }
+
+    public void evictAll(Object... oids) {
+      // This method is deliberately left empty,
+      // to be used by an implementation that does not support a second-level cache.
+    }
+
+    public void evictAll(Collection<?> oids) {
+      // This method is deliberately left empty,
+      // to be used by an implementation that does not support a second-level cache.
+    }
+
+    public void evictAll(boolean subclasses, Class<?> pcClass) {
+      // This method is deliberately left empty,
+      // to be used by an implementation that does not support a second-level cache.
+    }
+
+    public void pin(Object oid) {
+      // This method is deliberately left empty,
+      // to be used by an implementation that does not support a second-level cache.
+    }
+
+    public void pinAll(Object... oids) {
+      // This method is deliberately left empty,
+      // to be used by an implementation that does not support a second-level cache.
+    }
+
+    public void pinAll(Collection<?> oids) {
+      // This method is deliberately left empty,
+      // to be used by an implementation that does not support a second-level cache.
+    }
+
+    public void pinAll(boolean subclasses, Class<?> pcClass) {
+      // This method is deliberately left empty,
+      // to be used by an implementation that does not support a second-level cache.
+    }
+
+    public void unpin(Object oid) {
+      // This method is deliberately left empty,
+      // to be used by an implementation that does not support a second-level cache.
+    }
+
+    public void unpinAll(Object... oids) {
+      // This method is deliberately left empty,
+      // to be used by an implementation that does not support a second-level cache.
+    }
+
+    public void unpinAll(Collection<?> oids) {
+      // This method is deliberately left empty,
+      // to be used by an implementation that does not support a second-level cache.
+    }
+
+    public void unpinAll(boolean subclasses, Class<?> pcClass) {
+      // This method is deliberately left empty,
+      // to be used by an implementation that does not support a second-level cache.
+    }
   }
 }
diff --git a/api/src/main/java/javax/jdo/identity/ByteIdentity.java b/api/src/main/java/javax/jdo/identity/ByteIdentity.java
index 42d04b2b..b3e4ca9b 100644
--- a/api/src/main/java/javax/jdo/identity/ByteIdentity.java
+++ b/api/src/main/java/javax/jdo/identity/ByteIdentity.java
@@ -106,6 +106,7 @@ public class ByteIdentity extends SingleFieldIdentity<ByteIdentity> {
    * @param obj the other object
    * @return true if both objects represent the same object id
    */
+  @Override
   public boolean equals(Object obj) {
     if (this == obj) {
       return true;
@@ -138,6 +139,7 @@ public class ByteIdentity extends SingleFieldIdentity<ByteIdentity> {
    * @return the key as an Object
    * @since 2.0
    */
+  @Override
   protected Object createKeyAsObject() {
     return Byte.valueOf(key);
   }
@@ -147,6 +149,7 @@ public class ByteIdentity extends SingleFieldIdentity<ByteIdentity> {
    *
    * @param out the output
    */
+  @Override
   public void writeExternal(ObjectOutput out) throws IOException {
     super.writeExternal(out);
     out.writeByte(key);
@@ -157,6 +160,7 @@ public class ByteIdentity extends SingleFieldIdentity<ByteIdentity> {
    *
    * @param in the input
    */
+  @Override
   public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
     super.readExternal(in);
     key = in.readByte();
diff --git a/api/src/main/java/javax/jdo/identity/CharIdentity.java b/api/src/main/java/javax/jdo/identity/CharIdentity.java
index 59bd5eea..2f6456bb 100644
--- a/api/src/main/java/javax/jdo/identity/CharIdentity.java
+++ b/api/src/main/java/javax/jdo/identity/CharIdentity.java
@@ -107,6 +107,7 @@ public class CharIdentity extends SingleFieldIdentity<CharIdentity> {
    * @param obj the other object
    * @return true if both objects represent the same object id
    */
+  @Override
   public boolean equals(Object obj) {
     if (this == obj) {
       return true;
@@ -139,6 +140,7 @@ public class CharIdentity extends SingleFieldIdentity<CharIdentity> {
    * @return the key as an Object
    * @since 2.0
    */
+  @Override
   protected Object createKeyAsObject() {
     return Character.valueOf(key);
   }
@@ -148,6 +150,7 @@ public class CharIdentity extends SingleFieldIdentity<CharIdentity> {
    *
    * @param out the output
    */
+  @Override
   public void writeExternal(ObjectOutput out) throws IOException {
     super.writeExternal(out);
     out.writeChar(key);
@@ -158,6 +161,7 @@ public class CharIdentity extends SingleFieldIdentity<CharIdentity> {
    *
    * @param in the input
    */
+  @Override
   public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
     super.readExternal(in);
     key = in.readChar();
diff --git a/api/src/main/java/javax/jdo/identity/IntIdentity.java b/api/src/main/java/javax/jdo/identity/IntIdentity.java
index 5f973cd2..f95d6e16 100644
--- a/api/src/main/java/javax/jdo/identity/IntIdentity.java
+++ b/api/src/main/java/javax/jdo/identity/IntIdentity.java
@@ -104,6 +104,7 @@ public class IntIdentity extends SingleFieldIdentity<IntIdentity> {
    * @param obj the other object
    * @return true if both objects represent the same object id
    */
+  @Override
   public boolean equals(Object obj) {
     if (this == obj) {
       return true;
@@ -136,6 +137,7 @@ public class IntIdentity extends SingleFieldIdentity<IntIdentity> {
    * @return the key as an Object
    * @since 2.0
    */
+  @Override
   protected Object createKeyAsObject() {
     return Integer.valueOf(key);
   }
@@ -145,6 +147,7 @@ public class IntIdentity extends SingleFieldIdentity<IntIdentity> {
    *
    * @param out the output
    */
+  @Override
   public void writeExternal(ObjectOutput out) throws IOException {
     super.writeExternal(out);
     out.writeInt(key);
@@ -155,6 +158,7 @@ public class IntIdentity extends SingleFieldIdentity<IntIdentity> {
    *
    * @param in the input
    */
+  @Override
   public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
     super.readExternal(in);
     key = in.readInt();
diff --git a/api/src/main/java/javax/jdo/identity/LongIdentity.java b/api/src/main/java/javax/jdo/identity/LongIdentity.java
index 667a3fab..4ceff16c 100644
--- a/api/src/main/java/javax/jdo/identity/LongIdentity.java
+++ b/api/src/main/java/javax/jdo/identity/LongIdentity.java
@@ -105,6 +105,7 @@ public class LongIdentity extends SingleFieldIdentity<LongIdentity> {
    * @param obj the other object
    * @return true if both objects represent the same object id
    */
+  @Override
   public boolean equals(Object obj) {
     if (this == obj) {
       return true;
@@ -150,6 +151,7 @@ public class LongIdentity extends SingleFieldIdentity<LongIdentity> {
    * @return the key as an Object
    * @since 2.0
    */
+  @Override
   protected Object createKeyAsObject() {
     return Long.valueOf(key);
   }
@@ -159,6 +161,7 @@ public class LongIdentity extends SingleFieldIdentity<LongIdentity> {
    *
    * @param out the output
    */
+  @Override
   public void writeExternal(ObjectOutput out) throws IOException {
     super.writeExternal(out);
     out.writeLong(key);
@@ -169,6 +172,7 @@ public class LongIdentity extends SingleFieldIdentity<LongIdentity> {
    *
    * @param in the input
    */
+  @Override
   public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
     super.readExternal(in);
     key = in.readLong();
diff --git a/api/src/main/java/javax/jdo/identity/ShortIdentity.java b/api/src/main/java/javax/jdo/identity/ShortIdentity.java
index 1c4cbf6c..c9d27acf 100644
--- a/api/src/main/java/javax/jdo/identity/ShortIdentity.java
+++ b/api/src/main/java/javax/jdo/identity/ShortIdentity.java
@@ -103,6 +103,7 @@ public class ShortIdentity extends SingleFieldIdentity<ShortIdentity> {
    * @param obj the other object
    * @return true if both objects represent the same object id
    */
+  @Override
   public boolean equals(Object obj) {
     if (this == obj) {
       return true;
@@ -135,6 +136,7 @@ public class ShortIdentity extends SingleFieldIdentity<ShortIdentity> {
    * @return the key as an Object
    * @since 2.0
    */
+  @Override
   protected Object createKeyAsObject() {
     return Short.valueOf(key);
   }
@@ -144,6 +146,7 @@ public class ShortIdentity extends SingleFieldIdentity<ShortIdentity> {
    *
    * @param out the output
    */
+  @Override
   public void writeExternal(ObjectOutput out) throws IOException {
     super.writeExternal(out);
     out.writeShort(key);
@@ -154,6 +157,7 @@ public class ShortIdentity extends SingleFieldIdentity<ShortIdentity> {
    *
    * @param in the input
    */
+  @Override
   public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
     super.readExternal(in);
     key = in.readShort();
diff --git a/api/src/main/java/javax/jdo/identity/StringIdentity.java b/api/src/main/java/javax/jdo/identity/StringIdentity.java
index 5bf7dd98..ff3fe2b0 100644
--- a/api/src/main/java/javax/jdo/identity/StringIdentity.java
+++ b/api/src/main/java/javax/jdo/identity/StringIdentity.java
@@ -76,6 +76,7 @@ public class StringIdentity extends SingleFieldIdentity<StringIdentity> {
    * @param obj the other object
    * @return true if both objects represent the same object id
    */
+  @Override
   public boolean equals(Object obj) {
     if (this == obj) {
       return true;
@@ -107,6 +108,7 @@ public class StringIdentity extends SingleFieldIdentity<StringIdentity> {
    *
    * @param out the output
    */
+  @Override
   public void writeExternal(ObjectOutput out) throws IOException {
     super.writeExternal(out);
     out.writeObject(keyAsObject);
@@ -117,6 +119,7 @@ public class StringIdentity extends SingleFieldIdentity<StringIdentity> {
    *
    * @param in the input
    */
+  @Override
   public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
     super.readExternal(in);
     keyAsObject = in.readObject();
diff --git a/api/src/main/java/javax/jdo/listener/InstanceLifecycleEvent.java b/api/src/main/java/javax/jdo/listener/InstanceLifecycleEvent.java
index 3348a84b..cffc6d81 100644
--- a/api/src/main/java/javax/jdo/listener/InstanceLifecycleEvent.java
+++ b/api/src/main/java/javax/jdo/listener/InstanceLifecycleEvent.java
@@ -141,10 +141,10 @@ public class InstanceLifecycleEvent extends java.util.EventObject {
         return target == null
             ? null // preAttach:  no persistent instance yet
             : getSource(); // postAttach:  source is persistent instance
+      default:
+        // for all other events, source is persistent instance
+        return getSource();
     }
-
-    // for all other events, source is persistent instance
-    return getSource();
   }
 
   /**
@@ -163,10 +163,10 @@ public class InstanceLifecycleEvent extends java.util.EventObject {
         return target == null
             ? getSource() // preAttach:  source is detached instance
             : getTarget(); // postAttach:  target is detached instance
+      default:
+        // for all other events, there is no detached instance
+        return null;
     }
-
-    // for all other events, there is no detached instance
-    return null;
   }
 
   /**
diff --git a/api/src/main/java/javax/jdo/spi/JDOImplHelper.java b/api/src/main/java/javax/jdo/spi/JDOImplHelper.java
index a6c84bef..a373a439 100644
--- a/api/src/main/java/javax/jdo/spi/JDOImplHelper.java
+++ b/api/src/main/java/javax/jdo/spi/JDOImplHelper.java
@@ -96,6 +96,8 @@ public class JDOImplHelper extends java.lang.Object {
   /** The Internationalization message helper. */
   private static final I18NHelper msg = I18NHelper.getInstance("javax.jdo.Bundle"); // NOI18N
 
+  private static final String ERR_NULL_CLASS = "ERR_NullClass"; // NOI18N
+
   /** The DateFormat pattern. */
   private static String dateFormatPattern;
 
@@ -402,7 +404,7 @@ public class JDOImplHelper extends java.lang.Object {
       byte[] fieldFlags,
       Class<?> persistenceCapableSuperclass,
       PersistenceCapable pc) {
-    if (pcClass == null) throw new NullPointerException(msg.msg("ERR_NullClass")); // NOI18N
+    if (pcClass == null) throw new NullPointerException(msg.msg(ERR_NULL_CLASS)); // NOI18N
     Meta meta = new Meta(fieldNames, fieldTypes, fieldFlags, persistenceCapableSuperclass, pc);
     registeredClasses.put(pcClass, meta);
 
@@ -468,7 +470,7 @@ public class JDOImplHelper extends java.lang.Object {
    * @since 1.0.2
    */
   public void unregisterClass(Class<?> pcClass) {
-    if (pcClass == null) throw new NullPointerException(msg.msg("ERR_NullClass")); // NOI18N
+    if (pcClass == null) throw new NullPointerException(msg.msg(ERR_NULL_CLASS)); // NOI18N
     SecurityManager sec = LegacyJava.getSecurityManager();
     if (sec != null) {
       // throws exception if caller is not authorized
@@ -556,7 +558,7 @@ public class JDOImplHelper extends java.lang.Object {
    */
   public static void registerAuthorizedStateManagerClass(Class<?> smClass)
       throws SecurityException {
-    if (smClass == null) throw new NullPointerException(msg.msg("ERR_NullClass")); // NOI18N
+    if (smClass == null) throw new NullPointerException(msg.msg(ERR_NULL_CLASS)); // NOI18N
     SecurityManager sm = LegacyJava.getSecurityManager();
     if (sm != null) {
       sm.checkPermission(JDOPermission.SET_STATE_MANAGER);
@@ -1063,7 +1065,7 @@ public class JDOImplHelper extends java.lang.Object {
       try {
         if (si.makeDirty(pc, fieldName)) return;
       } catch (Throwable t) {
-        continue; // ignore exceptions from errant StateInterrogations
+        // ignore exceptions from errant StateInterrogations
       }
     }
   }
diff --git a/api/src/test/java/javax/jdo/AbstractJDOConfigTest.java b/api/src/test/java/javax/jdo/AbstractJDOConfigTest.java
index 567d5f4f..04cec026 100644
--- a/api/src/test/java/javax/jdo/AbstractJDOConfigTest.java
+++ b/api/src/test/java/javax/jdo/AbstractJDOConfigTest.java
@@ -118,7 +118,8 @@ public abstract class AbstractJDOConfigTest extends AbstractTest {
 
   protected String getPMFClassNameViaServiceLookup(ClassLoader loader) {
     try {
-      Enumeration<URL> urls = JDOHelper.getResources(loader, SERVICE_LOOKUP_PMF_RESOURCE_NAME);
+      Enumeration<URL> urls =
+          JDOHelper.getResources(loader, Constants.SERVICE_LOOKUP_PMF_RESOURCE_NAME);
       while (urls.hasMoreElements()) {
         // return the first one found
         return JDOHelper.getClassNameFromURL(urls.nextElement());
diff --git a/api/src/test/java/javax/jdo/EnhancerTest.java b/api/src/test/java/javax/jdo/EnhancerTest.java
index 3c584751..55c81849 100644
--- a/api/src/test/java/javax/jdo/EnhancerTest.java
+++ b/api/src/test/java/javax/jdo/EnhancerTest.java
@@ -90,7 +90,7 @@ public class EnhancerTest extends AbstractTest {
   public void testInvalidOption() {
     // invoke enhancer with an invalid option
     InvocationResult result = invokeEnhancer("-poo");
-    assertEquals("Wrong return value ", ENHANCER_USAGE_ERROR, result.getExitValue());
+    assertEquals("Wrong return value ", Constants.ENHANCER_USAGE_ERROR, result.getExitValue());
     String errorString = result.getErrorString();
     assertTrue(
         "Expected Usage message from err:\n" + errorString,
@@ -109,13 +109,13 @@ public class EnhancerTest extends AbstractTest {
             + outputString
             + " with err:\n"
             + errorString,
-        outputString.contains(PROPERTY_ENHANCER_VENDOR_NAME));
+        outputString.contains(Constants.PROPERTY_ENHANCER_VENDOR_NAME));
     assertTrue(
         "Expected MockEnhancer version message from out:\n"
             + outputString
             + " with err:\n"
             + errorString,
-        outputString.contains(PROPERTY_ENHANCER_VERSION_NUMBER));
+        outputString.contains(Constants.PROPERTY_ENHANCER_VERSION_NUMBER));
     assertTrue(
         "Expected MockEnhancer vendor message from out:\n"
             + outputString
diff --git a/api/src/test/java/javax/jdo/JDOHelperConfigTest.java b/api/src/test/java/javax/jdo/JDOHelperConfigTest.java
index 7d096ba2..9f86c12b 100644
--- a/api/src/test/java/javax/jdo/JDOHelperConfigTest.java
+++ b/api/src/test/java/javax/jdo/JDOHelperConfigTest.java
@@ -71,47 +71,70 @@ public class JDOHelperConfigTest extends AbstractJDOConfigTest implements Consta
     Map<String, String> expected = new HashMap<>();
 
     if (!excludeName) {
-      expected.put(PROPERTY_NAME, PMF_ATTRIBUTE_NAME + "." + testVariant);
+      expected.put(Constants.PROPERTY_NAME, Constants.PMF_ATTRIBUTE_NAME + "." + testVariant);
     }
     if (!excludePUName) {
       expected.put(
-          PROPERTY_PERSISTENCE_UNIT_NAME, PMF_ATTRIBUTE_PERSISTENCE_UNIT_NAME + "." + testVariant);
+          Constants.PROPERTY_PERSISTENCE_UNIT_NAME,
+          Constants.PMF_ATTRIBUTE_PERSISTENCE_UNIT_NAME + "." + testVariant);
     }
 
     expected.put(
-        PROPERTY_PERSISTENCE_MANAGER_FACTORY_CLASS, PMF_ATTRIBUTE_CLASS + "." + testVariant);
+        Constants.PROPERTY_PERSISTENCE_MANAGER_FACTORY_CLASS,
+        Constants.PMF_ATTRIBUTE_CLASS + "." + testVariant);
     expected.put(
-        PROPERTY_CONNECTION_DRIVER_NAME, PMF_ATTRIBUTE_CONNECTION_DRIVER_NAME + "." + testVariant);
+        Constants.PROPERTY_CONNECTION_DRIVER_NAME,
+        Constants.PMF_ATTRIBUTE_CONNECTION_DRIVER_NAME + "." + testVariant);
     expected.put(
-        PROPERTY_CONNECTION_FACTORY_NAME,
-        PMF_ATTRIBUTE_CONNECTION_FACTORY_NAME + "." + testVariant);
+        Constants.PROPERTY_CONNECTION_FACTORY_NAME,
+        Constants.PMF_ATTRIBUTE_CONNECTION_FACTORY_NAME + "." + testVariant);
     expected.put(
-        PROPERTY_CONNECTION_FACTORY2_NAME,
-        PMF_ATTRIBUTE_CONNECTION_FACTORY2_NAME + "." + testVariant);
+        Constants.PROPERTY_CONNECTION_FACTORY2_NAME,
+        Constants.PMF_ATTRIBUTE_CONNECTION_FACTORY2_NAME + "." + testVariant);
     expected.put(
-        PROPERTY_CONNECTION_PASSWORD, PMF_ATTRIBUTE_CONNECTION_PASSWORD + "." + testVariant);
-    expected.put(PROPERTY_CONNECTION_URL, PMF_ATTRIBUTE_CONNECTION_URL + "." + testVariant);
+        Constants.PROPERTY_CONNECTION_PASSWORD,
+        Constants.PMF_ATTRIBUTE_CONNECTION_PASSWORD + "." + testVariant);
     expected.put(
-        PROPERTY_CONNECTION_USER_NAME, PMF_ATTRIBUTE_CONNECTION_USER_NAME + "." + testVariant);
-    expected.put(PROPERTY_IGNORE_CACHE, PMF_ATTRIBUTE_IGNORE_CACHE + "." + testVariant);
-    expected.put(PROPERTY_MAPPING, PMF_ATTRIBUTE_MAPPING + "." + testVariant);
-    expected.put(PROPERTY_MULTITHREADED, PMF_ATTRIBUTE_MULTITHREADED + "." + testVariant);
+        Constants.PROPERTY_CONNECTION_URL,
+        Constants.PMF_ATTRIBUTE_CONNECTION_URL + "." + testVariant);
     expected.put(
-        PROPERTY_NONTRANSACTIONAL_READ, PMF_ATTRIBUTE_NONTRANSACTIONAL_READ + "." + testVariant);
+        Constants.PROPERTY_CONNECTION_USER_NAME,
+        Constants.PMF_ATTRIBUTE_CONNECTION_USER_NAME + "." + testVariant);
     expected.put(
-        PROPERTY_NONTRANSACTIONAL_WRITE, PMF_ATTRIBUTE_NONTRANSACTIONAL_WRITE + "." + testVariant);
-    expected.put(PROPERTY_OPTIMISTIC, PMF_ATTRIBUTE_OPTIMISTIC + "." + testVariant);
-    expected.put(PROPERTY_RESTORE_VALUES, PMF_ATTRIBUTE_RESTORE_VALUES + "." + testVariant);
-    expected.put(PROPERTY_RETAIN_VALUES, PMF_ATTRIBUTE_RETAIN_VALUES + "." + testVariant);
+        Constants.PROPERTY_IGNORE_CACHE, Constants.PMF_ATTRIBUTE_IGNORE_CACHE + "." + testVariant);
+    expected.put(Constants.PROPERTY_MAPPING, Constants.PMF_ATTRIBUTE_MAPPING + "." + testVariant);
     expected.put(
-        PROPERTY_DETACH_ALL_ON_COMMIT, PMF_ATTRIBUTE_DETACH_ALL_ON_COMMIT + "." + testVariant);
+        Constants.PROPERTY_MULTITHREADED,
+        Constants.PMF_ATTRIBUTE_MULTITHREADED + "." + testVariant);
     expected.put(
-        PROPERTY_SERVER_TIME_ZONE_ID, PMF_ATTRIBUTE_SERVER_TIME_ZONE_ID + "." + testVariant);
+        Constants.PROPERTY_NONTRANSACTIONAL_READ,
+        Constants.PMF_ATTRIBUTE_NONTRANSACTIONAL_READ + "." + testVariant);
+    expected.put(
+        Constants.PROPERTY_NONTRANSACTIONAL_WRITE,
+        Constants.PMF_ATTRIBUTE_NONTRANSACTIONAL_WRITE + "." + testVariant);
+    expected.put(
+        Constants.PROPERTY_OPTIMISTIC, Constants.PMF_ATTRIBUTE_OPTIMISTIC + "." + testVariant);
+    expected.put(
+        Constants.PROPERTY_RESTORE_VALUES,
+        Constants.PMF_ATTRIBUTE_RESTORE_VALUES + "." + testVariant);
+    expected.put(
+        Constants.PROPERTY_RETAIN_VALUES,
+        Constants.PMF_ATTRIBUTE_RETAIN_VALUES + "." + testVariant);
+    expected.put(
+        Constants.PROPERTY_DETACH_ALL_ON_COMMIT,
+        Constants.PMF_ATTRIBUTE_DETACH_ALL_ON_COMMIT + "." + testVariant);
+    expected.put(
+        Constants.PROPERTY_SERVER_TIME_ZONE_ID,
+        Constants.PMF_ATTRIBUTE_SERVER_TIME_ZONE_ID + "." + testVariant);
 
     // listeners
     for (int i = 0; i < listenerCount; i++) {
       expected.put(
-          PROPERTY_PREFIX_INSTANCE_LIFECYCLE_LISTENER + "listener." + testVariant + ".listener" + i,
+          Constants.PROPERTY_PREFIX_INSTANCE_LIFECYCLE_LISTENER
+              + "listener."
+              + testVariant
+              + ".listener"
+              + i,
           "classes." + testVariant + ".classes" + i);
     }
 
@@ -198,7 +221,7 @@ public class JDOHelperConfigTest extends AbstractJDOConfigTest implements Consta
             vendorSpecificPropertyCount,
             excludeName,
             excludePUName);
-    String name = testVariantName == null ? null : expected.get(PROPERTY_NAME);
+    String name = testVariantName == null ? null : expected.get(Constants.PROPERTY_NAME);
     Map<Object, Object> actual = JDOHelper.getPropertiesFromJdoconfig(name, loader);
 
     assertNotNull("No properties found", actual);
@@ -246,7 +269,10 @@ public class JDOHelperConfigTest extends AbstractJDOConfigTest implements Consta
         };
     URLClassLoader loader = new JDOConfigTestClassLoader(getClass().getClassLoader(), classpaths);
     Map<Object, Object> actual =
-        JDOHelper.getPropertiesFromJdoconfig(ANONYMOUS_PERSISTENCE_MANAGER_FACTORY_NAME, loader);
+        JDOHelper.getPropertiesFromJdoconfig(
+            Constants.ANONYMOUS_PERSISTENCE_MANAGER_FACTORY_NAME, loader);
+    assertNotNull("Anonymous PMF with no properties returned null", actual);
+    assertEquals("Anonymous PMF with no properties had properties", 0, actual.size());
   }
 
   public void testPositive02_GetAnonymousPMFWithNoProperties() throws IOException {
@@ -256,9 +282,10 @@ public class JDOHelperConfigTest extends AbstractJDOConfigTest implements Consta
             getClass().getClassLoader(), JDOCONFIG_CLASSPATH_PREFIX + "/Positive02/");
 
     Map<Object, Object> properties =
-        JDOHelper.getPropertiesFromJdoconfig(ANONYMOUS_PERSISTENCE_MANAGER_FACTORY_NAME, loader);
+        JDOHelper.getPropertiesFromJdoconfig(
+            Constants.ANONYMOUS_PERSISTENCE_MANAGER_FACTORY_NAME, loader);
     assertNotNull("Anonymous PMF with no properties returned null", properties);
-    assertTrue("Anonymous PMF with no properties had properties", properties.size() == 0);
+    assertEquals("Anonymous PMF with no properties had properties", 0, properties.size());
   }
 
   public void testPositive03_PMF0_PMFClassNameViaServicesLookup() throws IOException {
@@ -307,7 +334,8 @@ public class JDOHelperConfigTest extends AbstractJDOConfigTest implements Consta
 
     Map<String, String> expected = prepareInitialExpectedMap("positive06.pmf0", 2, 0, true, true);
     Map<Object, Object> actual =
-        JDOHelper.getPropertiesFromJdoconfig(ANONYMOUS_PERSISTENCE_MANAGER_FACTORY_NAME, loader);
+        JDOHelper.getPropertiesFromJdoconfig(
+            Constants.ANONYMOUS_PERSISTENCE_MANAGER_FACTORY_NAME, loader);
 
     assertNotNull("No properties found", actual);
     assertEqualProperties(expected, actual);
@@ -321,7 +349,8 @@ public class JDOHelperConfigTest extends AbstractJDOConfigTest implements Consta
 
     Map<String, String> expected = prepareInitialExpectedMap("positive07.pmf0", 2, 0, true, false);
     Map<Object, Object> actual =
-        JDOHelper.getPropertiesFromJdoconfig(ANONYMOUS_PERSISTENCE_MANAGER_FACTORY_NAME, loader);
+        JDOHelper.getPropertiesFromJdoconfig(
+            Constants.ANONYMOUS_PERSISTENCE_MANAGER_FACTORY_NAME, loader);
 
     assertNotNull("No properties found", actual);
     assertEqualProperties(expected, actual);
diff --git a/api/src/test/java/javax/jdo/JDOHelperTest.java b/api/src/test/java/javax/jdo/JDOHelperTest.java
index e8846669..a4c71886 100644
--- a/api/src/test/java/javax/jdo/JDOHelperTest.java
+++ b/api/src/test/java/javax/jdo/JDOHelperTest.java
@@ -89,24 +89,28 @@ public class JDOHelperTest extends AbstractTest {
   /** */
   public void testGetPM() {
     PCPoint p = new PCPoint(1, Integer.valueOf(1));
-    if (JDOHelper.getPersistenceManager(p) != null) {
-      fail("JDOHelper.getPersistenceManager should return null pm for non-persistent instance");
-    }
+    assertNull(
+        "JDOHelper.getPersistenceManager should return null pm for non-persistent instance",
+        JDOHelper.getPersistenceManager(p));
 
     // TBD: test for persistent instance
   }
 
   /** */
   public void testMakeDirty() {
-    // TBD: test JDOHelper.makeDirty(pc, fieldName);
+    PCPoint p = new PCPoint(1, Integer.valueOf(1));
+    JDOHelper.makeDirty(p, "x");
+    assertFalse("JDOHelper.makeDirty should ignore non-persistent instance", JDOHelper.isDirty(p));
+
+    // TBD: test for persistent instance
   }
 
   /** */
   public void testGetObjectId() {
     PCPoint p = new PCPoint(1, Integer.valueOf(1));
-    if (JDOHelper.getObjectId(p) != null) {
-      fail("JDOHelper.getObjectId should return null ObjectId for non-persistent instance");
-    }
+    assertNull(
+        "JDOHelper.getObjectId should return null ObjectId for non-persistent instance",
+        JDOHelper.getObjectId(p));
 
     // TBD test JDOHelper.getObjectId(pc) for persistent instance
   }
@@ -114,10 +118,9 @@ public class JDOHelperTest extends AbstractTest {
   /** */
   public void testGetTransactionObjectId() {
     PCPoint p = new PCPoint(1, Integer.valueOf(1));
-    if (JDOHelper.getObjectId(p) != null) {
-      fail(
-          "JDOHelper.getTransactionalObjectId should return null ObjectId for non-persistent instance");
-    }
+    assertNull(
+        "JDOHelper.getTransactionalObjectId should return null ObjectId for non-persistent instance",
+        JDOHelper.getObjectId(p));
 
     // TBD test JDOHelper.getTransactionalObjectId(pc) for persistent instance
   }
@@ -125,9 +128,8 @@ public class JDOHelperTest extends AbstractTest {
   /** */
   public void testIsDirty() {
     PCPoint p = new PCPoint(1, Integer.valueOf(1));
-    if (JDOHelper.isDirty(p)) {
-      fail("JDOHelper.isDirty should return false for non-persistent instance");
-    }
+    assertFalse(
+        "JDOHelper.isDirty should return false for non-persistent instance", JDOHelper.isDirty(p));
 
     // TBD test JDOHelper.isDirty(pc) for persistent instance
   }
@@ -135,9 +137,9 @@ public class JDOHelperTest extends AbstractTest {
   /** */
   public void testIsTransactional() {
     PCPoint p = new PCPoint(1, Integer.valueOf(1));
-    if (JDOHelper.isTransactional(p)) {
-      fail("JDOHelper.isTransactional should return false for non-persistent instance");
-    }
+    assertFalse(
+        "JDOHelper.isTransactional should return false for non-persistent instance",
+        JDOHelper.isTransactional(p));
 
     // TBD test JDOHelper.isTransactional(pc) for persistent instance
   }
@@ -145,9 +147,9 @@ public class JDOHelperTest extends AbstractTest {
   /** */
   public void testIsPersistent() {
     PCPoint p = new PCPoint(1, Integer.valueOf(1));
-    if (JDOHelper.isPersistent(p)) {
-      fail("JDOHelper.isPersistent should return false for non-persistent instance");
-    }
+    assertFalse(
+        "JDOHelper.isPersistent should return false for non-persistent instance",
+        JDOHelper.isPersistent(p));
 
     // TBD test JDOHelper.isPersistent(pc) for persistent instance
   }
@@ -155,9 +157,8 @@ public class JDOHelperTest extends AbstractTest {
   /** */
   public void testIsNew() {
     PCPoint p = new PCPoint(1, Integer.valueOf(1));
-    if (JDOHelper.isNew(p)) {
-      fail("JDOHelper.isNew should return false for non-persistent instance");
-    }
+    assertFalse(
+        "JDOHelper.isNew should return false for non-persistent instance", JDOHelper.isNew(p));
 
     // TBD test JDOHelper.isNew(pc) for persistent instance
   }
@@ -165,9 +166,9 @@ public class JDOHelperTest extends AbstractTest {
   /** */
   public void testIsDeleted() {
     PCPoint p = new PCPoint(1, Integer.valueOf(1));
-    if (JDOHelper.isDeleted(p)) {
-      fail("JDOHelper.isDeleted should return false for non-persistent instance");
-    }
+    assertFalse(
+        "JDOHelper.isDeleted should return false for non-persistent instance",
+        JDOHelper.isDeleted(p));
 
     // TBD test JDOHelper.isDeleted(pc) for persistent instance
   }
diff --git a/api/src/test/java/javax/jdo/PMFService.java b/api/src/test/java/javax/jdo/PMFService.java
index 4c62901d..90ef38b0 100644
--- a/api/src/test/java/javax/jdo/PMFService.java
+++ b/api/src/test/java/javax/jdo/PMFService.java
@@ -41,10 +41,11 @@ public class PMFService implements Constants {
   private static void setPMFProperties(
       PersistenceManagerFactory pmf, Map<?, ?> props, Map<?, ?> overrides) {
 
-    pmf.setConnectionDriverName((String) props.get(PROPERTY_CONNECTION_DRIVER_NAME));
+    pmf.setConnectionDriverName((String) props.get(Constants.PROPERTY_CONNECTION_DRIVER_NAME));
 
     if (overrides != null) {
-      pmf.setConnectionDriverName((String) overrides.get(PROPERTY_CONNECTION_DRIVER_NAME));
+      pmf.setConnectionDriverName(
+          (String) overrides.get(Constants.PROPERTY_CONNECTION_DRIVER_NAME));
     }
   }
 }
diff --git a/api/src/test/java/javax/jdo/identity/ByteIdentityTest.java b/api/src/test/java/javax/jdo/identity/ByteIdentityTest.java
index e79f706b..3018c206 100644
--- a/api/src/test/java/javax/jdo/identity/ByteIdentityTest.java
+++ b/api/src/test/java/javax/jdo/identity/ByteIdentityTest.java
@@ -22,6 +22,8 @@
 
 package javax.jdo.identity;
 
+import static org.junit.Assert.assertNotEquals;
+
 import javax.jdo.JDONullIdentityException;
 import javax.jdo.util.BatchTestRunner;
 
@@ -43,7 +45,7 @@ public class ByteIdentityTest extends SingleFieldIdentityTest {
     ByteIdentity c2 = new ByteIdentity(Object.class, (byte) 1);
     ByteIdentity c3 = new ByteIdentity(Object.class, (byte) 2);
     assertEquals("Equal ByteIdentity instances compare not equal.", c1, c2);
-    assertFalse("Not equal ByteIdentity instances compare equal", c1.equals(c3));
+    assertNotEquals("Not equal ByteIdentity instances compare equal", c1, c3);
   }
 
   public void testByteConstructor() {
@@ -51,7 +53,7 @@ public class ByteIdentityTest extends SingleFieldIdentityTest {
     ByteIdentity c2 = new ByteIdentity(Object.class, Byte.valueOf((byte) 1));
     ByteIdentity c3 = new ByteIdentity(Object.class, Byte.valueOf((byte) 2));
     assertEquals("Equal ByteIdentity instances compare not equal.", c1, c2);
-    assertFalse("Not equal ByteIdentity instances compare equal", c1.equals(c3));
+    assertNotEquals("Not equal ByteIdentity instances compare equal", c1, c3);
   }
 
   public void testToStringConstructor() {
@@ -65,7 +67,7 @@ public class ByteIdentityTest extends SingleFieldIdentityTest {
     ByteIdentity c2 = new ByteIdentity(Object.class, "1");
     ByteIdentity c3 = new ByteIdentity(Object.class, "2");
     assertEquals("Equal ByteIdentity instances compare not equal.", c1, c2);
-    assertFalse("Not equal ByteIdentity instances compare equal", c1.equals(c3));
+    assertNotEquals("Not equal ByteIdentity instances compare equal", c1, c3);
   }
 
   public void testIllegalStringConstructor() {
@@ -89,10 +91,10 @@ public class ByteIdentityTest extends SingleFieldIdentityTest {
     assertEquals("Equal ByteIdentity instances compare not equal.", c2, sc2);
     assertEquals("Equal ByteIdentity instances compare not equal.", sc1, c2);
     assertEquals("Equal ByteIdentity instances compare not equal.", sc2, c1);
-    assertFalse("Not equal ByteIdentity instances compare equal.", c1.equals(sc3));
-    assertFalse("Not equal ByteIdentity instances compare equal.", sc1.equals(c3));
-    assertFalse("Not equal ByteIdentity instances compare equal.", sc1.equals(sc3));
-    assertFalse("Not equal ByteIdentity instances compare equal.", sc3.equals(sc1));
+    assertNotEquals("Not equal ByteIdentity instances compare equal.", c1, sc3);
+    assertNotEquals("Not equal ByteIdentity instances compare equal.", sc1, c3);
+    assertNotEquals("Not equal ByteIdentity instances compare equal.", sc1, sc3);
+    assertNotEquals("Not equal ByteIdentity instances compare equal.", sc3, sc1);
   }
 
   public void testGetKeyAsObjectPrimitive() {
diff --git a/api/src/test/java/javax/jdo/identity/CharIdentityTest.java b/api/src/test/java/javax/jdo/identity/CharIdentityTest.java
index 35af5cdf..ae37de76 100644
--- a/api/src/test/java/javax/jdo/identity/CharIdentityTest.java
+++ b/api/src/test/java/javax/jdo/identity/CharIdentityTest.java
@@ -22,6 +22,8 @@
 
 package javax.jdo.identity;
 
+import static org.junit.Assert.assertNotEquals;
+
 import javax.jdo.JDONullIdentityException;
 import javax.jdo.util.BatchTestRunner;
 
@@ -45,7 +47,7 @@ public class CharIdentityTest extends SingleFieldIdentityTest {
     CharIdentity c2 = new CharIdentity(Object.class, 'a');
     CharIdentity c3 = new CharIdentity(Object.class, 'b');
     assertEquals("Equal CharIdentity instances compare not equal.", c1, c2);
-    assertFalse("Not equal CharIdentity instances compare equal", c1.equals(c3));
+    assertNotEquals("Not equal CharIdentity instances compare equal", c1, c3);
   }
 
   public void testCharacterConstructor() {
@@ -53,7 +55,7 @@ public class CharIdentityTest extends SingleFieldIdentityTest {
     CharIdentity c2 = new CharIdentity(Object.class, Character.valueOf('a'));
     CharIdentity c3 = new CharIdentity(Object.class, Character.valueOf('b'));
     assertEquals("Equal CharIdentity instances compare not equal.", c1, c2);
-    assertFalse("Not equal CharIdentity instances compare equal", c1.equals(c3));
+    assertNotEquals("Not equal CharIdentity instances compare equal", c1, c3);
   }
 
   public void testToStringConstructor() {
@@ -67,7 +69,7 @@ public class CharIdentityTest extends SingleFieldIdentityTest {
     CharIdentity c2 = new CharIdentity(Object.class, "a");
     CharIdentity c3 = new CharIdentity(Object.class, "b");
     assertEquals("Equal CharIdentity instances compare not equal.", c1, c2);
-    assertFalse("Not equal CharIdentity instances compare equal", c1.equals(c3));
+    assertNotEquals("Not equal CharIdentity instances compare equal", c1, c3);
   }
 
   public void testStringConstructorTooLong() {
@@ -100,10 +102,10 @@ public class CharIdentityTest extends SingleFieldIdentityTest {
     assertEquals("Equal CharIdentity instances compare not equal.", c2, sc2);
     assertEquals("Equal CharIdentity instances compare not equal.", sc1, c2);
     assertEquals("Equal CharIdentity instances compare not equal.", sc2, c1);
-    assertFalse("Not equal CharIdentity instances compare equal.", c1.equals(sc3));
-    assertFalse("Not equal CharIdentity instances compare equal.", sc1.equals(c3));
-    assertFalse("Not equal CharIdentity instances compare equal.", sc1.equals(sc3));
-    assertFalse("Not equal CharIdentity instances compare equal.", sc3.equals(sc1));
+    assertNotEquals("Not equal CharIdentity instances compare equal.", c1, sc3);
+    assertNotEquals("Not equal CharIdentity instances compare equal.", sc1, c3);
+    assertNotEquals("Not equal CharIdentity instances compare equal.", sc1, sc3);
+    assertNotEquals("Not equal CharIdentity instances compare equal.", sc3, sc1);
   }
 
   public void testGetKeyAsObjectPrimitive() {
diff --git a/api/src/test/java/javax/jdo/identity/IntIdentityTest.java b/api/src/test/java/javax/jdo/identity/IntIdentityTest.java
index 8b5fda7e..299058a5 100644
--- a/api/src/test/java/javax/jdo/identity/IntIdentityTest.java
+++ b/api/src/test/java/javax/jdo/identity/IntIdentityTest.java
@@ -22,6 +22,8 @@
 
 package javax.jdo.identity;
 
+import static org.junit.Assert.assertNotEquals;
+
 import javax.jdo.JDONullIdentityException;
 import javax.jdo.util.BatchTestRunner;
 
@@ -43,7 +45,7 @@ public class IntIdentityTest extends SingleFieldIdentityTest {
     IntIdentity c2 = new IntIdentity(Object.class, 1);
     IntIdentity c3 = new IntIdentity(Object.class, 2);
     assertEquals("Equal IntIdentity instances compare not equal.", c1, c2);
-    assertFalse("Not equal IntIdentity instances compare equal", c1.equals(c3));
+    assertNotEquals("Not equal IntIdentity instances compare equal", c1, c3);
   }
 
   public void testIntegerConstructor() {
@@ -51,7 +53,7 @@ public class IntIdentityTest extends SingleFieldIdentityTest {
     IntIdentity c2 = new IntIdentity(Object.class, Integer.valueOf(1));
     IntIdentity c3 = new IntIdentity(Object.class, Integer.valueOf(2));
     assertEquals("Equal intIdentity instances compare not equal.", c1, c2);
-    assertFalse("Not equal IntIdentity instances compare equal", c1.equals(c3));
+    assertNotEquals("Not equal IntIdentity instances compare equal", c1, c3);
   }
 
   public void testToStringConstructor() {
@@ -65,7 +67,7 @@ public class IntIdentityTest extends SingleFieldIdentityTest {
     IntIdentity c2 = new IntIdentity(Object.class, "1");
     IntIdentity c3 = new IntIdentity(Object.class, "2");
     assertEquals("Equal IntIdentity instances compare not equal.", c1, c2);
-    assertFalse("Not equal IntIdentity instances compare equal", c1.equals(c3));
+    assertNotEquals("Not equal IntIdentity instances compare equal", c1, c3);
   }
 
   public void testIllegalStringConstructor() {
@@ -89,10 +91,10 @@ public class IntIdentityTest extends SingleFieldIdentityTest {
     assertEquals("Equal IntIdentity instances compare not equal.", c2, sc2);
     assertEquals("Equal IntIdentity instances compare not equal.", sc1, c2);
     assertEquals("Equal IntIdentity instances compare not equal.", sc2, c1);
-    assertFalse("Not equal InrIdentity instances compare equal.", c1.equals(sc3));
-    assertFalse("Not equal IntIdentity instances compare equal.", sc1.equals(c3));
-    assertFalse("Not equal IntIdentity instances compare equal.", sc1.equals(sc3));
-    assertFalse("Not equal IntIdentity instances compare equal.", sc3.equals(sc1));
+    assertNotEquals("Not equal InrIdentity instances compare equal.", c1, sc3);
+    assertNotEquals("Not equal IntIdentity instances compare equal.", sc1, c3);
+    assertNotEquals("Not equal IntIdentity instances compare equal.", sc1, sc3);
+    assertNotEquals("Not equal IntIdentity instances compare equal.", sc3, sc1);
   }
 
   public void testGetKeyAsObjectPrimitive() {
diff --git a/api/src/test/java/javax/jdo/identity/LongIdentityTest.java b/api/src/test/java/javax/jdo/identity/LongIdentityTest.java
index 8c2b4efa..3f373956 100644
--- a/api/src/test/java/javax/jdo/identity/LongIdentityTest.java
+++ b/api/src/test/java/javax/jdo/identity/LongIdentityTest.java
@@ -22,6 +22,8 @@
 
 package javax.jdo.identity;
 
+import static org.junit.Assert.assertNotEquals;
+
 import javax.jdo.JDONullIdentityException;
 import javax.jdo.util.BatchTestRunner;
 
@@ -44,8 +46,8 @@ public class LongIdentityTest extends SingleFieldIdentityTest {
     LongIdentity c3 = new LongIdentity(Object.class, 2);
     LongIdentity c4 = new LongIdentity(Object.class, 0x100000001L);
     assertEquals("Equal LongIdentity instances compare not equal.", c1, c2);
-    assertFalse("Not equal LongIdentity instances compare equal", c1.equals(c3));
-    assertFalse("Not equal LongIdentity instances compare equal", c4.equals(c1));
+    assertNotEquals("Not equal LongIdentity instances compare equal", c1, c3);
+    assertNotEquals("Not equal LongIdentity instances compare equal", c4, c1);
   }
 
   public void testLongConstructor() {
@@ -53,7 +55,7 @@ public class LongIdentityTest extends SingleFieldIdentityTest {
     LongIdentity c2 = new LongIdentity(Object.class, Long.valueOf(1));
     LongIdentity c3 = new LongIdentity(Object.class, Long.valueOf(2));
     assertEquals("Equal LongIdentity instances compare not equal.", c1, c2);
-    assertFalse("Not equal LongIdentity instances compare equal", c1.equals(c3));
+    assertNotEquals("Not equal LongIdentity instances compare equal", c1, c3);
   }
 
   public void testToStringConstructor() {
@@ -67,7 +69,7 @@ public class LongIdentityTest extends SingleFieldIdentityTest {
     LongIdentity c2 = new LongIdentity(Object.class, "1");
     LongIdentity c3 = new LongIdentity(Object.class, "2");
     assertEquals("Equal LongIdentity instances compare not equal.", c1, c2);
-    assertFalse("Not equal LongIdentity instances compare equal", c1.equals(c3));
+    assertNotEquals("Not equal LongIdentity instances compare equal", c1, c3);
   }
 
   public void testIllegalStringConstructor() {
@@ -91,10 +93,10 @@ public class LongIdentityTest extends SingleFieldIdentityTest {
     assertEquals("Equal LongIdentity instances compare not equal.", c2, sc2);
     assertEquals("Equal LongIdentity instances compare not equal.", sc1, c2);
     assertEquals("Equal LongIdentity instances compare not equal.", sc2, c1);
-    assertFalse("Not equal LongIdentity instances compare equal.", c1.equals(sc3));
-    assertFalse("Not equal LongIdentity instances compare equal.", sc1.equals(c3));
-    assertFalse("Not equal LongIdentity instances compare equal.", sc1.equals(sc3));
-    assertFalse("Not equal LongIdentity instances compare equal.", sc3.equals(sc1));
+    assertNotEquals("Not equal LongIdentity instances compare equal.", c1, sc3);
+    assertNotEquals("Not equal LongIdentity instances compare equal.", sc1, c3);
+    assertNotEquals("Not equal LongIdentity instances compare equal.", sc1, sc3);
+    assertNotEquals("Not equal LongIdentity instances compare equal.", sc3, sc1);
   }
 
   public void testGetKeyAsObjectPrimitive() {
diff --git a/api/src/test/java/javax/jdo/identity/ObjectIdentityTest.java b/api/src/test/java/javax/jdo/identity/ObjectIdentityTest.java
index 3e87da28..94f9cbb2 100644
--- a/api/src/test/java/javax/jdo/identity/ObjectIdentityTest.java
+++ b/api/src/test/java/javax/jdo/identity/ObjectIdentityTest.java
@@ -21,12 +21,15 @@
  */
 package javax.jdo.identity;
 
+import static org.junit.Assert.assertNotEquals;
+
 import java.io.Serializable;
 import java.lang.reflect.InvocationTargetException;
 import java.math.BigDecimal;
 import java.security.PrivilegedAction;
 import java.text.DateFormat;
 import java.text.SimpleDateFormat;
+import java.util.Calendar;
 import java.util.Currency;
 import java.util.Date;
 import java.util.Locale;
@@ -70,7 +73,7 @@ public class ObjectIdentityTest extends SingleFieldIdentityTest {
     ObjectIdentity c2 = new ObjectIdentity(Object.class, new IdClass(1));
     ObjectIdentity c3 = new ObjectIdentity(Object.class, new IdClass(2));
     assertEquals("Equal ObjectIdentity instances compare not equal.", c1, c2);
-    assertFalse("Not equal ObjectIdentity instances compare equal", c1.equals(c3));
+    assertNotEquals("Not equal ObjectIdentity instances compare equal", c1, c3);
   }
 
   public void testIntegerConstructor() {
@@ -78,7 +81,7 @@ public class ObjectIdentityTest extends SingleFieldIdentityTest {
     ObjectIdentity c2 = new ObjectIdentity(Object.class, Integer.valueOf(1));
     ObjectIdentity c3 = new ObjectIdentity(Object.class, Integer.valueOf(2));
     assertEquals("Equal ObjectIdentity instances compare not equal.", c1, c2);
-    assertFalse("Not equal ObjectIdentity instances compare equal", c1.equals(c3));
+    assertNotEquals("Not equal ObjectIdentity instances compare equal", c1, c3);
   }
 
   public void testLongConstructor() {
@@ -86,7 +89,7 @@ public class ObjectIdentityTest extends SingleFieldIdentityTest {
     ObjectIdentity c2 = new ObjectIdentity(Object.class, Long.valueOf(1));
     ObjectIdentity c3 = new ObjectIdentity(Object.class, Long.valueOf(2));
     assertEquals("Equal ObjectIdentity instances compare not equal.", c1, c2);
-    assertFalse("Not equal ObjectIdentity instances compare equal", c1.equals(c3));
+    assertNotEquals("Not equal ObjectIdentity instances compare equal", c1, c3);
   }
 
   public void testDateConstructor() {
@@ -94,7 +97,7 @@ public class ObjectIdentityTest extends SingleFieldIdentityTest {
     ObjectIdentity c2 = new ObjectIdentity(Object.class, new Date(1));
     ObjectIdentity c3 = new ObjectIdentity(Object.class, new Date(2));
     assertEquals("Equal ObjectIdentity instances compare not equal.", c1, c2);
-    assertFalse("Not equal ObjectIdentity instances compare equal", c1.equals(c3));
+    assertNotEquals("Not equal ObjectIdentity instances compare equal", c1, c3);
   }
 
   public void testLocaleConstructor() {
@@ -102,7 +105,7 @@ public class ObjectIdentityTest extends SingleFieldIdentityTest {
     ObjectIdentity c2 = new ObjectIdentity(Object.class, Locale.US);
     ObjectIdentity c3 = new ObjectIdentity(Object.class, Locale.GERMANY);
     assertEquals("Equal ObjectIdentity instances compare not equal.", c1, c2);
-    assertFalse("Not equal ObjectIdentity instances compare equal", c1.equals(c3));
+    assertNotEquals("Not equal ObjectIdentity instances compare equal", c1, c3);
   }
 
   public void testCurrencyConstructor() {
@@ -111,7 +114,7 @@ public class ObjectIdentityTest extends SingleFieldIdentityTest {
     ObjectIdentity c2 = new ObjectIdentity(Object.class, Currency.getInstance(Locale.US));
     ObjectIdentity c3 = new ObjectIdentity(Object.class, Currency.getInstance(Locale.GERMANY));
     assertEquals("Equal ObjectIdentity instances compare not equal.", c1, c2);
-    assertFalse("Not equal ObjectIdentity instances compare equal", c1.equals(c3));
+    assertNotEquals("Not equal ObjectIdentity instances compare equal", c1, c3);
   }
 
   public void testStringConstructor() {
@@ -122,7 +125,7 @@ public class ObjectIdentityTest extends SingleFieldIdentityTest {
     ObjectIdentity c3 =
         new ObjectIdentity(Object.class, "javax.jdo.identity.ObjectIdentityTest$IdClass:2");
     assertEquals("Equal ObjectIdentity instances compare not equal.", c1, c2);
-    assertFalse("Not equal ObjectIdentity instances compare equal", c1.equals(c3));
+    assertNotEquals("Not equal ObjectIdentity instances compare equal", c1, c3);
   }
 
   public void testToStringConstructor() {
@@ -227,14 +230,31 @@ public class ObjectIdentityTest extends SingleFieldIdentityTest {
   public void testStringDateConstructor() {
     SimpleDateFormat usDateFormat = new SimpleDateFormat("MMM dd, yyyy hh:mm:ss a", Locale.US);
     helper.registerDateFormat(usDateFormat);
-    new ObjectIdentity(Object.class, "java.util.Date:Jan 01, 1970 00:00:00 AM");
+
+    // construct date instance for 1.1.1970 00:00:00
+    Calendar cal = Calendar.getInstance(Locale.US);
+    cal.clear();
+    cal.set(1970, 0, 1, 0, 0, 0);
+    Date date = cal.getTime();
+
+    ObjectIdentity c1 = new ObjectIdentity(Object.class, "java.util.Date:Jan 01, 1970 00:00:00 AM");
+    ObjectIdentity c2 = new ObjectIdentity(Object.class, date);
+    assertEquals("Equal ObjectIdentity instances compare not equal.", 0, c1.compareTo(c2));
+
     helper.registerDateFormat(DateFormat.getDateTimeInstance());
   }
 
   public void testStringDefaultDateConstructor() {
     DateFormat dateFormat = DateFormat.getDateTimeInstance();
-    String rightNow = dateFormat.format(new Date());
-    new ObjectIdentity(Object.class, "java.util.Date:" + rightNow);
+    Calendar cal = Calendar.getInstance();
+    // nullify millisecond field since dateFormat does not take milliseconds into account
+    cal.clear(Calendar.MILLISECOND);
+    Date date = cal.getTime();
+    String dateAsString = dateFormat.format(date);
+
+    ObjectIdentity c1 = new ObjectIdentity(Object.class, "java.util.Date:" + dateAsString);
+    ObjectIdentity c2 = new ObjectIdentity(Object.class, date);
+    assertEquals("Equal ObjectIdentity instances compare not equal.", 0, c1.compareTo(c2));
   }
 
   public void testBadStringDateConstructor() {
@@ -273,7 +293,8 @@ public class ObjectIdentityTest extends SingleFieldIdentityTest {
 
   public void testStringCurrencyConstructor() {
     if (!isClassLoadable("java.util.Currency")) return;
-    new ObjectIdentity(Object.class, "java.util.Currency:USD");
+    ObjectIdentity c1 = new ObjectIdentity(Object.class, "java.util.Currency:USD");
+    assertEquals("Expected USD currency", Currency.getInstance("USD"), c1.getKeyAsObject());
   }
 
   public void testBadStringCurrencyConstructor() {
@@ -299,10 +320,10 @@ public class ObjectIdentityTest extends SingleFieldIdentityTest {
     assertEquals("Equal ObjectIdentity instances compare not equal.", c2, sc2);
     assertEquals("Equal ObjectIdentity instances compare not equal.", sc1, c2);
     assertEquals("Equal ObjectIdentity instances compare not equal.", sc2, c1);
-    assertFalse("Not equal ObjectIdentity instances compare equal.", c1.equals(sc3));
-    assertFalse("Not equal ObjectIdentity instances compare equal.", sc1.equals(c3));
-    assertFalse("Not equal ObjectIdentity instances compare equal.", sc1.equals(sc3));
-    assertFalse("Not equal ObjectIdentity instances compare equal.", sc3.equals(sc1));
+    assertNotEquals("Not equal ObjectIdentity instances compare equal.", c1, sc3);
+    assertNotEquals("Not equal ObjectIdentity instances compare equal.", sc1, c3);
+    assertNotEquals("Not equal ObjectIdentity instances compare equal.", sc1, sc3);
+    assertNotEquals("Not equal ObjectIdentity instances compare equal.", sc3, sc1);
   }
 
   public void testSerializedBigDecimal() {
@@ -317,10 +338,10 @@ public class ObjectIdentityTest extends SingleFieldIdentityTest {
     assertEquals("Equal ObjectIdentity instances compare not equal.", c2, sc2);
     assertEquals("Equal ObjectIdentity instances compare not equal.", sc1, c2);
     assertEquals("Equal ObjectIdentity instances compare not equal.", sc2, c1);
-    assertFalse("Not equal ObjectIdentity instances compare equal.", c1.equals(sc3));
-    assertFalse("Not equal ObjectIdentity instances compare equal.", sc1.equals(c3));
-    assertFalse("Not equal ObjectIdentity instances compare equal.", sc1.equals(sc3));
-    assertFalse("Not equal ObjectIdentity instances compare equal.", sc3.equals(sc1));
+    assertNotEquals("Not equal ObjectIdentity instances compare equal.", c1, sc3);
+    assertNotEquals("Not equal ObjectIdentity instances compare equal.", sc1, c3);
+    assertNotEquals("Not equal ObjectIdentity instances compare equal.", sc1, sc3);
+    assertNotEquals("Not equal ObjectIdentity instances compare equal.", sc3, sc1);
   }
 
   public void testSerializedCurrency() {
@@ -336,10 +357,10 @@ public class ObjectIdentityTest extends SingleFieldIdentityTest {
     assertEquals("Equal ObjectIdentity instances compare not equal.", c2, sc2);
     assertEquals("Equal ObjectIdentity instances compare not equal.", sc1, c2);
     assertEquals("Equal ObjectIdentity instances compare not equal.", sc2, c1);
-    assertFalse("Not equal ObjectIdentity instances compare equal.", c1.equals(sc3));
-    assertFalse("Not equal ObjectIdentity instances compare equal.", sc1.equals(c3));
-    assertFalse("Not equal ObjectIdentity instances compare equal.", sc1.equals(sc3));
-    assertFalse("Not equal ObjectIdentity instances compare equal.", sc3.equals(sc1));
+    assertNotEquals("Not equal ObjectIdentity instances compare equal.", c1, sc3);
+    assertNotEquals("Not equal ObjectIdentity instances compare equal.", sc1, c3);
+    assertNotEquals("Not equal ObjectIdentity instances compare equal.", sc1, sc3);
+    assertNotEquals("Not equal ObjectIdentity instances compare equal.", sc3, sc1);
   }
 
   public void testSerializedDate() {
@@ -354,10 +375,10 @@ public class ObjectIdentityTest extends SingleFieldIdentityTest {
     assertEquals("Equal ObjectIdentity instances compare not equal.", c2, sc2);
     assertEquals("Equal ObjectIdentity instances compare not equal.", sc1, c2);
     assertEquals("Equal ObjectIdentity instances compare not equal.", sc2, c1);
-    assertFalse("Not equal ObjectIdentity instances compare equal.", c1.equals(sc3));
-    assertFalse("Not equal ObjectIdentity instances compare equal.", sc1.equals(c3));
-    assertFalse("Not equal ObjectIdentity instances compare equal.", sc1.equals(sc3));
-    assertFalse("Not equal ObjectIdentity instances compare equal.", sc3.equals(sc1));
+    assertNotEquals("Not equal ObjectIdentity instances compare equal.", c1, sc3);
+    assertNotEquals("Not equal ObjectIdentity instances compare equal.", sc1, c3);
+    assertNotEquals("Not equal ObjectIdentity instances compare equal.", sc1, sc3);
+    assertNotEquals("Not equal ObjectIdentity instances compare equal.", sc3, sc1);
   }
 
   public void testSerializedLocale() {
@@ -372,10 +393,10 @@ public class ObjectIdentityTest extends SingleFieldIdentityTest {
     assertEquals("Equal ObjectIdentity instances compare not equal.", c2, sc2);
     assertEquals("Equal ObjectIdentity instances compare not equal.", sc1, c2);
     assertEquals("Equal ObjectIdentity instances compare not equal.", sc2, c1);
-    assertFalse("Not equal ObjectIdentity instances compare equal.", c1.equals(sc3));
-    assertFalse("Not equal ObjectIdentity instances compare equal.", sc1.equals(c3));
-    assertFalse("Not equal ObjectIdentity instances compare equal.", sc1.equals(sc3));
-    assertFalse("Not equal ObjectIdentity instances compare equal.", sc3.equals(sc1));
+    assertNotEquals("Not equal ObjectIdentity instances compare equal.", c1, sc3);
+    assertNotEquals("Not equal ObjectIdentity instances compare equal.", sc1, c3);
+    assertNotEquals("Not equal ObjectIdentity instances compare equal.", sc1, sc3);
+    assertNotEquals("Not equal ObjectIdentity instances compare equal.", sc3, sc1);
   }
 
   public void testGetKeyAsObject() {
diff --git a/api/src/test/java/javax/jdo/identity/ShortIdentityTest.java b/api/src/test/java/javax/jdo/identity/ShortIdentityTest.java
index 66bdeb52..c13ededb 100644
--- a/api/src/test/java/javax/jdo/identity/ShortIdentityTest.java
+++ b/api/src/test/java/javax/jdo/identity/ShortIdentityTest.java
@@ -22,6 +22,8 @@
 
 package javax.jdo.identity;
 
+import static org.junit.Assert.assertNotEquals;
+
 import javax.jdo.JDONullIdentityException;
 import javax.jdo.util.BatchTestRunner;
 
@@ -43,7 +45,7 @@ public class ShortIdentityTest extends SingleFieldIdentityTest {
     ShortIdentity c2 = new ShortIdentity(Object.class, (short) 1);
     ShortIdentity c3 = new ShortIdentity(Object.class, (short) 2);
     assertEquals("Equal ShortIdentity instances compare not equal.", c1, c2);
-    assertFalse("Not equal ShortIdentity instances compare equal", c1.equals(c3));
+    assertNotEquals("Not equal ShortIdentity instances compare equal", c1, c3);
   }
 
   public void testShortConstructor() {
@@ -51,7 +53,7 @@ public class ShortIdentityTest extends SingleFieldIdentityTest {
     ShortIdentity c2 = new ShortIdentity(Object.class, Short.valueOf((short) 1));
     ShortIdentity c3 = new ShortIdentity(Object.class, Short.valueOf((short) 2));
     assertEquals("Equal ShortIdentity instances compare not equal.", c1, c2);
-    assertFalse("Not equal ShortIdentity instances compare equal", c1.equals(c3));
+    assertNotEquals("Not equal ShortIdentity instances compare equal", c1, c3);
   }
 
   public void testToStringConstructor() {
@@ -65,7 +67,7 @@ public class ShortIdentityTest extends SingleFieldIdentityTest {
     ShortIdentity c2 = new ShortIdentity(Object.class, "1");
     ShortIdentity c3 = new ShortIdentity(Object.class, "2");
     assertEquals("Equal ShortIdentity instances compare not equal.", c1, c2);
-    assertFalse("Not equal ShortIdentity instances compare equal", c1.equals(c3));
+    assertNotEquals("Not equal ShortIdentity instances compare equal", c1, c3);
   }
 
   public void testIllegalStringConstructor() {
@@ -89,10 +91,10 @@ public class ShortIdentityTest extends SingleFieldIdentityTest {
     assertEquals("Equal ShortIdentity instances compare not equal.", c2, sc2);
     assertEquals("Equal ShortIdentity instances compare not equal.", sc1, c2);
     assertEquals("Equal ShortIdentity instances compare not equal.", sc2, c1);
-    assertFalse("Not equal ShortIdentity instances compare equal.", c1.equals(sc3));
-    assertFalse("Not equal ShortIdentity instances compare equal.", sc1.equals(c3));
-    assertFalse("Not equal ShortIdentity instances compare equal.", sc1.equals(sc3));
-    assertFalse("Not equal ShortIdentity instances compare equal.", sc3.equals(sc1));
+    assertNotEquals("Not equal ShortIdentity instances compare equal.", c1, sc3);
+    assertNotEquals("Not equal ShortIdentity instances compare equal.", sc1, c3);
+    assertNotEquals("Not equal ShortIdentity instances compare equal.", sc1, sc3);
+    assertNotEquals("Not equal ShortIdentity instances compare equal.", sc3, sc1);
   }
 
   public void testGetKeyAsObjectPrimitive() {
diff --git a/api/src/test/java/javax/jdo/identity/StringIdentityTest.java b/api/src/test/java/javax/jdo/identity/StringIdentityTest.java
index c492583e..fd729b67 100644
--- a/api/src/test/java/javax/jdo/identity/StringIdentityTest.java
+++ b/api/src/test/java/javax/jdo/identity/StringIdentityTest.java
@@ -22,6 +22,8 @@
 
 package javax.jdo.identity;
 
+import static org.junit.Assert.assertNotEquals;
+
 import javax.jdo.JDONullIdentityException;
 import javax.jdo.util.BatchTestRunner;
 
@@ -43,7 +45,7 @@ public class StringIdentityTest extends SingleFieldIdentityTest {
     StringIdentity c2 = new StringIdentity(Object.class, "1");
     StringIdentity c3 = new StringIdentity(Object.class, "2");
     assertEquals("Equal StringIdentity instances compare not equal.", c1, c2);
-    assertFalse("Not equal StringIdentity instances compare equal", c1.equals(c3));
+    assertNotEquals("Not equal StringIdentity instances compare equal", c1, c3);
   }
 
   public void testToStringConstructor() {
@@ -64,10 +66,10 @@ public class StringIdentityTest extends SingleFieldIdentityTest {
     assertEquals("Equal StringIdentity instances compare not equal.", c2, sc2);
     assertEquals("Equal StringIdentity instances compare not equal.", sc1, c2);
     assertEquals("Equal StringIdentity instances compare not equal.", sc2, c1);
-    assertFalse("Not equal StringIdentity instances compare equal.", c1.equals(sc3));
-    assertFalse("Not equal StringIdentity instances compare equal.", sc1.equals(c3));
-    assertFalse("Not equal StringIdentity instances compare equal.", sc1.equals(sc3));
-    assertFalse("Not equal StringIdentity instances compare equal.", sc3.equals(sc1));
+    assertNotEquals("Not equal StringIdentity instances compare equal.", c1, sc3);
+    assertNotEquals("Not equal StringIdentity instances compare equal.", sc1, c3);
+    assertNotEquals("Not equal StringIdentity instances compare equal.", sc1, sc3);
+    assertNotEquals("Not equal StringIdentity instances compare equal.", sc3, sc1);
   }
 
   public void testGetKeyAsObject() {
diff --git a/api/src/test/java/javax/jdo/spi/JDOImplHelperTest.java b/api/src/test/java/javax/jdo/spi/JDOImplHelperTest.java
index f300e473..f0a4df47 100644
--- a/api/src/test/java/javax/jdo/spi/JDOImplHelperTest.java
+++ b/api/src/test/java/javax/jdo/spi/JDOImplHelperTest.java
@@ -118,13 +118,20 @@ public class JDOImplHelperTest extends AbstractTest {
 
   /** */
   public void testNewInstance() {
-    // TBD: test JDOImplHelper.newInstance(pcClass, sm) and
-    // JDOImplHelper.newInstance(pcClass, sm, oid)
+    JDOImplHelper implHelper = JDOImplHelper.getInstance();
+    PersistenceCapable pcpoint = implHelper.newInstance(PCPoint.class, null);
+    assertTrue("instance created by newInstance is not a PCPoint", pcpoint instanceof PCPoint);
+
+    pcpoint = implHelper.newInstance(PCPoint.class, null, null);
+    assertTrue("instance created by newInstance is not a PCPoint", pcpoint instanceof PCPoint);
   }
 
   /** */
   public void testNewObjectIdInstance() {
-    // TBD: test JDOImplHelper.newObjectIdInstance(pcClass)
+    JDOImplHelper implHelper = JDOImplHelper.getInstance();
+    Object oid = implHelper.newObjectIdInstance(PCPoint.class);
+    // The ObjrectId od javax.jdo.pc.PCPoint is always null
+    assertNull("Unexpected non-null ObjectId of PCPoint", oid);
   }
 
   /** */
diff --git a/api/src/test/java/javax/jdo/stub/StubPMF.java b/api/src/test/java/javax/jdo/stub/StubPMF.java
index ff74693b..6768ac2c 100644
--- a/api/src/test/java/javax/jdo/stub/StubPMF.java
+++ b/api/src/test/java/javax/jdo/stub/StubPMF.java
@@ -421,107 +421,107 @@ public class StubPMF implements PersistenceManagerFactory, Constants {
   void setProperty(String name, Object value) {
     String val = value.toString();
 
-    if (name.equals(PROPERTY_PERSISTENCE_MANAGER_FACTORY_CLASS)) {
+    if (name.equals(Constants.PROPERTY_PERSISTENCE_MANAGER_FACTORY_CLASS)) {
       setPersistenceManagerFactoryClass(val);
       return;
     }
-    if (name.equals(PROPERTY_CONNECTION_DRIVER_NAME)) {
+    if (name.equals(Constants.PROPERTY_CONNECTION_DRIVER_NAME)) {
       setConnectionDriverName(val);
       return;
     }
-    if (name.equals(PROPERTY_CONNECTION_FACTORY_NAME)) {
+    if (name.equals(Constants.PROPERTY_CONNECTION_FACTORY_NAME)) {
       setConnectionFactoryName(val);
       return;
     }
-    if (name.equals(PROPERTY_CONNECTION_FACTORY2_NAME)) {
+    if (name.equals(Constants.PROPERTY_CONNECTION_FACTORY2_NAME)) {
       setConnectionFactory2Name(val);
       return;
     }
-    if (name.equals(PROPERTY_CONNECTION_PASSWORD)) {
+    if (name.equals(Constants.PROPERTY_CONNECTION_PASSWORD)) {
       setConnectionPassword(val);
       return;
     }
-    if (name.equals(PROPERTY_CONNECTION_URL)) {
+    if (name.equals(Constants.PROPERTY_CONNECTION_URL)) {
       setConnectionURL(val);
       return;
     }
-    if (name.equals(PROPERTY_CONNECTION_USER_NAME)) {
+    if (name.equals(Constants.PROPERTY_CONNECTION_USER_NAME)) {
       setConnectionUserName(val);
       return;
     }
-    if (name.equals(PROPERTY_IGNORE_CACHE)) {
+    if (name.equals(Constants.PROPERTY_IGNORE_CACHE)) {
       setCopyOnAttach(Boolean.parseBoolean(val));
       return;
     }
-    if (name.equals(PROPERTY_DATASTORE_READ_TIMEOUT_MILLIS)) {
+    if (name.equals(Constants.PROPERTY_DATASTORE_READ_TIMEOUT_MILLIS)) {
       setDatastoreReadTimeoutMillis(Integer.parseInt(val));
       return;
     }
-    if (name.equals(PROPERTY_DATASTORE_WRITE_TIMEOUT_MILLIS)) {
+    if (name.equals(Constants.PROPERTY_DATASTORE_WRITE_TIMEOUT_MILLIS)) {
       setDatastoreWriteTimeoutMillis(Integer.parseInt(val));
       return;
     }
-    if (name.equals(PROPERTY_DETACH_ALL_ON_COMMIT)) {
+    if (name.equals(Constants.PROPERTY_DETACH_ALL_ON_COMMIT)) {
       setDetachAllOnCommit(Boolean.parseBoolean(val));
       return;
     }
-    if (name.equals(PROPERTY_IGNORE_CACHE)) {
+    if (name.equals(Constants.PROPERTY_IGNORE_CACHE)) {
       setIgnoreCache(Boolean.parseBoolean(val));
       return;
     }
-    if (name.equals(PROPERTY_MAPPING)) {
+    if (name.equals(Constants.PROPERTY_MAPPING)) {
       setMapping(val);
       return;
     }
-    if (name.equals(PROPERTY_MULTITHREADED)) {
+    if (name.equals(Constants.PROPERTY_MULTITHREADED)) {
       setMultithreaded(Boolean.parseBoolean(val));
       return;
     }
-    if (name.equals(PROPERTY_NAME)) {
+    if (name.equals(Constants.PROPERTY_NAME)) {
       setName(val);
       return;
     }
-    if (name.equals(PROPERTY_NONTRANSACTIONAL_READ)) {
+    if (name.equals(Constants.PROPERTY_NONTRANSACTIONAL_READ)) {
       setNontransactionalRead(Boolean.parseBoolean(val));
       return;
     }
-    if (name.equals(PROPERTY_NONTRANSACTIONAL_WRITE)) {
+    if (name.equals(Constants.PROPERTY_NONTRANSACTIONAL_WRITE)) {
       setNontransactionalWrite(Boolean.parseBoolean(val));
       return;
     }
-    if (name.equals(PROPERTY_OPTIMISTIC)) {
+    if (name.equals(Constants.PROPERTY_OPTIMISTIC)) {
       setOptimistic(Boolean.parseBoolean(val));
       return;
     }
-    if (name.equals(PROPERTY_PERSISTENCE_UNIT_NAME)) {
+    if (name.equals(Constants.PROPERTY_PERSISTENCE_UNIT_NAME)) {
       setPersistenceUnitName(val);
       return;
     }
-    if (name.equals(PROPERTY_READONLY)) {
+    if (name.equals(Constants.PROPERTY_READONLY)) {
       setReadOnly(Boolean.parseBoolean(val));
       return;
     }
-    if (name.equals(PROPERTY_RESTORE_VALUES)) {
+    if (name.equals(Constants.PROPERTY_RESTORE_VALUES)) {
       setRestoreValues(Boolean.parseBoolean(val));
       return;
     }
-    if (name.equals(PROPERTY_RETAIN_VALUES)) {
+    if (name.equals(Constants.PROPERTY_RETAIN_VALUES)) {
       setRetainValues(Boolean.parseBoolean(val));
       return;
     }
-    if (name.equals(PROPERTY_SERVER_TIME_ZONE_ID)) {
+    if (name.equals(Constants.PROPERTY_SERVER_TIME_ZONE_ID)) {
       setServerTimeZoneID(val);
       return;
     }
-    if (name.equals(PROPERTY_TRANSACTION_ISOLATION_LEVEL)) {
+    if (name.equals(Constants.PROPERTY_TRANSACTION_ISOLATION_LEVEL)) {
       setTransactionIsolationLevel(val);
       return;
     }
-    if (name.equals(PROPERTY_TRANSACTION_TYPE)) {
+    if (name.equals(Constants.PROPERTY_TRANSACTION_TYPE)) {
       setTransactionType(val);
       return;
     }
-    if (name.equals(PROPERTY_SPI_RESOURCE_NAME)) {
+    if (name.equals(Constants.PROPERTY_SPI_RESOURCE_NAME)) {
       setSpiResourceName(val);
       return;
     }
diff --git a/exectck/src/main/java/org/apache/jdo/exectck/AbstractTCKMojo.java b/exectck/src/main/java/org/apache/jdo/exectck/AbstractTCKMojo.java
index 074d2540..0540d4e5 100644
--- a/exectck/src/main/java/org/apache/jdo/exectck/AbstractTCKMojo.java
+++ b/exectck/src/main/java/org/apache/jdo/exectck/AbstractTCKMojo.java
@@ -29,7 +29,7 @@ import org.apache.maven.plugins.annotations.Parameter;
 public abstract class AbstractTCKMojo extends AbstractMojo {
 
   /** Filename of log4j2 configuration file. */
-  protected final String LOG4J2_CONFIGURATION = "log4j2.xml";
+  protected static final String LOG4J2_CONFIGURATION = "log4j2.xml";
 
   /** Location of TCK generated output. */
   @Parameter(
diff --git a/exectck/src/main/java/org/apache/jdo/exectck/Enhance.java b/exectck/src/main/java/org/apache/jdo/exectck/Enhance.java
index 3fd8a2f3..4c96a3fc 100644
--- a/exectck/src/main/java/org/apache/jdo/exectck/Enhance.java
+++ b/exectck/src/main/java/org/apache/jdo/exectck/Enhance.java
@@ -24,7 +24,6 @@ import java.net.URL;
 import java.net.URLClassLoader;
 import java.nio.charset.Charset;
 import java.util.ArrayList;
-import java.util.Collection;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.logging.Level;
@@ -41,34 +40,40 @@ import org.apache.maven.plugins.annotations.Parameter;
 @Mojo(name = "enhance")
 public class Enhance extends AbstractTCKMojo {
 
+  private static final String APACHE_DIR_NAME = "apache"; // NOI18N
+  private static final String JDO_DIR_NAME = "jdo"; // NOI18N
+  private static final String ENHANCED_DIR_NAME = "enhanced"; // NOI18N
+  private static final String ORG_DIR_NAME = "org"; // NOI18N
+  private static final String TCK_DIR_NAME = "tck"; // NOI18N
+
   private static final String[] PC_PKG_DIRS = {
-    "org"
+    ORG_DIR_NAME
         + File.separator
-        + "apache"
+        + APACHE_DIR_NAME
         + File.separator
-        + "jdo"
+        + JDO_DIR_NAME
         + File.separator
-        + "tck"
+        + TCK_DIR_NAME
         + File.separator
         + "api"
         + File.separator,
-    "org"
+    ORG_DIR_NAME
         + File.separator
-        + "apache"
+        + APACHE_DIR_NAME
         + File.separator
-        + "jdo"
+        + JDO_DIR_NAME
         + File.separator
-        + "tck"
+        + TCK_DIR_NAME
         + File.separator
         + "pc"
         + File.separator,
-    "org"
+    ORG_DIR_NAME
         + File.separator
-        + "apache"
+        + APACHE_DIR_NAME
         + File.separator
-        + "jdo"
+        + JDO_DIR_NAME
         + File.separator
-        + "tck"
+        + TCK_DIR_NAME
         + File.separator
         + "models"
         + File.separator
@@ -86,15 +91,6 @@ public class Enhance extends AbstractTCKMojo {
       required = true)
   private String srcDirectory;
 
-  /** List of identity types to be tested. */
-  @Parameter(
-      property = "jdo.tck.identitytypes",
-      defaultValue = "applicationidentity datastoreidentity",
-      required = true)
-  private String identitytypes;
-
-  private Collection<String> idtypes;
-
   @Override
   public void execute() throws MojoExecutionException, MojoFailureException {
 
@@ -110,7 +106,7 @@ public class Enhance extends AbstractTCKMojo {
     resetFileContent(implLogFile);
 
     // Create directory for enhancer logs
-    String enhanceLogsDirName = logsDirectory + File.separator + "enhanced";
+    String enhanceLogsDirName = logsDirectory + File.separator + ENHANCED_DIR_NAME;
     File enhancerLogsDir = new File(enhanceLogsDirName);
     if (!(enhancerLogsDir.exists()) && !(enhancerLogsDir.mkdirs())) {
       throw new MojoExecutionException("Failed to create directory " + enhancerLogsDir);
@@ -124,7 +120,12 @@ public class Enhance extends AbstractTCKMojo {
 
     // Create directory for enhanced classes
     String enhancedDirName =
-        buildDirectory + File.separator + "enhanced" + File.separator + impl + File.separator;
+        buildDirectory
+            + File.separator
+            + ENHANCED_DIR_NAME
+            + File.separator
+            + impl
+            + File.separator;
     File enhancedDir = new File(enhancedDirName);
     if (!(enhancedDir.exists()) && !(enhancedDir.mkdirs())) {
       throw new MojoExecutionException("Failed to create directory " + enhancedDir);
@@ -166,7 +167,7 @@ public class Enhance extends AbstractTCKMojo {
                   new File(enhancedDirName + File.separator + idtype + File.separator + pkgName);
               FileUtils.copyFile(fromFile, toFile);
             } else {
-              continue; // idtype not in pathname, do not copy
+              // idtype not in pathname, do not copy
             }
           } catch (IOException ex) {
             throw new MojoExecutionException(
@@ -271,7 +272,7 @@ public class Enhance extends AbstractTCKMojo {
       String testLogFilename =
           logsDirectory
               + File.separator
-              + "enhanced"
+              + ENHANCED_DIR_NAME
               + File.separator
               + idname
               + "-"
diff --git a/exectck/src/main/java/org/apache/jdo/exectck/InstallSchema.java b/exectck/src/main/java/org/apache/jdo/exectck/InstallSchema.java
index a4968728..220a7a33 100644
--- a/exectck/src/main/java/org/apache/jdo/exectck/InstallSchema.java
+++ b/exectck/src/main/java/org/apache/jdo/exectck/InstallSchema.java
@@ -32,6 +32,8 @@ import org.apache.maven.plugins.annotations.Parameter;
 @Mojo(name = "installSchema")
 public class InstallSchema extends AbstractTCKMojo {
 
+  private static final String DB_DIR_NAME = "database"; // NOI18N
+
   /** Location of TCK generated output. */
   @Parameter(property = "jdo.tck.doInstallSchema", defaultValue = "true", required = true)
   private boolean doInstallSchema;
@@ -77,21 +79,21 @@ public class InstallSchema extends AbstractTCKMojo {
             + "\n  databases: "
             + dbs.toString()
             + "\n  identity types: "
-            + identitytypes.toString());
+            + identitytypes);
 
     System.setProperty("java.security.manager", "default");
     System.setProperty("java.security.policy", confDirectory + File.separator + "security.policy");
 
     for (String db : dbs) {
       // Create directory for db logs
-      String dbLogsDirName = logsDirectory + File.separator + "database";
+      String dbLogsDirName = logsDirectory + File.separator + DB_DIR_NAME;
       File dbLogsDir = new File(dbLogsDirName);
       if (!(dbLogsDir.exists()) && !(dbLogsDir.mkdirs())) {
         throw new MojoExecutionException("Failed to create directory " + dbLogsDir);
       }
 
       // Create database directory
-      String dbDirName = buildDirectory + File.separator + "database" + File.separator + db;
+      String dbDirName = buildDirectory + File.separator + DB_DIR_NAME + File.separator + db;
       File dbDir = new File(dbDirName);
       if (!(dbDir.exists()) && !(dbDir.mkdirs())) {
         throw new MojoExecutionException("Failed to create directory " + dbDir);
@@ -125,7 +127,7 @@ public class InstallSchema extends AbstractTCKMojo {
           String outFileName =
               logsDirectory
                   + File.separator
-                  + "database"
+                  + DB_DIR_NAME
                   + File.separator
                   + db
                   + "_"
diff --git a/exectck/src/main/java/org/apache/jdo/exectck/PropertyUtils.java b/exectck/src/main/java/org/apache/jdo/exectck/PropertyUtils.java
index 6831b302..dcb63aa0 100644
--- a/exectck/src/main/java/org/apache/jdo/exectck/PropertyUtils.java
+++ b/exectck/src/main/java/org/apache/jdo/exectck/PropertyUtils.java
@@ -47,12 +47,10 @@ public class PropertyUtils {
    * @param list HashSet to contain String items
    */
   public static void string2List(String names, List<String> list) {
-    //        System.out.println("names are " + names);
     String[] items = names.split("[ \t\n]");
     for (String s : items) {
       list.add(s);
     }
-    //        System.out.println("List names are " + list.toString());
   }
 
   /**
@@ -72,12 +70,10 @@ public class PropertyUtils {
 
       Properties props = new Properties();
       FileInputStream fis = null;
-      //            System.out.println("confName is " + confName);
       try {
         fis = new FileInputStream(confName);
         props.load(fis);
         mapping = props.getProperty("jdo.tck.mapping");
-        //                System.out.println("Next mapping is " + mapping);
       } catch (IOException e) {
         e.printStackTrace();
         try {
diff --git a/exectck/src/main/java/org/apache/jdo/exectck/RunTCK.java b/exectck/src/main/java/org/apache/jdo/exectck/RunTCK.java
index 3d066f1e..beb8dfa1 100644
--- a/exectck/src/main/java/org/apache/jdo/exectck/RunTCK.java
+++ b/exectck/src/main/java/org/apache/jdo/exectck/RunTCK.java
@@ -41,11 +41,13 @@ import org.apache.maven.plugins.annotations.Parameter;
 @Mojo(name = "runtck")
 public class RunTCK extends AbstractTCKMojo {
 
-  private static final String TCK_PARAM_ON_FAILURE_FAIL_FAST = "failFast";
-  private static final String TCK_PARAM_ON_FAILURE_FAIL_EVENTUALLY = "failGoal";
-  private static final String TCK_PARAM_ON_FAILURE_LOG_ONLY = "logOnly";
+  private static final String TCK_PARAM_ON_FAILURE_FAIL_FAST = "failFast"; // NOI18N
+  private static final String TCK_PARAM_ON_FAILURE_FAIL_EVENTUALLY = "failGoal"; // NOI18N
+  private static final String TCK_PARAM_ON_FAILURE_LOG_ONLY = "logOnly"; // NOI18N
 
-  private static final String TCK_LOG_FILE = "tck.txt";
+  private static final String CLASSES_DIR_NAME = "classes"; // NOI18N
+
+  private static final String TCK_LOG_FILE = "tck.txt"; // NOI18N
 
   /** To skip running of TCK, set to false. */
   @Parameter(property = "jdo.tck.doRunTCK", defaultValue = "true", required = true)
@@ -74,13 +76,6 @@ public class RunTCK extends AbstractTCKMojo {
   @Parameter(property = "jdo.tck.skipJndi", defaultValue = "false", required = true)
   private boolean skipJndi;
 
-  /** Location of implementation log file. */
-  @Parameter(
-      property = "jdo.tck.impl.logfile",
-      defaultValue = "${user.dir}/datanucleus.txt",
-      required = true)
-  private String implLogFile;
-
   /** Name of file in src/conf containing pmf properties. */
   @Parameter(property = "jdo.tck.pmfproperties", defaultValue = "jdori-pmf.properties")
   private String pmfProperties;
@@ -203,7 +198,7 @@ public class RunTCK extends AbstractTCKMojo {
             + dbs.toString()
             + "\n"
             + " identitytypes: "
-            + identitytypes.toString());
+            + identitytypes);
 
     // Properties required for test execution
     System.out.println("cleanupaftertest is " + cleanupaftertest);
@@ -215,14 +210,14 @@ public class RunTCK extends AbstractTCKMojo {
         "-DPMFProperties="
             + buildDirectory
             + File.separator
-            + "classes"
+            + CLASSES_DIR_NAME
             + File.separator
             + pmfProperties);
     propsString.add(
         "-DPMF2Properties="
             + buildDirectory
             + File.separator
-            + "classes"
+            + CLASSES_DIR_NAME
             + File.separator
             + pmfProperties);
     String excludeFile = confDirectory + File.separator + exclude;
@@ -253,7 +248,7 @@ public class RunTCK extends AbstractTCKMojo {
           new File(
               buildDirectory
                   + File.separator
-                  + "classes"
+                  + CLASSES_DIR_NAME
                   + File.separator
                   + "META-INF"
                   + File.separator
@@ -264,7 +259,7 @@ public class RunTCK extends AbstractTCKMojo {
           new File(
               buildDirectory
                   + File.separator
-                  + "classes"
+                  + CLASSES_DIR_NAME
                   + File.separator
                   + "META-INF"
                   + File.separator
@@ -323,7 +318,7 @@ public class RunTCK extends AbstractTCKMojo {
         try {
           URL url1 = enhancedDir.toURI().toURL();
           URL url2 =
-              new File(buildDirectory + File.separator + "classes" + File.separator)
+              new File(buildDirectory + File.separator + CLASSES_DIR_NAME + File.separator)
                   .toURI()
                   .toURL();
           if (runtckVerbose) {
@@ -360,8 +355,6 @@ public class RunTCK extends AbstractTCKMojo {
           cfgPropsString.add(
               "-Djdo.tck.mapping.companyfactory="
                   + getTrimmedPropertyValue(props, "jdo.tck.mapping.companyfactory"));
-          //                    innerPropsString.append("-Djdo.tck.description=\"" +
-          //                            props.getProperty("jdo.tck.description") + "\"");
           cfgPropsString.add(
               "-Djdo.tck.requiredOptions="
                   + getTrimmedPropertyValue(props, "jdo.tck.requiredOptions"));
@@ -397,7 +390,7 @@ public class RunTCK extends AbstractTCKMojo {
           propsFileData.append("\njavax.jdo.option.Mapping=standard" + mapping);
           propsFileData.append("\n");
           String pmfPropsWriteFileName =
-              buildDirectory + File.separator + "classes" + File.separator + pmfProperties;
+              buildDirectory + File.separator + CLASSES_DIR_NAME + File.separator + pmfProperties;
           try {
             BufferedWriter out = new BufferedWriter(new FileWriter(pmfPropsWriteFileName, false));
             out.write(defaultPropsContents + propsFileData.toString());
diff --git a/parent-pom/pom.xml b/parent-pom/pom.xml
index 6f25ea31..95802056 100644
--- a/parent-pom/pom.xml
+++ b/parent-pom/pom.xml
@@ -317,8 +317,8 @@
                 <configuration>
                     <source>8</source>
                     <doclint>none</doclint>
-                    <doctitle>${project.name} ${pom.currentVersion}</doctitle>
-                    <windowtitle>${project.name} ${pom.currentVersion}</windowtitle>
+                    <doctitle>${project.name} ${project.version}</doctitle>
+                    <windowtitle>${project.name} ${project.version}</windowtitle>
                 </configuration>
             </plugin>
             <plugin>
diff --git a/tck/src/main/java/org/apache/jdo/tck/api/persistencemanager/GetProperties.java b/tck/src/main/java/org/apache/jdo/tck/api/persistencemanager/GetProperties.java
index 7c56d0b3..a6dbe0bb 100644
--- a/tck/src/main/java/org/apache/jdo/tck/api/persistencemanager/GetProperties.java
+++ b/tck/src/main/java/org/apache/jdo/tck/api/persistencemanager/GetProperties.java
@@ -212,7 +212,7 @@ public class GetProperties extends JDO_Test implements Constants {
   }
 
   private final TestProperty testCopyOnAttach =
-      new AbstractAPITestProperty(PROPERTY_COPY_ON_ATTACH, true, false) {
+      new AbstractAPITestProperty(Constants.PROPERTY_COPY_ON_ATTACH, true, false) {
         public Object get(PersistenceManager pm) {
           return pm.getCopyOnAttach();
         }
@@ -223,7 +223,7 @@ public class GetProperties extends JDO_Test implements Constants {
       };
 
   private final TestProperty testDatastoreReadTimeoutMillis =
-      new AbstractAPITestProperty(PROPERTY_DATASTORE_READ_TIMEOUT_MILLIS, 20, 40) {
+      new AbstractAPITestProperty(Constants.PROPERTY_DATASTORE_READ_TIMEOUT_MILLIS, 20, 40) {
         public Object get(PersistenceManager pm) {
           return pm.getDatastoreReadTimeoutMillis();
         }
@@ -234,7 +234,7 @@ public class GetProperties extends JDO_Test implements Constants {
       };
 
   private final TestProperty testDatastoreWriteTimeoutMillis =
-      new AbstractAPITestProperty(PROPERTY_DATASTORE_WRITE_TIMEOUT_MILLIS, 60, 80) {
+      new AbstractAPITestProperty(Constants.PROPERTY_DATASTORE_WRITE_TIMEOUT_MILLIS, 60, 80) {
         public Object get(PersistenceManager pm) {
           return pm.getDatastoreWriteTimeoutMillis();
         }
@@ -245,7 +245,7 @@ public class GetProperties extends JDO_Test implements Constants {
       };
 
   private final TestProperty testMultithreaded =
-      new AbstractAPITestProperty(PROPERTY_MULTITHREADED, true, false) {
+      new AbstractAPITestProperty(Constants.PROPERTY_MULTITHREADED, true, false) {
         public Object get(PersistenceManager pm) {
           return pm.getMultithreaded();
         }
@@ -256,7 +256,7 @@ public class GetProperties extends JDO_Test implements Constants {
       };
 
   private final TestProperty testLowerCaseMultithreaded =
-      new AbstractAPITestProperty(PROPERTY_MULTITHREADED, true, false) {
+      new AbstractAPITestProperty(Constants.PROPERTY_MULTITHREADED, true, false) {
         public Object get(PersistenceManager pm) {
           return pm.getMultithreaded();
         }
@@ -267,7 +267,7 @@ public class GetProperties extends JDO_Test implements Constants {
       };
 
   private final TestProperty testUpperCaseMultithreaded =
-      new AbstractAPITestProperty(PROPERTY_MULTITHREADED, true, false) {
+      new AbstractAPITestProperty(Constants.PROPERTY_MULTITHREADED, true, false) {
         public Object get(PersistenceManager pm) {
           return pm.getMultithreaded();
         }
@@ -278,7 +278,7 @@ public class GetProperties extends JDO_Test implements Constants {
       };
 
   private final TestProperty testDetachAllOnCommit =
-      new AbstractAPITestProperty(PROPERTY_DETACH_ALL_ON_COMMIT, true, false) {
+      new AbstractAPITestProperty(Constants.PROPERTY_DETACH_ALL_ON_COMMIT, true, false) {
         public Object get(PersistenceManager pm) {
           return pm.getDetachAllOnCommit();
         }
@@ -289,7 +289,7 @@ public class GetProperties extends JDO_Test implements Constants {
       };
 
   private final TestProperty testIgnoreCache =
-      new AbstractAPITestProperty(PROPERTY_IGNORE_CACHE, true, false) {
+      new AbstractAPITestProperty(Constants.PROPERTY_IGNORE_CACHE, true, false) {
         public Object get(PersistenceManager pm) {
           return pm.getIgnoreCache();
         }
@@ -300,7 +300,7 @@ public class GetProperties extends JDO_Test implements Constants {
       };
 
   private final TestProperty testOptimistic =
-      new AbstractAPITestProperty(PROPERTY_OPTIMISTIC, true, false) {
+      new AbstractAPITestProperty(Constants.PROPERTY_OPTIMISTIC, true, false) {
         public Object get(PersistenceManager pm) {
           return pm.currentTransaction().getOptimistic();
         }
@@ -311,7 +311,7 @@ public class GetProperties extends JDO_Test implements Constants {
       };
 
   private final TestProperty testRetainValues =
-      new AbstractAPITestProperty(PROPERTY_RETAIN_VALUES, true, false) {
+      new AbstractAPITestProperty(Constants.PROPERTY_RETAIN_VALUES, true, false) {
         public Object get(PersistenceManager pm) {
           return pm.currentTransaction().getRetainValues();
         }
@@ -322,7 +322,7 @@ public class GetProperties extends JDO_Test implements Constants {
       };
 
   private final TestProperty testRestoreValues =
-      new AbstractAPITestProperty(PROPERTY_RESTORE_VALUES, true, false) {
+      new AbstractAPITestProperty(Constants.PROPERTY_RESTORE_VALUES, true, false) {
         public Object get(PersistenceManager pm) {
           return pm.currentTransaction().getRestoreValues();
         }
@@ -333,7 +333,7 @@ public class GetProperties extends JDO_Test implements Constants {
       };
 
   private final TestProperty testNontransactionalRead =
-      new AbstractAPITestProperty(PROPERTY_NONTRANSACTIONAL_READ, true, false) {
+      new AbstractAPITestProperty(Constants.PROPERTY_NONTRANSACTIONAL_READ, true, false) {
         public Object get(PersistenceManager pm) {
           return pm.currentTransaction().getNontransactionalRead();
         }
@@ -344,7 +344,7 @@ public class GetProperties extends JDO_Test implements Constants {
       };
 
   private final TestProperty testNontransactionalWrite =
-      new AbstractAPITestProperty(PROPERTY_NONTRANSACTIONAL_WRITE, true, false) {
+      new AbstractAPITestProperty(Constants.PROPERTY_NONTRANSACTIONAL_WRITE, true, false) {
         public Object get(PersistenceManager pm) {
           return pm.currentTransaction().getNontransactionalWrite();
         }
@@ -355,7 +355,7 @@ public class GetProperties extends JDO_Test implements Constants {
       };
 
   private final TestProperty testIllegalArgument =
-      new AbstractNonAPITestProperty(PROPERTY_IGNORE_CACHE, 1, false) {};
+      new AbstractNonAPITestProperty(Constants.PROPERTY_IGNORE_CACHE, 1, false) {};
 
   private Set<TestProperty> setOf(TestProperty... testPropertys) {
     Set<TestProperty> result = new HashSet<>();
@@ -376,20 +376,22 @@ public class GetProperties extends JDO_Test implements Constants {
     testLowerCaseMultithreaded.setMessageForWrongResultAfterSet(ASSERTION_FAILED_12_19_3);
     testUpperCaseMultithreaded.setMessageForWrongResultAfterSet(ASSERTION_FAILED_12_19_3);
     testOptionalProperties.put(
-        PROPERTY_MULTITHREADED,
+        Constants.PROPERTY_MULTITHREADED,
         setOf(testMultithreaded, testLowerCaseMultithreaded, testUpperCaseMultithreaded));
     testOptionalProperties.put(
-        OPTION_DATASTORE_TIMEOUT,
+        Constants.OPTION_DATASTORE_TIMEOUT,
         setOf(testDatastoreReadTimeoutMillis, testDatastoreWriteTimeoutMillis));
 
     testOptimistic.setMessageForWrongResultAfterSet(ASSERTION_FAILED_12_19_4);
-    testOptionalProperties.put(PROPERTY_OPTIMISTIC, setOf(testOptimistic));
+    testOptionalProperties.put(Constants.PROPERTY_OPTIMISTIC, setOf(testOptimistic));
     testRetainValues.setMessageForWrongResultAfterSet(ASSERTION_FAILED_12_19_4);
-    testOptionalProperties.put(PROPERTY_RETAIN_VALUES, setOf(testRetainValues));
+    testOptionalProperties.put(Constants.PROPERTY_RETAIN_VALUES, setOf(testRetainValues));
     testNontransactionalRead.setMessageForWrongResultAfterSet(ASSERTION_FAILED_12_19_4);
-    testOptionalProperties.put(PROPERTY_NONTRANSACTIONAL_READ, setOf(testNontransactionalRead));
+    testOptionalProperties.put(
+        Constants.PROPERTY_NONTRANSACTIONAL_READ, setOf(testNontransactionalRead));
     testNontransactionalWrite.setMessageForWrongResultAfterSet(ASSERTION_FAILED_12_19_4);
-    testOptionalProperties.put(PROPERTY_NONTRANSACTIONAL_WRITE, setOf(testNontransactionalWrite));
+    testOptionalProperties.put(
+        Constants.PROPERTY_NONTRANSACTIONAL_WRITE, setOf(testNontransactionalWrite));
 
     supportedOptions = pmf.supportedOptions();
     for (String supportedOption : supportedOptions) {
@@ -442,9 +444,9 @@ public class GetProperties extends JDO_Test implements Constants {
 
     // changing a property of the returned set of property values must not change the underlying
     // property value
-    pm.setProperty(PROPERTY_COPY_ON_ATTACH, true);
+    pm.setProperty(Constants.PROPERTY_COPY_ON_ATTACH, true);
     Map<String, Object> props = pm.getProperties();
-    props.put(PROPERTY_COPY_ON_ATTACH, false);
+    props.put(Constants.PROPERTY_COPY_ON_ATTACH, false);
     errorIfNotEqual(ASSERTION_FAILED_12_19_6, true, pm.getCopyOnAttach());
 
     failOnError();
diff --git a/tck/src/main/java/org/apache/jdo/tck/api/persistencemanagerfactory/SetTransactionIsolationLevel.java b/tck/src/main/java/org/apache/jdo/tck/api/persistencemanagerfactory/SetTransactionIsolationLevel.java
index 1aaf33b4..ea6532c9 100644
--- a/tck/src/main/java/org/apache/jdo/tck/api/persistencemanagerfactory/SetTransactionIsolationLevel.java
+++ b/tck/src/main/java/org/apache/jdo/tck/api/persistencemanagerfactory/SetTransactionIsolationLevel.java
@@ -45,7 +45,11 @@ public class SetTransactionIsolationLevel extends JDO_Test implements Constants
   /** All specified transaction isolation levels */
   private static final String[] transactionIsolationLevels =
       new String[] {
-        TX_READ_UNCOMMITTED, TX_READ_COMMITTED, TX_REPEATABLE_READ, TX_SNAPSHOT, TX_SERIALIZABLE
+        Constants.TX_READ_UNCOMMITTED,
+        Constants.TX_READ_COMMITTED,
+        Constants.TX_REPEATABLE_READ,
+        Constants.TX_SNAPSHOT,
+        Constants.TX_SERIALIZABLE
       };
 
   private PersistenceManagerFactory pmf2;
@@ -87,7 +91,7 @@ public class SetTransactionIsolationLevel extends JDO_Test implements Constants
   /** Set TransactionIsolationLevel to all values. */
   public void testTransactionIsolationLevelReadCommittedSupported() {
     // this test depends on setUp initializing supportedOptions
-    String readCommitted = PROPERTY_TRANSACTION_ISOLATION_LEVEL_READ_COMMITTED;
+    String readCommitted = Constants.PROPERTY_TRANSACTION_ISOLATION_LEVEL_READ_COMMITTED;
     // make sure read committed is supported
     if (!isSupported(readCommitted)) {
       appendMessage(
@@ -103,9 +107,9 @@ public class SetTransactionIsolationLevel extends JDO_Test implements Constants
     pmf.setConnectionURL(getPMFProperty(CONNECTION_URL_PROP));
     pmf.setConnectionUserName(getPMFProperty(CONNECTION_USERNAME_PROP));
     pmf.setConnectionPassword(getPMFProperty(CONNECTION_PASSWORD_PROP));
-    pmf.setConnectionDriverName(getPMFProperty(PROPERTY_CONNECTION_DRIVER_NAME));
+    pmf.setConnectionDriverName(getPMFProperty(Constants.PROPERTY_CONNECTION_DRIVER_NAME));
 
-    String property = PROPERTY_TRANSACTION_ISOLATION_LEVEL + "." + level;
+    String property = Constants.PROPERTY_TRANSACTION_ISOLATION_LEVEL + "." + level;
     try {
       pmf.setTransactionIsolationLevel(level);
 
@@ -142,9 +146,9 @@ public class SetTransactionIsolationLevel extends JDO_Test implements Constants
   }
   /** */
   private void getPMFsetTransactionIsolationLevelFromProperties(String level) {
-    String property = PROPERTY_TRANSACTION_ISOLATION_LEVEL + "." + level;
+    String property = Constants.PROPERTY_TRANSACTION_ISOLATION_LEVEL + "." + level;
     Map<Object, Object> modifiedProps = new HashMap<>(PMFPropertiesObject);
-    modifiedProps.put(PROPERTY_TRANSACTION_ISOLATION_LEVEL, level);
+    modifiedProps.put(Constants.PROPERTY_TRANSACTION_ISOLATION_LEVEL, level);
     if (isSupported(property)) {
       pmf2 = JDOHelper.getPersistenceManagerFactory(modifiedProps);
       String actual = pmf2.getTransactionIsolationLevel();
diff --git a/tck/src/main/java/org/apache/jdo/tck/transactions/SetIsolationLevel.java b/tck/src/main/java/org/apache/jdo/tck/transactions/SetIsolationLevel.java
index 11c01af0..75850151 100644
--- a/tck/src/main/java/org/apache/jdo/tck/transactions/SetIsolationLevel.java
+++ b/tck/src/main/java/org/apache/jdo/tck/transactions/SetIsolationLevel.java
@@ -42,7 +42,11 @@ public class SetIsolationLevel extends JDO_Test implements Constants {
   /** All specified isolation levels */
   private static final String[] isolationLevels =
       new String[] {
-        TX_READ_UNCOMMITTED, TX_READ_COMMITTED, TX_REPEATABLE_READ, TX_SNAPSHOT, TX_SERIALIZABLE
+        Constants.TX_READ_UNCOMMITTED,
+        Constants.TX_READ_COMMITTED,
+        Constants.TX_REPEATABLE_READ,
+        Constants.TX_SNAPSHOT,
+        Constants.TX_SERIALIZABLE
       };
 
   /**
@@ -123,7 +127,7 @@ public class SetIsolationLevel extends JDO_Test implements Constants {
   /** */
   private void setIsolationLevel(String level) {
     Transaction tx = pm.currentTransaction();
-    String property = PROPERTY_TRANSACTION_ISOLATION_LEVEL + "." + level;
+    String property = Constants.PROPERTY_TRANSACTION_ISOLATION_LEVEL + "." + level;
     if (isSupported(property)) {
       tx.setIsolationLevel(level);
       String actual = tx.getIsolationLevel();