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 2022/08/25 19:01:29 UTC

[db-jdo] branch revert-55-gjf-reformat created (now d3ef5240)

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

mbo pushed a change to branch revert-55-gjf-reformat
in repository https://gitbox.apache.org/repos/asf/db-jdo.git


      at d3ef5240 Revert "GJF reformat (#55)"

This branch includes the following new commits:

     new d3ef5240 Revert "GJF reformat (#55)"

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[db-jdo] 01/01: Revert "GJF reformat (#55)"

Posted by mb...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit d3ef5240862a19c55ddddc893fe71154f130e298
Author: Michael Bouschen <mb...@apache.org>
AuthorDate: Thu Aug 25 21:01:24 2022 +0200

    Revert "GJF reformat (#55)"
    
    This reverts commit 846f4607fe058780cd34bad736e29095347fc5d5.
---
 .../main/java/javax/jdo/AttributeConverter.java    |   68 +-
 api/src/main/java/javax/jdo/Constants.java         | 2005 ++++---
 api/src/main/java/javax/jdo/Enhancer.java          |  781 ++-
 api/src/main/java/javax/jdo/Extent.java            |  150 +-
 api/src/main/java/javax/jdo/FetchGroup.java        |  476 +-
 api/src/main/java/javax/jdo/FetchPlan.java         |  414 +-
 api/src/main/java/javax/jdo/InstanceCallbacks.java |   77 +-
 .../main/java/javax/jdo/JDOCanRetryException.java  |  141 +-
 .../main/java/javax/jdo/JDODataStoreException.java |  141 +-
 .../javax/jdo/JDODetachedFieldAccessException.java |  112 +-
 .../main/java/javax/jdo/JDOEnhanceException.java   |   72 +-
 api/src/main/java/javax/jdo/JDOEnhancer.java       |  259 +-
 api/src/main/java/javax/jdo/JDOException.java      |  526 +-
 .../java/javax/jdo/JDOFatalDataStoreException.java |  142 +-
 api/src/main/java/javax/jdo/JDOFatalException.java |  143 +-
 .../java/javax/jdo/JDOFatalInternalException.java  |  141 +-
 .../main/java/javax/jdo/JDOFatalUserException.java |  144 +-
 api/src/main/java/javax/jdo/JDOHelper.java         | 3580 ++++++------
 .../java/javax/jdo/JDONullIdentityException.java   |  101 +-
 .../java/javax/jdo/JDOObjectNotFoundException.java |  141 +-
 .../jdo/JDOOptimisticVerificationException.java    |  128 +-
 api/src/main/java/javax/jdo/JDOQLTypedQuery.java   | 1192 ++--
 .../main/java/javax/jdo/JDOQLTypedSubquery.java    |  174 +-
 .../javax/jdo/JDOQueryInterruptedException.java    |   40 +-
 .../main/java/javax/jdo/JDOReadOnlyException.java  |   93 +-
 .../javax/jdo/JDOUnsupportedOptionException.java   |   79 +-
 .../java/javax/jdo/JDOUserCallbackException.java   |  142 +-
 api/src/main/java/javax/jdo/JDOUserException.java  |  142 +-
 api/src/main/java/javax/jdo/LegacyJava.java        |  296 +-
 api/src/main/java/javax/jdo/ObjectState.java       |   47 +-
 .../main/java/javax/jdo/PersistenceManager.java    | 2605 +++++----
 .../java/javax/jdo/PersistenceManagerFactory.java  | 1536 +++--
 api/src/main/java/javax/jdo/Query.java             | 2081 ++++---
 api/src/main/java/javax/jdo/Transaction.java       |  477 +-
 .../main/java/javax/jdo/annotations/Cacheable.java |   16 +-
 .../main/java/javax/jdo/annotations/Column.java    |  149 +-
 .../main/java/javax/jdo/annotations/Columns.java   |   17 +-
 .../main/java/javax/jdo/annotations/Convert.java   |   43 +-
 .../javax/jdo/annotations/DatastoreIdentity.java   |   77 +-
 .../java/javax/jdo/annotations/Discriminator.java  |   84 +-
 .../jdo/annotations/DiscriminatorStrategy.java     |   13 +-
 .../main/java/javax/jdo/annotations/Element.java   |  286 +-
 .../main/java/javax/jdo/annotations/Embedded.java  |   66 +-
 .../java/javax/jdo/annotations/EmbeddedOnly.java   |   13 +-
 .../main/java/javax/jdo/annotations/Extension.java |   40 +-
 .../java/javax/jdo/annotations/Extensions.java     |   18 +-
 .../java/javax/jdo/annotations/FetchGroup.java     |   57 +-
 .../java/javax/jdo/annotations/FetchGroups.java    |   18 +-
 .../main/java/javax/jdo/annotations/FetchPlan.java |   55 +-
 .../java/javax/jdo/annotations/FetchPlans.java     |   18 +-
 .../java/javax/jdo/annotations/ForeignKey.java     |  101 +-
 .../javax/jdo/annotations/ForeignKeyAction.java    |   17 +-
 .../java/javax/jdo/annotations/ForeignKeys.java    |   18 +-
 .../javax/jdo/annotations/IdGeneratorStrategy.java |   19 +-
 .../java/javax/jdo/annotations/IdentityType.java   |   13 +-
 api/src/main/java/javax/jdo/annotations/Index.java |   70 +-
 .../main/java/javax/jdo/annotations/Indices.java   |   18 +-
 .../java/javax/jdo/annotations/Inheritance.java    |   35 +-
 .../javax/jdo/annotations/InheritanceStrategy.java |   15 +-
 api/src/main/java/javax/jdo/annotations/Join.java  |  156 +-
 api/src/main/java/javax/jdo/annotations/Joins.java |   23 +-
 api/src/main/java/javax/jdo/annotations/Key.java   |  280 +-
 .../java/javax/jdo/annotations/NotPersistent.java  |   12 +-
 .../main/java/javax/jdo/annotations/NullValue.java |   14 +-
 api/src/main/java/javax/jdo/annotations/Order.java |   60 +-
 .../javax/jdo/annotations/PersistenceAware.java    |   12 +-
 .../javax/jdo/annotations/PersistenceCapable.java  |  146 +-
 .../javax/jdo/annotations/PersistenceModifier.java |   18 +-
 .../java/javax/jdo/annotations/Persistent.java     |  458 +-
 .../java/javax/jdo/annotations/PrimaryKey.java     |   55 +-
 .../main/java/javax/jdo/annotations/Queries.java   |   18 +-
 api/src/main/java/javax/jdo/annotations/Query.java |   90 +-
 .../main/java/javax/jdo/annotations/Sequence.java  |   86 +-
 .../javax/jdo/annotations/SequenceStrategy.java    |   11 +-
 .../java/javax/jdo/annotations/Serialized.java     |   17 +-
 .../java/javax/jdo/annotations/Transactional.java  |   14 +-
 .../main/java/javax/jdo/annotations/Unique.java    |   75 +-
 .../main/java/javax/jdo/annotations/Uniques.java   |   18 +-
 api/src/main/java/javax/jdo/annotations/Value.java |  281 +-
 .../main/java/javax/jdo/annotations/Version.java   |   79 +-
 .../javax/jdo/annotations/VersionStrategy.java     |   15 +-
 .../java/javax/jdo/datastore/DataStoreCache.java   |  295 +-
 .../java/javax/jdo/datastore/JDOConnection.java    |   62 +-
 .../main/java/javax/jdo/datastore/Sequence.java    |  114 +-
 .../main/java/javax/jdo/identity/ByteIdentity.java |  250 +-
 .../main/java/javax/jdo/identity/CharIdentity.java |  275 +-
 .../main/java/javax/jdo/identity/IntIdentity.java  |  261 +-
 .../main/java/javax/jdo/identity/LongIdentity.java |  278 +-
 .../java/javax/jdo/identity/ObjectIdentity.java    |  356 +-
 .../java/javax/jdo/identity/ShortIdentity.java     |  242 +-
 .../javax/jdo/identity/SingleFieldIdentity.java    |  350 +-
 .../java/javax/jdo/identity/StringIdentity.java    |  179 +-
 .../java/javax/jdo/listener/AttachCallback.java    |   50 +-
 .../jdo/listener/AttachLifecycleListener.java      |   66 +-
 .../java/javax/jdo/listener/ClearCallback.java     |   37 +-
 .../javax/jdo/listener/ClearLifecycleListener.java |   69 +-
 .../jdo/listener/CreateLifecycleListener.java      |   35 +-
 .../java/javax/jdo/listener/DeleteCallback.java    |   39 +-
 .../jdo/listener/DeleteLifecycleListener.java      |   60 +-
 .../java/javax/jdo/listener/DetachCallback.java    |   47 +-
 .../jdo/listener/DetachLifecycleListener.java      |   63 +-
 .../javax/jdo/listener/DirtyLifecycleListener.java |   48 +-
 .../javax/jdo/listener/InstanceLifecycleEvent.java |  304 +-
 .../jdo/listener/InstanceLifecycleListener.java    |   20 +-
 .../main/java/javax/jdo/listener/LoadCallback.java |   36 +-
 .../javax/jdo/listener/LoadLifecycleListener.java  |   35 +-
 .../java/javax/jdo/listener/StoreCallback.java     |   41 +-
 .../javax/jdo/listener/StoreLifecycleListener.java |   57 +-
 .../java/javax/jdo/metadata/ArrayMetadata.java     |   97 +-
 .../java/javax/jdo/metadata/ClassMetadata.java     |   51 +-
 .../jdo/metadata/ClassPersistenceModifier.java     |   10 +-
 .../javax/jdo/metadata/CollectionMetadata.java     |   97 +-
 .../java/javax/jdo/metadata/ColumnMetadata.java    |  309 +-
 .../jdo/metadata/DatastoreIdentityMetadata.java    |  130 +-
 .../javax/jdo/metadata/DiscriminatorMetadata.java  |  152 +-
 .../java/javax/jdo/metadata/ElementMetadata.java   |  312 +-
 .../java/javax/jdo/metadata/EmbeddedMetadata.java  |  143 +-
 .../java/javax/jdo/metadata/ExtensionMetadata.java |   33 +-
 .../javax/jdo/metadata/FetchGroupMetadata.java     |   84 +-
 .../java/javax/jdo/metadata/FetchPlanMetadata.java |   95 +-
 .../java/javax/jdo/metadata/FieldMetadata.java     |    5 +-
 .../javax/jdo/metadata/ForeignKeyMetadata.java     |  264 +-
 .../java/javax/jdo/metadata/IndexMetadata.java     |  155 +-
 api/src/main/java/javax/jdo/metadata/Indexed.java  |   13 +-
 .../javax/jdo/metadata/InheritanceMetadata.java    |   93 +-
 .../java/javax/jdo/metadata/InterfaceMetadata.java |    5 +-
 .../main/java/javax/jdo/metadata/JDOMetadata.java  |  230 +-
 .../main/java/javax/jdo/metadata/JoinMetadata.java |  311 +-
 .../main/java/javax/jdo/metadata/KeyMetadata.java  |  319 +-
 .../main/java/javax/jdo/metadata/MapMetadata.java  |  223 +-
 .../java/javax/jdo/metadata/MemberMetadata.java    |  999 ++--
 api/src/main/java/javax/jdo/metadata/Metadata.java |   54 +-
 .../java/javax/jdo/metadata/OrderMetadata.java     |  104 +-
 .../java/javax/jdo/metadata/PackageMetadata.java   |  223 +-
 .../javax/jdo/metadata/PrimaryKeyMetadata.java     |   82 +-
 .../java/javax/jdo/metadata/PropertyMetadata.java  |   25 +-
 .../java/javax/jdo/metadata/QueryMetadata.java     |  154 +-
 .../java/javax/jdo/metadata/SequenceMetadata.java  |  127 +-
 .../main/java/javax/jdo/metadata/TypeMetadata.java |  731 ++-
 .../java/javax/jdo/metadata/UniqueMetadata.java    |  156 +-
 .../java/javax/jdo/metadata/ValueMetadata.java     |  299 +-
 .../java/javax/jdo/metadata/VersionMetadata.java   |  128 +-
 .../java/javax/jdo/query/BooleanExpression.java    |   69 +-
 .../main/java/javax/jdo/query/ByteExpression.java  |   20 +-
 .../java/javax/jdo/query/CharacterExpression.java  |   65 +-
 .../java/javax/jdo/query/CollectionExpression.java |   67 +-
 .../java/javax/jdo/query/ComparableExpression.java |  164 +-
 .../main/java/javax/jdo/query/DateExpression.java  |   54 +-
 .../java/javax/jdo/query/DateTimeExpression.java   |   87 +-
 .../main/java/javax/jdo/query/EnumExpression.java  |   28 +-
 api/src/main/java/javax/jdo/query/Expression.java  |  133 +-
 .../java/javax/jdo/query/IfThenElseExpression.java |   65 +-
 .../main/java/javax/jdo/query/ListExpression.java  |   45 +-
 .../java/javax/jdo/query/LocalDateExpression.java  |   55 +-
 .../javax/jdo/query/LocalDateTimeExpression.java   |   88 +-
 .../java/javax/jdo/query/LocalTimeExpression.java  |   55 +-
 .../main/java/javax/jdo/query/MapExpression.java   |  145 +-
 .../java/javax/jdo/query/NumericExpression.java    |  450 +-
 .../java/javax/jdo/query/ObjectExpression.java     |   23 +-
 .../java/javax/jdo/query/OptionalExpression.java   |   43 +-
 .../main/java/javax/jdo/query/OrderExpression.java |   90 +-
 .../javax/jdo/query/PersistableExpression.java     |   39 +-
 .../java/javax/jdo/query/StringExpression.java     |  467 +-
 .../java/javax/jdo/query/SubqueryExpression.java   |   21 +-
 .../main/java/javax/jdo/query/TimeExpression.java  |   54 +-
 api/src/main/java/javax/jdo/spi/Detachable.java    |   58 +-
 api/src/main/java/javax/jdo/spi/I18NHelper.java    |  740 ++-
 api/src/main/java/javax/jdo/spi/JDOImplHelper.java | 2136 ++++---
 api/src/main/java/javax/jdo/spi/JDOPermission.java |  141 +-
 .../java/javax/jdo/spi/PersistenceCapable.java     | 1143 ++--
 .../java/javax/jdo/spi/RegisterClassEvent.java     |  172 +-
 .../java/javax/jdo/spi/RegisterClassListener.java  |   36 +-
 .../java/javax/jdo/spi/StateInterrogation.java     |  422 +-
 api/src/main/java/javax/jdo/spi/StateManager.java  | 1070 ++--
 .../test/java/javax/jdo/AbstractJDOConfigTest.java |  206 +-
 api/src/test/java/javax/jdo/EnhancerTest.java      |  845 ++-
 .../java/javax/jdo/JDOConfigTestClassLoader.java   |   65 +-
 .../test/java/javax/jdo/JDOHelperConfigTest.java   |  827 ++-
 api/src/test/java/javax/jdo/JDOHelperTest.java     | 1128 ++--
 api/src/test/java/javax/jdo/MockEnhancer.java      |  220 +-
 api/src/test/java/javax/jdo/ObjectStateTest.java   |  372 +-
 api/src/test/java/javax/jdo/PMFMapMapTest.java     |  699 +--
 api/src/test/java/javax/jdo/PMFProxy.java          |   61 +-
 api/src/test/java/javax/jdo/PMFService.java        |   58 +-
 api/src/test/java/javax/jdo/annotations/Line.java  |   11 +-
 api/src/test/java/javax/jdo/annotations/Point.java |   11 +-
 .../javax/jdo/annotations/TestEmbeddedMap.java     |   56 +-
 .../javax/jdo/annotations/TestEmbeddedSet.java     |   54 +-
 .../java/javax/jdo/annotations/TestExtensions.java |   47 +-
 .../java/javax/jdo/identity/ByteIdentityTest.java  |  213 +-
 .../java/javax/jdo/identity/CharIdentityTest.java  |  231 +-
 .../javax/jdo/identity/ConcreteTestIdentity.java   |   73 +-
 .../java/javax/jdo/identity/IntIdentityTest.java   |  209 +-
 .../java/javax/jdo/identity/LongIdentityTest.java  |  222 +-
 .../javax/jdo/identity/ObjectIdentityTest.java     |  786 +--
 .../java/javax/jdo/identity/ShortIdentityTest.java |  212 +-
 .../jdo/identity/SingleFieldIdentityTest.java      |  142 +-
 .../javax/jdo/identity/StringIdentityTest.java     |  145 +-
 .../jdo/listener/InstanceLifecycleEventTest.java   |  201 +-
 api/src/test/java/javax/jdo/pc/PCPoint.java        |  779 +--
 api/src/test/java/javax/jdo/schema/XMLTest.java    |  185 +-
 .../test/java/javax/jdo/spi/JDOImplHelperTest.java |  467 +-
 .../java/javax/jdo/spi/StateInterrogationTest.java |  883 +--
 api/src/test/java/javax/jdo/stub/StubPMF.java      |  875 +--
 api/src/test/java/javax/jdo/util/AbstractTest.java |  144 +-
 .../java/javax/jdo/util/BatchResultPrinter.java    |  166 +-
 .../test/java/javax/jdo/util/BatchTestRunner.java  |  234 +-
 api/src/test/java/javax/jdo/util/XMLTestUtil.java  |  984 ++--
 .../org/apache/jdo/exectck/AbstractTCKMojo.java    |  235 +-
 .../main/java/org/apache/jdo/exectck/Enhance.java  |  460 +-
 .../src/main/java/org/apache/jdo/exectck/Help.java |  137 +-
 .../java/org/apache/jdo/exectck/InstallSchema.java |  436 +-
 .../java/org/apache/jdo/exectck/PropertyUtils.java |  184 +-
 .../main/java/org/apache/jdo/exectck/RunTCK.java   |  994 ++--
 .../java/org/apache/jdo/exectck/SQLFileLoader.java |  582 +-
 .../java/org/apache/jdo/exectck/Utilities.java     |  303 +-
 .../org/apache/jdo/tck/AbstractReaderTest.java     |  107 +-
 tck/src/main/java/org/apache/jdo/tck/JDO_Test.java | 2649 ++++-----
 .../java/org/apache/jdo/tck/api/SignatureTest.java |  177 +-
 .../api/converter/IntAttributeConverterTest.java   |  771 +--
 .../api/converter/PointAttributeConverterTest.java |  674 +--
 .../tck/api/exceptions/ExceptionConstructor.java   |  527 +-
 .../jdo/tck/api/fetchgroup/FetchGroupTest.java     | 1122 ++--
 .../AbstractInstanceLifecycleListener.java         |  830 +--
 .../AccessOtherInstancesInPrestore.java            |  146 +-
 .../AccessingFieldsInPredelete.java                |  314 +-
 .../api/instancecallbacks/CallingJdoPostload.java  |  233 +-
 .../api/instancecallbacks/CallingJdoPreclear.java  |  257 +-
 .../api/instancecallbacks/CallingJdoPredelete.java |  208 +-
 .../api/instancecallbacks/CallingJdoPrestore.java  |  401 +-
 .../InstanceLifecycleListenerAttach.java           |  264 +-
 .../InstanceLifecycleListenerClear.java            |  234 +-
 .../InstanceLifecycleListenerCreate.java           |  172 +-
 .../InstanceLifecycleListenerDelete.java           |  237 +-
 .../InstanceLifecycleListenerDetach.java           |  261 +-
 .../InstanceLifecycleListenerDirty.java            |  209 +-
 .../InstanceLifecycleListenerLoad.java             |  219 +-
 .../InstanceLifecycleListenerStore.java            |  231 +-
 ...ationOfNontransactionalNonpersistentFields.java |  295 +-
 .../NoAccessToFieldsAfterPredelete.java            |  274 +-
 .../jdo/tck/api/instancecallbacks/TestParts.java   |  281 +-
 .../apache/jdo/tck/api/jdohelper/GetObjectId.java  |  116 +-
 .../jdo/tck/api/jdohelper/GetObjectIdForNull.java  |   94 +-
 .../tck/api/jdohelper/GetObjectIdForTransient.java |   90 +-
 .../GetObjectIdNotPersistenceCapable.java          |   91 +-
 .../apache/jdo/tck/api/jdohelper/GetObjectIds.java |  407 +-
 .../tck/api/jdohelper/GetPersistenceManager.java   |  118 +-
 .../jdohelper/GetPersistenceManagerForNull.java    |   90 +-
 .../GetPersistenceManagerForTransient.java         |   87 +-
 ...GetPersistenceManagerNotPersistenceCapable.java |   93 +-
 .../api/jdohelper/GetTransactionalObjectId.java    |  108 +-
 .../jdohelper/GetTransactionalObjectIdForNull.java |   92 +-
 .../GetTransactionalObjectIdForTransient.java      |   92 +-
 ...TransactionalObjectIdNotPersistenceCapable.java |   86 +-
 .../apache/jdo/tck/api/jdohelper/IsDeleted.java    |  108 +-
 .../jdo/tck/api/jdohelper/IsDeletedFalse.java      |  110 +-
 .../jdo/tck/api/jdohelper/IsDeletedForNull.java    |   90 +-
 .../tck/api/jdohelper/IsDeletedForTransient.java   |   88 +-
 .../jdohelper/IsDeletedNotPersistenceCapable.java  |   90 +-
 .../apache/jdo/tck/api/jdohelper/IsDetached.java   |  108 +-
 .../org/apache/jdo/tck/api/jdohelper/IsDirty.java  |  110 +-
 .../apache/jdo/tck/api/jdohelper/IsDirtyFalse.java |  118 +-
 .../jdo/tck/api/jdohelper/IsDirtyForNull.java      |   86 +-
 .../jdo/tck/api/jdohelper/IsDirtyForTransient.java |   89 +-
 .../jdohelper/IsDirtyNotPersistenceCapable.java    |   90 +-
 .../org/apache/jdo/tck/api/jdohelper/IsNew.java    |  105 +-
 .../apache/jdo/tck/api/jdohelper/IsNewFalse.java   |   99 +-
 .../apache/jdo/tck/api/jdohelper/IsNewForNull.java |   84 +-
 .../jdo/tck/api/jdohelper/IsNewForTransient.java   |   88 +-
 .../api/jdohelper/IsNewNotPersistenceCapable.java  |   91 +-
 .../apache/jdo/tck/api/jdohelper/IsPersistent.java |  106 +-
 .../jdo/tck/api/jdohelper/IsPersistentFalse.java   |   90 +-
 .../jdo/tck/api/jdohelper/IsPersistentForNull.java |   86 +-
 .../api/jdohelper/IsPersistentForTransient.java    |   93 +-
 .../IsPersistentNotPersistenceCapable.java         |   90 +-
 .../jdo/tck/api/jdohelper/IsTransactional.java     |  122 +-
 .../tck/api/jdohelper/IsTransactionalFalse.java    |  135 +-
 .../tck/api/jdohelper/IsTransactionalForNull.java  |   87 +-
 .../api/jdohelper/IsTransactionalForTransient.java |   87 +-
 .../IsTransactionalNotPersistenceCapable.java      |   89 +-
 .../apache/jdo/tck/api/jdohelper/MakeDirty.java    |  118 +-
 .../jdo/tck/api/jdohelper/MakeDirtyForNull.java    |   88 +-
 .../tck/api/jdohelper/MakeDirtyForTransient.java   |   92 +-
 .../jdohelper/MakeDirtyNotPersistenceCapable.java  |   89 +-
 .../AbstractPersistenceCapableTest.java            |   82 +-
 .../CopyKeyFieldsFromObjectId.java                 |  431 +-
 .../persistencecapable/NewObjectIdInstance.java    |  394 +-
 .../ChangingObjectIdHasNoEffectOnInstance.java     |   92 +-
 .../ConcurrentPersistenceManagers.java             |  117 +-
 .../ConcurrentPersistenceManagersSameClasses.java  |  244 +-
 .../api/persistencemanager/CurrentTransaction.java |   77 +-
 .../api/persistencemanager/DataStoreCacheTest.java |  144 +-
 .../persistencemanager/DataStoreConnection.java    |  218 +-
 .../DataStoreConnectionThrows.java                 |  336 +-
 .../api/persistencemanager/DatastoreTimeout.java   |  972 ++--
 .../api/persistencemanager/DeletePersistent.java   |  421 +-
 .../DeletePersistentAllFails.java                  |  245 +-
 ...DeletePersistentFailsIfInstanceIsTransient.java |  224 +-
 ...InstanceManagedByAnotherPersistenceManager.java |  278 +-
 ...etePersistentHasNoEffectOnDeletedInstances.java |  253 +-
 .../GetPersistenceManagerFactory.java              |   80 +-
 .../tck/api/persistencemanager/GetProperties.java  |  680 +--
 .../persistencemanager/GetPutRemoveUserObject.java |  260 +-
 .../api/persistencemanager/GetSetUserObject.java   |  101 +-
 ...nsactionalObjectIdWhenObjectIdBeingChanged.java |  124 +-
 .../GetTransactionalObjectIdWithNoTransaction.java |  105 +-
 .../tck/api/persistencemanager/NewInstance.java    |  176 +-
 .../NoPersistenceManagerIfTransient.java           |   67 +-
 .../ObjectIdUniqueAmongInstances.java              |  138 +-
 .../OneInstanceOfObjectPerPersistenceManager.java  |  216 +-
 ...sistenceManagerIfPersistentOrTransactional.java |   67 +-
 .../api/persistencemanager/OptimisticFailure.java  |  393 +-
 .../persistencemanager/PersistenceManagerTest.java |  187 +-
 ...ionInstanceForAllCallsToCurrentTransaction.java |  104 +-
 .../jdo/tck/api/persistencemanager/ThreadSafe.java |  331 +-
 ...TransactionalInstanceRetainsValuesAtCommit.java |  261 +-
 ...llingEvictAllWithCollectionContainingNulls.java |  209 +-
 ...ingRefreshAllWithCollectionContainingNulls.java |  216 +-
 .../cache/EvictAllWithNoParameters.java            |  212 +-
 .../EvictingCollectionOfInstancesSideEffects.java  |  353 +-
 .../cache/EvictingWithRestoreValuesFalse.java      |  224 +-
 .../cache/EvictingWithRetainValuesFalse.java       |  236 +-
 .../PassingNullToEvictAllThrowsException.java      |  165 +-
 .../cache/PassingNullToEvictHasNoEffect.java       |  108 +-
 .../PassingNullToRefreshAllThrowsException.java    |  171 +-
 .../cache/PassingNullToRefreshHasNoEffect.java     |  107 +-
 .../cache/RefreshAllNoParameterSideEffects.java    |  273 +-
 .../cache/RefreshAllSideEffects.java               |  328 +-
 .../cache/RefreshAllWithNoParameters.java          |  145 +-
 .../cache/RefreshSideEffects.java                  |  377 +-
 .../tck/api/persistencemanager/cache/Retrieve.java |  556 +-
 .../close/AfterCloseAllMethodsThrowException.java  |  131 +-
 .../persistencemanager/close/AutoCloseable.java    |  127 +-
 .../close/CloseWithActiveTxRollsBack.java          |  122 +-
 .../close/IsClosedIsFalseUponConstruction.java     |   73 +-
 .../IsClosedIsFalseUponRetrievalFromPool.java      |   76 +-
 .../close/IsClosedIsTrueAfterClose.java            |   78 +-
 .../detach/CopyOnAttachFalse.java                  |  131 +-
 .../detach/DetachAccessUnloadedField.java          |  206 +-
 .../detach/DetachAllOnCommit.java                  |  100 +-
 .../persistencemanager/detach/DetachAttach.java    |   81 +-
 .../detach/DetachAttachDirty.java                  |  101 +-
 .../api/persistencemanager/detach/DetachCopy.java  |  138 +-
 .../persistencemanager/detach/DetachSerialize.java |  147 +-
 .../api/persistencemanager/detach/DetachTest.java  |  347 +-
 .../detach/DetachUndetachable.java                 |   92 +-
 .../detach/SetDetachAllOnCommit.java               |  104 +-
 ...WithInstancesMadePersistentViaReachability.java |  167 +-
 .../extent/GetExtentWithNoSubclasses.java          |  156 +-
 .../extent/GetExtentWithSubclasses.java            |  214 +-
 .../fetchplan/AbstractFetchPlanTest.java           |  272 +-
 .../fetchplan/FetchPlanInterface.java              |  619 +-
 .../fetchplan/FetchPlanIsCopy.java                 |  219 +-
 .../fetchplan/FetchPlanMakeTransient.java          |  132 +-
 .../fetchplan/FetchPlanQuery.java                  |   86 +-
 .../fetchplan/FetchPlanRefresh.java                |  130 +-
 .../fetchplan/FetchPlanRetrieve.java               |  125 +-
 .../persistencemanager/flags/GetIgnoreCache.java   |   93 +-
 .../flags/SetIgnoreCacheToFalse.java               |  114 +-
 .../flags/SetIgnoreCacheToTrue.java                |  116 +-
 .../flags/SetMultithreadedFalse.java               |  114 +-
 .../flags/SetMultithreadedTrue.java                |  115 +-
 .../flags/SettingFlagsWithTransactionInstance.java |   91 +-
 .../getobject/GetObjectById.java                   |  222 +-
 .../getobject/GetObjectByIdExactClass.java         |  459 +-
 .../GetObjectByIdNoValidationInstanceInCache.java  |  107 +-
 ...IdNoValidationInstanceInCacheNoStateChange.java |  113 +-
 ...etObjectByIdNoValidationInstanceNotInCache.java |  117 +-
 ...jectByIdNoValidationInstanceNotInCacheNoTx.java |  116 +-
 ...jectByIdNoValidationInstanceNotInDatastore.java |  108 +-
 .../getobject/GetObjectByIdNotResolved.java        |  116 +-
 ...GetObjectByIdWithValidationInstanceInCache.java |  125 +-
 ...ithValidationInstanceInCacheNotInDatastore.java |  122 +-
 ...ValidationInstanceNotInCacheNotInDatastore.java |   97 +-
 .../persistencemanager/getobject/GetObjectId.java  |  109 +-
 .../getobject/GetObjectIdClass.java                |  136 +-
 ...assForAbstractOrNonPersistenceCapableClass.java |  104 +-
 .../GetObjectIdForNullOrNotPersistent.java         |  104 +-
 .../GetObjectIdForPersistentInterface.java         |  120 +-
 ...etObjectIdWithApplicationModifyingIdentity.java |  134 +-
 .../getobject/GetObjectsById.java                  |  346 +-
 .../lifecycle/MakeNontransactionalAllFails.java    |  283 +-
 .../MakeNontransactionalDirtyInstance.java         |  490 +-
 .../lifecycle/MakeNontransactionalIsImmediate.java |  406 +-
 ...akeNontransactionalPersistentCleanInstance.java |  391 +-
 ...MakeNontransactionalTransientCleanInstance.java |  363 +-
 .../lifecycle/MakePersistent.java                  |  367 +-
 .../lifecycle/MakePersistentAllFails.java          |  202 +-
 .../MakePersistentAndInstancesNotReachable.java    |  171 +-
 .../lifecycle/MakePersistentAssignsObjectId.java   |  288 +-
 ...InstanceManagedByAnotherPersistenceManager.java |  300 +-
 ...PersistentHasNoEffectOnPersistentInstances.java |  264 +-
 .../lifecycle/MakeTransactional.java               |  253 +-
 ...ctionalANontransactionalPersistentInstance.java |  550 +-
 .../lifecycle/MakeTransactionalAllFails.java       |  191 +-
 .../lifecycle/MakeTransactionalIsImmediate.java    |  287 +-
 ...eTransactionalPriorToTransactionRolledback.java |  360 +-
 ...keTransactionalWithinTransactionRolledback.java |  322 +-
 .../lifecycle/MakeTransient.java                   |  275 +-
 .../lifecycle/MakeTransientAllFails.java           |  206 +-
 .../MakeTransientCausesLossOfIdentity.java         |  303 +-
 .../MakeTransientFailsWithDirtyInstance.java       |  309 +-
 .../MakeTransientFieldsPreservedUnchanged.java     |  408 +-
 ...keTransientHasNoEffectOnTransientInstances.java |  233 +-
 .../MakeTransientNotSubjectToRollback.java         |  300 +-
 .../nullargs/DeletePersistentNullArgs.java         |  144 +-
 .../nullargs/DetachCopyNullArgs.java               |  137 +-
 .../persistencemanager/nullargs/EvictNullArgs.java |  135 +-
 .../nullargs/MakeNontransactionalNullArgs.java     |  148 +-
 .../nullargs/MakePersistentNullArgs.java           |  141 +-
 .../nullargs/MakeTransactionalNullArgs.java        |  145 +-
 .../nullargs/MakeTransientNullArgs.java            |  141 +-
 .../nullargs/PersistenceManagerNullsTest.java      | 1003 ++--
 .../nullargs/RefreshNullArgs.java                  |  136 +-
 .../nullargs/RetrieveNullArgs.java                 |  138 +-
 .../nullargs/RetrieveWithFetchPlanNullArgs.java    |  148 +-
 .../persistencemanagerfactory/AbstractGetPMF.java  |  332 +-
 .../AfterCloseGetPMThrowsException.java            |   97 +-
 .../AfterCloseSetMethodsThrowException.java        |  370 +-
 ...erGetPersistenceManagerNoSetMethodsSucceed.java |  375 +-
 .../tck/api/persistencemanagerfactory/Close.java   |  199 +-
 .../CloseFailsIfTransactionActive.java             |  318 +-
 ...seWithoutPermissionThrowsSecurityException.java |  136 +-
 .../FlushThrowsIfReadOnly.java                     |  261 +-
 .../GetManagedClasses.java                         |   97 +-
 .../persistencemanagerfactory/GetPMFByFile.java    |   96 +-
 .../GetPMFByFileAndClassLoader.java                |  107 +-
 .../GetPMFByJNDILocation.java                      |  156 +-
 .../GetPMFByJNDILocationAndClassLoader.java        |  152 +-
 .../GetPMFByResource.java                          |   95 +-
 .../GetPMFByResourceAndClassLoader.java            |   98 +-
 .../persistencemanagerfactory/GetPMFByStream.java  |  118 +-
 .../GetPMFByStreamAndClassLoader.java              |  121 +-
 .../GetPersistenceManager.java                     |   89 +-
 ...sistenceManagerFactoryByPropertiesInstance.java |  103 +-
 .../GetPersistenceManagerForUser.java              |  116 +-
 .../persistencemanagerfactory/GetProperties.java   |   97 +-
 .../SetConnectionPassword.java                     |   90 +-
 .../SetConnectionURL.java                          |  115 +-
 .../SetConnectionUserName.java                     |  120 +-
 .../persistencemanagerfactory/SetIgnoreCache.java  |  103 +-
 .../SetMultithreaded.java                          |  109 +-
 .../SetNonTransactionalRead.java                   |  106 +-
 .../SetNonTransactionalWrite.java                  |  119 +-
 .../persistencemanagerfactory/SetOptimistic.java   |  114 +-
 .../api/persistencemanagerfactory/SetReadOnly.java |  105 +-
 .../persistencemanagerfactory/SetRetainValues.java |  108 +-
 .../SetTransactionIsolationLevel.java              |  307 +-
 .../SupportedOptions.java                          |   83 +-
 .../config/JDOConfigListener.java                  |  230 +-
 .../config/Jdoconfig.java                          |  328 +-
 .../config/Persistence.java                        |  195 +-
 .../config/StoreListener.java                      |   65 +-
 .../config/StoreListenerGetInstance.java           |   87 +-
 .../config/ThrowOnUnknownStandardProperties.java   |  207 +-
 .../metadata/GetMetadataTest.java                  |  193 +-
 .../apache/jdo/tck/enhancement/EnhancerTest.java   |  141 +-
 .../org/apache/jdo/tck/extents/AutoCloseable.java  |  260 +-
 .../java/org/apache/jdo/tck/extents/CloseAll.java  |  106 +-
 .../CloseOfExtentIteratorIsIteratorSpecific.java   |  102 +-
 .../org/apache/jdo/tck/extents/ExtentTest.java     |  464 +-
 .../apache/jdo/tck/extents/GetCandidateClass.java  |   70 +-
 .../jdo/tck/extents/GetPersistenceManager.java     |   72 +-
 .../apache/jdo/tck/extents/HasSubclassesFalse.java |   70 +-
 .../apache/jdo/tck/extents/HasSubclassesTrue.java  |   70 +-
 ...nstancesDeletedPriorToIterationNotReturned.java |  108 +-
 ...InstancesPersistedPriorToIterationReturned.java |  106 +-
 .../IteratorHasNextFalseAfterExtentClose.java      |  131 +-
 .../jdo/tck/extents/IteratorMutatingMethods.java   |   92 +-
 .../tck/extents/IteratorNextAfterExtentClose.java  |  144 +-
 .../extents/IteratorNextAfterExtentCloseAll.java   |  126 +-
 .../java/org/apache/jdo/tck/extents/Iterators.java |   85 +-
 .../tck/lifecycle/HollowInstanceMaintainsPK.java   |  151 +-
 ...ltiplePMsReturnInstancesRepresentingSamePC.java |  253 +-
 .../NontransactionalWriteDatastoreCommit.java      |  119 +-
 ...ntransactionalWriteDatastoreCommitConflict.java |  126 +-
 .../NontransactionalWriteDatastoreRollback.java    |  121 +-
 .../NontransactionalWriteOptimisticCommit.java     |  121 +-
 ...transactionalWriteOptimisticCommitConflict.java |  129 +-
 .../NontransactionalWriteOptimisticRollback.java   |  121 +-
 .../tck/lifecycle/NontransactionalWriteTest.java   |  414 +-
 .../tck/lifecycle/NontransactionalWriteThrows.java |   99 +-
 ...tIdNotModifiedWhenObjectIdInstanceModified.java |  236 +-
 .../PMReturnsIdenticalInstancesForEqualObjIds.java |  177 +-
 .../PMsCanSharePCClassesButNotPCInstances.java     |  406 +-
 .../apache/jdo/tck/lifecycle/StateTransitions.java | 2074 ++++---
 .../lifecycle/StateTransitionsReturnedObjects.java | 1472 +++--
 .../TransientTransactionalStateCommit.java         |  163 +-
 .../TransientTransactionalStateRollback.java       |  197 +-
 .../jdo/tck/mapping/AbstractRelationshipTest.java  |  112 +-
 .../apache/jdo/tck/mapping/CompletenessTest.java   |  169 +-
 .../jdo/tck/mapping/CompletenessTestJPA.java       |  175 +-
 .../jdo/tck/mapping/CompletenessTestList.java      |  175 +-
 .../jdo/tck/mapping/CompletenessTestMap.java       |  175 +-
 .../jdo/tck/mapping/CompletenessTestOrder.java     |  172 +-
 .../mapping/Relationship1To1AllRelationships.java  |  768 ++-
 .../mapping/Relationship1To1NoRelationships.java   |  383 +-
 .../Relationship1ToManyAllRelationships.java       |  849 +--
 .../Relationship1ToManyNoRelationships.java        |  431 +-
 .../RelationshipManyToManyAllRelationships.java    |  895 +--
 .../RelationshipManyToManyNoRelationships.java     |  409 +-
 .../tck/mapping/RelationshipNegative1To1Test.java  |  225 +-
 .../mapping/RelationshipNegative1ToManyTest.java   |  196 +-
 .../tck/models/embedded/EmbeddedInheritance.java   |  356 +-
 .../SecondClassObjectsTrackTheirChanges.java       |  230 +-
 .../models/fieldtypes/TestArrayCollections.java    |  327 +-
 .../fieldtypes/TestArrayListCollections.java       |  322 +-
 .../fieldtypes/TestCollectionCollections.java      |  296 +-
 .../models/fieldtypes/TestFieldsOfBigDecimal.java  |  196 +-
 .../models/fieldtypes/TestFieldsOfBigInteger.java  |  199 +-
 .../tck/models/fieldtypes/TestFieldsOfBoolean.java |  196 +-
 .../tck/models/fieldtypes/TestFieldsOfByte.java    |  194 +-
 .../models/fieldtypes/TestFieldsOfCharacter.java   |  193 +-
 .../tck/models/fieldtypes/TestFieldsOfDate.java    |  193 +-
 .../tck/models/fieldtypes/TestFieldsOfDouble.java  |  193 +-
 .../tck/models/fieldtypes/TestFieldsOfFloat.java   |  191 +-
 .../tck/models/fieldtypes/TestFieldsOfInteger.java |  193 +-
 .../tck/models/fieldtypes/TestFieldsOfLocale.java  |  196 +-
 .../tck/models/fieldtypes/TestFieldsOfLong.java    |  191 +-
 .../tck/models/fieldtypes/TestFieldsOfObject.java  |  221 +-
 .../fieldtypes/TestFieldsOfPrimitiveboolean.java   |  190 +-
 .../fieldtypes/TestFieldsOfPrimitivebyte.java      |  189 +-
 .../fieldtypes/TestFieldsOfPrimitivechar.java      |  189 +-
 .../fieldtypes/TestFieldsOfPrimitivedouble.java    |  189 +-
 .../fieldtypes/TestFieldsOfPrimitivefloat.java     |  189 +-
 .../fieldtypes/TestFieldsOfPrimitiveint.java       |  191 +-
 .../fieldtypes/TestFieldsOfPrimitivelong.java      |  191 +-
 .../fieldtypes/TestFieldsOfPrimitiveshort.java     |  190 +-
 .../tck/models/fieldtypes/TestFieldsOfShort.java   |  193 +-
 .../models/fieldtypes/TestFieldsOfSimpleClass.java |  184 +-
 .../models/fieldtypes/TestFieldsOfSimpleEnum.java  |  191 +-
 .../fieldtypes/TestFieldsOfSimpleInterface.java    |  183 +-
 .../tck/models/fieldtypes/TestFieldsOfString.java  |  194 +-
 .../TestHashMapStringKeyCollections.java           |  317 +-
 .../TestHashMapStringValueCollections.java         |  339 +-
 .../models/fieldtypes/TestHashSetCollections.java  |  302 +-
 .../TestHashtableStringKeyCollections.java         |  320 +-
 .../TestHashtableStringValueCollections.java       |  338 +-
 .../fieldtypes/TestLinkedListCollections.java      |  301 +-
 .../tck/models/fieldtypes/TestListCollections.java |  313 +-
 .../fieldtypes/TestMapStringKeyCollections.java    |  314 +-
 .../fieldtypes/TestMapStringValueCollections.java  |  340 +-
 .../tck/models/fieldtypes/TestSetCollections.java  |  290 +-
 .../TestTreeMapStringKeyCollections.java           |  318 +-
 .../TestTreeMapStringValueCollections.java         |  336 +-
 .../models/fieldtypes/TestTreeSetCollections.java  |  270 +-
 .../apache/jdo/tck/models/fieldtypes/TestUtil.java |  609 +-
 .../models/fieldtypes/TestVectorCollections.java   |  302 +-
 .../inheritance/FieldWithSameNameInSuperclass.java |  522 +-
 ...rsistentFieldsAreNonPersistentInSubclasses.java |  214 +-
 .../inheritance/NonpersistentSuperClass.java       |  501 +-
 ...ceCapableFlexibilityInInheritanceHierarchy.java |  505 +-
 .../PersistentFieldsArePersistentInSubClasses.java |  492 +-
 .../jdo/tck/models/inheritance/TestParts.java      |  266 +-
 ...actionalFieldsAreTransactionalInSubclasses.java |  205 +-
 .../org/apache/jdo/tck/pc/building/Kitchen.java    |  157 +-
 .../jdo/tck/pc/building/MultifunctionOven.java     |   92 +-
 .../java/org/apache/jdo/tck/pc/building/Oven.java  |  114 +-
 .../org/apache/jdo/tck/pc/company/Address.java     |  600 +-
 .../org/apache/jdo/tck/pc/company/Company.java     |  652 +--
 .../apache/jdo/tck/pc/company/CompanyFactory.java  |  109 +-
 .../tck/pc/company/CompanyFactoryAbstractImpl.java |  466 +-
 .../CompanyFactoryAnnotatedAbstractDelegator.java  |  111 +-
 .../pc/company/CompanyFactoryConcreteClass.java    |  255 +-
 .../tck/pc/company/CompanyFactoryNewInstance.java  |   45 +-
 .../jdo/tck/pc/company/CompanyFactoryPMClass.java  |  116 +-
 .../tck/pc/company/CompanyFactoryPMInterface.java  |  115 +-
 .../jdo/tck/pc/company/CompanyFactoryRegistry.java |  197 +-
 .../jdo/tck/pc/company/CompanyModelReader.java     |  443 +-
 .../apache/jdo/tck/pc/company/DentalInsurance.java |  189 +-
 .../org/apache/jdo/tck/pc/company/Department.java  |  824 ++-
 .../org/apache/jdo/tck/pc/company/Employee.java    |  935 ++-
 .../jdo/tck/pc/company/FullTimeEmployee.java       |  212 +-
 .../org/apache/jdo/tck/pc/company/IAddress.java    |   53 +-
 .../org/apache/jdo/tck/pc/company/ICompany.java    |   49 +-
 .../jdo/tck/pc/company/IDentalInsurance.java       |   22 +-
 .../org/apache/jdo/tck/pc/company/IDepartment.java |   61 +-
 .../org/apache/jdo/tck/pc/company/IEmployee.java   |  104 +-
 .../jdo/tck/pc/company/IFullTimeEmployee.java      |   24 +-
 .../org/apache/jdo/tck/pc/company/IInsurance.java  |   35 +-
 .../jdo/tck/pc/company/IMedicalInsurance.java      |   24 +-
 .../apache/jdo/tck/pc/company/IMeetingRoom.java    |   29 +-
 .../jdo/tck/pc/company/IPartTimeEmployee.java      |   22 +-
 .../org/apache/jdo/tck/pc/company/IPerson.java     |   60 +-
 .../org/apache/jdo/tck/pc/company/IProject.java    |   48 +-
 .../org/apache/jdo/tck/pc/company/Insurance.java   |  469 +-
 .../jdo/tck/pc/company/MedicalInsurance.java       |  186 +-
 .../org/apache/jdo/tck/pc/company/MeetingRoom.java |  421 +-
 .../org/apache/jdo/tck/pc/company/PIAddress.java   |   53 +-
 .../org/apache/jdo/tck/pc/company/PICompany.java   |   51 +-
 .../jdo/tck/pc/company/PIDentalInsurance.java      |   22 +-
 .../apache/jdo/tck/pc/company/PIDepartment.java    |   54 +-
 .../org/apache/jdo/tck/pc/company/PIEmployee.java  |  104 +-
 .../jdo/tck/pc/company/PIFullTimeEmployee.java     |   24 +-
 .../org/apache/jdo/tck/pc/company/PIInsurance.java |   35 +-
 .../jdo/tck/pc/company/PIMedicalInsurance.java     |   24 +-
 .../apache/jdo/tck/pc/company/PIMeetingRoom.java   |   29 +-
 .../jdo/tck/pc/company/PIPartTimeEmployee.java     |   22 +-
 .../org/apache/jdo/tck/pc/company/PIPerson.java    |   60 +-
 .../org/apache/jdo/tck/pc/company/PIProject.java   |   48 +-
 .../jdo/tck/pc/company/PartTimeEmployee.java       |  205 +-
 .../java/org/apache/jdo/tck/pc/company/Person.java |  763 ++-
 .../org/apache/jdo/tck/pc/company/Project.java     |  653 +--
 .../CompanyFactoryAnnotatedFCAppConcrete.java      |  131 +-
 .../CompanyFactoryAnnotatedFCAppPM.java            |  131 +-
 ...CompanyFactoryAnnotatedFCConcreteDelegator.java |   26 +-
 .../CompanyFactoryAnnotatedFCDSConcrete.java       |  131 +-
 .../CompanyFactoryAnnotatedFCDSPM.java             |  131 +-
 .../CompanyFactoryAnnotatedFCPMDelegator.java      |   27 +-
 .../CompanyFactoryAnnotatedPMFieldClass.java       |  202 +-
 ...toreIdDiscriminatorClassNameInheritanceNew.java |   36 +-
 ...iscriminatorClassNameInheritanceSuperclass.java |   38 +-
 .../tck/pc/companyAnnotatedFC/FCAppAddress.java    |  609 +-
 .../tck/pc/companyAnnotatedFC/FCAppCompany.java    |  713 ++-
 .../companyAnnotatedFC/FCAppDentalInsurance.java   |  196 +-
 .../tck/pc/companyAnnotatedFC/FCAppDepartment.java |  801 ++-
 .../tck/pc/companyAnnotatedFC/FCAppEmployee.java   | 1006 ++--
 .../companyAnnotatedFC/FCAppFullTimeEmployee.java  |  228 +-
 .../tck/pc/companyAnnotatedFC/FCAppInsurance.java  |  510 +-
 .../companyAnnotatedFC/FCAppMedicalInsurance.java  |  192 +-
 .../pc/companyAnnotatedFC/FCAppMeetingRoom.java    |  436 +-
 .../companyAnnotatedFC/FCAppPartTimeEmployee.java  |  224 +-
 .../jdo/tck/pc/companyAnnotatedFC/FCAppPerson.java |  833 ++-
 .../tck/pc/companyAnnotatedFC/FCAppProject.java    |  705 ++-
 .../jdo/tck/pc/companyAnnotatedFC/FCDSAddress.java |  607 +-
 .../jdo/tck/pc/companyAnnotatedFC/FCDSCompany.java |  701 ++-
 .../pc/companyAnnotatedFC/FCDSDentalInsurance.java |  199 +-
 .../tck/pc/companyAnnotatedFC/FCDSDepartment.java  |  792 ++-
 .../tck/pc/companyAnnotatedFC/FCDSEmployee.java    | 1002 ++--
 .../companyAnnotatedFC/FCDSFullTimeEmployee.java   |  222 +-
 .../tck/pc/companyAnnotatedFC/FCDSInsurance.java   |  494 +-
 .../companyAnnotatedFC/FCDSMedicalInsurance.java   |  195 +-
 .../tck/pc/companyAnnotatedFC/FCDSMeetingRoom.java |  423 +-
 .../companyAnnotatedFC/FCDSPartTimeEmployee.java   |  214 +-
 .../jdo/tck/pc/companyAnnotatedFC/FCDSPerson.java  |  825 ++-
 .../jdo/tck/pc/companyAnnotatedFC/FCDSProject.java |  693 ++-
 .../CompanyFactoryAnnotatedJPAAppConcrete.java     |  131 +-
 .../CompanyFactoryAnnotatedJPAAppPM.java           |  128 +-
 .../CompanyFactoryAnnotatedPMFieldClassJPA.java    |  163 +-
 .../tck/pc/companyAnnotatedJPA/JPAAppAddress.java  |  609 +-
 .../tck/pc/companyAnnotatedJPA/JPAAppCompany.java  |  725 +--
 .../companyAnnotatedJPA/JPAAppDentalInsurance.java |  198 +-
 .../pc/companyAnnotatedJPA/JPAAppDepartment.java   |  809 ++-
 .../tck/pc/companyAnnotatedJPA/JPAAppEmployee.java | 1025 ++--
 .../JPAAppFullTimeEmployee.java                    |  223 +-
 .../pc/companyAnnotatedJPA/JPAAppInsurance.java    |  504 +-
 .../JPAAppMedicalInsurance.java                    |  192 +-
 .../JPAAppPartTimeEmployee.java                    |  219 +-
 .../tck/pc/companyAnnotatedJPA/JPAAppPerson.java   |  916 ++-
 .../pc/companyAnnotatedJPA/JPAAppPhoneNumber.java  |  343 +-
 .../tck/pc/companyAnnotatedJPA/JPAAppProject.java  |  706 ++-
 .../CompanyFactoryAnnotatedPCAppConcrete.java      |  129 +-
 .../CompanyFactoryAnnotatedPCAppPM.java            |  129 +-
 ...CompanyFactoryAnnotatedPCConcreteDelegator.java |   26 +-
 .../CompanyFactoryAnnotatedPCDSConcrete.java       |  129 +-
 .../CompanyFactoryAnnotatedPCDSPM.java             |  129 +-
 .../CompanyFactoryAnnotatedPCPMDelegator.java      |   27 +-
 .../tck/pc/companyAnnotatedPC/PCAppAddress.java    |  608 +-
 .../tck/pc/companyAnnotatedPC/PCAppCompany.java    |  720 +--
 .../companyAnnotatedPC/PCAppDentalInsurance.java   |  200 +-
 .../tck/pc/companyAnnotatedPC/PCAppDepartment.java |  812 +--
 .../tck/pc/companyAnnotatedPC/PCAppEmployee.java   | 1039 ++--
 .../companyAnnotatedPC/PCAppFullTimeEmployee.java  |  232 +-
 .../tck/pc/companyAnnotatedPC/PCAppInsurance.java  |  530 +-
 .../companyAnnotatedPC/PCAppMedicalInsurance.java  |  198 +-
 .../companyAnnotatedPC/PCAppPartTimeEmployee.java  |  229 +-
 .../jdo/tck/pc/companyAnnotatedPC/PCAppPerson.java |  836 ++-
 .../tck/pc/companyAnnotatedPC/PCAppProject.java    |  711 +--
 .../jdo/tck/pc/companyAnnotatedPC/PCDSAddress.java |  606 +-
 .../jdo/tck/pc/companyAnnotatedPC/PCDSCompany.java |  726 +--
 .../pc/companyAnnotatedPC/PCDSDentalInsurance.java |  204 +-
 .../tck/pc/companyAnnotatedPC/PCDSDepartment.java  |  814 +--
 .../tck/pc/companyAnnotatedPC/PCDSEmployee.java    | 1052 ++--
 .../companyAnnotatedPC/PCDSFullTimeEmployee.java   |  231 +-
 .../tck/pc/companyAnnotatedPC/PCDSInsurance.java   |  531 +-
 .../companyAnnotatedPC/PCDSMedicalInsurance.java   |  201 +-
 .../companyAnnotatedPC/PCDSPartTimeEmployee.java   |  225 +-
 .../jdo/tck/pc/companyAnnotatedPC/PCDSPerson.java  |  836 ++-
 .../jdo/tck/pc/companyAnnotatedPC/PCDSProject.java |  713 +--
 .../CompanyFactoryAnnotatedPIAppPM.java            |  129 +-
 .../CompanyFactoryAnnotatedPIDSPM.java             |  129 +-
 .../CompanyFactoryAnnotatedPIPMDelegator.java      |   26 +-
 .../CompanyFactoryAnnotatedPMInterface.java        |  188 +-
 .../tck/pc/companyAnnotatedPI/PIAppAddress.java    |   61 +-
 .../tck/pc/companyAnnotatedPI/PIAppCompany.java    |  104 +-
 .../companyAnnotatedPI/PIAppDentalInsurance.java   |   35 +-
 .../tck/pc/companyAnnotatedPI/PIAppDepartment.java |   98 +-
 .../tck/pc/companyAnnotatedPI/PIAppEmployee.java   |  175 +-
 .../companyAnnotatedPI/PIAppFullTimeEmployee.java  |   36 +-
 .../tck/pc/companyAnnotatedPI/PIAppInsurance.java  |   78 +-
 .../companyAnnotatedPI/PIAppMedicalInsurance.java  |   36 +-
 .../companyAnnotatedPI/PIAppPartTimeEmployee.java  |   34 +-
 .../jdo/tck/pc/companyAnnotatedPI/PIAppPerson.java |  133 +-
 .../tck/pc/companyAnnotatedPI/PIAppProject.java    |   96 +-
 .../jdo/tck/pc/companyAnnotatedPI/PIDSAddress.java |   57 +-
 .../jdo/tck/pc/companyAnnotatedPI/PIDSCompany.java |  104 +-
 .../pc/companyAnnotatedPI/PIDSDentalInsurance.java |   29 +-
 .../tck/pc/companyAnnotatedPI/PIDSDepartment.java  |   97 +-
 .../tck/pc/companyAnnotatedPI/PIDSEmployee.java    |  166 +-
 .../companyAnnotatedPI/PIDSFullTimeEmployee.java   |   34 +-
 .../tck/pc/companyAnnotatedPI/PIDSInsurance.java   |   76 +-
 .../companyAnnotatedPI/PIDSMedicalInsurance.java   |   30 +-
 .../companyAnnotatedPI/PIDSPartTimeEmployee.java   |   32 +-
 .../jdo/tck/pc/companyAnnotatedPI/PIDSPerson.java  |  130 +-
 .../jdo/tck/pc/companyAnnotatedPI/PIDSProject.java |   98 +-
 .../jdo/tck/pc/companyListWithoutJoin/Company.java |  586 +-
 .../pc/companyListWithoutJoin/CompanyFactory.java  |   45 +-
 .../CompanyFactoryAbstractImpl.java                |  171 +-
 .../CompanyFactoryConcreteClass.java               |   85 +-
 .../CompanyFactoryPMClass.java                     |   71 +-
 .../CompanyFactoryPMInterface.java                 |   69 +-
 .../CompanyFactoryRegistry.java                    |  197 +-
 .../companyListWithoutJoin/CompanyModelReader.java |  304 +-
 .../tck/pc/companyListWithoutJoin/Department.java  |  591 +-
 .../tck/pc/companyListWithoutJoin/Employee.java    |  656 ++-
 .../companyListWithoutJoin/FullTimeEmployee.java   |  169 +-
 .../tck/pc/companyListWithoutJoin/ICompany.java    |   43 +-
 .../tck/pc/companyListWithoutJoin/IDepartment.java |   43 +-
 .../tck/pc/companyListWithoutJoin/IEmployee.java   |   80 +-
 .../companyListWithoutJoin/IFullTimeEmployee.java  |   24 +-
 .../companyListWithoutJoin/IPartTimeEmployee.java  |   22 +-
 .../jdo/tck/pc/companyListWithoutJoin/IPerson.java |   48 +-
 .../companyListWithoutJoin/PartTimeEmployee.java   |  164 +-
 .../jdo/tck/pc/companyListWithoutJoin/Person.java  |  569 +-
 .../jdo/tck/pc/companyMapWithoutJoin/Company.java  |  586 +-
 .../pc/companyMapWithoutJoin/CompanyFactory.java   |   59 +-
 .../CompanyFactoryAbstractImpl.java                |  177 +-
 .../CompanyFactoryConcreteClass.java               |   99 +-
 .../CompanyFactoryPMClass.java                     |   71 +-
 .../CompanyFactoryPMInterface.java                 |   69 +-
 .../CompanyFactoryRegistry.java                    |  197 +-
 .../companyMapWithoutJoin/CompanyModelReader.java  |  304 +-
 .../tck/pc/companyMapWithoutJoin/Department.java   |  593 +-
 .../jdo/tck/pc/companyMapWithoutJoin/Employee.java |  702 ++-
 .../pc/companyMapWithoutJoin/FullTimeEmployee.java |  178 +-
 .../jdo/tck/pc/companyMapWithoutJoin/ICompany.java |   43 +-
 .../tck/pc/companyMapWithoutJoin/IDepartment.java  |   43 +-
 .../tck/pc/companyMapWithoutJoin/IEmployee.java    |   86 +-
 .../companyMapWithoutJoin/IFullTimeEmployee.java   |   24 +-
 .../companyMapWithoutJoin/IPartTimeEmployee.java   |   22 +-
 .../jdo/tck/pc/companyMapWithoutJoin/IPerson.java  |   49 +-
 .../pc/companyMapWithoutJoin/PartTimeEmployee.java |  173 +-
 .../jdo/tck/pc/companyMapWithoutJoin/Person.java   |  571 +-
 .../ApplicationIdDiscriminatorClassName.java       |   27 +-
 .../org/apache/jdo/tck/pc/converter/IPCPoint.java  |   14 +-
 .../org/apache/jdo/tck/pc/converter/IPCRect.java   |   14 +-
 .../org/apache/jdo/tck/pc/converter/PCPoint.java   |   80 +-
 .../jdo/tck/pc/converter/PCPointAnnotated.java     |   82 +-
 .../apache/jdo/tck/pc/converter/PCPointProp.java   |   80 +-
 .../jdo/tck/pc/converter/PCPointPropAnnotated.java |   82 +-
 .../org/apache/jdo/tck/pc/converter/PCRect.java    |   87 +-
 .../jdo/tck/pc/converter/PCRectAnnotated.java      |  103 +-
 .../org/apache/jdo/tck/pc/fieldtypes/AllTypes.java |  672 +--
 .../jdo/tck/pc/fieldtypes/ArrayCollections.java    |  457 +-
 .../tck/pc/fieldtypes/ArrayListCollections.java    |  551 +-
 .../tck/pc/fieldtypes/CollectionCollections.java   |  511 +-
 .../jdo/tck/pc/fieldtypes/FieldsOfBigDecimal.java  | 1545 +++--
 .../jdo/tck/pc/fieldtypes/FieldsOfBigInteger.java  | 1545 +++--
 .../jdo/tck/pc/fieldtypes/FieldsOfBoolean.java     | 1543 +++--
 .../apache/jdo/tck/pc/fieldtypes/FieldsOfByte.java | 1559 +++--
 .../jdo/tck/pc/fieldtypes/FieldsOfCharacter.java   | 1543 +++--
 .../apache/jdo/tck/pc/fieldtypes/FieldsOfDate.java | 1545 +++--
 .../jdo/tck/pc/fieldtypes/FieldsOfDouble.java      | 1559 +++--
 .../jdo/tck/pc/fieldtypes/FieldsOfFloat.java       | 1559 +++--
 .../jdo/tck/pc/fieldtypes/FieldsOfInteger.java     | 1560 +++--
 .../jdo/tck/pc/fieldtypes/FieldsOfLocale.java      | 1545 +++--
 .../apache/jdo/tck/pc/fieldtypes/FieldsOfLong.java | 1559 +++--
 .../jdo/tck/pc/fieldtypes/FieldsOfObject.java      | 1543 +++--
 .../pc/fieldtypes/FieldsOfPrimitiveboolean.java    | 1543 +++--
 .../tck/pc/fieldtypes/FieldsOfPrimitivebyte.java   | 1542 +++--
 .../tck/pc/fieldtypes/FieldsOfPrimitivechar.java   | 1543 +++--
 .../tck/pc/fieldtypes/FieldsOfPrimitivedouble.java | 1544 +++--
 .../tck/pc/fieldtypes/FieldsOfPrimitivefloat.java  | 1543 +++--
 .../tck/pc/fieldtypes/FieldsOfPrimitiveint.java    | 1543 +++--
 .../tck/pc/fieldtypes/FieldsOfPrimitivelong.java   | 1544 +++--
 .../tck/pc/fieldtypes/FieldsOfPrimitiveshort.java  | 1543 +++--
 .../jdo/tck/pc/fieldtypes/FieldsOfShort.java       | 1559 +++--
 .../jdo/tck/pc/fieldtypes/FieldsOfSimpleClass.java | 1796 +++---
 .../jdo/tck/pc/fieldtypes/FieldsOfSimpleEnum.java  | 1544 +++--
 .../tck/pc/fieldtypes/FieldsOfSimpleInterface.java | 1543 +++--
 .../jdo/tck/pc/fieldtypes/FieldsOfString.java      | 1543 +++--
 .../pc/fieldtypes/HashMapStringKeyCollections.java | 1059 ++--
 .../fieldtypes/HashMapStringValueCollections.java  |  992 ++--
 .../jdo/tck/pc/fieldtypes/HashSetCollections.java  |  511 +-
 .../fieldtypes/HashtableStringKeyCollections.java  | 1061 ++--
 .../HashtableStringValueCollections.java           |  991 ++--
 .../tck/pc/fieldtypes/LinkedListCollections.java   |  512 +-
 .../jdo/tck/pc/fieldtypes/ListCollections.java     |  511 +-
 .../tck/pc/fieldtypes/MapStringKeyCollections.java | 1191 ++--
 .../pc/fieldtypes/MapStringValueCollections.java   | 1121 ++--
 .../jdo/tck/pc/fieldtypes/SetCollections.java      |  511 +-
 .../apache/jdo/tck/pc/fieldtypes/SimpleClass.java  |  152 +-
 .../apache/jdo/tck/pc/fieldtypes/SimpleEnum.java   |  207 +-
 .../jdo/tck/pc/fieldtypes/SimpleInterface.java     |   18 +-
 .../pc/fieldtypes/TreeMapStringKeyCollections.java | 1062 ++--
 .../fieldtypes/TreeMapStringValueCollections.java  |  991 ++--
 .../jdo/tck/pc/fieldtypes/TreeSetCollections.java  |  471 +-
 .../jdo/tck/pc/fieldtypes/VectorCollections.java   |  512 +-
 .../apache/jdo/tck/pc/inheritance/AllPersist.java  |  122 +-
 .../apache/jdo/tck/pc/inheritance/AllPersist2.java |   46 +-
 .../apache/jdo/tck/pc/inheritance/AllPersist3.java |   44 +-
 .../apache/jdo/tck/pc/inheritance/AllPersist4.java |   52 +-
 .../apache/jdo/tck/pc/inheritance/Constants.java   |   51 +-
 .../jdo/tck/pc/inheritance/FieldSameName.java      |  148 +-
 .../jdo/tck/pc/inheritance/FieldSameName2.java     |   94 +-
 .../jdo/tck/pc/inheritance/FieldSameName3.java     |   92 +-
 .../jdo/tck/pc/inheritance/FieldSameName4.java     |  100 +-
 .../jdo/tck/pc/inheritance/TopNonPersist.java      |   32 +-
 .../jdo/tck/pc/inheritance/TopNonPersistB.java     |  104 +-
 .../jdo/tck/pc/inheritance/TopNonPersistC.java     |   35 +-
 .../jdo/tck/pc/inheritance/TopNonPersistD.java     |   35 +-
 .../jdo/tck/pc/inheritance/TopNonPersistE.java     |   38 +-
 .../jdo/tck/pc/inheritance/TopNonPersistF.java     |   46 +-
 .../jdo/tck/pc/inheritance/TopNonPersistG.java     |   46 +-
 .../jdo/tck/pc/inheritance/TopNonPersistH.java     |   46 +-
 .../apache/jdo/tck/pc/inheritance/TopPersist.java  |  106 +-
 .../apache/jdo/tck/pc/inheritance/TopPersistC.java |   33 +-
 .../apache/jdo/tck/pc/inheritance/TopPersistD.java |   33 +-
 .../apache/jdo/tck/pc/inheritance/TopPersistE.java |   36 +-
 .../apache/jdo/tck/pc/inheritance/TopPersistF.java |   46 +-
 .../apache/jdo/tck/pc/inheritance/TopPersistG.java |   44 +-
 .../apache/jdo/tck/pc/inheritance/TopPersistH.java |   43 +-
 .../instancecallbacks/InstanceCallbackClass.java   |  400 +-
 .../InstanceCallbackNonPersistFdsClass.java        |  535 +-
 .../jdo/tck/pc/lifecycle/StateTransitionObj.java   |  200 +-
 .../org/apache/jdo/tck/pc/mylib/MylibReader.java   |  147 +-
 .../java/org/apache/jdo/tck/pc/mylib/PCClass.java  |  296 +-
 .../java/org/apache/jdo/tck/pc/mylib/PCPoint.java  |  158 +-
 .../java/org/apache/jdo/tck/pc/mylib/PCPoint2.java |  212 +-
 .../java/org/apache/jdo/tck/pc/mylib/PCRect.java   |  162 +-
 .../java/org/apache/jdo/tck/pc/mylib/Point.java    |   83 +-
 .../apache/jdo/tck/pc/mylib/PrimitiveTypes.java    |  686 +--
 .../apache/jdo/tck/pc/mylib/VersionedPCPoint.java  |  180 +-
 .../apache/jdo/tck/pc/newInstance/AAddress.java    |   53 +-
 .../jdo/tck/pc/newInstance/AAddress_bad.java       |   61 +-
 .../org/apache/jdo/tck/pc/newInstance/Address.java |  589 +-
 .../apache/jdo/tck/pc/newInstance/Address_bad.java |  591 +-
 .../apache/jdo/tck/pc/newInstance/IAddress.java    |   53 +-
 .../jdo/tck/pc/newInstance/IAddress_bad.java       |   61 +-
 .../java/org/apache/jdo/tck/pc/order/Order.java    |  326 +-
 .../org/apache/jdo/tck/pc/order/OrderFactory.java  |   33 +-
 .../jdo/tck/pc/order/OrderFactoryAbstractImpl.java |   90 +-
 .../tck/pc/order/OrderFactoryConcreteClass.java    |   63 +-
 .../jdo/tck/pc/order/OrderFactoryPMClass.java      |   54 +-
 .../jdo/tck/pc/order/OrderFactoryPMInterface.java  |   52 +-
 .../jdo/tck/pc/order/OrderFactoryRegistry.java     |  179 +-
 .../org/apache/jdo/tck/pc/order/OrderItem.java     |  387 +-
 .../apache/jdo/tck/pc/order/OrderModelReader.java  |  215 +-
 .../tck/pc/query/JDOQLKeywordsAsFieldNames.java    |   38 +-
 .../apache/jdo/tck/pc/query/LocalDateSample.java   |   74 +-
 .../jdo/tck/pc/query/LocalDateTimeSample.java      |   74 +-
 .../apache/jdo/tck/pc/query/LocalTimeSample.java   |   74 +-
 .../org/apache/jdo/tck/pc/query/MathSample.java    |  223 +-
 .../jdo/tck/pc/query/NamedQueriesSample.java       |   58 +-
 .../java/org/apache/jdo/tck/pc/query/NoExtent.java |   42 +-
 .../apache/jdo/tck/pc/query/OptionalSample.java    |  207 +-
 .../org/apache/jdo/tck/pc/query/TimeSample.java    |   89 +-
 .../org/apache/jdo/tck/pc/shoppingcart/Cart.java   |  199 +-
 .../apache/jdo/tck/pc/shoppingcart/CartEntry.java  |  212 +-
 .../apache/jdo/tck/pc/shoppingcart/Product.java    |  142 +-
 .../jdo/tck/pc/shoppingcart/Undetachable.java      |  113 +-
 .../AbstractPCPointSingleField.java                |   59 +-
 .../jdo/tck/pc/singlefieldidentity/Employee.java   |  167 +-
 .../pc/singlefieldidentity/FullTimeEmployee.java   |  134 +-
 .../PCPointSingleFieldByte.java                    |  149 +-
 .../PCPointSingleFieldCharacter.java               |  149 +-
 .../PCPointSingleFieldDate.java                    |  150 +-
 .../PCPointSingleFieldInteger.java                 |  149 +-
 .../PCPointSingleFieldLong.java                    |  149 +-
 .../PCPointSingleFieldPrimitivebyte.java           |  130 +-
 .../PCPointSingleFieldPrimitivechar.java           |  130 +-
 .../PCPointSingleFieldPrimitiveint.java            |  130 +-
 .../PCPointSingleFieldPrimitivelong.java           |  130 +-
 .../PCPointSingleFieldPrimitiveshort.java          |  130 +-
 .../PCPointSingleFieldShort.java                   |  149 +-
 .../PCPointSingleFieldString.java                  |  149 +-
 .../pc/singlefieldidentity/PartTimeEmployee.java   |  132 +-
 .../jdo/tck/pc/singlefieldidentity/Person.java     |  301 +-
 .../apache/jdo/tck/query/QueryElementHolder.java   |  794 ++-
 .../java/org/apache/jdo/tck/query/QueryTest.java   | 2899 +++++-----
 .../apache/jdo/tck/query/api/AutoCloseable.java    |  440 +-
 .../org/apache/jdo/tck/query/api/ChangeQuery.java  |  144 +-
 .../java/org/apache/jdo/tck/query/api/Close.java   |  198 +-
 .../org/apache/jdo/tck/query/api/CloseAll.java     |  139 +-
 .../org/apache/jdo/tck/query/api/CompileQuery.java |  132 +-
 .../apache/jdo/tck/query/api/DeclareImports.java   |  253 +-
 .../jdo/tck/query/api/DeclareParameters.java       |  260 +-
 .../apache/jdo/tck/query/api/DeclareVariables.java |  169 +-
 .../org/apache/jdo/tck/query/api/ExecuteQuery.java |  268 +-
 .../jdo/tck/query/api/ExecuteQueryWithArray.java   |  224 +-
 .../jdo/tck/query/api/ExecuteQueryWithMap.java     |  228 +-
 .../org/apache/jdo/tck/query/api/GetFetchPlan.java |  178 +-
 .../apache/jdo/tck/query/api/GetIgnoreCache.java   |  201 +-
 .../jdo/tck/query/api/GetPersistenceManager.java   |  195 +-
 ...sistenceManagerFromRestoredSerializedQuery.java |  195 +-
 .../jdo/tck/query/api/InvalidNamedQuery.java       |   68 +-
 .../jdo/tck/query/api/MetadataSearchOrder.java     |  178 +-
 .../jdo/tck/query/api/NamedQueryNotFound.java      |   70 +-
 .../query/api/NamedQueryRepeatableAnnotations.java |   75 +-
 .../apache/jdo/tck/query/api/NewNamedQuery.java    |  138 +-
 ...ryFromExistingQueryBoundToPMFromSameVendor.java |  262 +-
 .../api/NewQueryFromRestoredSerializedQuery.java   |  198 +-
 .../jdo/tck/query/api/NewQuerySingleString.java    |  132 +-
 .../tck/query/api/NewQueryWithCandidateClass.java  |  107 +-
 .../NewQueryWithCandidateClassAndCollection.java   |  108 +-
 .../api/NewQueryWithCandidateClassAndExtent.java   |  114 +-
 .../api/NewQueryWithCandidateClassAndFilter.java   |  119 +-
 ...NewQueryWithCandidateClassCollectionFilter.java |  118 +-
 .../jdo/tck/query/api/NewQueryWithExtent.java      |  107 +-
 .../tck/query/api/NewQueryWithExtentAndFilter.java |  117 +-
 .../api/NewQueryWithSpecifiedLanguageAndQuery.java |  147 +-
 .../org/apache/jdo/tck/query/api/QueryCancel.java  |  426 +-
 .../apache/jdo/tck/query/api/QueryExtentions.java  |  108 +-
 .../apache/jdo/tck/query/api/SampleQueries.java    | 6079 ++++++++++----------
 .../apache/jdo/tck/query/api/SaveAsNamedQuery.java |  131 +-
 .../jdo/tck/query/api/SetCandidateCollection.java  |  142 +-
 .../jdo/tck/query/api/SetCandidateExtent.java      |  138 +-
 .../org/apache/jdo/tck/query/api/SetFilter.java    |  125 +-
 .../org/apache/jdo/tck/query/api/SetGrouping.java  |  103 +-
 .../apache/jdo/tck/query/api/SetIgnoreCache.java   |  249 +-
 .../org/apache/jdo/tck/query/api/SetOrdering.java  |  204 +-
 .../org/apache/jdo/tck/query/api/SetRange.java     |  102 +-
 .../org/apache/jdo/tck/query/api/SetResult.java    |  125 +-
 .../apache/jdo/tck/query/api/SetResultClass.java   |  115 +-
 .../org/apache/jdo/tck/query/api/SetUnique.java    |  117 +-
 .../tck/query/api/SetterReplacePreviousValues.java |  304 +-
 .../jdo/tck/query/api/SingleStringQuery.java       |  184 +-
 .../jdo/tck/query/api/UnmodifiableQuery.java       |  303 +-
 .../jdo/tck/query/delete/DeleteCallback.java       |  842 +--
 .../jdo/tck/query/delete/DeletePersistentAll.java  |  450 +-
 .../jdo/tck/query/delete/DeleteQueryElements.java  |  456 +-
 ...nmentPrePostIncrementDecrementNotSupported.java |  218 +-
 .../java/org/apache/jdo/tck/query/jdoql/Cast.java  |  194 +-
 .../query/jdoql/CharacterAndStringLiterals.java    |  282 +-
 .../jdoql/ComparingCollectionFieldToNull.java      |  161 +-
 ...omparingPersistentAndNonPersistentInstance.java |  224 +-
 .../tck/query/jdoql/DenoteUniquenessInFilter.java  |  332 +-
 ...ExecuteQueryWhenPersistenceManagerIsClosed.java |  125 +-
 ...gMultipleQueriesSimultaneouslyIsThreadSafe.java |  276 +-
 ...eryWhenNoTransactionNoNontransactionalRead.java |  103 +-
 .../org/apache/jdo/tck/query/jdoql/Having.java     |  304 +-
 .../query/jdoql/IdentifiersEqualFieldNames.java    |  387 +-
 .../apache/jdo/tck/query/jdoql/IfElseInFilter.java |  451 +-
 .../jdo/tck/query/jdoql/IgnoreCacheFalse.java      |  286 +-
 ...ctiveQueryInstanceInSamePersistenceManager.java |  164 +-
 .../tck/query/jdoql/MultipleIdenticalImports.java  |  298 +-
 .../tck/query/jdoql/NamespaceOfIdentifiers.java    |  130 +-
 .../query/jdoql/NavigationComparisonWithNull.java  |  882 +--
 .../jdoql/NavigationThroughACollectionField.java   |  153 +-
 .../jdoql/NavigationThroughANullValuedField.java   |  360 +-
 ...NavigationThroughReferencesUsesDotOperator.java |  351 +-
 .../apache/jdo/tck/query/jdoql/NegativeRange.java  |  297 +-
 .../jdoql/NullCollectionsAndContainsMethod.java    |  235 +-
 .../tck/query/jdoql/NullCollectionsAndIsEmpty.java |  136 +-
 .../jdo/tck/query/jdoql/OrderingSpecification.java |  465 +-
 .../jdoql/ParenthesesMarkOperatorPrecedence.java   |  676 ++-
 .../apache/jdo/tck/query/jdoql/PositiveRange.java  |  314 +-
 .../jdo/tck/query/jdoql/QueryIsSerializable.java   |  302 +-
 .../jdoql/QueryResultPassedToAnotherQuery.java     |  327 +-
 .../jdo/tck/query/jdoql/QueryWithNoFilter.java     |  137 +-
 .../apache/jdo/tck/query/jdoql/RangeAsString.java  |  316 +-
 ...ializedQueryInstanceLosesAssociationWithPM.java |  138 +-
 .../query/jdoql/SeparateNamespaceForTypeNames.java |  219 +-
 .../jdoql/WhiteSpaceIsACharacterAndIgnored.java    |  223 +-
 .../query/jdoql/keywords/InvalidUseOfKeywords.java |  162 +-
 .../query/jdoql/keywords/KeywordsAsFieldNames.java |  157 +-
 .../jdo/tck/query/jdoql/keywords/SingleString.java |  126 +-
 .../ThisIsReservedWordForElementOfCollection.java  |  113 +-
 .../query/jdoql/keywords/UppercaseLowercase.java   |   98 +-
 .../keywords/UseOfThisToAcessHiddenField.java      |  220 +-
 .../tck/query/jdoql/methods/EnumMethodOrdinal.java |  164 +-
 .../query/jdoql/methods/EnumMethodToString.java    |  164 +-
 .../MethodsAndObjectConstructionNotSupported.java  |  100 +-
 .../query/jdoql/methods/StartsWithAndEndsWith.java |  187 +-
 .../jdoql/methods/SupportedCollectionMethods.java  |  409 +-
 .../query/jdoql/methods/SupportedDateMethods.java  |  261 +-
 .../jdoql/methods/SupportedJDOHelperMethods.java   |  388 +-
 .../query/jdoql/methods/SupportedListMethods.java  |  222 +-
 .../jdoql/methods/SupportedLocalDateMethods.java   |  257 +-
 .../methods/SupportedLocalDateTimeMethods.java     |  379 +-
 .../jdoql/methods/SupportedLocalTimeMethods.java   |  261 +-
 .../query/jdoql/methods/SupportedMapMethods.java   |  393 +-
 .../query/jdoql/methods/SupportedMathMethods.java  | 1754 +++---
 .../jdoql/methods/SupportedOptionalMethods.java    | 1118 ++--
 .../jdoql/methods/SupportedStringMethods.java      | 1034 ++--
 .../query/jdoql/methods/SupportedTimeMethods.java  |  290 +-
 .../tck/query/jdoql/operators/BinaryAddition.java  |  162 +-
 .../query/jdoql/operators/BinarySubtraction.java   |  170 +-
 .../jdoql/operators/BitwiseBinaryOperators.java    |  419 +-
 .../query/jdoql/operators/BitwiseComplement.java   |  143 +-
 .../query/jdoql/operators/BooleanLogicalAND.java   |  201 +-
 .../query/jdoql/operators/BooleanLogicalOR.java    |  248 +-
 .../tck/query/jdoql/operators/ComparisonTests.java |  182 +-
 .../tck/query/jdoql/operators/ConditionalAND.java  |  201 +-
 .../tck/query/jdoql/operators/ConditionalOR.java   |  202 +-
 .../jdo/tck/query/jdoql/operators/Division.java    |  180 +-
 .../jdo/tck/query/jdoql/operators/Equality.java    | 3068 ++++------
 ...dComparisonsBetweenDateFieldsAndParameters.java |  344 +-
 ...risonsBetweenPrimitivesAndWrapperInstances.java |  147 +-
 ...omparisonsBetweenStringFieldsAndParameters.java |  291 +-
 .../jdo/tck/query/jdoql/operators/GreaterThan.java | 3426 ++++-------
 .../query/jdoql/operators/GreaterThanOrEqual.java  | 3444 ++++-------
 .../jdo/tck/query/jdoql/operators/Instanceof.java  |  173 +-
 .../jdo/tck/query/jdoql/operators/LessThan.java    | 3431 ++++-------
 .../tck/query/jdoql/operators/LessThanOrEqual.java | 3447 ++++-------
 .../query/jdoql/operators/LogicalComplement.java   |  409 +-
 .../jdo/tck/query/jdoql/operators/Modulo.java      |  179 +-
 .../tck/query/jdoql/operators/Multiplication.java  |  160 +-
 .../jdo/tck/query/jdoql/operators/NotEquals.java   | 3098 ++++------
 .../operators/PromotionOfNumericOperands.java      |  136 +-
 .../tck/query/jdoql/operators/SignInversion.java   |  166 +-
 .../query/jdoql/operators/StringConcatenation.java |  212 +-
 .../jdo/tck/query/jdoql/operators/UnaryPlus.java   |  116 +-
 .../jdoql/parameters/BoundParameterCheck.java      |  120 +-
 .../parameters/DomainObjectsAsParameters.java      |  574 +-
 .../query/jdoql/parameters/ImplicitParameters.java |  341 +-
 .../query/jdoql/parameters/MixedParameters.java    |  210 +-
 .../query/jdoql/parameters/OrderOfParameters.java  |  171 +-
 .../parameters/ParameterBoundToDifferentPM.java    |  136 +-
 ...eclaredWithSameNameAsFieldOfCandidateClass.java |  248 +-
 .../parameters/PrimitiveParameterPassedAsNull.java |  106 +-
 .../query/jdoql/subqueries/AggregateOnSize.java    |  122 +-
 .../jdoql/subqueries/CorrelatedSubqueries.java     |  421 +-
 .../CorrelatedSubqueriesWithParameters.java        |  336 +-
 .../subqueries/MultipleCallsReplaceSubquery.java   |  128 +-
 .../jdoql/subqueries/NonCorrelatedSubqueries.java  |  257 +-
 .../NullCandidateCollectionExpression.java         |  132 +-
 .../jdoql/subqueries/NullSubqueryParameter.java    |  116 +-
 .../jdoql/subqueries/NullVariableDeclaration.java  |  118 +-
 .../tck/query/jdoql/subqueries/SubqueriesTest.java |  101 +-
 .../subqueries/UnmodifiedSubqueryInstance.java     |  216 +-
 .../tck/query/jdoql/variables/MixedVariables.java  |  223 +-
 .../jdoql/variables/UnconstrainedVariable.java     |  143 +-
 ...eclaredWithSameNameAsFieldOfCandidateClass.java |  139 +-
 .../query/jdoql/variables/VariablesAndFields.java  |  416 +-
 .../jdoql/variables/VariablesWithoutExtent.java    |  162 +-
 .../jdo/tck/query/result/AggregateResult.java      | 1882 +++---
 .../apache/jdo/tck/query/result/DefaultResult.java |  122 +-
 .../apache/jdo/tck/query/result/DefaultUnique.java |  710 ++-
 .../query/result/DistinctCandidateInstances.java   |  253 +-
 .../apache/jdo/tck/query/result/DistinctQuery.java |  343 +-
 .../org/apache/jdo/tck/query/result/Grouping.java  |  192 +-
 .../apache/jdo/tck/query/result/IfElseResult.java  |  398 +-
 .../jdo/tck/query/result/ImmutableQueryResult.java |  285 +-
 .../jdo/tck/query/result/MethodsInResult.java      |  412 +-
 .../jdo/tck/query/result/NPEInResultExpr.java      |  185 +-
 .../apache/jdo/tck/query/result/NullResults.java   |  257 +-
 .../result/ProjectedSCODoesNotTrackChanges.java    |  268 +-
 .../tck/query/result/ResultClassRequirements.java  |  991 ++--
 .../jdo/tck/query/result/ResultExpressions.java    | 1338 +++--
 .../apache/jdo/tck/query/result/ShapeOfResult.java |  735 ++-
 .../org/apache/jdo/tck/query/result/Unique.java    |  283 +-
 .../jdo/tck/query/result/VariableInResult.java     |  430 +-
 .../result/VariableInResultMultipleNavigation.java |  406 +-
 .../query/result/VariableInResultNavigation.java   |  483 +-
 .../jdo/tck/query/result/classes/FullName.java     |  210 +-
 .../jdo/tck/query/result/classes/LongString.java   |  140 +-
 .../result/classes/MissingNoArgsConstructor.java   |  104 +-
 .../query/result/classes/NoFieldsNoMethods.java    |   22 +-
 .../tck/query/result/classes/PublicLongField.java  |   72 +-
 .../tck/query/result/classes/PublicPutMethod.java  |   86 +-
 .../jdo/tck/query/sql/AllowedAPIMethods.java       |  386 +-
 .../apache/jdo/tck/query/sql/ExecuteWithMap.java   |  323 +-
 .../org/apache/jdo/tck/query/sql/NewQuery.java     |  127 +-
 .../apache/jdo/tck/query/sql/NoCandidateClass.java |  142 +-
 .../apache/jdo/tck/query/sql/ShapeOfResult.java    |  351 +-
 .../AfterCompletionMethodCalledWhenCommitted.java  |  196 +-
 .../AfterCompletionMethodCalledWhenRolledback.java |  199 +-
 .../AfterSetRollbackOnlyCommitFails.java           |   69 +-
 .../transactions/BeforeCompletionMethodCalled.java |  186 +-
 ...oreCompletionMethodNotCalledBeforeRollback.java |  176 +-
 .../org/apache/jdo/tck/transactions/Commit.java    |  229 +-
 .../tck/transactions/GetPersistenceManager.java    |  128 +-
 .../jdo/tck/transactions/GetRetainValues.java      |  136 +-
 .../GetRollbackOnlyReturnsFalseUntilSet.java       |   98 +-
 .../jdo/tck/transactions/GetSynchronization.java   |  193 +-
 .../org/apache/jdo/tck/transactions/IsActive.java  |  134 +-
 .../IsActiveUntilAfterCompletionMethodCalled.java  |  203 +-
 .../org/apache/jdo/tck/transactions/Rollback.java  |  254 +-
 .../jdo/tck/transactions/SetIsolationLevel.java    |  263 +-
 .../tck/transactions/SetNontransactionalRead.java  |  254 +-
 ...ntransactionalReadCalledDuringTxCompletion.java |  215 +-
 ...etNontransactionalReadTrueWhenNotSupported.java |  116 +-
 ...transactionalWriteCalledDuringTxCompletion.java |  217 +-
 .../apache/jdo/tck/transactions/SetOptimistic.java |  176 +-
 .../SetOptimisticCalledDuringTxCompletion.java     |  211 +-
 .../SetOptimisticDuringTransaction.java            |  143 +-
 .../SetOptimisticTrueWhenNotSupported.java         |  111 +-
 .../jdo/tck/transactions/SetRetainValues.java      |  111 +-
 .../SetRetainValuesCalledDuringTxCompletion.java   |  209 +-
 .../SetRetainValuesTrueWhenNotSupported.java       |  116 +-
 .../jdo/tck/transactions/SetSynchronization.java   |  180 +-
 .../tck/transactions/SetSynchronizationToNull.java |  150 +-
 .../WhenNontransactionalReadIsFalse.java           |  218 +-
 .../apache/jdo/tck/util/BatchResultPrinter.java    |  421 +-
 .../org/apache/jdo/tck/util/BatchTestRunner.java   |  569 +-
 .../org/apache/jdo/tck/util/ClassGenerator.java    | 1380 +++--
 .../org/apache/jdo/tck/util/ConsoleFileOutput.java |  108 +-
 .../org/apache/jdo/tck/util/ConversionHelper.java  |  251 +-
 .../java/org/apache/jdo/tck/util/DeepEquality.java |   95 +-
 .../org/apache/jdo/tck/util/EqualityHelper.java    | 1680 +++---
 .../apache/jdo/tck/util/GetSupportedOptions.java   |   46 +-
 .../jdo/tck/util/IntegerToStringConverter.java     |  110 +-
 .../apache/jdo/tck/util/JDOCustomDateEditor.java   |   13 +-
 .../org/apache/jdo/tck/util/JDOJdk14Logger.java    |  145 +-
 .../jdo/tck/util/PointToStringConverter.java       |  141 +-
 .../org/apache/jdo/tck/util/ResultSummary.java     |  350 +-
 .../java/org/apache/jdo/tck/util/RogueBarrier.java |  269 +-
 .../org/apache/jdo/tck/util/SystemCfgSummary.java  |  135 +-
 .../org/apache/jdo/tck/util/TCKFileHandler.java    |  558 +-
 .../jdo/tck/util/ThreadExceptionHandler.java       |  101 +-
 .../apache/jdo/tck/util/signature/Formatter.java   |  293 +-
 .../jdo/tck/util/signature/SignatureVerifier.java  | 3432 ++++++-----
 .../apache/jdo/tck/util/signature/TypeHelper.java  |  447 +-
 1114 files changed, 170926 insertions(+), 174803 deletions(-)

diff --git a/api/src/main/java/javax/jdo/AttributeConverter.java b/api/src/main/java/javax/jdo/AttributeConverter.java
index ea94c3a1..61e3dcfe 100644
--- a/api/src/main/java/javax/jdo/AttributeConverter.java
+++ b/api/src/main/java/javax/jdo/AttributeConverter.java
@@ -17,50 +17,44 @@
 package javax.jdo;
 
 /**
- * Converts persistent attribute values (fields or properties) to different values stored in the
- * underlying datastore and vice versa. [TBD:
- *
+ * Converts persistent attribute values (fields or properties) to different
+ * values stored in the underlying datastore and vice versa.
+ * [TBD: 
  * <ul>
- *   <li>should we require that converters need access to any other information, e.g metadata?
- *       passed into the constructor
- *   <li>otherwise we assume there is a default constructor, and is instantiable using the current
- *       JDO class loader(s)
- * </ul>
- *
- * ]
- *
+ * <li>should we require that converters need access to any other information, e.g metadata? passed into the constructor</li>
+ * <li>otherwise we assume there is a default constructor, and is instantiable using the current JDO class loader(s)</li>
+ * </ul>]
+ * 
  * @param <A> The type of persistent attribute (field or property).
  * @param <D> The type to be used in the datastore.
  */
 public interface AttributeConverter<A, D> {
 
-  /**
-   * Converts the given persistent attribute value to its representation in the datastore.
-   *
-   * @param attributeValue Value of attribute
-   * @return Value in datastore
-   */
-  D convertToDatastore(A attributeValue);
+    /**
+     * Converts the given persistent attribute value to its representation in the datastore.
+     * @param attributeValue Value of attribute
+     * @return Value in datastore
+     */
+    D convertToDatastore(A attributeValue);
 
-  /**
-   * Converts the given datastore value to its representation as a persistent attribute.
-   *
-   * @param datastoreValue Value in datastore
-   * @return Value in attribute
-   */
-  A convertToAttribute(D datastoreValue);
+    /**
+     * Converts the given datastore value to its representation as a persistent attribute.
+     * @param datastoreValue Value in datastore
+     * @return Value in attribute
+     */
+    A convertToAttribute(D datastoreValue);
 
-  /**
-   * Dummy converter to represent "use the implementation default for this type" when using
-   * annotations.
-   */
-  public static class UseDefault implements AttributeConverter<Object, Object> {
-    public Object convertToDatastore(Object attributeValue) {
-      throw new JDOUserException("This converter is not usable.");
-    }
+    /**
+     * Dummy converter to represent "use the implementation default for this type" when using annotations.
+     */
+	public static class UseDefault implements AttributeConverter<Object, Object>
+	{
+		public Object convertToDatastore(Object attributeValue) {
+			throw new JDOUserException("This converter is not usable.");
+		}
 
-    public Object convertToAttribute(Object datastoreValue) {
-      throw new JDOUserException("This converter is not usable.");
-    }
-  }
+		public Object convertToAttribute(Object datastoreValue) {
+			throw new JDOUserException("This converter is not usable.");
+		}
+	}
 }
diff --git a/api/src/main/java/javax/jdo/Constants.java b/api/src/main/java/javax/jdo/Constants.java
index 8f4a69ce..18169f3b 100644
--- a/api/src/main/java/javax/jdo/Constants.java
+++ b/api/src/main/java/javax/jdo/Constants.java
@@ -25,941 +25,1072 @@ package javax.jdo;
  */
 public interface Constants {
 
-  /**
-   * The JDO standard package name.
-   *
-   * @since 3.1
-   */
-  static String JAVAX_JDO = "javax.jdo";
-
-  /** The JDO standard property string and option string prefix. */
-  static String JAVAX_JDO_PREFIX = JAVAX_JDO + ".";
-
-  /**
-   * The name of the standard service configuration resource text file containing the name of an
-   * implementation of {@link PersistenceManagerFactory}. Constant value is <code>
-   * META-INF/services/javax.jdo.PersistenceManagerFactory</code>.
-   *
-   * @since 2.1
-   */
-  static String SERVICE_LOOKUP_PMF_RESOURCE_NAME =
-      "META-INF/services/javax.jdo.PersistenceManagerFactory";
-
-  /**
-   * The name of the standard service configuration resource text file containing the name of an
-   * enhancer of {@link JDOEnhancer}. Constant value is <code>
-   * META-INF/services/javax.jdo.JDOEnhancer</code>.
-   *
-   * @since 3.0
-   */
-  static String SERVICE_LOOKUP_ENHANCER_RESOURCE_NAME = "META-INF/services/javax.jdo.JDOEnhancer";
-
-  /**
-   * The name of the standard JDO configuration resource file(s). Constant value is <code>
-   * META-INF/jdoconfig.xml</code>.
-   *
-   * @since 2.1
-   */
-  static String JDOCONFIG_RESOURCE_NAME = "META-INF/jdoconfig.xml";
-
-  /**
-   * The standard JDO configuration schema namespace. Constant value is <code>
-   * https://db.apache.org/jdo/xmlns/jdoconfig</code>.
-   *
-   * @since 2.1
-   */
-  static String JDOCONFIG_XSD_NS = "https://db.apache.org/jdo/xmlns/jdoconfig";
-
-  /**
-   * The standard JDO metadata schema namespace. Constant value is <code>
-   * https://db.apache.org/jdo/xmlns/jdo</code>.
-   *
-   * @since 2.1
-   */
-  static String JDO_XSD_NS = "https://db.apache.org/jdo/xmlns/jdo";
-
-  /**
-   * The standard JDO object-repository mapping schema namespace. Constant value is <code>
-   * https://db.apache.org/jdo/xmlns/orm</code>.
-   *
-   * @since 2.1
-   */
-  static String ORM_XSD_NS = "https://db.apache.org/jdo/xmlns/orm";
-
-  /**
-   * The standard JDO query schema namespace. Constant value is <code>
-   * https://db.apache.org/jdo/xmlns/jdoquery</code>.
-   *
-   * @since 2.1
-   */
-  static String JDOQUERY_XSD_NS = "https://db.apache.org/jdo/xmlns/jdoquery";
-
-  /**
-   * The name of the persistence manager factory element in the JDO configuration file. Constant
-   * value is <code>persistence-manager-factory</code>.
-   *
-   * @since 2.1
-   */
-  static String ELEMENT_PERSISTENCE_MANAGER_FACTORY = "persistence-manager-factory";
-
-  /**
-   * The name of the persistence manager factory element's "class" attribute.
-   *
-   * @since 2.1
-   */
-  static String PMF_ATTRIBUTE_CLASS = "class";
-  /**
-   * The name of the persistence manager factory element's "name" attribute.
-   *
-   * @since 2.1
-   */
-  static String PMF_ATTRIBUTE_NAME = "name";
-  /**
-   * The name of the persistence manager factory element's "persistence-unit-name" attribute.
-   *
-   * @since 2.1
-   */
-  static String PMF_ATTRIBUTE_PERSISTENCE_UNIT_NAME = "persistence-unit-name";
-  /**
-   * The name of the persistence manager factory element's "optimistic" attribute.
-   *
-   * @since 2.1
-   */
-  static String PMF_ATTRIBUTE_OPTIMISTIC = "optimistic";
-  /**
-   * The name of the persistence manager factory element's "readonly" attribute.
-   *
-   * @since 2.2
-   */
-  static String PMF_ATTRIBUTE_READONLY = "readonly";
-  /**
-   * The name of the persistence manager factory element's "retain-values" attribute.
-   *
-   * @since 2.1
-   */
-  static String PMF_ATTRIBUTE_RETAIN_VALUES = "retain-values";
-  /**
-   * The name of the persistence manager factory element's "restore-values" attribute.
-   *
-   * @since 2.1
-   */
-  static String PMF_ATTRIBUTE_RESTORE_VALUES = "restore-values";
-  /**
-   * The name of the persistence manager factory element's "ignore-cache" attribute.
-   *
-   * @since 2.1
-   */
-  static String PMF_ATTRIBUTE_IGNORE_CACHE = "ignore-cache";
-  /**
-   * The name of the persistence manager factory element's "nontransactional-read" attribute.
-   *
-   * @since 2.1
-   */
-  static String PMF_ATTRIBUTE_NONTRANSACTIONAL_READ = "nontransactional-read";
-  /**
-   * The name of the persistence manager factory element's "nontransactional-write" attribute.
-   *
-   * @since 2.1
-   */
-  static String PMF_ATTRIBUTE_NONTRANSACTIONAL_WRITE = "nontransactional-write";
-  /**
-   * The name of the persistence manager factory element's "multithreaded" attribute.
-   *
-   * @since 2.1
-   */
-  static String PMF_ATTRIBUTE_MULTITHREADED = "multithreaded";
-  /**
-   * The name of the persistence manager factory element's "connection-driver-name" attribute.
-   *
-   * @since 2.1
-   */
-  static String PMF_ATTRIBUTE_CONNECTION_DRIVER_NAME = "connection-driver-name";
-  /**
-   * The name of the persistence manager factory element's "connection-user-name" attribute.
-   *
-   * @since 2.1
-   */
-  static String PMF_ATTRIBUTE_CONNECTION_USER_NAME = "connection-user-name";
-  /**
-   * The name of the persistence manager factory element's "connection-password" attribute.
-   *
-   * @since 2.1
-   */
-  static String PMF_ATTRIBUTE_CONNECTION_PASSWORD = "connection-password";
-  /**
-   * The name of the persistence manager factory element's "connection-url" attribute.
-   *
-   * @since 2.1
-   */
-  static String PMF_ATTRIBUTE_CONNECTION_URL = "connection-url";
-  /**
-   * The name of the persistence manager factory element's "connection-factory-name" attribute.
-   *
-   * @since 2.1
-   */
-  static String PMF_ATTRIBUTE_CONNECTION_FACTORY_NAME = "connection-factory-name";
-  /**
-   * The name of the persistence manager factory element's "connection-factory2-name" attribute.
-   *
-   * @since 2.1
-   */
-  static String PMF_ATTRIBUTE_CONNECTION_FACTORY2_NAME = "connection-factory2-name";
-  /**
-   * The name of the persistence manager factory element's "detach-all-on-commit" attribute.
-   *
-   * @since 2.1
-   */
-  static String PMF_ATTRIBUTE_DETACH_ALL_ON_COMMIT = "detach-all-on-commit";
-  /**
-   * The name of the persistence manager factory element's "copy-on-attach" attribute.
-   *
-   * @since 2.1
-   */
-  static String PMF_ATTRIBUTE_COPY_ON_ATTACH = "copy-on-attach";
-  /**
-   * The name of the persistence manager factory element's "mapping" attribute.
-   *
-   * @since 2.1
-   */
-  static String PMF_ATTRIBUTE_MAPPING = "mapping";
-  /**
-   * The name of the persistence manager factory element's "server-time-zone-id" attribute.
-   *
-   * @since 2.1
-   */
-  static String PMF_ATTRIBUTE_SERVER_TIME_ZONE_ID = "server-time-zone-id";
-  /**
-   * The name of the persistence manager factory element's "datastore-read-timeout-millis"
-   * attribute.
-   *
-   * @since 3.0
-   */
-  static String PMF_ATTRIBUTE_DATASTORE_READ_TIMEOUT_MILLIS = "datastore-read-timeout-millis";
-  /**
-   * The name of the persistence manager factory element's "datastore-write-timeout-millis"
-   * attribute.
-   *
-   * @since 3.0
-   */
-  static String PMF_ATTRIBUTE_DATASTORE_WRITE_TIMEOUT_MILLIS = "datastore-write-timeout-millis";
-  /**
-   * The name of the persistence manager factory property elements in the JDO configuration file.
-   */
-  static String ELEMENT_PROPERTY = "property";
-  /** The name of the persistence manager factory property element's "name" attribute. */
-  static String PROPERTY_ATTRIBUTE_NAME = "name";
-  /** The name of the persistence manager factory property element's "value" attribute. */
-  static String PROPERTY_ATTRIBUTE_VALUE = "value";
-
-  /** The name of the instance lifecycle listener element in the JDO configuration file. */
-  static String ELEMENT_INSTANCE_LIFECYCLE_LISTENER = "instance-lifecycle-listener";
-
-  /** The name of the instance lifecycle listener element's "listener" attribute. */
-  static String INSTANCE_LIFECYCLE_LISTENER_ATTRIBUTE_LISTENER = "listener";
-  /** The name of the instance lifecycle listener element's "classes" attribute. */
-  static String INSTANCE_LIFECYCLE_LISTENER_ATTRIBUTE_CLASSES = "classes";
-
-  /**
-   * "javax.jdo.option.TransientTransactional"
-   *
-   * @see PersistenceManagerFactory#supportedOptions()
-   * @since 2.1
-   */
-  static String OPTION_TRANSACTIONAL_TRANSIENT = "javax.jdo.option.TransientTransactional";
-  /**
-   * "javax.jdo.option.NontransactionalRead"
-   *
-   * @see PersistenceManagerFactory#supportedOptions()
-   * @since 2.1
-   */
-  static String OPTION_NONTRANSACTIONAL_READ = "javax.jdo.option.NontransactionalRead";
-  /**
-   * "javax.jdo.option.NontransactionalWrite"
-   *
-   * @see PersistenceManagerFactory#supportedOptions()
-   * @since 2.1
-   */
-  static String OPTION_NONTRANSACTIONAL_WRITE = "javax.jdo.option.NontransactionalWrite";
-  /**
-   * "javax.jdo.option.RetainValues"
-   *
-   * @see PersistenceManagerFactory#supportedOptions()
-   * @since 2.1
-   */
-  static String OPTION_RETAIN_VALUES = "javax.jdo.option.RetainValues";
-  /**
-   * "javax.jdo.option.Optimistic"
-   *
-   * @see PersistenceManagerFactory#supportedOptions()
-   * @since 2.1
-   */
-  static String OPTION_OPTIMISTIC = "javax.jdo.option.Optimistic";
-  /**
-   * "javax.jdo.option.ApplicationIdentity"
-   *
-   * @see PersistenceManagerFactory#supportedOptions()
-   * @since 2.1
-   */
-  static String OPTION_APPLICATION_IDENTITY = "javax.jdo.option.ApplicationIdentity";
-  /**
-   * "javax.jdo.option.DatastoreIdentity"
-   *
-   * @see PersistenceManagerFactory#supportedOptions()
-   * @since 2.1
-   */
-  static String OPTION_DATASTORE_IDENTITY = "javax.jdo.option.DatastoreIdentity";
-  /**
-   * "javax.jdo.option.NonDurableIdentity"
-   *
-   * @see PersistenceManagerFactory#supportedOptions()
-   * @since 2.1
-   */
-  static String OPTION_NONDURABLE_IDENTITY = "javax.jdo.option.NonDurableIdentity";
-  /**
-   * "javax.jdo.option.ArrayList"
-   *
-   * @see PersistenceManagerFactory#supportedOptions()
-   * @since 2.1
-   */
-  static String OPTION_ARRAYLIST = "javax.jdo.option.ArrayList";
-  /**
-   * "javax.jdo.option.LinkedList"
-   *
-   * @see PersistenceManagerFactory#supportedOptions()
-   * @since 2.1
-   */
-  static String OPTION_LINKEDLIST = "javax.jdo.option.LinkedList";
-  /**
-   * "javax.jdo.option.TreeMap"
-   *
-   * @see PersistenceManagerFactory#supportedOptions()
-   * @since 2.1
-   */
-  static String OPTION_TREEMAP = "javax.jdo.option.TreeMap";
-  /**
-   * "javax.jdo.option.TreeSet"
-   *
-   * @see PersistenceManagerFactory#supportedOptions()
-   * @since 2.1
-   */
-  static String OPTION_TREESET = "javax.jdo.option.TreeSet";
-  /**
-   * "javax.jdo.option.Vector"
-   *
-   * @see PersistenceManagerFactory#supportedOptions()
-   * @since 2.1
-   */
-  static String OPTION_VECTOR = "javax.jdo.option.Vector";
-  /**
-   * "javax.jdo.option.Array"
-   *
-   * @see PersistenceManagerFactory#supportedOptions()
-   * @since 2.1
-   */
-  static String OPTION_ARRAY = "javax.jdo.option.Array";
-  /**
-   * "javax.jdo.option.NullCollection"
-   *
-   * @see PersistenceManagerFactory#supportedOptions()
-   * @since 2.1
-   */
-  static String OPTION_NULL_COLLECTION = "javax.jdo.option.NullCollection";
-  /**
-   * "javax.jdo.option.ChangeApplicationIdentity"
-   *
-   * @see PersistenceManagerFactory#supportedOptions()
-   * @since 2.1
-   */
-  static String OPTION_CHANGE_APPLICATION_IDENTITY = "javax.jdo.option.ChangeApplicationIdentity";
-  /**
-   * "javax.jdo.option.BinaryCompatibility"
-   *
-   * @see PersistenceManagerFactory#supportedOptions()
-   * @since 2.1
-   */
-  static String OPTION_BINARY_COMPATIBILITY = "javax.jdo.option.BinaryCompatibility";
-  /**
-   * "javax.jdo.option.GetDataStoreConnection"
-   *
-   * @see PersistenceManagerFactory#supportedOptions()
-   * @since 2.1
-   */
-  static String OPTION_GET_DATASTORE_CONNECTION = "javax.jdo.option.GetDataStoreConnection";
-  /**
-   * "javax.jdo.option.GetJDBCConnection"
-   *
-   * @see PersistenceManagerFactory#supportedOptions()
-   * @since 2.1
-   */
-  static String OPTION_GET_JDBC_CONNECTION = "javax.jdo.option.GetJDBCConnection";
-  /**
-   * "javax.jdo.query.SQL"
-   *
-   * @see PersistenceManagerFactory#supportedOptions()
-   * @since 2.1
-   */
-  static String OPTION_QUERY_SQL = "javax.jdo.query.SQL";
-
-  /**
-   * "javax.jdo.option.QueryCancel"
-   *
-   * @see PersistenceManagerFactory#supportedOptions()
-   * @since 3.0
-   */
-  static String OPTION_QUERY_CANCEL = "javax.jdo.option.QueryCancel";
-
-  /**
-   * "javax.jdo.query.JDOQL.BitwiseOperations"
-   *
-   * @see PersistenceManagerFactory#supportedOptions()
-   * @since 3.2
-   */
-  static String OPTION_QUERY_JDOQL_BITWISE_OPERATIONS = "javax.jdo.query.JDOQL.BitwiseOperations";
-
-  /**
-   * "javax.jdo.query.JDOQL.UnconstrainedQueryVariables"
-   *
-   * @see PersistenceManagerFactory#supportedOptions()
-   * @since 2.1
-   */
-  static String OPTION_UNCONSTRAINED_QUERY_VARIABLES =
-      "javax.jdo.query.JDOQL.UnconstrainedQueryVariables";
-
-  /**
-   * "javax.jdo.option.DatastoreTimeout"
-   *
-   * @see PersistenceManagerFactory#supportedOptions()
-   * @since 3.0
-   */
-  static String OPTION_DATASTORE_TIMEOUT = "javax.jdo.option.DatastoreTimeout";
-  /**
-   * "javax.jdo.option.version.DateTime"
-   *
-   * @see PersistenceManagerFactory#supportedOptions()
-   * @since 2.1
-   */
-  static String OPTION_VERSION_DATETIME = "javax.jdo.option.version.DateTime";
-  /**
-   * "javax.jdo.option.version.StateImage"
-   *
-   * @see PersistenceManagerFactory#supportedOptions()
-   * @since 2.1
-   */
-  static String OPTION_VERSION_STATE_IMAGE = "javax.jdo.option.version.StateImage";
-  /**
-   * "javax.jdo.option.PreDirtyEvent"
-   *
-   * @see PersistenceManagerFactory#supportedOptions()
-   * @since 2.1
-   */
-  static String OPTION_PREDIRTY_EVENT = "javax.jdo.option.PreDirtyEvent";
-  /**
-   * "javax.jdo.option.mapping.HeterogeneousObjectType"
-   *
-   * @see PersistenceManagerFactory#supportedOptions()
-   * @since 2.1
-   */
-  static String OPTION_MAPPING_HETEROGENEOUS_OBJECT_TYPE =
-      "javax.jdo.option.mapping.HeterogeneousObjectType";
-  /**
-   * "javax.jdo.option.mapping.HeterogeneousInterfaceType"
-   *
-   * @see PersistenceManagerFactory#supportedOptions()
-   * @since 2.1
-   */
-  static String OPTION_MAPPING_HETEROGENEOUS_INTERFACE_TYPE =
-      "javax.jdo.option.mapping.HeterogeneousInterfaceType";
-  /**
-   * "javax.jdo.option.mapping.JoinedTablePerClass"
-   *
-   * @see PersistenceManagerFactory#supportedOptions()
-   * @since 2.1
-   */
-  static String OPTION_MAPPING_JOINED_TABLE_PER_CLASS =
-      "javax.jdo.option.mapping.JoinedTablePerClass";
-  /**
-   * "javax.jdo.option.mapping.JoinedTablePerConcreteClass"
-   *
-   * @see PersistenceManagerFactory#supportedOptions()
-   * @since 2.1
-   */
-  static String OPTION_MAPPING_JOINED_TABLE_PER_CONCRETE_CLASS =
-      "javax.jdo.option.mapping.JoinedTablePerConcreteClass";
-  /**
-   * "javax.jdo.option.mapping.NonJoinedTablePerConcreteClass"
-   *
-   * @see PersistenceManagerFactory#supportedOptions()
-   * @since 2.1
-   */
-  static String OPTION_MAPPING_NON_JOINED_TABLE_PER_CONCRETE_CLASS =
-      "javax.jdo.option.mapping.NonJoinedTablePerConcreteClass";
-  /**
-   * "javax.jdo.option.mapping.RelationSubclassTable"
-   *
-   * @see PersistenceManagerFactory#supportedOptions()
-   * @since 2.1
-   */
-  static String OPTION_MAPPING_RELATION_SUBCLASS_TABLE =
-      "javax.jdo.option.mapping.RelationSubclassTable";
-
-  /**
-   * "javax.jdo.PersistenceManagerFactoryClass"
-   *
-   * @see JDOHelper#getPersistenceManagerFactory(java.util.Map)
-   * @since 2.1
-   */
-  static String PROPERTY_PERSISTENCE_MANAGER_FACTORY_CLASS =
-      "javax.jdo.PersistenceManagerFactoryClass";
-
-  /**
-   * "VendorName"
-   *
-   * @see JDOEnhancer#getProperties()
-   * @since 3.0
-   */
-  public static final String PROPERTY_ENHANCER_VENDOR_NAME = "VendorName";
-
-  /**
-   * "VersionNumber"
-   *
-   * @see JDOEnhancer#getProperties()
-   * @since 3.0
-   */
-  public static final String PROPERTY_ENHANCER_VERSION_NUMBER = "VersionNumber";
-
-  /**
-   * Exit value for no enhancer found
-   *
-   * @since 3.0
-   */
-  public static final int ENHANCER_NO_JDO_ENHANCER_FOUND = 2;
-
-  /**
-   * Exit value for usage error
-   *
-   * @since 3.0
-   */
-  public static final int ENHANCER_USAGE_ERROR = 3;
-
-  /**
-   * Exit value for an exception from the JDOEnhancer
-   *
-   * @since 3.0
-   */
-  public static final int ENHANCER_EXCEPTION = 1;
-
-  /**
-   * "javax.jdo.option.Optimistic"
-   *
-   * @see PersistenceManagerFactory#getOptimistic()
-   * @since 2.1
-   */
-  static String PROPERTY_OPTIMISTIC = "javax.jdo.option.Optimistic";
-  /**
-   * "javax.jdo.option.ReadOnly"
-   *
-   * @see PersistenceManagerFactory#getReadOnly()
-   * @since 2.2
-   */
-  static String PROPERTY_READONLY = "javax.jdo.option.ReadOnly";
-  /**
-   * "javax.jdo.option.RetainValues"
-   *
-   * @see PersistenceManagerFactory#getRetainValues()
-   * @since 2.1
-   */
-  static String PROPERTY_RETAIN_VALUES = "javax.jdo.option.RetainValues";
-  /**
-   * "javax.jdo.option.RestoreValues"
-   *
-   * @see PersistenceManagerFactory#getRestoreValues()
-   * @since 2.1
-   */
-  static String PROPERTY_RESTORE_VALUES = "javax.jdo.option.RestoreValues";
-  /**
-   * "javax.jdo.option.IgnoreCache"
-   *
-   * @see PersistenceManagerFactory#getIgnoreCache()
-   * @since 2.1
-   */
-  static String PROPERTY_IGNORE_CACHE = "javax.jdo.option.IgnoreCache";
-  /**
-   * "javax.jdo.option.NontransactionalRead"
-   *
-   * @see PersistenceManagerFactory#getNontransactionalRead()
-   * @since 2.1
-   */
-  static String PROPERTY_NONTRANSACTIONAL_READ = "javax.jdo.option.NontransactionalRead";
-  /**
-   * "javax.jdo.option.NontransactionalWrite"
-   *
-   * @see PersistenceManagerFactory#getNontransactionalWrite()
-   * @since 2.1
-   */
-  static String PROPERTY_NONTRANSACTIONAL_WRITE = "javax.jdo.option.NontransactionalWrite";
-  /**
-   * "javax.jdo.option.Multithreaded"
-   *
-   * @see PersistenceManagerFactory#getMultithreaded()
-   * @since 2.1
-   */
-  static String PROPERTY_MULTITHREADED = "javax.jdo.option.Multithreaded";
-  /**
-   * "javax.jdo.option.TransactionIsolationLevel"
-   *
-   * @since 2.2
-   */
-  static String PROPERTY_TRANSACTION_ISOLATION_LEVEL = "javax.jdo.option.TransactionIsolationLevel";
-  /**
-   * "javax.jdo.option.TransactionIsolationLevel.read-uncommitted"
-   *
-   * @see PersistenceManagerFactory#supportedOptions()
-   * @since 2.2
-   */
-  static String PROPERTY_TRANSACTION_ISOLATION_LEVEL_READ_UNCOMMITTED =
-      "javax.jdo.option.TransactionIsolationLevel.read-uncommitted";
-  /**
-   * "javax.jdo.option.TransactionIsolationLevel.read-committed"
-   *
-   * @see PersistenceManagerFactory#supportedOptions()
-   * @since 2.2
-   */
-  static String PROPERTY_TRANSACTION_ISOLATION_LEVEL_READ_COMMITTED =
-      "javax.jdo.option.TransactionIsolationLevel.read-committed";
-  /**
-   * "javax.jdo.option.TransactionIsolationLevel.repeatable-read"
-   *
-   * @see PersistenceManagerFactory#supportedOptions()
-   * @since 2.2
-   */
-  static String PROPERTY_TRANSACTION_ISOLATION_LEVEL_REPEATABLE_READ =
-      "javax.jdo.option.TransactionIsolationLevel.repeatable-read";
-  /**
-   * "javax.jdo.option.TransactionIsolationLevel.snapshot"
-   *
-   * @see PersistenceManagerFactory#supportedOptions()
-   * @since 2.2
-   */
-  static String PROPERTY_TRANSACTION_ISOLATION_LEVEL_SNAPSHOT =
-      "javax.jdo.option.TransactionIsolationLevel.snapshot";
-  /**
-   * "javax.jdo.option.TransactionIsolationLevel.serializable"
-   *
-   * @see PersistenceManagerFactory#supportedOptions()
-   * @since 2.2
-   */
-  static String PROPERTY_TRANSACTION_ISOLATION_LEVEL_SERIALIZABLE =
-      "javax.jdo.option.TransactionIsolationLevel.serializable";
-  /**
-   * "javax.jdo.option.DetachAllOnCommit"
-   *
-   * @see PersistenceManagerFactory#getDetachAllOnCommit()
-   * @since 2.1
-   */
-  static String PROPERTY_DETACH_ALL_ON_COMMIT = "javax.jdo.option.DetachAllOnCommit";
-  /**
-   * "javax.jdo.option.CopyOnAttach"
-   *
-   * @see PersistenceManagerFactory#getCopyOnAttach()
-   * @since 2.1
-   */
-  static String PROPERTY_COPY_ON_ATTACH = "javax.jdo.option.CopyOnAttach";
-  /**
-   * "javax.jdo.option.ConnectionDriverName" This property might be ignored by the JDO
-   * implementation because the JDBC DriverManager handles the driver name.
-   *
-   * @see PersistenceManagerFactory#getConnectionDriverName()
-   * @since 2.1
-   */
-  static String PROPERTY_CONNECTION_DRIVER_NAME = "javax.jdo.option.ConnectionDriverName";
-  /**
-   * "javax.jdo.option.ConnectionUserName"
-   *
-   * @see PersistenceManagerFactory#getConnectionUserName()
-   * @since 2.1
-   */
-  static String PROPERTY_CONNECTION_USER_NAME = "javax.jdo.option.ConnectionUserName";
-  /**
-   * "javax.jdo.option.Password"
-   *
-   * @since 2.1
-   */
-  static String PROPERTY_CONNECTION_PASSWORD = "javax.jdo.option.ConnectionPassword";
-  /**
-   * "javax.jdo.option.ConnectionURL"
-   *
-   * @see PersistenceManagerFactory#getConnectionURL()
-   * @since 2.1
-   */
-  static String PROPERTY_CONNECTION_URL = "javax.jdo.option.ConnectionURL";
-  /**
-   * "javax.jdo.option.ConnectionFactoryName"
-   *
-   * @see PersistenceManagerFactory#getConnectionFactoryName()
-   * @since 2.1
-   */
-  static String PROPERTY_CONNECTION_FACTORY_NAME = "javax.jdo.option.ConnectionFactoryName";
-  /**
-   * "javax.jdo.option.ConnectionFactory2Name"
-   *
-   * @see PersistenceManagerFactory#getConnectionFactory2Name()
-   * @since 2.1
-   */
-  static String PROPERTY_CONNECTION_FACTORY2_NAME = "javax.jdo.option.ConnectionFactory2Name";
-  /**
-   * "javax.jdo.option.Mapping"
-   *
-   * @see PersistenceManagerFactory#getMapping()
-   * @since 2.1
-   */
-  static String PROPERTY_MAPPING = "javax.jdo.option.Mapping";
-  /**
-   * "javax.jdo.option.PersistenceUnitName"
-   *
-   * @see PersistenceManagerFactory#getPersistenceUnitName()
-   * @since 2.1
-   */
-  static String PROPERTY_PERSISTENCE_UNIT_NAME = "javax.jdo.option.PersistenceUnitName";
-  /**
-   * "javax.jdo.option.Name"
-   *
-   * @see PersistenceManagerFactory#getName()
-   * @since 2.1
-   */
-  static String PROPERTY_NAME = "javax.jdo.option.Name";
-
-  /**
-   * "javax.jdo.spi.PropertiesFileName"
-   *
-   * @since 3.2
-   */
-  static String PROPERTY_SPI_PROPERTIES_FILE_NAME = "javax.jdo.spi.PropertiesFileName";
-
-  /**
-   * "javax.jdo.option.spi.ResourceName"
-   *
-   * @since 2.1
-   */
-  static String PROPERTY_SPI_RESOURCE_NAME = "javax.jdo.option.spi.ResourceName";
-
-  /**
-   * "javax.jdo.listener.InstanceLifecycleListener"
-   *
-   * @see
-   *     PersistenceManagerFactory#addInstanceLifecycleListener(javax.jdo.listener.InstanceLifecycleListener,Class[])
-   * @see
-   *     PersistenceManagerFactory#removeInstanceLifecycleListener(javax.jdo.listener.InstanceLifecycleListener)
-   */
-  static String PROPERTY_INSTANCE_LIFECYCLE_LISTENER =
-      "javax.jdo.listener.InstanceLifecycleListener";
-
-  /**
-   * Prefix used to configure {@link javax.jdo.listener.InstanceLifecycleListener} instances
-   * externally. To configure an <code>InstanceLifecycleListener</code> via properties, create a
-   * property name with the prefix of this constant and append the fully qualified listener class
-   * name, then set its value to the comma- or whitespace-delimited list of persistence-capable
-   * classes whose instances are to be observed. Use no value to indicate that instances of all
-   * persistence-capable classes are to be observed.<br>
-   * For example,<br>
-   * <code>
-   * javax.jdo.option.InstanceLifecycleListener.com.example.MyListener=com.example.Foo,com.example.Bar
-   * </code><br>
-   * is equivalent to calling<br>
-   * <code>
-   * pmf.addInstanceLifecycleListener(new com.example.MyListener(), new Class[] {com.example.Foo.class, com.example.Bar.class});
-   * </code><br>
-   * where <code>pmf</code> is an instance of type <code>PersistenceManagerFactory</code>.
-   *
-   * @see
-   *     javax.jdo.PersistenceManagerFactory#addInstanceLifecycleListener(javax.jdo.listener.InstanceLifecycleListener,Class[])
-   * @since 2.1
-   */
-  static String PROPERTY_PREFIX_INSTANCE_LIFECYCLE_LISTENER =
-      PROPERTY_INSTANCE_LIFECYCLE_LISTENER + ".";
-
-  /**
-   * Mapping "javax.jdo.mapping.Catalog"
-   *
-   * @since 2.1
-   */
-  static String PROPERTY_MAPPING_CATALOG = "javax.jdo.mapping.Catalog";
-  /**
-   * Mapping "javax.jdo.mapping.Schema"
-   *
-   * @since 2.1
-   */
-  static String PROPERTY_MAPPING_SCHEMA = "javax.jdo.mapping.Schema";
-
-  /**
-   * Specified value "javax.jdo.option.ServerTimeZoneID"
-   *
-   * @since 2.1
-   */
-  static String PROPERTY_SERVER_TIME_ZONE_ID = "javax.jdo.option.ServerTimeZoneID";
-
-  /**
-   * Specified value "javax.jdo.option.DatastoreReadTimeoutMillis"
-   *
-   * @since 3.0
-   */
-  static String PROPERTY_DATASTORE_READ_TIMEOUT_MILLIS =
-      "javax.jdo.option.DatastoreReadTimeoutMillis";
-
-  /**
-   * Specified value "javax.jdo.option.DatastoreWriteTimeoutMillis"
-   *
-   * @since 3.0
-   */
-  static String PROPERTY_DATASTORE_WRITE_TIMEOUT_MILLIS =
-      "javax.jdo.option.DatastoreWriteTimeoutMillis";
-
-  /**
-   * Nonconfigurable property constant "VendorName"
-   *
-   * @see PersistenceManagerFactory#getProperties()
-   * @since 2.1
-   */
-  static String NONCONFIGURABLE_PROPERTY_VENDOR_NAME = "VendorName";
-
-  /**
-   * Nonconfigurable property constant "VersionNumber"
-   *
-   * @see PersistenceManagerFactory#getProperties()
-   * @since 2.1
-   */
-  static String NONCONFIGURABLE_PROPERTY_VERSION_NUMBER = "VersionNumber";
-
-  /**
-   * Specified value "javax.jdo.option.TransactionType"
-   *
-   * @since 2.1
-   */
-  static String PROPERTY_TRANSACTION_TYPE = "javax.jdo.option.TransactionType";
-
-  /**
-   * The value for TransactionType to specify that transactions are managed by the Java Transactions
-   * API, as documented in JSR-220.
-   *
-   * @since 2.1
-   */
-  static String JTA = "JTA";
-
-  /**
-   * The value for TransactionType to specify that transactions are managed by the
-   * javax.jdo.Transaction instance, similar to the usage as documented in JSR-220.
-   *
-   * @since 2.1
-   */
-  static String RESOURCE_LOCAL = "RESOURCE_LOCAL";
-
-  /**
-   * The name of the resource for the DTD of the standard JDO configuration file.
-   *
-   * @since 2.1
-   */
-  static String JDOCONFIG_DTD_RESOURCE = "javax/jdo/jdoconfig_3_0.dtd";
-
-  /**
-   * The name of the resource for the XML schema of the standard JDO configuration file.
-   *
-   * @since 2.1
-   */
-  static String JDOCONFIG_XSD_RESOURCE = "javax/jdo/jdoconfig_3_0.xsd";
-
-  /**
-   * The name of the resource for the DTD of the standard JDO metadata file.
-   *
-   * @since 2.1
-   */
-  static String JDO_DTD_RESOURCE = "javax/jdo/jdo_3_0.dtd";
-
-  /**
-   * The name of the resource for the XML schema of the standard JDO metadata file.
-   *
-   * @since 2.1
-   */
-  static String JDO_XSD_RESOURCE = "javax/jdo/jdo_3_0.xsd";
-
-  /**
-   * The name of the resource for the DTD of the standard JDO object-relational mapping metadata
-   * file.
-   *
-   * @since 2.1
-   */
-  static String ORM_DTD_RESOURCE = "javax/jdo/orm_3_0.dtd";
-
-  /**
-   * The name of the resource for the XML schema of the standard JDO object-relational mapping
-   * metadata file.
-   *
-   * @since 2.1
-   */
-  static String ORM_XSD_RESOURCE = "javax/jdo/orm_3_0.xsd";
-
-  /**
-   * The name of the resource for the DTD of the standard JDO query metadata file.
-   *
-   * @since 2.1
-   */
-  static String JDOQUERY_DTD_RESOURCE = "javax/jdo/jdoquery_3_0.dtd";
-
-  /**
-   * The name of the resource for the XML schema of the standard JDO query metadata file.
-   *
-   * @since 2.1
-   */
-  static String JDOQUERY_XSD_RESOURCE = "javax/jdo/jdoquery_3_0.xsd";
-
-  /**
-   * The name of the anonymous PersistenceManagerFactory, which is the empty string.
-   *
-   * @since 2.1
-   */
-  static String ANONYMOUS_PERSISTENCE_MANAGER_FACTORY_NAME = "";
-
-  /**
-   * Transaction isolation level representing the ability to read uncommitted data.
-   *
-   * @see PersistenceManagerFactory#getTransactionIsolationLevel()
-   * @see Transaction#getIsolationLevel()
-   * @since 2.2
-   */
-  public static final String TX_READ_UNCOMMITTED = "read-uncommitted";
-
-  /**
-   * Transaction isolation level representing the requirement to read committed data only.
-   *
-   * @see PersistenceManagerFactory#getTransactionIsolationLevel()
-   * @see Transaction#getIsolationLevel()
-   * @since 2.2
-   */
-  public static final String TX_READ_COMMITTED = "read-committed";
-
-  /**
-   * Transaction isolation level representing the requirement to read the same data in the same
-   * transaction.
-   *
-   * @see PersistenceManagerFactory#getTransactionIsolationLevel()
-   * @see Transaction#getIsolationLevel()
-   * @since 2.2
-   */
-  public static final String TX_REPEATABLE_READ = "repeatable-read";
-
-  /**
-   * Transaction isolation level representing the requirement to keep a snapshot for reading data.
-   *
-   * @see PersistenceManagerFactory#getTransactionIsolationLevel()
-   * @see Transaction#getIsolationLevel()
-   * @since 2.2
-   */
-  public static final String TX_SNAPSHOT = "snapshot";
-
-  /**
-   * Transaction isolation level representing the requirement to serialize transactions.
-   *
-   * @see PersistenceManagerFactory#getTransactionIsolationLevel()
-   * @see Transaction#getIsolationLevel()
-   * @since 2.2
-   */
-  public static final String TX_SERIALIZABLE = "serializable";
+    /**
+     * The JDO standard package name.
+     * @since 3.1
+     */
+    static String JAVAX_JDO = "javax.jdo";
+
+    /**
+     * The JDO standard property string and option string prefix.
+     */
+    static String JAVAX_JDO_PREFIX = JAVAX_JDO + ".";
+
+    /**
+     * The name of the standard service configuration resource text file containing
+     * the name of an implementation of {@link PersistenceManagerFactory}.
+     * Constant value is <code>META-INF/services/javax.jdo.PersistenceManagerFactory</code>.
+     *
+     * @since 2.1
+     */
+    static String SERVICE_LOOKUP_PMF_RESOURCE_NAME
+        = "META-INF/services/javax.jdo.PersistenceManagerFactory";
+
+    /**
+     * The name of the standard service configuration resource text file containing
+     * the name of an enhancer of {@link JDOEnhancer}.
+     * Constant value is <code>META-INF/services/javax.jdo.JDOEnhancer</code>.
+     * @since 3.0
+     */
+    static String SERVICE_LOOKUP_ENHANCER_RESOURCE_NAME
+        = "META-INF/services/javax.jdo.JDOEnhancer";
+
+    /**
+     * The name of the standard JDO configuration resource file(s).
+     * Constant value is <code>META-INF/jdoconfig.xml</code>.
+     *
+     * @since 2.1
+     */
+    static String JDOCONFIG_RESOURCE_NAME
+        = "META-INF/jdoconfig.xml";
+
+    /**
+     * The standard JDO configuration schema namespace.
+     * Constant value is <code>https://db.apache.org/jdo/xmlns/jdoconfig</code>.
+     *
+     * @since 2.1
+     */
+    static String JDOCONFIG_XSD_NS
+        = "https://db.apache.org/jdo/xmlns/jdoconfig";
+
+    /**
+     * The standard JDO metadata schema namespace.
+     * Constant value is <code>https://db.apache.org/jdo/xmlns/jdo</code>.
+     *
+     * @since 2.1
+     */
+    static String JDO_XSD_NS
+        = "https://db.apache.org/jdo/xmlns/jdo";
+
+    /**
+     * The standard JDO object-repository mapping schema namespace.
+     * Constant value is <code>https://db.apache.org/jdo/xmlns/orm</code>.
+     *
+     * @since 2.1
+     */
+    static String ORM_XSD_NS
+        = "https://db.apache.org/jdo/xmlns/orm";
+
+    /**
+     * The standard JDO query schema namespace.
+     * Constant value is <code>https://db.apache.org/jdo/xmlns/jdoquery</code>.
+     *
+     * @since 2.1
+     */
+    static String JDOQUERY_XSD_NS
+        = "https://db.apache.org/jdo/xmlns/jdoquery";
+
+    /**
+     * The name of the persistence manager factory element in the JDO
+     * configuration file.
+     * Constant value is <code>persistence-manager-factory</code>.
+     *
+     * @since 2.1
+     */
+    static String ELEMENT_PERSISTENCE_MANAGER_FACTORY
+        = "persistence-manager-factory";
+
+    /**
+     * The name of the persistence manager factory element's "class" attribute.
+     *
+     * @since 2.1
+     */
+    static String PMF_ATTRIBUTE_CLASS
+        = "class";
+    /**
+     * The name of the persistence manager factory element's
+     * "name" attribute.
+     *
+     * @since 2.1
+     */
+    static String PMF_ATTRIBUTE_NAME
+        = "name";
+    /**
+     * The name of the persistence manager factory element's
+     * "persistence-unit-name" attribute.
+     *
+     * @since 2.1
+     */
+    static String PMF_ATTRIBUTE_PERSISTENCE_UNIT_NAME
+        = "persistence-unit-name";
+    /**
+     * The name of the persistence manager factory element's "optimistic"
+     * attribute.
+     *
+     * @since 2.1
+     */
+    static String PMF_ATTRIBUTE_OPTIMISTIC
+        = "optimistic";
+    /**
+     * The name of the persistence manager factory element's "readonly"
+     * attribute.
+     *
+     * @since 2.2
+     */
+    static String PMF_ATTRIBUTE_READONLY
+        = "readonly";
+    /**
+     * The name of the persistence manager factory element's "retain-values"
+     * attribute.
+     *
+     * @since 2.1
+     */
+    static String PMF_ATTRIBUTE_RETAIN_VALUES
+        = "retain-values";
+    /**
+     * The name of the persistence manager factory element's "restore-values"
+     * attribute.
+     *
+     * @since 2.1
+     */
+    static String PMF_ATTRIBUTE_RESTORE_VALUES
+        = "restore-values";
+    /**
+     * The name of the persistence manager factory element's "ignore-cache"
+     * attribute.
+     *
+     * @since 2.1
+     */
+    static String PMF_ATTRIBUTE_IGNORE_CACHE
+        = "ignore-cache";
+    /**
+     * The name of the persistence manager factory element's
+     * "nontransactional-read" attribute.
+     *
+     * @since 2.1
+     */
+    static String PMF_ATTRIBUTE_NONTRANSACTIONAL_READ
+        = "nontransactional-read";
+    /**
+     * The name of the persistence manager factory element's
+     * "nontransactional-write" attribute.
+     *
+     * @since 2.1
+     */
+    static String PMF_ATTRIBUTE_NONTRANSACTIONAL_WRITE
+        = "nontransactional-write";
+    /**
+     * The name of the persistence manager factory element's "multithreaded"
+     * attribute.
+     *
+     * @since 2.1
+     */
+    static String PMF_ATTRIBUTE_MULTITHREADED
+        = "multithreaded";
+    /**
+     * The name of the persistence manager factory element's
+     * "connection-driver-name" attribute.
+     *
+     * @since 2.1
+     */
+    static String PMF_ATTRIBUTE_CONNECTION_DRIVER_NAME
+        = "connection-driver-name";
+    /**
+     * The name of the persistence manager factory element's
+     * "connection-user-name" attribute.
+     *
+     * @since 2.1
+     */
+    static String PMF_ATTRIBUTE_CONNECTION_USER_NAME
+        = "connection-user-name";
+    /**
+     * The name of the persistence manager factory element's
+     * "connection-password" attribute.
+     *
+     * @since 2.1
+     */
+    static String PMF_ATTRIBUTE_CONNECTION_PASSWORD
+        = "connection-password";
+    /**
+     * The name of the persistence manager factory element's "connection-url"
+     * attribute.
+     *
+     * @since 2.1
+     */
+    static String PMF_ATTRIBUTE_CONNECTION_URL
+        = "connection-url";
+    /**
+     * The name of the persistence manager factory element's
+     * "connection-factory-name" attribute.
+     *
+     * @since 2.1
+     */
+    static String PMF_ATTRIBUTE_CONNECTION_FACTORY_NAME
+        = "connection-factory-name";
+    /**
+     * The name of the persistence manager factory element's
+     * "connection-factory2-name" attribute.
+     *
+     * @since 2.1
+     */
+    static String PMF_ATTRIBUTE_CONNECTION_FACTORY2_NAME
+        = "connection-factory2-name";
+    /**
+     * The name of the persistence manager factory element's
+     * "detach-all-on-commit" attribute.
+     *
+     * @since 2.1
+     */
+    static String PMF_ATTRIBUTE_DETACH_ALL_ON_COMMIT
+        = "detach-all-on-commit";
+    /**
+     * The name of the persistence manager factory element's
+     * "copy-on-attach" attribute.
+     *
+     * @since 2.1
+     */
+    static String PMF_ATTRIBUTE_COPY_ON_ATTACH
+        = "copy-on-attach";
+    /**
+     * The name of the persistence manager factory element's "mapping"
+     * attribute.
+     *
+     * @since 2.1
+     */
+    static String PMF_ATTRIBUTE_MAPPING
+        = "mapping";
+    /**
+     * The name of the persistence manager factory element's
+     * "server-time-zone-id" attribute.
+     *
+     * @since 2.1
+     */
+    static String PMF_ATTRIBUTE_SERVER_TIME_ZONE_ID
+        = "server-time-zone-id";
+    /**
+     * The name of the persistence manager factory element's
+     * "datastore-read-timeout-millis" attribute.
+     *
+     * @since 3.0
+     */
+    static String PMF_ATTRIBUTE_DATASTORE_READ_TIMEOUT_MILLIS
+        = "datastore-read-timeout-millis";
+    /**
+     * The name of the persistence manager factory element's
+     * "datastore-write-timeout-millis" attribute.
+     *
+     * @since 3.0
+     */
+    static String PMF_ATTRIBUTE_DATASTORE_WRITE_TIMEOUT_MILLIS
+        = "datastore-write-timeout-millis";
+    /**
+     * The name of the persistence manager factory property elements in the JDO
+     * configuration file.
+     */
+    static String ELEMENT_PROPERTY
+        = "property";
+    /**
+     * The name of the persistence manager factory property element's "name"
+     * attribute.
+     */
+    static String PROPERTY_ATTRIBUTE_NAME
+        = "name";
+    /**
+     * The name of the persistence manager factory property element's "value"
+     * attribute.
+     */
+    static String PROPERTY_ATTRIBUTE_VALUE
+        = "value";
+
+    /**
+     * The name of the instance lifecycle listener element in the JDO
+     * configuration file.
+     */
+    static String ELEMENT_INSTANCE_LIFECYCLE_LISTENER
+        = "instance-lifecycle-listener";
+
+    /**
+     * The name of the instance lifecycle listener element's "listener"
+     * attribute.
+     */
+    static String INSTANCE_LIFECYCLE_LISTENER_ATTRIBUTE_LISTENER
+        = "listener";
+    /**
+     * The name of the instance lifecycle listener element's "classes"
+     * attribute.
+     */
+    static String INSTANCE_LIFECYCLE_LISTENER_ATTRIBUTE_CLASSES
+        = "classes";
+
+    /**
+     * "javax.jdo.option.TransientTransactional"
+     *
+     * @see PersistenceManagerFactory#supportedOptions()
+     * @since 2.1
+     */
+    static String OPTION_TRANSACTIONAL_TRANSIENT
+        = "javax.jdo.option.TransientTransactional";
+    /**
+     * "javax.jdo.option.NontransactionalRead"
+     *
+     * @see PersistenceManagerFactory#supportedOptions()
+     * @since 2.1
+     */
+    static String OPTION_NONTRANSACTIONAL_READ
+        = "javax.jdo.option.NontransactionalRead";
+    /**
+     * "javax.jdo.option.NontransactionalWrite"
+     *
+     * @see PersistenceManagerFactory#supportedOptions()
+     * @since 2.1
+     */
+    static String OPTION_NONTRANSACTIONAL_WRITE
+        = "javax.jdo.option.NontransactionalWrite";
+    /**
+     * "javax.jdo.option.RetainValues"
+     *
+     * @see PersistenceManagerFactory#supportedOptions()
+     * @since 2.1
+     */
+    static String OPTION_RETAIN_VALUES
+        = "javax.jdo.option.RetainValues";
+    /**
+     * "javax.jdo.option.Optimistic"
+     *
+     * @see PersistenceManagerFactory#supportedOptions()
+     * @since 2.1
+     */
+    static String OPTION_OPTIMISTIC
+        = "javax.jdo.option.Optimistic";
+    /**
+     * "javax.jdo.option.ApplicationIdentity"
+     *
+     * @see PersistenceManagerFactory#supportedOptions()
+     * @since 2.1
+     */
+    static String OPTION_APPLICATION_IDENTITY
+        = "javax.jdo.option.ApplicationIdentity";
+    /**
+     * "javax.jdo.option.DatastoreIdentity"
+     *
+     * @see PersistenceManagerFactory#supportedOptions()
+     * @since 2.1
+     */
+    static String OPTION_DATASTORE_IDENTITY
+        = "javax.jdo.option.DatastoreIdentity";
+    /**
+     * "javax.jdo.option.NonDurableIdentity"
+     *
+     * @see PersistenceManagerFactory#supportedOptions()
+     * @since 2.1
+     */
+    static String OPTION_NONDURABLE_IDENTITY
+        = "javax.jdo.option.NonDurableIdentity";
+    /**
+     * "javax.jdo.option.ArrayList"
+     *
+     * @see PersistenceManagerFactory#supportedOptions()
+     * @since 2.1
+     */
+    static String OPTION_ARRAYLIST
+        = "javax.jdo.option.ArrayList";
+    /**
+     * "javax.jdo.option.LinkedList"
+     *
+     * @see PersistenceManagerFactory#supportedOptions()
+     * @since 2.1
+     */
+    static String OPTION_LINKEDLIST
+        = "javax.jdo.option.LinkedList";
+    /**
+     * "javax.jdo.option.TreeMap"
+     *
+     * @see PersistenceManagerFactory#supportedOptions()
+     * @since 2.1
+     */
+    static String OPTION_TREEMAP
+        = "javax.jdo.option.TreeMap";
+    /**
+     * "javax.jdo.option.TreeSet"
+     *
+     * @see PersistenceManagerFactory#supportedOptions()
+     * @since 2.1
+     */
+    static String OPTION_TREESET
+        = "javax.jdo.option.TreeSet";
+    /**
+     * "javax.jdo.option.Vector"
+     *
+     * @see PersistenceManagerFactory#supportedOptions()
+     * @since 2.1
+     */
+    static String OPTION_VECTOR
+        = "javax.jdo.option.Vector";
+    /**
+     * "javax.jdo.option.Array"
+     *
+     * @see PersistenceManagerFactory#supportedOptions()
+     * @since 2.1
+     */
+    static String OPTION_ARRAY
+        = "javax.jdo.option.Array";
+    /**
+     * "javax.jdo.option.NullCollection"
+     *
+     * @see PersistenceManagerFactory#supportedOptions()
+     * @since 2.1
+     */
+    static String OPTION_NULL_COLLECTION
+        = "javax.jdo.option.NullCollection";
+    /**
+     * "javax.jdo.option.ChangeApplicationIdentity"
+     *
+     * @see PersistenceManagerFactory#supportedOptions()
+     * @since 2.1
+     */
+    static String OPTION_CHANGE_APPLICATION_IDENTITY
+        = "javax.jdo.option.ChangeApplicationIdentity";
+    /**
+     * "javax.jdo.option.BinaryCompatibility"
+     *
+     * @see PersistenceManagerFactory#supportedOptions()
+     * @since 2.1
+     */
+    static String OPTION_BINARY_COMPATIBILITY
+        = "javax.jdo.option.BinaryCompatibility";
+    /**
+     * "javax.jdo.option.GetDataStoreConnection"
+     *
+     * @see PersistenceManagerFactory#supportedOptions()
+     * @since 2.1
+     */
+    static String OPTION_GET_DATASTORE_CONNECTION
+        = "javax.jdo.option.GetDataStoreConnection";
+    /**
+     * "javax.jdo.option.GetJDBCConnection"
+     *
+     * @see PersistenceManagerFactory#supportedOptions()
+     * @since 2.1
+     */
+    static String OPTION_GET_JDBC_CONNECTION
+        = "javax.jdo.option.GetJDBCConnection";
+    /**
+     * "javax.jdo.query.SQL"
+     *
+     * @see PersistenceManagerFactory#supportedOptions()
+     * @since 2.1
+     */
+    static String OPTION_QUERY_SQL = "javax.jdo.query.SQL";
+
+    /**
+     * "javax.jdo.option.QueryCancel"
+     * @see PersistenceManagerFactory#supportedOptions()
+     * @since 3.0
+     */
+    static String OPTION_QUERY_CANCEL = "javax.jdo.option.QueryCancel";
+
+    /**
+     * "javax.jdo.query.JDOQL.BitwiseOperations"
+     * @see PersistenceManagerFactory#supportedOptions()
+     * @since 3.2
+     */
+    static String OPTION_QUERY_JDOQL_BITWISE_OPERATIONS = "javax.jdo.query.JDOQL.BitwiseOperations";
+
+    /**
+     * "javax.jdo.query.JDOQL.UnconstrainedQueryVariables"
+     * @see PersistenceManagerFactory#supportedOptions()
+     * @since 2.1
+     */
+    static String OPTION_UNCONSTRAINED_QUERY_VARIABLES = "javax.jdo.query.JDOQL.UnconstrainedQueryVariables";
+
+    /**
+     * "javax.jdo.option.DatastoreTimeout"
+     *
+     * @see PersistenceManagerFactory#supportedOptions()
+     * @since 3.0
+     */
+    static String OPTION_DATASTORE_TIMEOUT
+        = "javax.jdo.option.DatastoreTimeout";
+    /**
+     * "javax.jdo.option.version.DateTime"
+     *
+     * @see PersistenceManagerFactory#supportedOptions()
+     * @since 2.1
+     */
+    static String OPTION_VERSION_DATETIME
+        = "javax.jdo.option.version.DateTime";
+    /**
+     * "javax.jdo.option.version.StateImage"
+     *
+     * @see PersistenceManagerFactory#supportedOptions()
+     * @since 2.1
+     */
+    static String OPTION_VERSION_STATE_IMAGE
+        = "javax.jdo.option.version.StateImage";
+    /**
+     * "javax.jdo.option.PreDirtyEvent"
+     *
+     * @see PersistenceManagerFactory#supportedOptions()
+     * @since 2.1
+     */
+    static String OPTION_PREDIRTY_EVENT
+        = "javax.jdo.option.PreDirtyEvent";
+    /**
+     * "javax.jdo.option.mapping.HeterogeneousObjectType"
+     *
+     * @see PersistenceManagerFactory#supportedOptions()
+     * @since 2.1
+     */
+    static String OPTION_MAPPING_HETEROGENEOUS_OBJECT_TYPE
+        = "javax.jdo.option.mapping.HeterogeneousObjectType";
+    /**
+     * "javax.jdo.option.mapping.HeterogeneousInterfaceType"
+     *
+     * @see PersistenceManagerFactory#supportedOptions()
+     * @since 2.1
+     */
+    static String OPTION_MAPPING_HETEROGENEOUS_INTERFACE_TYPE
+        = "javax.jdo.option.mapping.HeterogeneousInterfaceType";
+    /**
+     * "javax.jdo.option.mapping.JoinedTablePerClass"
+     *
+     * @see PersistenceManagerFactory#supportedOptions()
+     * @since 2.1
+     */
+    static String OPTION_MAPPING_JOINED_TABLE_PER_CLASS
+        = "javax.jdo.option.mapping.JoinedTablePerClass";
+    /**
+     * "javax.jdo.option.mapping.JoinedTablePerConcreteClass"
+     *
+     * @see PersistenceManagerFactory#supportedOptions()
+     * @since 2.1
+     */
+    static String OPTION_MAPPING_JOINED_TABLE_PER_CONCRETE_CLASS
+        = "javax.jdo.option.mapping.JoinedTablePerConcreteClass";
+    /**
+     * "javax.jdo.option.mapping.NonJoinedTablePerConcreteClass"
+     *
+     * @see PersistenceManagerFactory#supportedOptions()
+     * @since 2.1
+     */
+    static String OPTION_MAPPING_NON_JOINED_TABLE_PER_CONCRETE_CLASS
+        = "javax.jdo.option.mapping.NonJoinedTablePerConcreteClass";
+    /**
+     * "javax.jdo.option.mapping.RelationSubclassTable"
+     *
+     * @see PersistenceManagerFactory#supportedOptions()
+     * @since 2.1
+     */
+    static String OPTION_MAPPING_RELATION_SUBCLASS_TABLE
+        = "javax.jdo.option.mapping.RelationSubclassTable";
+
+    /**
+     * "javax.jdo.PersistenceManagerFactoryClass"
+     *
+     * @see JDOHelper#getPersistenceManagerFactory(java.util.Map)
+     * @since 2.1
+     */
+    static String PROPERTY_PERSISTENCE_MANAGER_FACTORY_CLASS
+        = "javax.jdo.PersistenceManagerFactoryClass";
+
+    /**
+     * "VendorName"
+     *
+     * @see JDOEnhancer#getProperties()
+     * @since 3.0
+     */
+    public final static String PROPERTY_ENHANCER_VENDOR_NAME
+        = "VendorName";
+
+    /**
+     * "VersionNumber"
+     *
+     * @see JDOEnhancer#getProperties()
+     * @since 3.0
+     */
+    public final static String PROPERTY_ENHANCER_VERSION_NUMBER
+        = "VersionNumber";
+
+    /** Exit value for no enhancer found
+     * @since 3.0
+     * */
+    public final static int ENHANCER_NO_JDO_ENHANCER_FOUND = 2;
+
+    /** Exit value for usage error
+     * @since 3.0
+     * */
+    public final static int ENHANCER_USAGE_ERROR = 3;
+
+    /** Exit value for an exception from the JDOEnhancer
+     * @since 3.0
+     * */
+    public final static int ENHANCER_EXCEPTION = 1;
+
+    /**
+     * "javax.jdo.option.Optimistic"
+     *
+     * @see PersistenceManagerFactory#getOptimistic()
+     * @since 2.1
+     */
+    static String PROPERTY_OPTIMISTIC
+        = "javax.jdo.option.Optimistic";
+    /**
+     * "javax.jdo.option.ReadOnly"
+     *
+     * @see PersistenceManagerFactory#getReadOnly()
+     * @since 2.2
+     */
+    static String PROPERTY_READONLY
+        = "javax.jdo.option.ReadOnly";
+    /**
+     * "javax.jdo.option.RetainValues"
+     *
+     * @see PersistenceManagerFactory#getRetainValues()
+     * @since 2.1
+     */
+    static String PROPERTY_RETAIN_VALUES
+        = "javax.jdo.option.RetainValues";
+    /**
+     * "javax.jdo.option.RestoreValues"
+     *
+     * @see PersistenceManagerFactory#getRestoreValues()
+     * @since 2.1
+     */
+    static String PROPERTY_RESTORE_VALUES
+        = "javax.jdo.option.RestoreValues";
+    /**
+     * "javax.jdo.option.IgnoreCache"
+     *
+     * @see PersistenceManagerFactory#getIgnoreCache()
+     * @since 2.1
+     */
+    static String PROPERTY_IGNORE_CACHE
+        = "javax.jdo.option.IgnoreCache";
+    /**
+     * "javax.jdo.option.NontransactionalRead"
+     *
+     * @see PersistenceManagerFactory#getNontransactionalRead()
+     * @since 2.1
+     */
+    static String PROPERTY_NONTRANSACTIONAL_READ
+        = "javax.jdo.option.NontransactionalRead";
+    /**
+     * "javax.jdo.option.NontransactionalWrite"
+     *
+     * @see PersistenceManagerFactory#getNontransactionalWrite()
+     * @since 2.1
+     */
+    static String PROPERTY_NONTRANSACTIONAL_WRITE
+        = "javax.jdo.option.NontransactionalWrite";
+    /**
+     * "javax.jdo.option.Multithreaded"
+     *
+     * @see PersistenceManagerFactory#getMultithreaded()
+     * @since 2.1
+     */
+    static String PROPERTY_MULTITHREADED
+        = "javax.jdo.option.Multithreaded";
+    /**
+     * "javax.jdo.option.TransactionIsolationLevel"
+     *
+     * @since 2.2
+     */
+    static String PROPERTY_TRANSACTION_ISOLATION_LEVEL
+        = "javax.jdo.option.TransactionIsolationLevel";
+    /**
+     * "javax.jdo.option.TransactionIsolationLevel.read-uncommitted"
+     *
+     * @see PersistenceManagerFactory#supportedOptions()
+     * @since 2.2
+     */
+    static String PROPERTY_TRANSACTION_ISOLATION_LEVEL_READ_UNCOMMITTED
+        = "javax.jdo.option.TransactionIsolationLevel.read-uncommitted";
+    /**
+     * "javax.jdo.option.TransactionIsolationLevel.read-committed"
+     *
+     * @see PersistenceManagerFactory#supportedOptions()
+     * @since 2.2
+     */
+    static String PROPERTY_TRANSACTION_ISOLATION_LEVEL_READ_COMMITTED
+        = "javax.jdo.option.TransactionIsolationLevel.read-committed";
+    /**
+     * "javax.jdo.option.TransactionIsolationLevel.repeatable-read"
+     *
+     * @see PersistenceManagerFactory#supportedOptions()
+     * @since 2.2
+     */
+    static String PROPERTY_TRANSACTION_ISOLATION_LEVEL_REPEATABLE_READ
+        = "javax.jdo.option.TransactionIsolationLevel.repeatable-read";
+    /**
+     * "javax.jdo.option.TransactionIsolationLevel.snapshot"
+     *
+     * @see PersistenceManagerFactory#supportedOptions()
+     * @since 2.2
+     */
+    static String PROPERTY_TRANSACTION_ISOLATION_LEVEL_SNAPSHOT
+        = "javax.jdo.option.TransactionIsolationLevel.snapshot";
+    /**
+     * "javax.jdo.option.TransactionIsolationLevel.serializable"
+     *
+     * @see PersistenceManagerFactory#supportedOptions()
+     * @since 2.2
+     */
+    static String PROPERTY_TRANSACTION_ISOLATION_LEVEL_SERIALIZABLE
+        = "javax.jdo.option.TransactionIsolationLevel.serializable";
+    /**
+     * "javax.jdo.option.DetachAllOnCommit"
+     *
+     * @see PersistenceManagerFactory#getDetachAllOnCommit()
+     * @since 2.1
+     */
+    static String PROPERTY_DETACH_ALL_ON_COMMIT
+        = "javax.jdo.option.DetachAllOnCommit";
+    /**
+     * "javax.jdo.option.CopyOnAttach"
+     *
+     * @see PersistenceManagerFactory#getCopyOnAttach()
+     * @since 2.1
+     */
+    static String PROPERTY_COPY_ON_ATTACH
+        = "javax.jdo.option.CopyOnAttach";
+    /**
+     * "javax.jdo.option.ConnectionDriverName"
+     * This property might be ignored by the JDO implementation
+     * because the JDBC DriverManager handles the driver name.
+     * @see PersistenceManagerFactory#getConnectionDriverName()
+     * @since 2.1
+     */
+    static String PROPERTY_CONNECTION_DRIVER_NAME
+        = "javax.jdo.option.ConnectionDriverName";
+    /**
+     * "javax.jdo.option.ConnectionUserName"
+     *
+     * @see PersistenceManagerFactory#getConnectionUserName()
+     * @since 2.1
+     */
+    static String PROPERTY_CONNECTION_USER_NAME
+        = "javax.jdo.option.ConnectionUserName";
+    /**
+     * "javax.jdo.option.Password"
+     *
+     * @since 2.1
+     */
+    static String PROPERTY_CONNECTION_PASSWORD
+        = "javax.jdo.option.ConnectionPassword";
+    /**
+     * "javax.jdo.option.ConnectionURL"
+     *
+     * @see PersistenceManagerFactory#getConnectionURL()
+     * @since 2.1
+     */
+    static String PROPERTY_CONNECTION_URL
+        = "javax.jdo.option.ConnectionURL";
+    /**
+     * "javax.jdo.option.ConnectionFactoryName"
+     *
+     * @see PersistenceManagerFactory#getConnectionFactoryName()
+     * @since 2.1
+     */
+    static String PROPERTY_CONNECTION_FACTORY_NAME
+        = "javax.jdo.option.ConnectionFactoryName";
+    /**
+     * "javax.jdo.option.ConnectionFactory2Name"
+     *
+     * @see PersistenceManagerFactory#getConnectionFactory2Name()
+     * @since 2.1
+     */
+    static String PROPERTY_CONNECTION_FACTORY2_NAME
+        = "javax.jdo.option.ConnectionFactory2Name";
+    /**
+     * "javax.jdo.option.Mapping"
+     *
+     * @see PersistenceManagerFactory#getMapping()
+     * @since 2.1
+     */
+    static String PROPERTY_MAPPING
+        = "javax.jdo.option.Mapping";
+    /**
+     * "javax.jdo.option.PersistenceUnitName"
+     *
+     * @see PersistenceManagerFactory#getPersistenceUnitName()
+     * @since 2.1
+     */
+    static String PROPERTY_PERSISTENCE_UNIT_NAME
+        = "javax.jdo.option.PersistenceUnitName";
+    /**
+     * "javax.jdo.option.Name"
+     *
+     * @see PersistenceManagerFactory#getName()
+     * @since 2.1
+     */
+    static String PROPERTY_NAME
+        = "javax.jdo.option.Name";
+
+    /**
+     * "javax.jdo.spi.PropertiesFileName"
+     *
+     * @since 3.2
+     */
+    static String PROPERTY_SPI_PROPERTIES_FILE_NAME
+            = "javax.jdo.spi.PropertiesFileName";
+
+    /**
+     * "javax.jdo.option.spi.ResourceName"
+     * @since 2.1
+     */
+    static String PROPERTY_SPI_RESOURCE_NAME
+        = "javax.jdo.option.spi.ResourceName";
+
+    /**
+     * "javax.jdo.listener.InstanceLifecycleListener"
+     *
+     * @see PersistenceManagerFactory#addInstanceLifecycleListener(javax.jdo.listener.InstanceLifecycleListener,Class[])
+     * @see PersistenceManagerFactory#removeInstanceLifecycleListener(javax.jdo.listener.InstanceLifecycleListener)
+     */
+    static String PROPERTY_INSTANCE_LIFECYCLE_LISTENER
+        = "javax.jdo.listener.InstanceLifecycleListener";
+
+    /**
+     * Prefix used to configure
+     * {@link javax.jdo.listener.InstanceLifecycleListener} instances
+     * externally.
+     * To configure an <code>InstanceLifecycleListener</code> via properties,
+     * create a property name with the prefix of
+     * this constant and append the fully qualified listener class name, then
+     * set its value to the comma- or whitespace-delimited list
+     * of persistence-capable classes whose instances are to be observed.
+     * Use no value to indicate that instances of
+     * all persistence-capable classes are to be observed.<br>
+     * For example,<br>
+     * <code>javax.jdo.option.InstanceLifecycleListener.com.example.MyListener=com.example.Foo,com.example.Bar</code><br>
+     * is equivalent to calling<br>
+     * <code>pmf.addInstanceLifecycleListener(new com.example.MyListener(), new Class[] {com.example.Foo.class, com.example.Bar.class});</code><br>
+     * where <code>pmf</code> is an instance of type
+     * <code>PersistenceManagerFactory</code>.
+     *
+     * @see javax.jdo.PersistenceManagerFactory#addInstanceLifecycleListener(javax.jdo.listener.InstanceLifecycleListener,Class[])
+     * @since 2.1
+     */
+    static String PROPERTY_PREFIX_INSTANCE_LIFECYCLE_LISTENER
+        = PROPERTY_INSTANCE_LIFECYCLE_LISTENER + ".";
+
+    /**
+     * Mapping "javax.jdo.mapping.Catalog"
+     *
+     * @since 2.1
+     */
+    static String PROPERTY_MAPPING_CATALOG
+        = "javax.jdo.mapping.Catalog";
+    /**
+     * Mapping "javax.jdo.mapping.Schema"
+     *
+     * @since 2.1
+     */
+    static String PROPERTY_MAPPING_SCHEMA
+        = "javax.jdo.mapping.Schema";
+
+    /**
+     * Specified value "javax.jdo.option.ServerTimeZoneID"
+     *
+     * @since 2.1
+     */
+    static String PROPERTY_SERVER_TIME_ZONE_ID
+        = "javax.jdo.option.ServerTimeZoneID";
+
+    /**
+     * Specified value "javax.jdo.option.DatastoreReadTimeoutMillis"
+     *
+     * @since 3.0
+     */
+    static String PROPERTY_DATASTORE_READ_TIMEOUT_MILLIS
+        = "javax.jdo.option.DatastoreReadTimeoutMillis";
+
+    /**
+     * Specified value "javax.jdo.option.DatastoreWriteTimeoutMillis"
+     *
+     * @since 3.0
+     */
+    static String PROPERTY_DATASTORE_WRITE_TIMEOUT_MILLIS
+        = "javax.jdo.option.DatastoreWriteTimeoutMillis";
+
+    /**
+     * Nonconfigurable property constant "VendorName"
+     *
+     * @see PersistenceManagerFactory#getProperties()
+     * @since 2.1
+     */
+    static String NONCONFIGURABLE_PROPERTY_VENDOR_NAME
+        = "VendorName";
+
+    /**
+     * Nonconfigurable property constant "VersionNumber"
+     *
+     * @see PersistenceManagerFactory#getProperties()
+     * @since 2.1
+     */
+    static String NONCONFIGURABLE_PROPERTY_VERSION_NUMBER
+        = "VersionNumber";
+
+    /**
+     * Specified value "javax.jdo.option.TransactionType"
+     *
+     * @since 2.1
+     */
+    static String PROPERTY_TRANSACTION_TYPE
+        = "javax.jdo.option.TransactionType";
+
+    /**
+     * The value for TransactionType to specify that transactions
+     * are managed by the Java Transactions API, as documented in
+     * JSR-220.
+     *
+     * @since 2.1
+     */
+    static String JTA
+        = "JTA";
+
+    /**
+     * The value for TransactionType to specify that transactions
+     * are managed by the javax.jdo.Transaction instance, similar
+     * to the usage as documented in JSR-220.
+     *
+     * @since 2.1
+     */
+    static String RESOURCE_LOCAL
+        = "RESOURCE_LOCAL";
+
+    /**
+     * The name of the resource for the DTD of the standard JDO configuration
+     * file.
+     *
+     * @since 2.1
+     */
+    static String JDOCONFIG_DTD_RESOURCE
+        = "javax/jdo/jdoconfig_3_0.dtd";
+
+    /**
+     * The name of the resource for the XML schema of the standard JDO
+     * configuration file.
+     *
+     * @since 2.1
+     */
+    static String JDOCONFIG_XSD_RESOURCE
+        = "javax/jdo/jdoconfig_3_0.xsd";
+
+    /**
+     * The name of the resource for the DTD of the standard JDO metadata file.
+     *
+     * @since 2.1
+     */
+    static String JDO_DTD_RESOURCE
+        = "javax/jdo/jdo_3_0.dtd";
+
+    /**
+     * The name of the resource for the XML schema of the standard JDO
+     * metadata file.
+     *
+     * @since 2.1
+     */
+    static String JDO_XSD_RESOURCE
+        = "javax/jdo/jdo_3_0.xsd";
+
+    /**
+     * The name of the resource for the DTD of the standard JDO
+     * object-relational mapping metadata file.
+     *
+     * @since 2.1
+     */
+    static String ORM_DTD_RESOURCE
+        = "javax/jdo/orm_3_0.dtd";
+
+    /**
+     * The name of the resource for the XML schema of the standard JDO
+     * object-relational mapping metadata file.
+     *
+     * @since 2.1
+     */
+    static String ORM_XSD_RESOURCE
+        = "javax/jdo/orm_3_0.xsd";
+
+    /**
+     * The name of the resource for the DTD of the standard JDO query
+     * metadata file.
+     *
+     * @since 2.1
+     */
+    static String JDOQUERY_DTD_RESOURCE
+        = "javax/jdo/jdoquery_3_0.dtd";
+
+    /**
+     * The name of the resource for the XML schema of the standard JDO query
+     * metadata file.
+     *
+     * @since 2.1
+     */
+    static String JDOQUERY_XSD_RESOURCE
+        = "javax/jdo/jdoquery_3_0.xsd";
+
+    /**
+     * The name of the anonymous PersistenceManagerFactory, which
+     * is the empty string.
+     *
+     * @since 2.1
+     */
+    static String ANONYMOUS_PERSISTENCE_MANAGER_FACTORY_NAME
+        = "";
+
+    /**
+     * Transaction isolation level representing the ability to read
+     * uncommitted data.
+     * @see PersistenceManagerFactory#getTransactionIsolationLevel()
+     * @see Transaction#getIsolationLevel()
+     * @since 2.2
+     */
+    public static final String TX_READ_UNCOMMITTED = "read-uncommitted";
+
+    /**
+     * Transaction isolation level representing the requirement to read
+     * committed data only.
+     * @see PersistenceManagerFactory#getTransactionIsolationLevel()
+     * @see Transaction#getIsolationLevel()
+     * @since 2.2
+     */
+    public static final String TX_READ_COMMITTED = "read-committed";
+
+    /**
+     * Transaction isolation level representing the requirement to read
+     * the same data in the same transaction.
+     * @see PersistenceManagerFactory#getTransactionIsolationLevel()
+     * @see Transaction#getIsolationLevel()
+     * @since 2.2
+     */
+    public static final String TX_REPEATABLE_READ = "repeatable-read";
+
+    /**
+     * Transaction isolation level representing the requirement to keep
+     * a snapshot for reading data.
+     * @see PersistenceManagerFactory#getTransactionIsolationLevel()
+     * @see Transaction#getIsolationLevel()
+     * @since 2.2
+     */
+    public static final String TX_SNAPSHOT = "snapshot";
+
+    /**
+     * Transaction isolation level representing the requirement to serialize
+     * transactions.
+     * @see PersistenceManagerFactory#getTransactionIsolationLevel()
+     * @see Transaction#getIsolationLevel()
+     * @since 2.2
+     */
+    public static final String TX_SERIALIZABLE = "serializable";
 }
diff --git a/api/src/main/java/javax/jdo/Enhancer.java b/api/src/main/java/javax/jdo/Enhancer.java
index 3634e03a..19d14ec2 100644
--- a/api/src/main/java/javax/jdo/Enhancer.java
+++ b/api/src/main/java/javax/jdo/Enhancer.java
@@ -16,460 +16,441 @@
  */
 package javax.jdo;
 
-import static javax.jdo.Constants.ENHANCER_EXCEPTION;
-import static javax.jdo.Constants.ENHANCER_NO_JDO_ENHANCER_FOUND;
-import static javax.jdo.Constants.ENHANCER_USAGE_ERROR;
-import static javax.jdo.Constants.PROPERTY_ENHANCER_VENDOR_NAME;
-import static javax.jdo.Constants.PROPERTY_ENHANCER_VERSION_NUMBER;
-
 import java.io.File;
 import java.net.MalformedURLException;
 import java.net.URI;
 import java.net.URL;
 import java.net.URLClassLoader;
+
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
-import java.util.Map.Entry;
 import java.util.Properties;
 import java.util.Set;
+import java.util.Map.Entry;
+
+import static javax.jdo.Constants.ENHANCER_EXCEPTION;
+import static javax.jdo.Constants.ENHANCER_NO_JDO_ENHANCER_FOUND;
+import static javax.jdo.Constants.ENHANCER_USAGE_ERROR;
+import static javax.jdo.Constants.PROPERTY_ENHANCER_VENDOR_NAME;
+import static javax.jdo.Constants.PROPERTY_ENHANCER_VERSION_NUMBER;
+
 import javax.jdo.spi.I18NHelper;
 
 /**
- * Main class to invoke a JDO Enhancer. The enhancer is invoked with the following command line:
- *
+ * Main class to invoke a JDO Enhancer.
+ * The enhancer is invoked with the following command line:
  * <pre>
  * java -cp {classpath} javax.jdo.Enhancer {options} {directory, file, or resource names}
  * </pre>
- *
- * &lt;classpath&gt; must contain the jdo specification jar, the implementation jar and any
- * implementation dependencies, the statically-compiled classes, and the jdo metadata files loadable
- * as resources.
- *
- * <p>&lt;options&gt; include:
- *
- * <ul>
- *   <li>? : print usage to stderr and exit
- *   <li>-h : print usage to stderr and exit
- *   <li>-help : print usage to stderr and exit
- *   <li>-pu &lt;persistence-unit-name&gt; : the name of a persistence unit
- *   <li>-d &lt;target directory&gt; : write the enhanced classes to the specified directory
- *   <li>-checkonly : just check the classes for enhancement status
- *   <li>-v : verbose output
- *   <li>-r : recurse through directories to find all classes and metadata files to enhance
- *   <li>-cp &lt;enhancer class loader path&gt; : if not already included in the java class loader,
- *       this parameter must contain the statically-compiled classes, and the jdo metadata files
- *       loadable as resources
- * </ul>
- *
- * &lt;directory, file, or resource names&gt;
- *
- * <ul>
- *   <li>Directory names must not end in ".jdo", ".jar", or ".class"
- *   <li>Directories will be searched for files with suffixes ".jdo", ".jar", and ".class"
- *   <li>Directories will be searched recursively if the -r option is set
- * </ul>
- *
+ * &lt;classpath&gt; must contain the jdo specification jar, the implementation jar and any 
+ * implementation dependencies, the statically-compiled classes, and the jdo 
+ * metadata files loadable as resources.
+ * 
+ * &lt;options&gt; include: 
+ * <ul><li>? : print usage to stderr and exit
+ * </li><li>-h : print usage to stderr and exit
+ * </li><li>-help : print usage to stderr and exit
+ * </li><li>-pu &lt;persistence-unit-name&gt; : the name of a persistence unit 
+ * </li><li>-d &lt;target directory&gt; : write the enhanced classes to the specified directory 
+ * </li><li>-checkonly : just check the classes for enhancement status 
+ * </li><li>-v : verbose output
+ * </li><li>-r : recurse through directories to find all classes and metadata files to enhance 
+ * </li><li>-cp &lt;enhancer class loader path&gt; : if not already included in the java class loader, 
+ * this parameter must contain the statically-compiled classes, and the jdo metadata 
+ * files loadable as resources 
+ * </li></ul>&lt;directory, file, or resource names&gt;
+ * <ul><li>Directory names must not end in ".jdo", ".jar", or ".class"
+ * </li><li>Directories will be searched for files with suffixes ".jdo", ".jar", and ".class"
+ * </li><li>Directories will be searched recursively if the -r option is set
+ * </li></ul>
+ * 
  * @since 3.0
  */
 public class Enhancer {
 
-  /** The Internationalization message helper. */
-  private static final I18NHelper msg = I18NHelper.getInstance("javax.jdo.Bundle"); // NOI18N
+    /** The Internationalization message helper. */
+    private final static I18NHelper msg = 
+        I18NHelper.getInstance ("javax.jdo.Bundle"); //NOI18N
 
-  /** New Line */
-  private char NL = '\n'; // NOI18N
-  /** Jar file suffix */
-  private String JAR_FILE_SUFFIX = ".jar"; // NOI18N
-  /** JDO Metadata file suffix */
-  private String JDO_FILE_SUFFIX = ".jdo"; // NOI18N
-  /** Class file suffix */
-  private String CLASS_FILE_SUFFIX = ".class"; // NOI18N
+    /** New Line */
+    private char NL = '\n'; //NOI18N
+    /** Jar file suffix */
+    private String JAR_FILE_SUFFIX = ".jar"; //NOI18N
+    /** JDO Metadata file suffix */
+    private String JDO_FILE_SUFFIX = ".jdo"; //NOI18N
+    /** Class file suffix */
+    private String CLASS_FILE_SUFFIX = ".class"; //NOI18N
 
-  /** Error indicator */
-  private boolean error = false;
-  /** If set, process parameters, print usage, and exit. */
-  private boolean printAndExit = false;
+    /** Error indicator */
+    private boolean error = false;
+    /** If set, process parameters, print usage, and exit. */
+    private boolean printAndExit = false;
 
-  /** Persistence Units */
-  private List<String> persistenceUnitNames = new ArrayList<String>();
-  /** Target Directory Parameter */
-  private String directoryName = null;
-  /** ClassLoader for JDOEnhancer */
-  private ClassLoader loader = null;
-  /** Classpath (-cp) parameter */
-  private String classPath = null;
-  /** Check Only flag */
-  private boolean checkOnly = false;
-  /** Verbose flag */
-  private boolean verbose = false;
-  /** Recurse flag */
-  private boolean recurse = false;
-  /** Error messages should be empty unless there is an error */
-  private StringBuilder errorBuffer = new StringBuilder();
-  /** Verbose messages are always collected but only output if verbose flag is set */
-  private StringBuilder verboseBuffer = new StringBuilder();
-  /** File Names */
-  private List<String> fileNames = new ArrayList<String>();
-  /** Class File Names */
-  private List<String> classFileNames = new ArrayList<String>();
-  /** JDO File Names */
-  private List<String> jdoFileNames = new ArrayList<String>();
-  /** Jar File Names */
-  private List<String> jarFileNames = new ArrayList<String>();
-  /** The number of classes validated by the JDOEnhancer */
-  private int numberOfValidatedClasses = 0;
-  /** The number of classes enhanced by the JDOEnhancer */
-  private int numberOfEnhancedClasses = 0;
+    /** Persistence Units */
+    private List<String> persistenceUnitNames = new ArrayList<String>();
+    /** Target Directory Parameter */
+    private String directoryName = null;
+    /** ClassLoader for JDOEnhancer */
+    private ClassLoader loader = null;
+    /** Classpath (-cp) parameter */
+    private String classPath = null;
+    /** Check Only flag */
+    private boolean checkOnly = false;
+    /** Verbose flag */
+    private boolean verbose = false;
+    /** Recurse flag */
+    private boolean recurse = false;
+    /** Error messages should be empty unless there is an error */
+    private StringBuilder errorBuffer = new StringBuilder();
+    /** Verbose messages are always collected but only output if verbose flag is set */
+    private StringBuilder verboseBuffer = new StringBuilder();
+    /** File Names */
+    private List<String> fileNames = new ArrayList<String>();
+    /** Class File Names */
+    private List<String> classFileNames = new ArrayList<String>();
+    /** JDO File Names */
+    private List<String> jdoFileNames = new ArrayList<String>();
+    /** Jar File Names */
+    private List<String> jarFileNames = new ArrayList<String>();
+    /** The number of classes validated by the JDOEnhancer */
+    private int numberOfValidatedClasses = 0;
+    /** The number of classes enhanced by the JDOEnhancer */
+    private int numberOfEnhancedClasses = 0;
 
-  /** The properties from the JDOEnhancer */
-  private Properties properties;
+    /** The properties from the JDOEnhancer */
+    private Properties properties;
 
-  /**
-   * Run the enhancer from the command line.
-   *
-   * @param args command line arguments
-   */
-  public static void main(String[] args) {
-    Enhancer enhancerMain = new Enhancer();
-    enhancerMain.run(args);
-  }
-
-  /**
-   * Execute the enhancer.
-   *
-   * @param args the command line arguments
-   */
-  private void run(String[] args) {
-    // processArgs will exit if errors or help
-    processArgs(args);
-    JDOEnhancer enhancer = null;
-    try {
-      enhancer = JDOHelper.getEnhancer();
-    } catch (JDOException jdoex) {
-      jdoex.printStackTrace(); // outputs to stderr
-      exit(ENHANCER_NO_JDO_ENHANCER_FOUND);
+    /** Run the enhancer from the command line.
+     * 
+     * @param args command line arguments
+     */
+    public static void main (String[] args) {
+        Enhancer enhancerMain = new Enhancer();
+        enhancerMain.run(args);
     }
 
-    try {
-      // provide verbose property settings of the JDOEnhancer we just loaded
-      properties = enhancer.getProperties();
-      addVerboseMessage("MSG_EnhancerClass", enhancer.getClass().getName()); // NOI18N
-      addVerboseMessage(
-          "MSG_EnhancerProperty",
-          PROPERTY_ENHANCER_VENDOR_NAME, // NOI18N
-          properties.getProperty(PROPERTY_ENHANCER_VENDOR_NAME));
-      addVerboseMessage(
-          "MSG_EnhancerProperty",
-          PROPERTY_ENHANCER_VERSION_NUMBER, // NOI18N
-          properties.getProperty(PROPERTY_ENHANCER_VERSION_NUMBER));
-      Set<Entry<Object, Object>> props = properties.entrySet();
-      Iterator<Entry<Object, Object>> entries = props.iterator();
-      while (entries.hasNext()) {
-        Entry<Object, Object> entry = entries.next();
-        if (!(PROPERTY_ENHANCER_VENDOR_NAME.equals(entry.getKey())
-            || PROPERTY_ENHANCER_VERSION_NUMBER.equals(entry.getKey()))) {
-          addVerboseMessage(
-              "MSG_EnhancerProperty",
-              (String) entry.getKey(), // NOI18N
-              (String) entry.getValue());
+    /** Execute the enhancer.
+     * 
+     * @param args the command line arguments
+     */
+    private void run(String[] args) {
+        // processArgs will exit if errors or help
+        processArgs(args);
+        JDOEnhancer enhancer = null;
+        try {
+            enhancer = JDOHelper.getEnhancer();
+        } catch (JDOException jdoex) {
+            jdoex.printStackTrace(); // outputs to stderr
+            exit(ENHANCER_NO_JDO_ENHANCER_FOUND);
         }
-      }
-      enhancer.setVerbose(verbose);
-      if (loader != null) {
-        enhancer.setClassLoader(loader);
-      }
 
-      int numberOfClasses = classFileNames.size();
-      if (numberOfClasses != 0) {
-        enhancer.addClasses(classFileNames.toArray(new String[numberOfClasses]));
-      }
-      int numberOfFiles = jdoFileNames.size();
-      if (numberOfFiles != 0) {
-        enhancer.addFiles(jdoFileNames.toArray(new String[numberOfFiles]));
-      }
-      if (0 < jarFileNames.size()) {
-        for (String jarFileName : jarFileNames) {
-          enhancer.addJar(jarFileName);
-        }
-      }
-      if (persistenceUnitNames != null) {
-        for (String persistenceUnitName : persistenceUnitNames) {
-          enhancer.addPersistenceUnit(persistenceUnitName);
+        try {
+            // provide verbose property settings of the JDOEnhancer we just loaded
+            properties = enhancer.getProperties();
+            addVerboseMessage("MSG_EnhancerClass", enhancer.getClass().getName()); //NOI18N
+            addVerboseMessage("MSG_EnhancerProperty", PROPERTY_ENHANCER_VENDOR_NAME, //NOI18N
+                    properties.getProperty(PROPERTY_ENHANCER_VENDOR_NAME));
+            addVerboseMessage("MSG_EnhancerProperty", PROPERTY_ENHANCER_VERSION_NUMBER, //NOI18N
+                    properties.getProperty(PROPERTY_ENHANCER_VERSION_NUMBER));
+            Set<Entry<Object, Object>> props = properties.entrySet();
+            Iterator<Entry<Object, Object>> entries = props.iterator();
+            while (entries.hasNext()) {
+                Entry<Object, Object> entry = entries.next();
+                if (!(PROPERTY_ENHANCER_VENDOR_NAME.equals(entry.getKey()) ||
+                        PROPERTY_ENHANCER_VERSION_NUMBER.equals(entry.getKey()))) {
+                    addVerboseMessage("MSG_EnhancerProperty", (String)entry.getKey(), //NOI18N
+                            (String)entry.getValue());                    
+                }
+            }
+            enhancer.setVerbose(verbose);
+            if (loader != null) {
+                enhancer.setClassLoader(loader);
+            }
+
+            int numberOfClasses = classFileNames.size();
+            if (numberOfClasses != 0) {
+                enhancer.addClasses(classFileNames.toArray(new String[numberOfClasses]));
+            }
+            int numberOfFiles = jdoFileNames.size();
+            if (numberOfFiles != 0) {
+                enhancer.addFiles(jdoFileNames.toArray(new String[numberOfFiles]));
+            }
+            if (0 < jarFileNames.size()) {
+                for (String jarFileName : jarFileNames) {
+                    enhancer.addJar(jarFileName);
+                }
+            }
+            if (persistenceUnitNames != null) {
+                for (String persistenceUnitName: persistenceUnitNames) {
+                    enhancer.addPersistenceUnit(persistenceUnitName);
+                }
+            }
+            if (directoryName != null) {
+                enhancer.setOutputDirectory(directoryName);
+            }
+            if (checkOnly) {
+                numberOfValidatedClasses = enhancer.validate();
+                addVerboseMessage("MSG_EnhancerValidatedClasses", numberOfValidatedClasses); //NOI18N
+            } else {
+                numberOfEnhancedClasses = enhancer.enhance();
+                addVerboseMessage("MSG_EnhancerEnhancedClasses", numberOfEnhancedClasses); //NOI18N
+            }
+            exit(0); // good exit
+        } catch (Exception ex) {
+            ex.printStackTrace(); // outputs to stderr
+            exit(ENHANCER_EXCEPTION); // error exit
         }
-      }
-      if (directoryName != null) {
-        enhancer.setOutputDirectory(directoryName);
-      }
-      if (checkOnly) {
-        numberOfValidatedClasses = enhancer.validate();
-        addVerboseMessage("MSG_EnhancerValidatedClasses", numberOfValidatedClasses); // NOI18N
-      } else {
-        numberOfEnhancedClasses = enhancer.enhance();
-        addVerboseMessage("MSG_EnhancerEnhancedClasses", numberOfEnhancedClasses); // NOI18N
-      }
-      exit(0); // good exit
-    } catch (Exception ex) {
-      ex.printStackTrace(); // outputs to stderr
-      exit(ENHANCER_EXCEPTION); // error exit
     }
-  }
 
-  /**
-   * Process the command line arguments and exit if there is a usage request or an error.
-   *
-   * @param args the command line arguments
-   */
-  private void processArgs(String[] args) {
-    parseArgs(args);
-    parseFiles(fileNames.toArray(new String[fileNames.size()]), true, recurse);
-    loader = prepareClassLoader(classPath);
-    if (error) {
-      addErrorMessage(msg.msg("MSG_EnhancerUsage")); // NOI18N
-      exit(ENHANCER_USAGE_ERROR); // error exit
-    }
-    if (printAndExit) {
-      addVerboseMessage("MSG_EnhancerUsage"); // NOI18N
-      exit(0); // good exit
+    /** Process the command line arguments and exit if there is a usage request or an error.
+     * 
+     * @param args the command line arguments
+     */
+    private void processArgs(String[] args) {
+        parseArgs(args);
+        parseFiles(fileNames.toArray(new String[fileNames.size()]), true, recurse);
+        loader = prepareClassLoader(classPath);
+        if (error) {
+            addErrorMessage(msg.msg("MSG_EnhancerUsage")); //NOI18N
+            exit(ENHANCER_USAGE_ERROR); // error exit
+        }
+        if (printAndExit) {
+            addVerboseMessage("MSG_EnhancerUsage"); //NOI18N
+            exit(0); // good exit
+        }
     }
-  }
 
-  /**
-   * Parse the command line arguments. Put the results into fields.
-   *
-   * @param args the command line arguments
-   */
-  private void parseArgs(String[] args) {
-    boolean doneWithOptions = false;
-    fileNames = new ArrayList<String>();
-    for (int i = 0; i < args.length; ++i) {
-      String arg = args[i];
-      // if first argument is ? then simply print usage and return.
-      if ("?".equals(arg)) {
-        printAndExit = true;
-        return;
-      }
-      if (!doneWithOptions) {
-        if (arg.startsWith("-")) { // NOI18N
-          String option = arg.substring(1);
-          if ("help".equals(option)) { // NOI18N
-            addVerboseMessage("MSG_EnhancerProcessing", "-help"); // NOI18N
-            setPrintAndExit();
-          } else if ("h".equals(option)) { // NOI18N
-            addVerboseMessage("MSG_EnhancerProcessing", "-h"); // NOI18N
-            setPrintAndExit();
-          } else if ("v".equals(option)) { // NOI18N
-            addVerboseMessage("MSG_EnhancerProcessing", "-v"); // NOI18N
-            verbose = true;
-          } else if ("verbose".equals(option)) { // NOI18N
-            addVerboseMessage("MSG_EnhancerProcessing", "-verbose"); // NOI18N
-            verbose = true;
-          } else if ("pu".equals(option)) { // NOI18N
-            if (hasNextArgument("MSG_EnhancerProcessing", "-pu", i, args.length)) { // NOI18N
-              String puName = args[++i];
-              addVerboseMessage("MSG_EnhancerPersistenceUnitName", puName); // NOI18N
-              persistenceUnitNames.add(puName);
-            } else {
-              setError();
-            }
-          } else if ("cp".equals(option)) { // NOI18N
-            if (hasNextArgument("MSG_EnhancerProcessing", "-cp", i, args.length)) { // NOI18N
-              classPath = args[++i];
-              addVerboseMessage("MSG_EnhancerClassPath", classPath); // NOI18N
-            } else {
-              setError();
+    /** Parse the command line arguments. Put the results into fields.
+     * 
+     * @param args the command line arguments
+     */
+    private void parseArgs(String[] args) {
+        boolean doneWithOptions = false;
+        fileNames = new ArrayList<String>();
+        for (int i = 0; i < args.length; ++i) {
+            String arg = args[i];
+            // if first argument is ? then simply print usage and return.
+            if ("?".equals(arg)) {
+                printAndExit = true;
+                return;
             }
-          } else if ("d".equals(option)) { // NOI18N
-            if (hasNextArgument("MSG_EnhancerProcessing", "-d", i, args.length)) { // NOI18N
-              directoryName = args[++i];
-              addVerboseMessage("MSG_EnhancerOutputDirectory", directoryName); // NOI18N
+            if (!doneWithOptions) {
+                if (arg.startsWith("-")) { //NOI18N
+                    String option = arg.substring(1);
+                    if ("help".equals(option)) { //NOI18N
+                        addVerboseMessage("MSG_EnhancerProcessing", "-help"); //NOI18N
+                        setPrintAndExit();
+                    } else if ("h".equals(option)) { //NOI18N
+                        addVerboseMessage("MSG_EnhancerProcessing", "-h"); //NOI18N
+                        setPrintAndExit();
+                    } else if ("v".equals(option)) { //NOI18N
+                        addVerboseMessage("MSG_EnhancerProcessing", "-v"); //NOI18N
+                        verbose = true;
+                    } else if ("verbose".equals(option)) { //NOI18N
+                        addVerboseMessage("MSG_EnhancerProcessing", "-verbose"); //NOI18N
+                        verbose = true;
+                    } else if ("pu".equals(option)) { //NOI18N
+                        if (hasNextArgument("MSG_EnhancerProcessing", "-pu", i, args.length)) { //NOI18N
+                            String puName = args[++i];
+                            addVerboseMessage("MSG_EnhancerPersistenceUnitName", puName); //NOI18N
+                            persistenceUnitNames.add(puName);
+                        } else {
+                            setError();
+                        }
+                    } else if ("cp".equals(option)) { //NOI18N
+                        if (hasNextArgument("MSG_EnhancerProcessing", "-cp", i, args.length)) { //NOI18N
+                            classPath = args[++i];
+                            addVerboseMessage("MSG_EnhancerClassPath", classPath); //NOI18N
+                         } else {
+                             setError();
+                       }
+                    } else if ("d".equals(option)) { //NOI18N
+                        if (hasNextArgument("MSG_EnhancerProcessing", "-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
+                        checkOnly = true;
+                    } else if ("r".equals(option)) { //NOI18N
+                        addVerboseMessage("MSG_EnhancerProcessing", "-r"); //NOI18N
+                        recurse = true;
+                    } else {
+                        setError();
+                        addErrorMessage(msg.msg("ERR_EnhancerUnrecognizedOption", option)); //NOI18N
+                    }
+                } else {
+                    doneWithOptions = true;
+                    fileNames.add(arg);
+                }
             } else {
-              setError();
+                fileNames.add(arg);
             }
-          } else if ("checkonly".equals(option)) { // NOI18N
-            addVerboseMessage("MSG_EnhancerProcessing", "-checkonly"); // NOI18N
-            checkOnly = true;
-          } else if ("r".equals(option)) { // NOI18N
-            addVerboseMessage("MSG_EnhancerProcessing", "-r"); // NOI18N
-            recurse = true;
-          } else {
+        }
+    }
+
+    /** Check whether there is another parameter (the argument for an option
+     * that requires an argument).
+     * @param msgId the message id for an error message
+     * @param where the parameter for the message
+     * @param i the index into the parameter array
+     * @param length the length of the parameter array
+     * @return
+     */
+    private boolean hasNextArgument(String msgId, String where, int i, int length) {
+        if (i + 1 >= length) {
             setError();
-            addErrorMessage(msg.msg("ERR_EnhancerUnrecognizedOption", option)); // NOI18N
-          }
-        } else {
-          doneWithOptions = true;
-          fileNames.add(arg);
+            addErrorMessage(msg.msg(msgId, where));
+            addErrorMessage(msg.msg("ERR_EnhancerRequiredArgumentMissing")); //NOI18N
+            return false;
         }
-      } else {
-        fileNames.add(arg);
-      }
+        return true;
     }
-  }
 
-  /**
-   * Check whether there is another parameter (the argument for an option that requires an
-   * argument).
-   *
-   * @param msgId the message id for an error message
-   * @param where the parameter for the message
-   * @param i the index into the parameter array
-   * @param length the length of the parameter array
-   * @return
-   */
-  private boolean hasNextArgument(String msgId, String where, int i, int length) {
-    if (i + 1 >= length) {
-      setError();
-      addErrorMessage(msg.msg(msgId, where));
-      addErrorMessage(msg.msg("ERR_EnhancerRequiredArgumentMissing")); // NOI18N
-      return false;
+    /**
+     * Files can be one of four types:
+     * <ol><li>directory: the directory is examined for files of the following types
+     * </li><li>.class: this is a java class file
+     * </li><li>.jdo: this is a jdo metadata file
+     * </li><li>.jar: this is a jar file
+     * </li></ol>
+     * If the recursion flag is set, directories contained in directories are examined,
+     * recursively.
+     */
+    private void parseFiles(String[] fileNames, boolean search, boolean recurse) {
+        for (String fileName: fileNames) {
+            if (fileName.endsWith(JAR_FILE_SUFFIX)) {
+                // add to jar file names
+                jarFileNames.add(fileName);
+                addVerboseMessage("MSG_EnhancerJarFileName", fileName); //NOI18N
+            } else if (fileName.endsWith(JDO_FILE_SUFFIX)) {
+                // add to jdo file names
+                jdoFileNames.add(fileName);
+                addVerboseMessage("MSG_EnhancerJDOFileName", fileName); //NOI18N
+            } else if (fileName.endsWith(CLASS_FILE_SUFFIX)) {
+                // add to class file names
+                classFileNames.add(fileName);
+                addVerboseMessage("MSG_EnhancerClassFileName", fileName); //NOI18N
+            } else {
+                // assume a directory if no recognized suffix
+                File directoryFile = new File(fileName);
+                if (directoryFile.isDirectory() && search) {
+                    String directoryPath = directoryFile.getAbsolutePath();
+                    String[] files = directoryFile.list();
+                    String[] pathName = new String[1];
+                    if (files != null) {
+                        for (String file: files) {
+                            pathName[0] = directoryPath + '/' + file;
+                            parseFiles(pathName, recurse, recurse);
+                        }
+                    }
+                }
+            }
+        }
     }
-    return true;
-  }
 
-  /**
-   * Files can be one of four types:
-   *
-   * <ol>
-   *   <li>directory: the directory is examined for files of the following types
-   *   <li>.class: this is a java class file
-   *   <li>.jdo: this is a jdo metadata file
-   *   <li>.jar: this is a jar file
-   * </ol>
-   *
-   * If the recursion flag is set, directories contained in directories are examined, recursively.
-   */
-  private void parseFiles(String[] fileNames, boolean search, boolean recurse) {
-    for (String fileName : fileNames) {
-      if (fileName.endsWith(JAR_FILE_SUFFIX)) {
-        // add to jar file names
-        jarFileNames.add(fileName);
-        addVerboseMessage("MSG_EnhancerJarFileName", fileName); // NOI18N
-      } else if (fileName.endsWith(JDO_FILE_SUFFIX)) {
-        // add to jdo file names
-        jdoFileNames.add(fileName);
-        addVerboseMessage("MSG_EnhancerJDOFileName", fileName); // NOI18N
-      } else if (fileName.endsWith(CLASS_FILE_SUFFIX)) {
-        // add to class file names
-        classFileNames.add(fileName);
-        addVerboseMessage("MSG_EnhancerClassFileName", fileName); // NOI18N
-      } else {
-        // assume a directory if no recognized suffix
-        File directoryFile = new File(fileName);
-        if (directoryFile.isDirectory() && search) {
-          String directoryPath = directoryFile.getAbsolutePath();
-          String[] files = directoryFile.list();
-          String[] pathName = new String[1];
-          if (files != null) {
-            for (String file : files) {
-              pathName[0] = directoryPath + '/' + file;
-              parseFiles(pathName, recurse, recurse);
+    /** Prepare the class loader from the classPath specified
+     * 
+     * @param classPath the classPath string from the "-cp classPath" option
+     * @return the class loader
+     */
+    private ClassLoader prepareClassLoader(String classPath) {
+        if (classPath == null)
+            return null;
+        ClassLoader result = null;
+        // separate classPath using system class path separator
+        String separator = System.getProperty("path.separator");
+        String[] paths = classPath.split(separator);
+        List<URL> urls = new ArrayList<URL>();
+        for (String path: paths) {
+            // for each path construct a URL from the File
+            File file = new File(path);
+            URI uri = file.toURI();
+            try {
+                URL url = uri.toURL();
+                addVerboseMessage("MSG_EnhancerClassPath", url.toString());
+                urls.add(url);
+            } catch (MalformedURLException e) {
+                setError();
+                addErrorMessage(msg.msg("ERR_EnhancerBadClassPath", file));
             }
-          }
         }
-      }
+        result = new URLClassLoader(urls.toArray(new URL[urls.size()]), null);
+        return result;
     }
-  }
 
-  /**
-   * Prepare the class loader from the classPath specified
-   *
-   * @param classPath the classPath string from the "-cp classPath" option
-   * @return the class loader
-   */
-  private ClassLoader prepareClassLoader(String classPath) {
-    if (classPath == null) return null;
-    ClassLoader result = null;
-    // separate classPath using system class path separator
-    String separator = System.getProperty("path.separator");
-    String[] paths = classPath.split(separator);
-    List<URL> urls = new ArrayList<URL>();
-    for (String path : paths) {
-      // for each path construct a URL from the File
-      File file = new File(path);
-      URI uri = file.toURI();
-      try {
-        URL url = uri.toURL();
-        addVerboseMessage("MSG_EnhancerClassPath", url.toString());
-        urls.add(url);
-      } catch (MalformedURLException e) {
-        setError();
-        addErrorMessage(msg.msg("ERR_EnhancerBadClassPath", file));
-      }
+    /** Add a message to stderr.
+     * 
+     * @param message the internationalized message to add
+     */
+    private void addErrorMessage(String message) {
+        errorBuffer.append(message);
+        errorBuffer.append(NL);
     }
-    result = new URLClassLoader(urls.toArray(new URL[urls.size()]), null);
-    return result;
-  }
 
-  /**
-   * Add a message to stderr.
-   *
-   * @param message the internationalized message to add
-   */
-  private void addErrorMessage(String message) {
-    errorBuffer.append(message);
-    errorBuffer.append(NL);
-  }
+    /** Set the error flag.
+     * 
+     */
+    private void setError() {
+        error = true;
+    }
 
-  /** Set the error flag. */
-  private void setError() {
-    error = true;
-  }
+    /** Set the print-and-exit flag.
+     * 
+     */
+    private void setPrintAndExit() {
+        printAndExit = true;
+    }
 
-  /** Set the print-and-exit flag. */
-  private void setPrintAndExit() {
-    printAndExit = true;
-  }
+    /** Exit this process.
+     * 
+     * @param exitValue the process exit value
+     */
+    private void exit(int exitValue) {
+        System.out.print(verboseBuffer.toString());
+        System.err.print(errorBuffer.toString());
+        System.exit(exitValue);
+    }
 
-  /**
-   * Exit this process.
-   *
-   * @param exitValue the process exit value
-   */
-  private void exit(int exitValue) {
-    System.out.print(verboseBuffer.toString());
-    System.err.print(errorBuffer.toString());
-    System.exit(exitValue);
-  }
+    /** Add a message to the verbose message buffer.
+     * 
+     * @param msgId the message id
+     * @param where the parameter
+     */
+    private void addVerboseMessage(String msgId, String... where) {
+        verboseBuffer.append(msg.msg(msgId, where));
+        verboseBuffer.append(NL);
+    }
 
-  /**
-   * Add a message to the verbose message buffer.
-   *
-   * @param msgId the message id
-   * @param where the parameter
-   */
-  private void addVerboseMessage(String msgId, String... where) {
-    verboseBuffer.append(msg.msg(msgId, where));
-    verboseBuffer.append(NL);
-  }
+    /** Add a message to the verbose message buffer.
+     * 
+     * @param msgId the message id
+     * @param where the parameter
+     */
+    private void addVerboseMessage(String msgId, String where) {
+        verboseBuffer.append(msg.msg(msgId, where));
+        verboseBuffer.append(NL);
+    }
 
-  /**
-   * Add a message to the verbose message buffer.
-   *
-   * @param msgId the message id
-   * @param where the parameter
-   */
-  private void addVerboseMessage(String msgId, String where) {
-    verboseBuffer.append(msg.msg(msgId, where));
-    verboseBuffer.append(NL);
-  }
+    /** Add a message to the verbose message buffer.
+     * 
+     * @param msgId the message id
+     */
+    private void addVerboseMessage(String msgId) {
+        verboseBuffer.append(msg.msg(msgId));
+        verboseBuffer.append(NL);
+    }
 
-  /**
-   * Add a message to the verbose message buffer.
-   *
-   * @param msgId the message id
-   */
-  private void addVerboseMessage(String msgId) {
-    verboseBuffer.append(msg.msg(msgId));
-    verboseBuffer.append(NL);
-  }
+    /** Add a message to the verbose message buffer.
+     * 
+     * @param msgId the message id
+     * @param where the parameter
+     */
+    private void addVerboseMessage(String msgId, int where) {
+        addVerboseMessage(msgId, String.valueOf(where));
+    }
 
-  /**
-   * Add a message to the verbose message buffer.
-   *
-   * @param msgId the message id
-   * @param where the parameter
-   */
-  private void addVerboseMessage(String msgId, int where) {
-    addVerboseMessage(msgId, String.valueOf(where));
-  }
 }
diff --git a/api/src/main/java/javax/jdo/Extent.java b/api/src/main/java/javax/jdo/Extent.java
index 264e07ab..120200f3 100644
--- a/api/src/main/java/javax/jdo/Extent.java
+++ b/api/src/main/java/javax/jdo/Extent.java
@@ -5,13 +5,13 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- *
+ * 
  *     https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
+ * 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
  * limitations under the License.
  */
 
@@ -22,92 +22,78 @@
 
 package javax.jdo;
 
+import java.lang.Iterable;
 import java.util.Iterator;
 
-/**
- * Instances of the <code>Extent</code> class represent the entire collection of instances in the
- * data store of the candidate class or interface possibly including its subclasses or
- * subinterfaces.
- *
- * <p>The <code>Extent</code> instance has two possible uses:
- *
+/** Instances of the <code>Extent</code> class represent the entire collection
+ * of instances in the data store of the candidate class or interface
+ * possibly including its subclasses or subinterfaces.
+ * <P>The <code>Extent</code> instance has two possible uses:
  * <ol>
- *   <li>to iterate all instances of a particular class or interface
- *   <li>to execute a <code>Query</code> in the data store over all instances of a particular class
- *       or interface
+ * <li>to iterate all instances of a particular class or interface
+ * <li>to execute a <code>Query</code> in the data store over all instances
+ * of a particular class or interface
  * </ol>
- *
  * @version 2.1
  */
 public interface Extent<E> extends Iterable<E>, AutoCloseable {
+        
+    /** Returns an iterator over all the instances in the <code>Extent</code>.
+     * The behavior of the returned iterator might depend on the setting of the
+     * <code>ignoreCache</code> flag in the owning <code>PersistenceManager</code>.
+     * @return an iterator over all instances in the <code>Extent</code>
+     */
+    Iterator<E> iterator();
 
-  /**
-   * Returns an iterator over all the instances in the <code>Extent</code>. The behavior of the
-   * returned iterator might depend on the setting of the <code>ignoreCache</code> flag in the
-   * owning <code>PersistenceManager</code>.
-   *
-   * @return an iterator over all instances in the <code>Extent</code>
-   */
-  Iterator<E> iterator();
+    /** Returns whether this <code>Extent</code> was defined to contain subclasses.
+     * @return true if this <code>Extent</code> was defined to contain instances
+     * that are of a subclass type.
+     */    
+    boolean hasSubclasses();
 
-  /**
-   * Returns whether this <code>Extent</code> was defined to contain subclasses.
-   *
-   * @return true if this <code>Extent</code> was defined to contain instances that are of a
-   *     subclass type.
-   */
-  boolean hasSubclasses();
+    /** An <code>Extent</code> contains all instances of a particular class 
+     * or interface in the data
+     * store; this method returns the <code>Class</code> of the instances
+     * represented by this Extent.
+      * @return the <code>Class</code> of instances of this <code>Extent</code>.
+      */
+    Class<E> getCandidateClass();
 
-  /**
-   * An <code>Extent</code> contains all instances of a particular class or interface in the data
-   * store; this method returns the <code>Class</code> of the instances represented by this Extent.
-   *
-   * @return the <code>Class</code> of instances of this <code>Extent</code>.
-   */
-  Class<E> getCandidateClass();
+    /** An <code>Extent</code> is managed by a <code>PersistenceManager</code>;
+     * this method gives access to the owning <code>PersistenceManager</code>.
+     * @return the owning <code>PersistenceManager</code>
+     */
+    PersistenceManager getPersistenceManager();
+    
+    /** Close all <code>Iterator</code>s associated with this <code>Extent</code> instance.
+     * <code>Iterator</code>s closed by this method will return <code>false</code>
+     * to <code>hasNext()</code> and will throw
+     * <code>NoSuchElementException</code> on <code>next()</code>.
+     * The <code>Extent</code> instance can still be used
+     * as a parameter of <code>Query.setExtent</code>, and to get an <code>Iterator</code>.
+     */    
+    void closeAll ();
+    
+    /** Close an <code>Iterator</code> associated with this <code>Extent</code> instance.
+     * <code>Iterator</code>s closed by this method will return <code>false</code>
+     * to <code>hasNext()</code> and will throw <code>NoSuchElementException</code>
+     * on <code>next()</code>. The <code>Extent</code> instance can still be used
+     * as a parameter of <code>Query.setExtent</code>, and to get an <code>Iterator</code>.
+     * @param it an <code>Iterator</code> obtained by the method
+     * <code>iterator()</code> on this <code>Extent</code> instance.
+     */    
+    void close (Iterator<E> it);
 
-  /**
-   * An <code>Extent</code> is managed by a <code>PersistenceManager</code>; this method gives
-   * access to the owning <code>PersistenceManager</code>.
-   *
-   * @return the owning <code>PersistenceManager</code>
-   */
-  PersistenceManager getPersistenceManager();
+    /**
+     * Don't use this method directly; use <code>closeAll()</code> instead. It is intended for use with try-with-resources.
+     * @throws Exception if this resource cannot be closed
+     */
+    void close() throws Exception;
 
-  /**
-   * Close all <code>Iterator</code>s associated with this <code>Extent</code> instance. <code>
-   * Iterator</code>s closed by this method will return <code>false</code> to <code>hasNext()</code>
-   * and will throw <code>NoSuchElementException</code> on <code>next()</code>. The <code>Extent
-   * </code> instance can still be used as a parameter of <code>Query.setExtent</code>, and to get
-   * an <code>Iterator</code>.
-   */
-  void closeAll();
-
-  /**
-   * Close an <code>Iterator</code> associated with this <code>Extent</code> instance. <code>
-   * Iterator</code>s closed by this method will return <code>false</code> to <code>hasNext()</code>
-   * and will throw <code>NoSuchElementException</code> on <code>next()</code>. The <code>Extent
-   * </code> instance can still be used as a parameter of <code>Query.setExtent</code>, and to get
-   * an <code>Iterator</code>.
-   *
-   * @param it an <code>Iterator</code> obtained by the method <code>iterator()</code> on this
-   *     <code>Extent</code> instance.
-   */
-  void close(Iterator<E> it);
-
-  /**
-   * Don't use this method directly; use <code>closeAll()</code> instead. It is intended for use
-   * with try-with-resources.
-   *
-   * @throws Exception if this resource cannot be closed
-   */
-  void close() throws Exception;
-
-  /**
-   * Get the fetch plan associated with this Extent.
-   *
-   * @return the fetch plan
-   * @since 2.0
-   */
-  FetchPlan getFetchPlan();
+    /** Get the fetch plan associated with this Extent.
+     * @return the fetch plan
+     * @since 2.0
+     */
+    FetchPlan getFetchPlan();
 }
+
diff --git a/api/src/main/java/javax/jdo/FetchGroup.java b/api/src/main/java/javax/jdo/FetchGroup.java
index 2e7827bc..ca4d2ace 100644
--- a/api/src/main/java/javax/jdo/FetchGroup.java
+++ b/api/src/main/java/javax/jdo/FetchGroup.java
@@ -5,13 +5,13 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- *
+ * 
  *     https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
+ * 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
  * limitations under the License.
  */
 
@@ -19,269 +19,265 @@
  * FetchGroup.java
  *
  */
-
+ 
 package javax.jdo;
 
 import java.util.Set;
 
 /**
- * FetchGroup represents a named fetch group for a specific class or interface. A fetch group
- * instance identifies the name of the class or interface, the list of members (fields or
- * properties) to be fetched when the fetch group is active, and the recursion depth for each
- * member.
- *
- * <p>Fetch groups are updated using methods on this interface. An instance of a class implementing
- * this interface can be obtained from {@link PersistenceManager#getFetchGroup} or {@link
- * PersistenceManagerFactory#getFetchGroup}.
- *
- * <p>A FetchGroup can be unscoped or can be in one of two scopes (the {@link PersistenceManager} or
- * the {@link PersistenceManagerFactory} scope). Unscoped FetchGroups do not affect any behavior. A
- * FetchGroup in PersistenceManager scope hides the corresponding FetchGroup in the
- * PersistenceManagerFactory scope.
- *
- * <ul>
- *   <li>When a FetchGroup is obtained via {@link PersistenceManager#getFetchGroup}, it is
- *       immediately in scope of its <code>PersistenceManager</code>. Subsequent modifications of
- *       the FetchGroup immediately affect <code>FetchPlan</code>s that contain the <code>FetchGroup
- *       </code>.
- *   <li>When a FetchGroup is obtained via {@link PersistenceManagerFactory#getFetchGroup}, it is
- *       unscoped.
- *   <li>When a FetchGroup is added to the set of active FetchGroups via {@link
- *       PersistenceManagerFactory#addFetchGroups}, it is put in scope of the <code>
- *       PersistenceManagerFactory</code>.
- *   <li>When a FetchGroup is removed from the set of active FetchGroups via {@link
- *       PersistenceManagerFactory#removeFetchGroups}, {@link
- *       PersistenceManagerFactory#removeAllFetchGroups}, or replaced via {@link
- *       PersistenceManagerFactory#addFetchGroups}, it is unscoped.
- * </ul>
- *
+ * FetchGroup represents a named fetch group for a specific class or 
+ * interface. A fetch group instance identifies the name of the class or 
+ * interface, the list of members (fields or properties) to be fetched when 
+ * the fetch group is active, and the recursion depth for each member.
+ * <p> 
+ * Fetch groups are updated using methods on this interface. An instance of
+ * a class implementing this interface can be obtained from
+ * {@link PersistenceManager#getFetchGroup} or
+ * {@link PersistenceManagerFactory#getFetchGroup}.
+ * <p> 
+ * A FetchGroup can be unscoped or can be in one of two scopes (the 
+ * {@link PersistenceManager} or the {@link PersistenceManagerFactory} scope). 
+ * Unscoped FetchGroups do not affect any behavior.
+ * A FetchGroup in PersistenceManager scope hides the corresponding 
+ * FetchGroup in the PersistenceManagerFactory scope.
+ * <ul><li>When a FetchGroup is obtained via 
+ * {@link PersistenceManager#getFetchGroup},
+ * it is immediately in scope of its <code>PersistenceManager</code>.
+ * Subsequent modifications of the FetchGroup
+ * immediately affect <code>FetchPlan</code>s that contain the
+ * <code>FetchGroup</code>.
+ * </li><li>When a FetchGroup is obtained via 
+ * {@link PersistenceManagerFactory#getFetchGroup}, it is unscoped.
+ * </li><li>When a FetchGroup is added to the set of active FetchGroups via
+ * {@link PersistenceManagerFactory#addFetchGroups}, it is put in scope of the
+ * <code>PersistenceManagerFactory</code>. 
+ * </li><li>When a FetchGroup is removed from the set of active FetchGroups via
+ * {@link PersistenceManagerFactory#removeFetchGroups}, 
+ * {@link PersistenceManagerFactory#removeAllFetchGroups}, or replaced via
+ * {@link PersistenceManagerFactory#addFetchGroups}, it is unscoped.
+ * </li></ul>
  * @version 2.2
  * @since 2.2
  */
 public interface FetchGroup {
 
-  /**
-   * For use with {@link #addCategory} and {@link #removeCategory} calls. This category includes
-   * members defined in the default fetch group in xml or annotations. Redefining the default fetch
-   * group via the API does not affect the members defined by this category.
-   *
-   * <p>Using this category also sets the fetch-depth for the members in the default fetch group.
-   *
-   * @since 2.2
-   */
-  public static final String DEFAULT = "default";
+    /**
+     * For use with {@link #addCategory} and {@link #removeCategory} calls.
+     * This category includes members defined in the default fetch group
+     * in xml or annotations. Redefining the default fetch group via the API
+     * does not affect the members defined by this category.
+     * <p>
+     * Using this category also sets the fetch-depth for the members in the
+     * default fetch group.</p>
+     * @since 2.2
+     */
+    public static final String DEFAULT = "default";
 
-  /**
-   * For use with {@link #addCategory} and {@link #removeCategory} calls. This category includes
-   * members of all relationship types.
-   *
-   * @since 2.2
-   */
-  public static final String RELATIONSHIP = "relationship";
+    /**
+     * For use with {@link #addCategory} and {@link #removeCategory} calls.
+     * This category includes members of all relationship types.
+     * @since 2.2
+     */
+    public static final String RELATIONSHIP = "relationship";
 
-  /**
-   * For use with {@link #addCategory} and {@link #removeCategory} calls. This category includes
-   * members of all multi-valued types, including Collection, array, and Map types of basic and
-   * relationship types.
-   *
-   * @since 2.2
-   */
-  public static final String MULTIVALUED = "multivalued";
+    /**
+     * For use with {@link #addCategory} and {@link #removeCategory} calls.
+     * This category includes members of all multi-valued types, including
+     * Collection, array, and Map types of basic and relationship types.
+     * @since 2.2
+     */
+    public static final String MULTIVALUED = "multivalued";
 
-  /**
-   * For use with {@link #addCategory} and {@link #removeCategory} calls. This category includes
-   * members of all primitive and immutable object class types as defined in section 6.4 of the
-   * specification, including String, Locale, Currency, BigDecimal, and BigInteger; as well as Date
-   * and its jdbc subtypes and Enum types.
-   *
-   * @since 2.2
-   */
-  public static final String BASIC = "basic";
+    /**
+     * For use with {@link #addCategory} and {@link #removeCategory} calls.
+     * This category includes members of all primitive and immutable
+     * object class types as defined in section 6.4 of the specification,
+     * including String, Locale, Currency, BigDecimal, and BigInteger; 
+     * as well as Date and its jdbc subtypes and Enum types.
+     * @since 2.2
+     */
+    public static final String BASIC = "basic";
 
-  /**
-   * For use with {@link #addCategory} and {@link #removeCategory} calls. This category includes all
-   * members in the persistent type.
-   *
-   * <p>Using this category also sets the fetch-depth for the members in the default fetch group.
-   *
-   * @since 2.2
-   */
-  public static final String ALL = "all";
+    /**
+     * For use with {@link #addCategory} and {@link #removeCategory} calls.
+     * This category includes all members in the persistent type.
+     * <p>
+     * Using this category also sets the fetch-depth for the members in the
+     * default fetch group.</p>
+     * @since 2.2
+     */
+    public static final String ALL = "all";
 
-  /**
-   * Return the hashCode for this instance. The hash code should combine both the class and fetch
-   * group name. The hash codes for two equal instances must be identical.
-   *
-   * @return the hash code
-   * @since 2.2
-   */
-  int hashCode();
+    /** 
+     * Return the hashCode for this instance. The hash code should combine both
+     * the class and fetch group name. The hash codes for two equal instances
+     * must be identical.
+     * @return the hash code
+     * @since 2.2
+     */
+    int hashCode();
 
-  /**
-   * Return whether this instance is equal to the other. The equals method must compare the class
-   * for identity and the fetch group name for equality.
-   *
-   * @return whether this instance is equal to the other
-   * @since 2.2
-   */
-  boolean equals(Object other);
+    /**
+     * Return whether this instance is equal to the other. The equals method
+     * must compare the class for identity and the fetch group name for
+     * equality.
+     * @return whether this instance is equal to the other
+     * @since 2.2
+     */
+    boolean equals(Object other);
 
-  /**
-   * Get the name of this FetchGroup. The name is set only in the factory method.
-   *
-   * @return the name
-   * @since 2.2
-   */
-  String getName();
+    /** 
+     * Get the name of this FetchGroup. The name is set only in the
+     * factory method.
+     * @return the name
+     * @since 2.2
+     */
+    String getName();
 
-  /**
-   * Get the persistent type (class or interface) of this FetchGroup. The persistent type is set
-   * only in the factory method(s).
-   *
-   * @return the persistent type
-   * @since 2.2
-   */
-  Class getType();
+    /** 
+     * Get the persistent type (class or interface) of this FetchGroup.
+     * The persistent type is set only in the factory method(s).
+     * @return the persistent type
+     * @since 2.2
+     */
+    Class getType();
 
-  /**
-   * Get the post-load property of this FetchGroup.
-   *
-   * @return the post-load property
-   * @since 2.2
-   */
-  boolean getPostLoad();
+    /** 
+     * Get the post-load property of this FetchGroup.
+     * @return the post-load property
+     * @since 2.2
+     */
+    boolean getPostLoad();
 
-  /**
-   * Set the post-load property of this FetchGroup.
-   *
-   * @param postLoad Whether to post load this fetch group
-   * @return the FetchGroup
-   * @throws JDOUserException if the FetchGroup is unmodifiable
-   * @since 2.2
-   */
-  FetchGroup setPostLoad(boolean postLoad);
+    /** 
+     * Set the post-load property of this FetchGroup.
+     * @param postLoad Whether to post load this fetch group
+     * @return the FetchGroup
+     * @throws JDOUserException if the FetchGroup is unmodifiable
+     * @since 2.2
+     */
+    FetchGroup setPostLoad(boolean postLoad);
 
-  /**
-   * Add the member (field or property) to the set of members in this FetchGroup.
-   *
-   * @param memberName the name of a member to add to the FetchGroup
-   * @return the FetchGroup
-   * @throws JDOUserException if the parameter is not a member of the persistent type
-   * @throws JDOUserException if the FetchGroup is unmodifiable
-   * @since 2.2
-   */
-  FetchGroup addMember(String memberName);
+    /** 
+     * Add the member (field or property) to the set of members in this
+     * FetchGroup.
+     * @param memberName the name of a member to add to the FetchGroup
+     * @return the FetchGroup
+     * @throws JDOUserException if the parameter is not a member of the
+     * persistent type
+     * @throws JDOUserException if the FetchGroup is unmodifiable
+     * @since 2.2
+     */
+    FetchGroup addMember(String memberName);
 
-  /**
-   * Add the member (field or property) to the set of members in this FetchGroup. Duplicates are
-   * ignored.
-   *
-   * @param memberNames the names of members to add to the FetchGroup
-   * @return the FetchGroup
-   * @throws JDOUserException if any parameter is not a member of the persistent type
-   * @throws JDOUserException if the FetchGroup is unmodifiable
-   * @since 2.2
-   */
-  FetchGroup addMembers(String... memberNames);
+    /** 
+     * Add the member (field or property) to the set of members in this
+     * FetchGroup. Duplicates are ignored.
+     * @param memberNames the names of members to add to the FetchGroup
+     * @return the FetchGroup
+     * @throws JDOUserException if any parameter is not a member of the
+     * persistent type
+     * @throws JDOUserException if the FetchGroup is unmodifiable
+     * @since 2.2
+     */
+    FetchGroup addMembers(String... memberNames);
 
-  /**
-   * Remove the member (field or property) from the set of members in this FetchGroup.
-   *
-   * @param memberName Name of the member of the class to remove from the FetchGroup.
-   * @return the FetchGroup
-   * @throws JDOUserException if the parameter is not a member of the persistent type
-   * @throws JDOUserException if the FetchGroup is unmodifiable
-   * @since 2.2
-   */
-  FetchGroup removeMember(String memberName);
+    /**
+     * Remove the member (field or property) from the set of members in this FetchGroup.
+     * @param memberName Name of the member of the class to remove from the FetchGroup.
+     * @return the FetchGroup
+     * @throws JDOUserException if the parameter is not a member of the persistent type
+     * @throws JDOUserException if the FetchGroup is unmodifiable
+     * @since 2.2
+     */
+    FetchGroup removeMember(String memberName);
 
-  /**
-   * Remove the member (field or property) from the set of members in this FetchGroup. Duplicates in
-   * the parameter list are eliminated before removing them from the membership.
-   *
-   * @param memberNames Member names of the class to remove from this FetchGroup.
-   * @return the FetchGroup
-   * @throws JDOUserException if any parameter is not a member of the persistent type
-   * @throws JDOUserException if the FetchGroup is unmodifiable
-   * @since 2.2
-   */
-  FetchGroup removeMembers(String... memberNames);
+    /**
+     * Remove the member (field or property) from the set of members in this
+     * FetchGroup. Duplicates in the parameter list are eliminated before
+     * removing them from the membership.
+     * @param memberNames Member names of the class to remove from this FetchGroup.
+     * @return the FetchGroup
+     * @throws JDOUserException if any parameter is not a member of the persistent type
+     * @throws JDOUserException if the FetchGroup is unmodifiable
+     * @since 2.2
+     */
+    FetchGroup removeMembers(String... memberNames);
 
-  /**
-   * Add the members (fields or properties) of the named category to the set of members in this
-   * FetchGroup. This method first resolves the category name to a set of members and then adds the
-   * members as if {@link #addMembers} was called. After this method executes, the category is not
-   * remembered.
-   *
-   * @param categoryName Category to add to this FetchGroup.
-   * @return the FetchGroup
-   * @throws JDOUserException if the FetchGroup is unmodifiable
-   * @since 2.2
-   */
-  FetchGroup addCategory(String categoryName);
+    /**
+     * Add the members (fields or properties) of the named category
+     * to the set of members in this FetchGroup. This method first 
+     * resolves the category name to a set of members and then adds
+     * the members as if {@link #addMembers} was called. After this
+     * method executes, the category is not remembered.
+     * @param categoryName Category to add to this FetchGroup.
+     * @return the FetchGroup
+     * @throws JDOUserException if the FetchGroup is unmodifiable
+     * @since 2.2
+     */
+    FetchGroup addCategory(String categoryName);
 
-  /**
-   * Remove the members (fields or properties) of the named category from the set of members in this
-   * FetchGroup. This method first resolves the category name to a set of members and then removes
-   * the members as if {@link #removeMembers} was called. After this method executes, the category
-   * is not remembered.
-   *
-   * @param categoryName Category to remove from this FetchGroup.
-   * @return the FetchGroup
-   * @throws JDOUserException if the FetchGroup is unmodifiable
-   * @since 2.2
-   */
-  FetchGroup removeCategory(String categoryName);
+    /**
+     * Remove the members (fields or properties) of the named category
+     * from the set of members in this FetchGroup. This method first 
+     * resolves the category name to a set of members and then removes
+     * the members as if {@link #removeMembers} was called. After this
+     * method executes, the category is not remembered.
+     * @param categoryName Category to remove from this FetchGroup.
+     * @return the FetchGroup
+     * @throws JDOUserException if the FetchGroup is unmodifiable
+     * @since 2.2
+     */
+    FetchGroup removeCategory(String categoryName);
 
-  /**
-   * Set the recursion-depth for this member. The default is 1. A value of 0 means don't fetch the
-   * member (as if the member were omitted entirely). A value of -1 means fetch all instances
-   * reachable via this member.
-   *
-   * @return the FetchGroup
-   * @param memberName the name of the field or property
-   * @param recursionDepth the value for the recursion-depth property
-   * @throws JDOUserException if the member does not exist
-   * @throws JDOUserException if the FetchGroup is unmodifiable
-   * @since 2.2
-   */
-  FetchGroup setRecursionDepth(String memberName, int recursionDepth);
+    /**
+     * Set the recursion-depth for this member. The default is 1. A value of 0
+     * means don't fetch the member (as if the member were omitted entirely).
+     * A value of -1 means fetch all instances reachable via this member.
+     * @return the FetchGroup
+     * @param memberName the name of the field or property
+     * @param recursionDepth the value for the recursion-depth property
+     * @throws JDOUserException if the member does not exist
+     * @throws JDOUserException if the FetchGroup is unmodifiable
+     * @since 2.2
+     */
+    FetchGroup setRecursionDepth(String memberName, int recursionDepth);
 
-  /**
-   * Get the recursion-depth for this member.
-   *
-   * @param memberName the name of the field or property
-   * @return the recursion-depth for this member
-   * @throws JDOUserException if the member is not in the FetchGroup
-   * @since 2.2
-   */
-  int getRecursionDepth(String memberName);
+    /**
+     * Get the recursion-depth for this member.
+     * @param memberName the name of the field or property
+     * @return the recursion-depth for this member
+     * @throws JDOUserException if the member is not in the FetchGroup
+     * @since 2.2
+     */
+    int getRecursionDepth(String memberName);
 
-  /**
-   * Return an immutable Set of String containing the names of all members. The Set is a copy of the
-   * currently defined members and will not change based on subsequent changes to the membership in
-   * the FetchGroup.
-   *
-   * @return an immutable Set containing the names of all members in the FetchGroup
-   * @since 2.2
-   */
-  Set getMembers();
+    /**
+     * Return an immutable Set of String containing the names of all members.
+     * The Set is a copy of the currently defined members and will not change
+     * based on subsequent changes to the membership in the FetchGroup.
+     * @return an immutable Set containing the names of all members
+     * in the FetchGroup
+     * @since 2.2
+     */
+    Set getMembers();
 
-  /**
-   * Make this FetchGroup unmodifiable. If already unmodifiable, this method has no effect.
-   *
-   * @return the FetchGroup
-   * @since 2.2
-   */
-  FetchGroup setUnmodifiable();
+    /**
+     * Make this FetchGroup unmodifiable. If already unmodifiable, this method
+     * has no effect.
+     * @return the FetchGroup
+     * @since 2.2
+     */
+    FetchGroup setUnmodifiable();
 
-  /**
-   * Return whether this FetchGroup is unmodifiable. If so, methods {@link #setPostLoad}, {@link
-   * #addMember}, {@link #removeMember}, {@link #addMembers}, {@link #removeMembers}, {@link
-   * #addCategory}, and {@link #removeCategory} will throw {@link JDOUserException}.
-   *
-   * @return whether the FetchGroup is unmodifiable
-   * @since 2.2
-   */
-  boolean isUnmodifiable();
+    /**
+     * Return whether this FetchGroup is unmodifiable. If so, methods
+     * {@link #setPostLoad}, {@link #addMember}, {@link #removeMember}, 
+     * {@link #addMembers}, {@link #removeMembers}, 
+     * {@link #addCategory}, and {@link #removeCategory}
+     * will throw {@link JDOUserException}.
+     * @return whether the FetchGroup is unmodifiable
+     * @since 2.2
+     */
+    boolean isUnmodifiable();
 }
diff --git a/api/src/main/java/javax/jdo/FetchPlan.java b/api/src/main/java/javax/jdo/FetchPlan.java
index 0548b5cd..85ea6722 100644
--- a/api/src/main/java/javax/jdo/FetchPlan.java
+++ b/api/src/main/java/javax/jdo/FetchPlan.java
@@ -5,13 +5,13 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- *
+ * 
  *     https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
+ * 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
  * limitations under the License.
  */
 
@@ -19,221 +19,211 @@
  * FetchPlan.java
  *
  */
-
+ 
 package javax.jdo;
 
 import java.util.Collection;
 import java.util.Set;
 
 /**
- * Fetch groups are activated using methods on this interface. An instance of this interface can be
- * obtained from {@link PersistenceManager#getFetchPlan}, {@link Extent#getFetchPlan}, and {@link
- * Query#getFetchPlan}. When a <code>Query</code> or <code>Extent</code> is retrieved from a <code>
- * PersistenceManager</code>, its <code>FetchPlan</code> is initialized to the same settings as that
- * of the <code>PersistenceManager</code>. Subsequent modifications of the <code>Query</code> or
- * <code>Extent</code>'s <code>FetchPlan</code> are not reflected in the <code>FetchPlan</code> of
- * the <code>PersistenceManager</code>.
- *
+ * Fetch groups are activated using methods on this interface. An
+ * instance of this interface can be obtained from {@link
+ * PersistenceManager#getFetchPlan}, {@link Extent#getFetchPlan}, and
+ * {@link Query#getFetchPlan}. When a <code>Query</code> or
+ * <code>Extent</code> is retrieved from a
+ * <code>PersistenceManager</code>, its <code>FetchPlan</code> is
+ * initialized to the same settings as that of the
+ * <code>PersistenceManager</code>. Subsequent modifications of the
+ * <code>Query</code> or <code>Extent</code>'s <code>FetchPlan</code>
+ * are not reflected in the <code>FetchPlan</code> of the
+ * <code>PersistenceManager</code>.
  * @version 2.0
  * @since 2.0
  */
 public interface FetchPlan {
 
-  /**
-   * For use with {@link #addGroup}, {@link #removeGroup}, and the various {@link #setGroups} calls.
-   * Value: <code>default</code>.
-   *
-   * @since 2.0
-   */
-  public static final String DEFAULT = "default";
-
-  /**
-   * For use with {@link #addGroup}, {@link #removeGroup}, and the various {@link #setGroups} calls.
-   * Value: <code>all</code>.
-   *
-   * @since 2.0
-   */
-  public static final String ALL = "all";
-
-  /**
-   * For use with {@link PersistenceManager#detachCopy} and {@link #setDetachmentOptions}. Specifies
-   * that fields that are loaded but not in the current fetch plan should be unloaded prior to
-   * detachment.
-   *
-   * @since 2.0
-   */
-  public static final int DETACH_UNLOAD_FIELDS = 2;
-
-  /**
-   * For use with {@link PersistenceManager#detachCopy} and {@link #setDetachmentOptions}. Specifies
-   * that fields that are not loaded but are in the current fetch plan should be loaded prior to
-   * detachment.
-   *
-   * @since 2.0
-   */
-  public static final int DETACH_LOAD_FIELDS = 1;
-
-  /**
-   * For use with {@link #setFetchSize}. Value: -1.
-   *
-   * @since 2.0
-   */
-  public static final int FETCH_SIZE_GREEDY = -1;
-
-  /**
-   * For use with {@link #setFetchSize}. Value: 0.
-   *
-   * @since 2.0
-   */
-  public static final int FETCH_SIZE_OPTIMAL = 0;
-
-  /**
-   * Add the fetch group to the set of active fetch groups.
-   *
-   * @param fetchGroupName Name of the FetchGroup to add
-   * @return the FetchPlan
-   * @since 2.0
-   */
-  FetchPlan addGroup(String fetchGroupName);
-
-  /**
-   * Remove the fetch group from the set active fetch groups.
-   *
-   * @param fetchGroupName Name of the FetchGroup to remove
-   * @return the FetchPlan
-   * @since 2.0
-   */
-  FetchPlan removeGroup(String fetchGroupName);
-
-  /**
-   * Remove all active groups leaving no active fetch group.
-   *
-   * @return the FetchPlan
-   * @since 2.0
-   */
-  FetchPlan clearGroups();
-
-  /**
-   * Return an immutable Set containing the names of all active fetch groups. The Set is a copy of
-   * the currently active groups and will not change based on subsequent changes to the groups.
-   *
-   * @return an immutable Set containing the names of all currently active fetch groups
-   * @since 2.0
-   */
-  Set getGroups();
-
-  /**
-   * Set a collection of groups.
-   *
-   * @param fetchGroupNames a collection of names of fetch groups
-   * @return the FetchPlan
-   * @since 2.0
-   */
-  FetchPlan setGroups(Collection fetchGroupNames);
-
-  /**
-   * Set a collection of groups.
-   *
-   * @param fetchGroupNames a String array of names of fetch groups
-   * @return the FetchPlan
-   * @since 2.0
-   */
-  FetchPlan setGroups(String... fetchGroupNames);
-
-  /**
-   * Set the active fetch groups to the single named fetch group.
-   *
-   * @param fetchGroupName the single fetch group
-   * @return the FetchPlan
-   * @since 2.0
-   */
-  FetchPlan setGroup(String fetchGroupName);
-
-  /**
-   * Set the maximum fetch depth when fetching. A value of 0 has no meaning and will throw a
-   * JDOUserException. A value of -1 means that no limit is placed on fetching. A positive integer
-   * will result in that number of references from the initial object to be fetched.
-   *
-   * @param fetchDepth the depth
-   * @return the FetchPlan
-   * @since 2.0
-   */
-  FetchPlan setMaxFetchDepth(int fetchDepth);
-
-  /**
-   * Return the maximum fetch depth used when fetching instances.
-   *
-   * @return the maximum fetch depth
-   * @since 2.0
-   */
-  int getMaxFetchDepth();
-
-  /**
-   * Set the roots for DetachAllOnCommit.
-   *
-   * @param roots Collection of the detachment roots.
-   * @return This FetchPlan
-   * @since 2.0
-   */
-  FetchPlan setDetachmentRoots(Collection roots);
-
-  /**
-   * Get the roots for DetachAllOnCommit.
-   *
-   * @return Collection of detachment roots.
-   * @since 2.0
-   */
-  Collection getDetachmentRoots();
-
-  /**
-   * Set the root classes for DetachAllOnCommit.
-   *
-   * @param rootClasses The root classes.
-   * @return This FetchPlan
-   * @since 2.0
-   */
-  FetchPlan setDetachmentRootClasses(Class... rootClasses);
-
-  /**
-   * Get the root classes for DetachAllOnCommit.
-   *
-   * @return The detachment root classes
-   * @since 2.0
-   */
-  Class[] getDetachmentRootClasses();
-
-  /**
-   * Set the fetch size for large result set support. Use {@link #FETCH_SIZE_OPTIMAL} to unset, and
-   * {@link #FETCH_SIZE_GREEDY} to force loading of everything.
-   *
-   * @param fetchSize the fetch size
-   * @return the FetchPlan
-   * @since 2.0
-   */
-  FetchPlan setFetchSize(int fetchSize);
-
-  /**
-   * Return the fetch size, or {@link #FETCH_SIZE_OPTIMAL} if not set, or {@link #FETCH_SIZE_GREEDY}
-   * to fetch all.
-   *
-   * @return the fetch size
-   * @since 2.0
-   */
-  int getFetchSize();
-
-  /**
-   * Set options to be used during detachment. Options are {@link #DETACH_LOAD_FIELDS} and {@link
-   * #DETACH_UNLOAD_FIELDS}.
-   *
-   * @param options Options for use during detachment.
-   * @return This FetchPlan
-   */
-  FetchPlan setDetachmentOptions(int options);
-
-  /**
-   * Get options used during detachment.
-   *
-   * @return Options to use during detachment.
-   */
-  int getDetachmentOptions();
+    /**
+     * For use with {@link #addGroup}, {@link #removeGroup}, and the
+     * various {@link #setGroups} calls. Value: <code>default</code>.
+     * @since 2.0
+     */
+    public static final String DEFAULT = "default";
+
+    /**
+     * For use with {@link #addGroup}, {@link #removeGroup}, and the
+     * various {@link #setGroups} calls. Value: <code>all</code>.
+     * @since 2.0
+     */
+    public static final String ALL = "all";
+
+    /**
+     * For use with {@link PersistenceManager#detachCopy} and
+     * {@link #setDetachmentOptions}. Specifies that
+     * fields that are loaded but not in the current fetch plan should
+     * be unloaded prior to detachment.
+     * @since 2.0
+     */
+    public static final int DETACH_UNLOAD_FIELDS = 2;
+
+    /**
+     * For use with {@link PersistenceManager#detachCopy} and
+     * {@link #setDetachmentOptions}. Specifies that
+     * fields that are not loaded but are in the current fetch plan should
+     * be loaded prior to detachment.
+     * @since 2.0
+     */
+    public static final int DETACH_LOAD_FIELDS = 1;
+
+    /**
+     * For use with {@link #setFetchSize}. Value: -1.
+     * @since 2.0
+     */
+    public static final int FETCH_SIZE_GREEDY = -1;
+
+    /**
+     * For use with {@link #setFetchSize}. Value: 0.
+     * @since 2.0
+     */
+    public static final int FETCH_SIZE_OPTIMAL = 0;
+
+    /** 
+     * Add the fetch group to the set of active fetch groups.
+     * @param fetchGroupName Name of the FetchGroup to add
+     * @return the FetchPlan
+     * @since 2.0
+     */
+    FetchPlan addGroup(String fetchGroupName);
+
+    /** 
+     * Remove the fetch group from the set active fetch groups. 
+     * @param fetchGroupName Name of the FetchGroup to remove
+     * @return the FetchPlan
+     * @since 2.0
+     */
+    FetchPlan removeGroup(String fetchGroupName);
+
+    /** 
+     * Remove all active groups leaving no active fetch group.
+     * @return the FetchPlan
+     * @since 2.0
+     */ 
+    FetchPlan clearGroups();
+
+    /** 
+     * Return an immutable Set containing the names 
+     * of all active fetch groups. The Set is a copy of 
+     * the currently active groups and will not change
+     * based on subsequent changes to the groups.
+     * @return an immutable Set containing the names 
+     * of all currently active fetch groups
+     * @since 2.0
+     */
+    Set getGroups();
+
+    /** 
+     * Set a collection of groups.
+     * @param fetchGroupNames a collection of names of fetch groups
+     * @return the FetchPlan
+     * @since 2.0
+     */
+    FetchPlan setGroups(Collection fetchGroupNames);
+
+    /** 
+     * Set a collection of groups.
+     * @param fetchGroupNames a String array of names of fetch groups
+     * @return the FetchPlan
+     * @since 2.0
+     */
+    FetchPlan setGroups(String... fetchGroupNames);
+
+    /** 
+     * Set the active fetch groups to the single named fetch group.
+     * @param fetchGroupName the single fetch group
+     * @return the FetchPlan
+     * @since 2.0
+     */
+    FetchPlan setGroup(String fetchGroupName);
+
+    /**
+     * Set the maximum fetch depth when fetching. 
+     * A value of 0 has no meaning and will throw a JDOUserException.
+     * A value of -1 means that no limit is placed on fetching.
+     * A positive integer will result in that number of references from the
+     * initial object to be fetched.
+     * @param fetchDepth the depth
+     * @return the FetchPlan
+     * @since 2.0
+     */
+    FetchPlan setMaxFetchDepth(int fetchDepth);
+
+    /**
+     * Return the maximum fetch depth used when fetching instances.
+     * @return the maximum fetch depth
+     * @since 2.0
+     */
+    int getMaxFetchDepth(); 
+
+    /**
+     * Set the roots for DetachAllOnCommit.
+     * @param roots Collection of the detachment roots.
+     * @return This FetchPlan
+     * @since 2.0
+     */
+    FetchPlan setDetachmentRoots(Collection roots);
+
+    /**
+     * Get the roots for DetachAllOnCommit.
+     * @return Collection of detachment roots.
+     * @since 2.0
+     */
+    Collection getDetachmentRoots();
+
+    /**
+     * Set the root classes for DetachAllOnCommit.
+     * @param rootClasses The root classes.
+     * @return This FetchPlan
+     * @since 2.0
+     */
+    FetchPlan setDetachmentRootClasses(Class... rootClasses);
+
+    /**
+     * Get the root classes for DetachAllOnCommit.
+     * @return The detachment root classes
+     * @since 2.0
+     */
+    Class[] getDetachmentRootClasses();
+
+    /**
+     * Set the fetch size for large result set support. Use
+     * {@link #FETCH_SIZE_OPTIMAL} to unset, and {@link #FETCH_SIZE_GREEDY}
+     * to force loading of everything.
+     * @param fetchSize the fetch size
+     * @return the FetchPlan
+     * @since 2.0
+     */
+    FetchPlan setFetchSize(int fetchSize);
+
+    /**
+     * Return the fetch size, or {@link #FETCH_SIZE_OPTIMAL} if not set,
+     * or {@link #FETCH_SIZE_GREEDY} to fetch all.
+     * @return the fetch size
+     * @since 2.0
+     */
+    int getFetchSize(); 
+
+    /**
+     * Set options to be used during detachment. Options are {@link
+     * #DETACH_LOAD_FIELDS} and {@link #DETACH_UNLOAD_FIELDS}.
+     * @param options Options for use during detachment.
+     * @return This FetchPlan
+     */
+    FetchPlan setDetachmentOptions(int options);
+ 
+    /**
+     * Get options used during detachment.
+     * @return Options to use during detachment.
+     */
+    int getDetachmentOptions();
+  
 }
+
diff --git a/api/src/main/java/javax/jdo/InstanceCallbacks.java b/api/src/main/java/javax/jdo/InstanceCallbacks.java
index 2aad32ab..640e963e 100644
--- a/api/src/main/java/javax/jdo/InstanceCallbacks.java
+++ b/api/src/main/java/javax/jdo/InstanceCallbacks.java
@@ -5,13 +5,13 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- *
+ * 
  *     https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
+ * 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
  * limitations under the License.
  */
 
@@ -19,44 +19,53 @@
  * InstanceCallbacks.java
  *
  */
-
+ 
 package javax.jdo;
 
-/**
- * A <code>PersistenceCapable</code> class that provides callback methods for life cycle events
- * implements this interface.
+/** A <code>PersistenceCapable</code> class that provides callback methods for life
+ * cycle events implements this interface.
  *
- * <p>For JDO 2.0, <code>InstanceCallbacks</code> has been refactored to extend four other
- * interfaces, without changing any of the methods or semantics. This allows fine-grained control
- * over callbacks, for example to allow a class to implement the load callback without implementing
- * any of the other callbacks. For backward compatibility with JDO 1.0, the <code>InstanceCallbacks
- * </code> interface is preserved.
+ * <P>For JDO 2.0, <code>InstanceCallbacks</code> has been refactored to extend 
+ * four other interfaces, without changing any of the methods or semantics. 
+ * This allows fine-grained control over callbacks, for
+ * example to allow a class to implement the load callback without
+ * implementing any of the other callbacks. For backward compatibility
+ * with JDO 1.0, the <code>InstanceCallbacks</code> interface is preserved.
  *
- * <p>Classes which include non-persistent fields whose values depend on the values of persistent
- * fields require callbacks on specific JDO instance life cycle events in order to correctly
- * populate the values in these fields.
+ * <P>Classes which include non-persistent fields whose values depend
+ * on the values of persistent fields require callbacks on specific
+ * JDO instance life cycle events in order to correctly populate the
+ * values in these fields.
  *
- * <p>The callbacks might also be used if the persistent instances need to be put into the runtime
- * infrastructure of the application. For example, a persistent instance might notify other
- * instances on changes to state. The persistent instance might be in a list of managed instances.
- * When the persistent instance is made hollow, it can no longer generate change events, and the
- * persistent instance should be removed from the list of managed instances.
+ * <P>The callbacks might also be used if the persistent instances
+ * need to be put into the runtime infrastructure of the application.
+ * For example, a persistent instance might notify other instances
+ * on changes to state.  The persistent instance might be in a list of
+ * managed instances. When the persistent instance is made hollow,
+ * it can no longer generate change events, and the persistent
+ * instance should be removed from the list of managed instances.
  *
- * <p>To implement this, the application programmer would implement <code>jdoPostLoad</code> to put
- * itself into the list of managed instances, and implement <code>jdoPreClear</code> to remove
- * itself from the list. With JDO 1.0, the domain class would be declared to implement <code>
- * InstanceCallbacks</code>. With JDO 2.0, the domain class would be declared to implement <code>
- * javax.jdo.listener.LoadCallback</code> and <code>javax.jdo.listener.ClearCallback</code>.
+ * <P>To implement this, the application programmer would implement
+ * <code>jdoPostLoad</code> to put itself into the list of managed
+ * instances, and implement <code>jdoPreClear</code> to remove itself from
+ * the list. With JDO 1.0, the domain class would be declared to implement
+ * <code>InstanceCallbacks</code>. With JDO 2.0, the domain class 
+ * would be declared to implement
+ * <code>javax.jdo.listener.LoadCallback</code> and 
+ * <code>javax.jdo.listener.ClearCallback</code>.
  *
- * <p>Note that JDO does not manage the state of non-persistent fields, and when a JDO instance
- * transitions to hollow, JDO clears the persistent fields. It is the programmer's responsibility to
- * clear non-persistent fields so that garbage collection of referred instances can occur.
+ * <P>Note that JDO does not manage the state of non-persistent
+ * fields, and when a JDO instance transitions to hollow, JDO clears
+ * the persistent fields.  It is the programmer's responsibility to
+ * clear non-persistent fields so that garbage collection of
+ * referred instances can occur.
  *
  * @since 1.0
  * @version 2.0
  */
-public interface InstanceCallbacks
-    extends javax.jdo.listener.ClearCallback,
+public interface InstanceCallbacks 
+    extends javax.jdo.listener.ClearCallback, 
         javax.jdo.listener.DeleteCallback,
         javax.jdo.listener.LoadCallback,
-        javax.jdo.listener.StoreCallback {}
+        javax.jdo.listener.StoreCallback {
+}
diff --git a/api/src/main/java/javax/jdo/JDOCanRetryException.java b/api/src/main/java/javax/jdo/JDOCanRetryException.java
index 59d10e5a..8296fc39 100644
--- a/api/src/main/java/javax/jdo/JDOCanRetryException.java
+++ b/api/src/main/java/javax/jdo/JDOCanRetryException.java
@@ -5,13 +5,13 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- *
+ * 
  *     https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
+ * 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
  * limitations under the License.
  */
 
@@ -22,81 +22,74 @@
 
 package javax.jdo;
 
-/**
- * This is the base class for exceptions that can be retried.
+/** This is the base class for exceptions that can be retried.
  *
  * @version 1.0
  */
 public class JDOCanRetryException extends JDOException {
 
-  private static final long serialVersionUID = 3046202905626157173L;
-
-  /** Constructs a new <code>JDOCanRetryException</code> without a detail message. */
-  public JDOCanRetryException() {}
-
-  /**
-   * Constructs a new <code>JDOCanRetryException</code> with the specified detail message.
-   *
-   * @param msg the detail message.
-   */
-  public JDOCanRetryException(String msg) {
-    super(msg);
-  }
-
-  /**
-   * Constructs a new <code>JDOCanRetryException</code> with the specified detail message and nested
-   * <code>Throwable</code>s.
-   *
-   * @param msg the detail message.
-   * @param nested the nested <code>Throwable[]</code>.
-   */
-  public JDOCanRetryException(String msg, Throwable[] nested) {
-    super(msg, nested);
-  }
+	private static final long serialVersionUID = 3046202905626157173L;
 
-  /**
-   * Constructs a new <code>JDOCanRetryException</code> with the specified detail message and nested
-   * <code>Throwable</code>s.
-   *
-   * @param msg the detail message.
-   * @param nested the nested <code>Throwable</code>.
-   */
-  public JDOCanRetryException(String msg, Throwable nested) {
-    super(msg, nested);
-  }
+	/**
+     * Constructs a new <code>JDOCanRetryException</code> without a detail message.
+     */
+    public JDOCanRetryException() {
+    }
 
-  /**
-   * Constructs a new <code>JDOCanRetryException</code> with the specified detail message and failed
-   * object.
-   *
-   * @param msg the detail message.
-   * @param failed the failed object.
-   */
-  public JDOCanRetryException(String msg, Object failed) {
-    super(msg, failed);
-  }
+    /**
+     * Constructs a new <code>JDOCanRetryException</code> with the specified detail message.
+     * @param msg the detail message.
+     */
+    public JDOCanRetryException(String msg) {
+        super(msg);
+    }
 
-  /**
-   * Constructs a new <code>JDOCanRetryException</code> with the specified detail message, nested
-   * <code>Throwable</code>s, and failed object.
-   *
-   * @param msg the detail message.
-   * @param nested the nested <code>Throwable[]</code>.
-   * @param failed the failed object.
-   */
-  public JDOCanRetryException(String msg, Throwable[] nested, Object failed) {
-    super(msg, nested, failed);
-  }
+    /**
+     * Constructs a new <code>JDOCanRetryException</code> with the specified detail
+     * message and nested <code>Throwable</code>s.
+     * @param msg the detail message.
+     * @param nested the nested <code>Throwable[]</code>.
+     */
+    public JDOCanRetryException(String msg, Throwable[] nested) {
+        super(msg, nested);
+    }
+  
+    /**
+     * Constructs a new <code>JDOCanRetryException</code> with the specified detail
+     * message and nested <code>Throwable</code>s.
+     * @param msg the detail message.
+     * @param nested the nested <code>Throwable</code>.
+     */
+    public JDOCanRetryException(String msg, Throwable nested) {
+        super(msg, nested);
+    }
+  
+    /** Constructs a new <code>JDOCanRetryException</code> with the specified detail message
+     * and failed object.
+     * @param msg the detail message.
+     * @param failed the failed object.
+     */
+    public JDOCanRetryException(String msg, Object failed) {
+        super(msg, failed);
+    }
+  
+    /** Constructs a new <code>JDOCanRetryException</code> with the specified detail message,
+     * nested <code>Throwable</code>s, and failed object.
+     * @param msg the detail message.
+     * @param nested the nested <code>Throwable[]</code>.
+     * @param failed the failed object.
+     */
+    public JDOCanRetryException(String msg, Throwable[] nested, Object failed) {
+        super(msg, nested, failed);
+    }
 
-  /**
-   * Constructs a new <code>JDOCanRetryException</code> with the specified detail message, nested
-   * <code>Throwable</code>s, and failed object.
-   *
-   * @param msg the detail message.
-   * @param nested the nested <code>Throwable</code>.
-   * @param failed the failed object.
-   */
-  public JDOCanRetryException(String msg, Throwable nested, Object failed) {
-    super(msg, nested, failed);
-  }
+    /** Constructs a new <code>JDOCanRetryException</code> with the specified detail message,
+     * nested <code>Throwable</code>s, and failed object.
+     * @param msg the detail message.
+     * @param nested the nested <code>Throwable</code>.
+     * @param failed the failed object.
+     */
+    public JDOCanRetryException(String msg, Throwable nested, Object failed) {
+        super(msg, nested, failed);
+    }
 }
diff --git a/api/src/main/java/javax/jdo/JDODataStoreException.java b/api/src/main/java/javax/jdo/JDODataStoreException.java
index b08c4703..4437d10a 100644
--- a/api/src/main/java/javax/jdo/JDODataStoreException.java
+++ b/api/src/main/java/javax/jdo/JDODataStoreException.java
@@ -5,13 +5,13 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- *
+ * 
  *     https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
+ * 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
  * limitations under the License.
  */
 
@@ -22,81 +22,78 @@
 
 package javax.jdo;
 
-/**
- * This class represents data store exceptions that can be retried.
+/** This class represents data store exceptions that can be retried.
  *
  * @version 1.0
  */
 public class JDODataStoreException extends JDOCanRetryException {
 
-  private static final long serialVersionUID = -8728485891077403354L;
+	private static final long serialVersionUID = -8728485891077403354L;
 
-  /** Constructs a new <code>JDODataStoreException</code> without a detail message. */
-  public JDODataStoreException() {}
+    /**
+     * Constructs a new <code>JDODataStoreException</code> without a detail message.
+     */
+    public JDODataStoreException() {
+    }
 
-  /**
-   * Constructs a new <code>JDODataStoreException</code> with the specified detail message.
-   *
-   * @param msg the detail message.
-   */
-  public JDODataStoreException(String msg) {
-    super(msg);
-  }
+    /**
+     * Constructs a new <code>JDODataStoreException</code> with the specified detail message.
+     * @param msg the detail message.
+     */
+    public JDODataStoreException(String msg) {
+        super(msg);
+    }
 
-  /**
-   * Constructs a new <code>JDODataStoreException</code> with the specified detail message and
-   * nested <code>Throwable</code>s.
-   *
-   * @param msg the detail message.
-   * @param nested the nested <code>Throwable[]</code>.
-   */
-  public JDODataStoreException(String msg, Throwable[] nested) {
-    super(msg, nested);
-  }
+    /**
+     * Constructs a new <code>JDODataStoreException</code> with the specified 
+     * detail message and nested <code>Throwable</code>s.
+     * @param msg the detail message.
+     * @param nested the nested <code>Throwable[]</code>.
+     */
+    public JDODataStoreException(String msg, Throwable[] nested) {
+        super(msg, nested);
+    }
 
-  /**
-   * Constructs a new <code>JDODataStoreException</code> with the specified detail message and
-   * nested <code>Throwable</code>s.
-   *
-   * @param msg the detail message.
-   * @param nested the nested <code>Throwable</code>.
-   */
-  public JDODataStoreException(String msg, Throwable nested) {
-    super(msg, nested);
-  }
+    /**
+     * Constructs a new <code>JDODataStoreException</code> with the specified 
+     * detail message and nested <code>Throwable</code>s.
+     * @param msg the detail message.
+     * @param nested the nested <code>Throwable</code>.
+     */
+    public JDODataStoreException(String msg, Throwable nested) {
+        super(msg, nested);
+    }
 
-  /**
-   * Constructs a new <code>JDODataStoreException</code> with the specified detail message and
-   * failed object.
-   *
-   * @param msg the detail message.
-   * @param failed the failed object.
-   */
-  public JDODataStoreException(String msg, Object failed) {
-    super(msg, failed);
-  }
+    /**
+     * Constructs a new <code>JDODataStoreException</code> with the specified detail message
+     * and failed object.
+     * @param msg the detail message.
+     * @param failed the failed object.
+     */
+    public JDODataStoreException(String msg, Object failed) {
+        super(msg, failed);
+    }
+ 
+    /**
+     * Constructs a new <code>JDODataStoreException</code> with the specified detail message,
+     * nested <code>Throwable</code>s, and failed object.
+     * @param msg the detail message.
+     * @param nested the nested <code>Throwable[]</code>.
+     * @param failed the failed object.
+     */
+    public JDODataStoreException(String msg, Throwable[] nested, Object failed) {
+        super(msg, nested, failed);
+    }
 
-  /**
-   * Constructs a new <code>JDODataStoreException</code> with the specified detail message, nested
-   * <code>Throwable</code>s, and failed object.
-   *
-   * @param msg the detail message.
-   * @param nested the nested <code>Throwable[]</code>.
-   * @param failed the failed object.
-   */
-  public JDODataStoreException(String msg, Throwable[] nested, Object failed) {
-    super(msg, nested, failed);
-  }
-
-  /**
-   * Constructs a new <code>JDODataStoreException</code> with the specified detail message, nested
-   * <code>Throwable</code>s, and failed object.
-   *
-   * @param msg the detail message.
-   * @param nested the nested <code>Throwable</code>.
-   * @param failed the failed object.
-   */
-  public JDODataStoreException(String msg, Throwable nested, Object failed) {
-    super(msg, nested, failed);
-  }
+    /**
+     * Constructs a new <code>JDODataStoreException</code> with the specified detail message,
+     * nested <code>Throwable</code>s, and failed object.
+     * @param msg the detail message.
+     * @param nested the nested <code>Throwable</code>.
+     * @param failed the failed object.
+     */
+    public JDODataStoreException(String msg, Throwable nested, Object failed) {
+        super(msg, nested, failed);
+    }
 }
+
diff --git a/api/src/main/java/javax/jdo/JDODetachedFieldAccessException.java b/api/src/main/java/javax/jdo/JDODetachedFieldAccessException.java
index 72fd5b2e..011f6cda 100644
--- a/api/src/main/java/javax/jdo/JDODetachedFieldAccessException.java
+++ b/api/src/main/java/javax/jdo/JDODetachedFieldAccessException.java
@@ -5,13 +5,13 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- *
+ * 
  *     https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
+ * 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
  * limitations under the License.
  */
 
@@ -22,67 +22,61 @@
 
 package javax.jdo;
 
-/**
- * This class represents exceptions caused by access of an unloaded field while the instance is
- * detached.
+/** This class represents exceptions caused by access of an unloaded field while
+ *  the instance is detached.
  *
  * @version 2.0
  * @since 2.0
  */
 public class JDODetachedFieldAccessException extends JDOUserException {
 
-  private static final long serialVersionUID = 5035418119865472625L;
-
-  /**
-   * Constructs a new <code>JDODetachedFieldAccessException</code> without a detail message.
-   *
-   * @since 2.0
-   */
-  public JDODetachedFieldAccessException() {}
+	private static final long serialVersionUID = 5035418119865472625L;
 
-  /**
-   * Constructs a new <code>JDODetachedFieldAccessException</code> with the specified detail
-   * message.
-   *
-   * @param msg the detail message.
-   * @since 2.0
-   */
-  public JDODetachedFieldAccessException(String msg) {
-    super(msg);
-  }
+    /**
+     * Constructs a new <code>JDODetachedFieldAccessException</code> without a detail message.
+     * @since 2.0
+     */
+    public JDODetachedFieldAccessException() {
+    }
 
-  /**
-   * Constructs a new <code>JDODetachedFieldAccessException</code> with the specified detail message
-   * and failed object.
-   *
-   * @param msg the detail message.
-   * @param failed the failed object.
-   */
-  public JDODetachedFieldAccessException(String msg, Object failed) {
-    super(msg, failed);
-  }
+    /**
+     * Constructs a new <code>JDODetachedFieldAccessException</code> with the 
+     * specified detail message.
+     * @param msg the detail message.
+     * @since 2.0
+     */
+    public JDODetachedFieldAccessException(String msg) {
+        super(msg);
+    }
 
-  /**
-   * Constructs a new <code>JDODetachedFieldAccessException</code> with the specified detail message
-   * and nested <code>Throwable</code>s.
-   *
-   * @param msg the detail message.
-   * @param nested the nested <code>Throwable[]</code>.
-   * @since 2.0
-   */
-  public JDODetachedFieldAccessException(String msg, Throwable[] nested) {
-    super(msg, nested);
-  }
+    /** Constructs a new <code>JDODetachedFieldAccessException</code> 
+     * with the specified detail message and failed object.
+     * @param msg the detail message.
+     * @param failed the failed object.
+     */
+    public JDODetachedFieldAccessException(String msg, Object failed) {
+        super(msg, failed);
+    }
+  
+    /**
+     * Constructs a new <code>JDODetachedFieldAccessException</code> with the
+     * specified detail message and nested <code>Throwable</code>s.
+     * @param msg the detail message.
+     * @param nested the nested <code>Throwable[]</code>.
+     * @since 2.0
+     */
+    public JDODetachedFieldAccessException(String msg, Throwable[] nested) {
+        super(msg, nested);
+    }
 
-  /**
-   * Constructs a new <code>JDODetachedFieldAccessException</code> with the specified detail message
-   * and nested <code>Throwable</code>s.
-   *
-   * @param msg the detail message.
-   * @param nested the nested <code>Throwable</code>.
-   * @since 2.0
-   */
-  public JDODetachedFieldAccessException(String msg, Throwable nested) {
-    super(msg, nested);
-  }
+    /**
+     * Constructs a new <code>JDODetachedFieldAccessException</code> with the
+     * specified detail message and nested <code>Throwable</code>s.
+     * @param msg the detail message.
+     * @param nested the nested <code>Throwable</code>.
+     * @since 2.0
+     */
+    public JDODetachedFieldAccessException(String msg, Throwable nested) {
+        super(msg, nested);
+    }
 }
diff --git a/api/src/main/java/javax/jdo/JDOEnhanceException.java b/api/src/main/java/javax/jdo/JDOEnhanceException.java
index 56afd05c..dc8ed535 100644
--- a/api/src/main/java/javax/jdo/JDOEnhanceException.java
+++ b/api/src/main/java/javax/jdo/JDOEnhanceException.java
@@ -18,43 +18,49 @@ package javax.jdo;
 
 /**
  * Exception thrown when an error occurs during enhancement.
- *
  * @since 3.0
  */
-public class JDOEnhanceException extends JDOException {
-  private static final long serialVersionUID = 7953336394264555958L;
+public class JDOEnhanceException extends JDOException
+{
+	private static final long serialVersionUID = 7953336394264555958L;
 
-  /** Constructs a new <code>JDOEnhanceException</code> without a detail message. */
-  public JDOEnhanceException() {}
+	/**
+     * Constructs a new <code>JDOEnhanceException</code> without a 
+     * detail message.
+     */
+    public JDOEnhanceException()
+    {
+    }
 
-  /**
-   * Constructs a new <code>JDOEnhanceException</code> with the specified detail message.
-   *
-   * @param msg the detail message.
-   */
-  public JDOEnhanceException(String msg) {
-    super(msg);
-  }
+    /**
+     * Constructs a new <code>JDOEnhanceException</code> with the
+     * specified detail message.
+     * @param msg the detail message.
+     */
+    public JDOEnhanceException(String msg)
+    {
+        super(msg);
+    }
 
-  /**
-   * Constructs a new <code>JDOEnhanceException</code> with the specified detail message and nested
-   * <code>Throwable</code>s.
-   *
-   * @param msg the detail message.
-   * @param nested the nested <code>Throwable[]</code>.
-   */
-  public JDOEnhanceException(String msg, Throwable[] nested) {
-    super(msg, nested);
-  }
+    /**
+     * Constructs a new <code>JDOEnhanceException</code> with the
+     * specified detail message and nested <code>Throwable</code>s.
+     * @param msg the detail message.
+     * @param nested the nested <code>Throwable[]</code>.
+     */
+    public JDOEnhanceException(String msg, Throwable[] nested)
+    {
+        super(msg, nested);
+    }
 
-  /**
-   * Constructs a new <code>JDOEnhanceException</code> with the specified detail message and nested
-   * <code>Throwable</code>s.
-   *
-   * @param msg the detail message.
-   * @param nested the nested <code>Throwable</code>.
-   */
-  public JDOEnhanceException(String msg, Throwable nested) {
-    super(msg, nested);
-  }
+    /**
+     * Constructs a new <code>JDOEnhanceException</code> with the
+     * specified detail message and nested <code>Throwable</code>s.
+     * @param msg the detail message.
+     * @param nested the nested <code>Throwable</code>.
+     */
+    public JDOEnhanceException(String msg, Throwable nested)
+    {
+        super(msg, nested);
+    }
 }
diff --git a/api/src/main/java/javax/jdo/JDOEnhancer.java b/api/src/main/java/javax/jdo/JDOEnhancer.java
index 1c6306f1..08deb809 100644
--- a/api/src/main/java/javax/jdo/JDOEnhancer.java
+++ b/api/src/main/java/javax/jdo/JDOEnhancer.java
@@ -18,144 +18,135 @@ package javax.jdo;
 
 import java.lang.instrument.ClassFileTransformer;
 import java.util.Properties;
+
 import javax.jdo.metadata.JDOMetadata;
 
 /**
  * Interface for a JDO Enhancer.
- *
  * @since 3.0
  */
-public interface JDOEnhancer extends ClassFileTransformer {
-  /**
-   * Return non-configurable properties of this JDOEnhancer. Properties with keys "VendorName" and
-   * "VersionNumber" are required. Other keys are optional.
-   *
-   * @return the non-configurable properties of this JDOEnhancer.
-   */
-  Properties getProperties();
-
-  /**
-   * Whether to provide verbose output
-   *
-   * @param flag Verbose?
-   * @return The enhancer
-   */
-  JDOEnhancer setVerbose(boolean flag);
-
-  /**
-   * Mutator to set the location where enhanced classes are written. Mutator to set the location
-   * where enhanced classes are written. If this method is not called, classes will be enhanced in
-   * place, overwriting the existing classes. If overwriting classes in a jar file, the existing
-   * files in the jar file will be written unchanged except for the enhanced classes. The directory
-   * name can be absolute or relative.
-   *
-   * @param dirName Name of the directory
-   * @return The enhancer
-   */
-  JDOEnhancer setOutputDirectory(String dirName);
-
-  /**
-   * Mutator to set the class loader to use for loading classes.
-   *
-   * @param loader ClassLoader to use
-   * @return The enhancer
-   */
-  JDOEnhancer setClassLoader(ClassLoader loader);
-
-  /**
-   * Add a persistence-unit to the items to be enhanced.
-   *
-   * @param persistenceUnit Name of the persistence unit
-   * @return The enhancer
-   */
-  JDOEnhancer addPersistenceUnit(String persistenceUnit);
-
-  /**
-   * Add an in-memory class to the items to be enhanced. The class name should be of the form
-   * "mydomain.MyClass".
-   *
-   * @param className Name of the class
-   * @param bytes The bytes of the class
-   * @return The enhancer
-   */
-  JDOEnhancer addClass(String className, byte[] bytes);
-
-  /**
-   * Add class(es) to the items to be enhanced. The class names can be absolute file names, relative
-   * file names, or names of CLASSPATH resources.
-   *
-   * @param classNames Names of the classes
-   * @return The enhancer
-   */
-  JDOEnhancer addClasses(String... classNames);
-
-  /**
-   * Add metadata file(s) to the items to be enhanced. The metadata file names can be absolute file
-   * names, relative file names, or names of CLASSPATH resources. They should be JDO XML metadata
-   * files.
-   *
-   * @param metadataFiles Names of the files
-   * @return The enhancer
-   */
-  JDOEnhancer addFiles(String... metadataFiles);
-
-  /**
-   * Add a jar file to the items to be enhanced. The jar file name can be absolute, or relative or a
-   * CLASSPATH resource.
-   *
-   * @param jarFileName Name of the jar file
-   * @return The enhancer
-   */
-  JDOEnhancer addJar(String jarFileName);
-
-  /**
-   * Method to enhance the items specified using addJar, addFiles, addClasses, addClass,
-   * addPersistenceUnit.
-   *
-   * @return Number of classes enhanced
-   * @throws JDOEnhanceException if an error occurs during enhancement. If multiple errors occur
-   *     then the nested exceptions provides this detail.
-   */
-  int enhance();
-
-  /**
-   * Method to validate the items specified using addJar, addFiles, addClasses, addClass,
-   * addPersistenceUnit.
-   *
-   * @return Number of classes validated
-   * @throws JDOEnhanceException if an error occurs during validation. If multiple errors occur then
-   *     the nested exceptions provides this detail.
-   */
-  int validate();
-
-  /**
-   * Method to retrieve the (enhanced) bytes of the specified class. Only applies to the classes
-   * enhanced in the most recent enhance() call. If no enhance has yet been performed will throw a
-   * JDOEnhanceException. If the specified class hasn't been enhanced then will throw a
-   * JDOEnhanceException.
-   *
-   * @param className Name of the class (of the form "mydomain.MyClass")
-   * @return Enhanced bytes
-   */
-  byte[] getEnhancedBytes(String className);
-
-  /**
-   * Method to register metadata with the enhancement process managed by this <code>JDOEnhancer
-   * </code>. Metadata can be created using the method {@link #newMetadata}. If there is already
-   * metadata registered for a class contained in this metadata object then a JDOUserException will
-   * be thrown.
-   *
-   * @param metadata The Metadata to register.
-   * @since 3.0
-   */
-  void registerMetadata(JDOMetadata metadata);
-
-  /**
-   * Method to return a new metadata object that can be subsequently modified and registered with
-   * the enhancement process using the method {@link #registerMetadata}.
-   *
-   * @return The metadata
-   * @since 3.0
-   */
-  JDOMetadata newMetadata();
+public interface JDOEnhancer extends ClassFileTransformer
+{
+    /**
+     * Return non-configurable properties of this JDOEnhancer.
+     * Properties with keys "VendorName" and "VersionNumber" are required.
+     * Other keys are optional.
+     * @return the non-configurable properties of this JDOEnhancer.
+     */
+    Properties getProperties();
+
+    /**
+     * Whether to provide verbose output
+     * @param flag Verbose?
+     * @return The enhancer
+     */
+    JDOEnhancer setVerbose(boolean flag);
+
+    /**
+     * Mutator to set the location where enhanced classes are written.
+     * Mutator to set the location where enhanced classes are written.
+     * If this method is not called, classes will be enhanced in place, 
+     * overwriting the existing classes. If overwriting classes in a jar file,
+     * the existing files in the jar file will be written unchanged except
+     * for the enhanced classes. The directory name can be absolute or relative.
+     * @param dirName Name of the directory
+     * @return The enhancer
+     */
+    JDOEnhancer setOutputDirectory(String dirName);
+
+    /**
+     * Mutator to set the class loader to use for loading classes.
+     * @param loader ClassLoader to use
+     * @return The enhancer
+     */
+    JDOEnhancer setClassLoader(ClassLoader loader);
+
+    /**
+     * Add a persistence-unit to the items to be enhanced.
+     * @param persistenceUnit Name of the persistence unit
+     * @return The enhancer
+     */
+    JDOEnhancer addPersistenceUnit(String persistenceUnit);
+
+    /**
+     * Add an in-memory class to the items to be enhanced.
+     * The class name should be of the form "mydomain.MyClass".
+     * @param className Name of the class
+     * @param bytes The bytes of the class
+     * @return The enhancer
+     */
+    JDOEnhancer addClass(String className, byte[] bytes);
+
+    /**
+     * Add class(es) to the items to be enhanced.
+     * The class names can be absolute file names, relative file names, or
+     * names of CLASSPATH resources.
+     * @param classNames Names of the classes
+     * @return The enhancer
+     */
+    JDOEnhancer addClasses(String... classNames);
+
+    /**
+     * Add metadata file(s) to the items to be enhanced.
+     * The metadata file names can be absolute file names, relative file names, or
+     * names of CLASSPATH resources. They should be JDO XML metadata files.
+     * @param metadataFiles Names of the files
+     * @return The enhancer
+     */
+    JDOEnhancer addFiles(String... metadataFiles);
+
+    /**
+     * Add a jar file to the items to be enhanced.
+     * The jar file name can be absolute, or relative or a CLASSPATH resource.
+     * @param jarFileName Name of the jar file
+     * @return The enhancer
+     */
+    JDOEnhancer addJar(String jarFileName);
+
+    /**
+     * Method to enhance the items specified using addJar, addFiles, addClasses, addClass,
+     * addPersistenceUnit.
+     * @return Number of classes enhanced
+     * @throws JDOEnhanceException if an error occurs during enhancement. If multiple
+     * errors occur then the nested exceptions provides this detail.
+     */
+    int enhance();
+
+    /**
+     * Method to validate the items specified using addJar, addFiles, addClasses, addClass,
+     * addPersistenceUnit.
+     * @return Number of classes validated
+     * @throws JDOEnhanceException if an error occurs during validation. If multiple
+     * errors occur then the nested exceptions provides this detail.
+     */
+    int validate();
+
+    /**
+     * Method to retrieve the (enhanced) bytes of the specified class.
+     * Only applies to the classes enhanced in the most recent enhance() call.
+     * If no enhance has yet been performed will throw a JDOEnhanceException.
+     * If the specified class hasn't been enhanced then will throw a JDOEnhanceException.
+     * @param className Name of the class (of the form "mydomain.MyClass")
+     * @return Enhanced bytes
+     */
+    byte[] getEnhancedBytes(String className);
+
+    /**
+     * Method to register metadata with the enhancement process managed by this
+     * <code>JDOEnhancer</code>.
+     * Metadata can be created using the method {@link #newMetadata}.
+     * If there is already metadata registered for a class contained in this metadata
+     * object then a JDOUserException will be thrown.
+     * @param metadata The Metadata to register.
+     * @since 3.0
+     */
+    void registerMetadata(JDOMetadata metadata);
+
+    /**
+     * Method to return a new metadata object that can be subsequently modified
+     * and registered with the enhancement process using the method {@link #registerMetadata}.
+     * @return The metadata
+     * @since 3.0
+     */
+    JDOMetadata newMetadata();
 }
diff --git a/api/src/main/java/javax/jdo/JDOException.java b/api/src/main/java/javax/jdo/JDOException.java
index 3ea68ec9..18007f6c 100644
--- a/api/src/main/java/javax/jdo/JDOException.java
+++ b/api/src/main/java/javax/jdo/JDOException.java
@@ -5,13 +5,13 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- *
+ * 
  *     https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
+ * 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
  * limitations under the License.
  */
 
@@ -24,291 +24,275 @@ package javax.jdo;
 
 import javax.jdo.spi.I18NHelper;
 
-/**
- * This is the root of all JDO Exceptions. It contains an optional detail message, an optional
- * nested <code>Throwable</code> array and an optional failed object.
- *
+/** This is the root of all JDO Exceptions.  It contains an optional detail
+ * message, an optional nested <code>Throwable</code> array and an optional failed object.
  * @author Craig Russell
  * @version 1.0.2
  */
 public class JDOException extends java.lang.RuntimeException {
 
-  private static final long serialVersionUID = 1950979275859696534L;
-
-  /**
-   * This exception was generated because of an exception in the runtime library.
-   *
-   * @serial the nested <code>Throwable</code> array
-   */
-  Throwable[] nested;
-
-  /**
-   * This exception may be the result of incorrect parameters supplied to an API. This is the object
-   * from which the user can determine the cause of the problem.
-   *
-   * @serial the failed <code>Object</code>
-   */
-  Object failed;
-
-  /** The Internationalization message helper. */
-  private static I18NHelper msg = I18NHelper.getInstance("javax.jdo.Bundle"); // NOI18N
-
-  /** Flag indicating whether printStackTrace is being executed. */
-  private boolean inPrintStackTrace = false;
-
-  /** Constructs a new <code>JDOException</code> without a detail message. */
-  public JDOException() {}
-
-  /**
-   * Constructs a new <code>JDOException</code> with the specified detail message.
-   *
-   * @param msg the detail message.
-   */
-  public JDOException(String msg) {
-    super(msg);
-  }
-
-  /**
-   * Constructs a new <code>JDOException</code> with the specified detail message and nested <code>
-   * Throwable</code>s.
-   *
-   * @param msg the detail message.
-   * @param nested the nested <code>Throwable[]</code>.
-   */
-  public JDOException(String msg, Throwable[] nested) {
-    super(msg);
-    this.nested = nested;
-  }
-
-  /**
-   * Constructs a new <code>JDOException</code> with the specified detail message and nested <code>
-   * Throwable</code>.
-   *
-   * @param msg the detail message.
-   * @param nested the nested <code>Throwable</code>.
-   */
-  public JDOException(String msg, Throwable nested) {
-    super(msg);
-    this.nested = new Throwable[] {nested};
-  }
-
-  /**
-   * Constructs a new <code>JDOException</code> with the specified detail message and failed object.
-   *
-   * @param msg the detail message.
-   * @param failed the failed object.
-   */
-  public JDOException(String msg, Object failed) {
-    super(msg);
-    this.failed = failed;
-  }
-
-  /**
-   * Constructs a new <code>JDOException</code> with the specified detail message, nested <code>
-   * Throwable</code>s, and failed object.
-   *
-   * @param msg the detail message.
-   * @param nested the nested <code>Throwable[]</code>.
-   * @param failed the failed object.
-   */
-  public JDOException(String msg, Throwable[] nested, Object failed) {
-    super(msg);
-    this.nested = nested;
-    this.failed = failed;
-  }
-
-  /**
-   * Constructs a new <code>JDOException</code> with the specified detail message, nested <code>
-   * Throwable</code>, and failed object.
-   *
-   * @param msg the detail message.
-   * @param nested the nested <code>Throwable</code>.
-   * @param failed the failed object.
-   */
-  public JDOException(String msg, Throwable nested, Object failed) {
-    super(msg);
-    this.nested = new Throwable[] {nested};
-    this.failed = failed;
-  }
+	private static final long serialVersionUID = 1950979275859696534L;
 
-  /**
-   * The exception may include a failed object.
-   *
-   * @return the failed object.
-   */
-  public Object getFailedObject() {
-    return failed;
-  }
+    /** This exception was generated because of an exception in the runtime library.
+     * @serial the nested <code>Throwable</code> array
+     */
+    Throwable[] nested;
+  
+    /** This exception may be the result of incorrect parameters supplied to an API.
+     * This is the object from which the user can determine the cause of the problem.
+     * @serial the failed <code>Object</code>
+     */
+    Object failed;
 
-  /**
-   * The exception may have been caused by multiple exceptions in the runtime. If multiple objects
-   * caused the problem, each failed object will have its own <code>Exception</code>.
-   *
-   * @return the nested Throwable array.
-   */
-  public Throwable[] getNestedExceptions() {
-    return nested;
-  }
+    /**
+     * The Internationalization message helper.
+     */
+    private static I18NHelper msg = I18NHelper.getInstance ("javax.jdo.Bundle"); //NOI18N
 
-  /**
-   * Often there is only one nested exception, and this method returns it. If there are more than
-   * one, then this method returns the first nested exception. If there is no nested exception, then
-   * null is returned.
-   *
-   * @return the first or only nested Throwable.
-   * @since 1.0.1
-   */
-  public synchronized Throwable getCause() {
-    // super.printStackTrace calls getCause to handle the cause.
-    // Returning null prevents the superclass from handling the cause;
-    // instead the local implementation of printStackTrace should
-    // handle the cause. Otherwise, the cause is printed twice.
-    if (nested == null || nested.length == 0 || inPrintStackTrace) {
-      return null;
-    } else {
-      return nested[0];
+    /** 
+     * Flag indicating whether printStackTrace is being executed.
+     */
+    private boolean inPrintStackTrace = false;
+    
+    /**
+     * Constructs a new <code>JDOException</code> without a detail message.
+     */
+    public JDOException() {
     }
-  }
 
-  /**
-   * JDK 1.4 includes a new chaining mechanism for Throwable, but since JDO has its own "legacy"
-   * chaining mechanism, the "standard" mechanism cannot be used. This method always throws a
-   * JDOFatalInternalException.
-   *
-   * @param cause ignored.
-   * @return never.
-   */
-  public Throwable initCause(Throwable cause) {
-    throw new JDOFatalInternalException(msg.msg("ERR_CannotInitCause"));
-  }
+    /**
+     * Constructs a new <code>JDOException</code> with the specified detail message.
+     * @param msg the detail message.
+     */
+    public JDOException(String msg) {
+        super(msg);
+    }
 
-  /**
-   * The <code>String</code> representation includes the name of the class, the descriptive comment
-   * (if any), the <code>String</code> representation of the failed <code>Object</code> (if any),
-   * and the <code>String</code> representation of the nested <code>Throwable</code>s (if any).
-   *
-   * @return the <code>String</code>.
-   */
-  public synchronized String toString() {
-    int len = nested == null ? 0 : nested.length;
-    // calculate approximate size of the String to return
-    StringBuffer sb = new StringBuffer(10 + 100 * len);
-    sb.append(super.toString());
-    // include failed object information
-    if (failed != null) {
-      sb.append("\n").append(msg.msg("MSG_FailedObject"));
-      String failedToString = null;
-      try {
-        failedToString = failed.toString();
-      } catch (Exception ex) {
-        // include the information from the exception thrown by failed.toString
-        Object objectId = JDOHelper.getObjectId(failed);
-        if (objectId == null) {
-          failedToString =
-              msg.msg(
-                  "MSG_ExceptionGettingFailedToString", // NOI18N
-                  exceptionToString(ex));
+    /** Constructs a new <code>JDOException</code> with the specified detail message
+     * and nested <code>Throwable</code>s.
+     * @param msg the detail message.
+     * @param nested the nested <code>Throwable[]</code>.
+     */
+    public JDOException(String msg, Throwable[] nested) {
+        super(msg);
+        this.nested = nested;
+    }
+  
+    /** Constructs a new <code>JDOException</code> with the specified detail message
+     * and nested <code>Throwable</code>.
+     * @param msg the detail message.
+     * @param nested the nested <code>Throwable</code>.
+     */
+    public JDOException(String msg, Throwable nested) {
+        super(msg);
+        this.nested = new Throwable[] {nested};
+    }
+  
+    /** Constructs a new <code>JDOException</code> with the specified detail message
+     * and failed object.
+     * @param msg the detail message.
+     * @param failed the failed object.
+     */
+    public JDOException(String msg, Object failed) {
+        super(msg);
+        this.failed = failed;
+    }
+  
+    /** Constructs a new <code>JDOException</code> with the specified detail message,
+     * nested <code>Throwable</code>s, and failed object.
+     * @param msg the detail message.
+     * @param nested the nested <code>Throwable[]</code>.
+     * @param failed the failed object.
+     */
+    public JDOException(String msg, Throwable[] nested, Object failed) {
+        super(msg);
+        this.nested = nested;
+        this.failed = failed;
+    }
+  
+    /** Constructs a new <code>JDOException</code> with the specified detail message,
+     * nested <code>Throwable</code>, and failed object.
+     * @param msg the detail message.
+     * @param nested the nested <code>Throwable</code>.
+     * @param failed the failed object.
+     */
+    public JDOException(String msg, Throwable nested, Object failed) {
+        super(msg);
+        this.nested = new Throwable[] {nested};
+        this.failed = failed;
+    }
+  
+    /** 
+     * The exception may include a failed object.
+     * @return the failed object.
+     */
+    public Object getFailedObject() {
+        return failed;
+    }
+  
+    /** The exception may have been caused by multiple exceptions in the runtime.
+     * If multiple objects caused the problem, each failed object will have
+     * its own <code>Exception</code>.
+     * @return the nested Throwable array.
+     */
+    public Throwable[] getNestedExceptions() {
+        return nested;
+    }
+  
+    /** Often there is only one nested exception, and this method returns it.
+     * If there are more than one, then this method returns the first nested
+     * exception. If there is no nested exception, then null is returned.
+     * @return the first or only nested Throwable.
+     * @since 1.0.1
+     */
+    public synchronized Throwable getCause() {
+        // super.printStackTrace calls getCause to handle the cause. 
+        // Returning null prevents the superclass from handling the cause;
+        // instead the local implementation of printStackTrace should
+        // handle the cause. Otherwise, the cause is printed twice.
+        if (nested == null || nested.length == 0 || inPrintStackTrace) {
+            return null;
         } else {
-          // include the ObjectId information
-          String objectIdToString = null;
-          try {
-            objectIdToString = objectId.toString();
-          } catch (Exception ex2) {
-            objectIdToString = exceptionToString(ex2);
-          }
-          failedToString =
-              msg.msg(
-                  "MSG_ExceptionGettingFailedToStringObjectId", // NOI18N
-                  exceptionToString(ex),
-                  objectIdToString);
+            return nested[0];
         }
-      }
-      sb.append(failedToString);
     }
-    // include nested Throwable information, but only if not called by
-    // printStackTrace; the stacktrace will include the cause anyway.
-    if (len > 0 && !inPrintStackTrace) {
-      sb.append("\n").append(msg.msg("MSG_NestedThrowables")).append("\n");
-      Throwable exception = nested[0];
-      sb.append(exception == null ? "null" : exception.toString()); // NOI18N
-      for (int i = 1; i < len; ++i) {
-        sb.append("\n"); // NOI18N
-        exception = nested[i];
-        sb.append(exception == null ? "null" : exception.toString()); // NOI18N
-      }
+  
+    /** JDK 1.4 includes a new chaining mechanism for Throwable, but since
+     * JDO has its own "legacy" chaining mechanism, the "standard" mechanism
+     * cannot be used. This method always throws a JDOFatalInternalException.
+     * @param cause ignored.
+     * @return never.
+     */
+    public Throwable initCause(Throwable cause) {
+        throw new JDOFatalInternalException(msg.msg("ERR_CannotInitCause"));
+    }
+  
+    /** The <code>String</code> representation includes the name of the class,
+     * the descriptive comment (if any),
+     * the <code>String</code> representation of the failed <code>Object</code> (if any),
+     * and the <code>String</code> representation of the nested <code>Throwable</code>s (if any).
+     * @return the <code>String</code>.
+     */
+    public synchronized String toString() {
+        int len = nested==null?0:nested.length;
+        // calculate approximate size of the String to return
+        StringBuffer sb = new StringBuffer (10 + 100 * len);
+        sb.append (super.toString());
+        // include failed object information
+        if (failed != null) {
+            sb.append ("\n").append (msg.msg ("MSG_FailedObject"));
+            String failedToString = null;
+            try {
+                failedToString = failed.toString();
+            } catch (Exception ex) {
+                // include the information from the exception thrown by failed.toString
+                Object objectId = JDOHelper.getObjectId(failed);
+                if (objectId == null) {
+                    failedToString = msg.msg("MSG_ExceptionGettingFailedToString", //NOI18N
+                                       exceptionToString(ex));
+                }
+                else {
+                    // include the ObjectId information
+                    String objectIdToString = null;
+                    try {
+                        objectIdToString = objectId.toString();
+                    }
+                    catch (Exception ex2) {
+                        objectIdToString = exceptionToString(ex2);
+                    }
+                    failedToString = msg.msg("MSG_ExceptionGettingFailedToStringObjectId", //NOI18N
+                                       exceptionToString(ex), objectIdToString);
+                }
+            }
+            sb.append (failedToString);
+        }
+        // include nested Throwable information, but only if not called by
+        // printStackTrace; the stacktrace will include the cause anyway.
+        if (len > 0 && !inPrintStackTrace) {
+            sb.append ("\n").append (msg.msg ("MSG_NestedThrowables")).append ("\n");
+            Throwable exception = nested[0];
+            sb.append (exception==null?"null":exception.toString()); //NOI18N
+            for (int i=1; i<len; ++i) {
+                sb.append ("\n"); //NOI18N
+                exception = nested[i];
+                sb.append (exception==null?"null":exception.toString()); //NOI18N
+            }
+        }
+        return sb.toString();
+    }    
+  
+    /**
+     * Prints this <code>JDOException</code> and its backtrace to the 
+     * standard error output.
+     * Print nested Throwables' stack trace as well.
+     */
+    public void printStackTrace() { 
+        printStackTrace (System.err);
     }
-    return sb.toString();
-  }
-
-  /**
-   * Prints this <code>JDOException</code> and its backtrace to the standard error output. Print
-   * nested Throwables' stack trace as well.
-   */
-  public void printStackTrace() {
-    printStackTrace(System.err);
-  }
 
-  /**
-   * Prints this <code>JDOException</code> and its backtrace to the specified print stream. Print
-   * nested Throwables' stack trace as well.
-   *
-   * @param s <code>PrintStream</code> to use for output
-   */
-  public synchronized void printStackTrace(java.io.PrintStream s) {
-    int len = nested == null ? 0 : nested.length;
-    synchronized (s) {
-      inPrintStackTrace = true;
-      super.printStackTrace(s);
-      if (len > 0) {
-        s.println(msg.msg("MSG_NestedThrowablesStackTrace"));
-        for (int i = 0; i < len; ++i) {
-          Throwable exception = nested[i];
-          if (exception != null) {
-            exception.printStackTrace(s);
-          }
+    /**
+     * Prints this <code>JDOException</code> and its backtrace to the 
+     * specified print stream.
+     * Print nested Throwables' stack trace as well.
+     * @param s <code>PrintStream</code> to use for output
+     */
+    public synchronized void printStackTrace(java.io.PrintStream s) { 
+        int len = nested==null?0:nested.length;
+        synchronized (s) {
+            inPrintStackTrace = true;
+            super.printStackTrace(s);
+            if (len > 0) {
+                s.println (msg.msg ("MSG_NestedThrowablesStackTrace"));
+                for (int i=0; i<len; ++i) {
+                    Throwable exception = nested[i];
+                    if (exception != null) {
+                        exception.printStackTrace(s);
+                    }
+                }
+            }
+            inPrintStackTrace = false;
         }
-      }
-      inPrintStackTrace = false;
     }
-  }
 
-  /**
-   * Prints this <code>JDOException</code> and its backtrace to the specified print writer. Print
-   * nested Throwables' stack trace as well.
-   *
-   * @param s <code>PrintWriter</code> to use for output
-   */
-  public synchronized void printStackTrace(java.io.PrintWriter s) {
-    int len = nested == null ? 0 : nested.length;
-    synchronized (s) {
-      inPrintStackTrace = true;
-      super.printStackTrace(s);
-      if (len > 0) {
-        s.println(msg.msg("MSG_NestedThrowablesStackTrace"));
-        for (int i = 0; i < len; ++i) {
-          Throwable exception = nested[i];
-          if (exception != null) {
-            exception.printStackTrace(s);
-          }
+    /**
+     * Prints this <code>JDOException</code> and its backtrace to the specified
+     * print writer.
+     * Print nested Throwables' stack trace as well.
+     * @param s <code>PrintWriter</code> to use for output
+     */
+    public synchronized void printStackTrace(java.io.PrintWriter s) { 
+    int len = nested==null?0:nested.length;
+        synchronized (s) {
+            inPrintStackTrace = true;
+            super.printStackTrace(s);
+            if (len > 0) {
+                s.println (msg.msg ("MSG_NestedThrowablesStackTrace"));
+                for (int i=0; i<len; ++i) {
+                    Throwable exception = nested[i];
+                    if (exception != null) {
+                        exception.printStackTrace(s);
+                    }
+                }
+            }
+            inPrintStackTrace = false;
         }
-      }
-      inPrintStackTrace = false;
     }
-  }
 
-  /**
-   * Helper method returning a short description of the exception passed as an argument. The
-   * returned string has the format defined by Throwable.toString. If the exception has a non-null
-   * detail message string, then it returns the name of exception class concatenated with ": "
-   * concatenated with the detailed message. Otherwise it returns the name of exception class.
-   *
-   * @param ex the exception to be represented.
-   * @return a string representation of the exception passed as an argument.
-   */
-  private static String exceptionToString(Exception ex) {
-    if (ex == null) return null;
-    String s = ex.getClass().getName();
-    String message = ex.getMessage();
-    return (message != null) ? (s + ": " + message) : s;
-  }
+    /**
+     * Helper method returning a short description of the exception passed
+     * as an argument. The returned string has the format defined by
+     * Throwable.toString. If the exception has a non-null detail message 
+     * string, then it returns the name of exception class concatenated
+     * with ": " concatenated with the detailed message. Otherwise it
+     * returns the name of exception class.
+     * @param ex the exception to be represented.
+     * @return a string representation of the exception passed as an argument.
+     */
+    private static String exceptionToString(Exception ex)
+    {
+        if (ex == null) return null;
+        String s = ex.getClass().getName();
+        String message = ex.getMessage();
+        return (message != null) ? (s + ": " + message) : s;
+    }
 }
diff --git a/api/src/main/java/javax/jdo/JDOFatalDataStoreException.java b/api/src/main/java/javax/jdo/JDOFatalDataStoreException.java
index feb72f78..538ca3e3 100644
--- a/api/src/main/java/javax/jdo/JDOFatalDataStoreException.java
+++ b/api/src/main/java/javax/jdo/JDOFatalDataStoreException.java
@@ -5,13 +5,13 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- *
+ * 
  *     https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
+ * 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
  * limitations under the License.
  */
 
@@ -22,81 +22,77 @@
 
 package javax.jdo;
 
-/**
- * This class represents data store exceptions that cannot be retried.
+/** This class represents data store exceptions that cannot be retried.
  *
  * @version 1.0.1
  */
 public class JDOFatalDataStoreException extends JDOFatalException {
 
-  private static final long serialVersionUID = 8953679366316248154L;
-
-  /** Constructs a new <code>JDOFatalDataStoreException</code> without a detail message. */
-  public JDOFatalDataStoreException() {}
+	private static final long serialVersionUID = 8953679366316248154L;
 
-  /**
-   * Constructs a new <code>JDOFatalDataStoreException</code> with the specified detail message.
-   *
-   * @param msg the detail message.
-   */
-  public JDOFatalDataStoreException(String msg) {
-    super(msg);
-  }
+    /**
+     * Constructs a new <code>JDOFatalDataStoreException</code> without a detail message.
+     */
+    public JDOFatalDataStoreException() {
+    }
 
-  /**
-   * Constructs a new <code>JDOFatalDataStoreException</code> with the specified detail message and
-   * failed object.
-   *
-   * @param msg the detail message.
-   * @param failed the failed object.
-   */
-  public JDOFatalDataStoreException(String msg, Object failed) {
-    super(msg, failed);
-  }
+    /**
+     * Constructs a new <code>JDOFatalDataStoreException</code> with the specified detail message.
+     * @param msg the detail message.
+     */
+    public JDOFatalDataStoreException(String msg) {
+        super(msg);
+    }
 
-  /**
-   * Constructs a new <code>JDOFatalDataStoreException</code> with the specified detail message and
-   * nested <code>Throwable</code>s.
-   *
-   * @param msg the detail message.
-   * @param nested the nested <code>Throwable[]</code>.
-   */
-  public JDOFatalDataStoreException(String msg, Throwable[] nested) {
-    super(msg, nested);
-  }
+    /** Constructs a new <code>JDOFatalDataStoreException</code> with the specified detail message
+     * and failed object.
+     * @param msg the detail message.
+     * @param failed the failed object.
+     */
+    public JDOFatalDataStoreException(String msg, Object failed) {
+        super(msg, failed);
+    }
+  
+    /**
+     * Constructs a new <code>JDOFatalDataStoreException</code> with the specified
+     * detail message and nested <code>Throwable</code>s.
+     * @param msg the detail message.
+     * @param nested the nested <code>Throwable[]</code>.
+     */
+    public JDOFatalDataStoreException(String msg, Throwable[] nested) {
+        super(msg, nested);
+    }
 
-  /**
-   * Constructs a new <code>JDOFatalDataStoreException</code> with the specified detail message and
-   * nested <code>Throwable</code>s.
-   *
-   * @param msg the detail message.
-   * @param nested the nested <code>Throwable</code>.
-   */
-  public JDOFatalDataStoreException(String msg, Throwable nested) {
-    super(msg, nested);
-  }
+    /**
+     * Constructs a new <code>JDOFatalDataStoreException</code> with the specified
+     * detail message and nested <code>Throwable</code>s.
+     * @param msg the detail message.
+     * @param nested the nested <code>Throwable</code>.
+     */
+    public JDOFatalDataStoreException(String msg, Throwable nested) {
+        super(msg, nested);
+    }
+  
+    /**
+     * Constructs a new <code>JDOFatalDataStoreException</code> with the specified
+     * detail message, nested <code>Throwable</code>s, and failed object.
+     * @param msg the detail message.
+     * @param nested the nested <code>Throwable[]</code>.
+     * @param failed the failed object.
+     */
+    public JDOFatalDataStoreException(String msg, Throwable[] nested, Object failed) {
+        super(msg, nested, failed);
+    }
 
-  /**
-   * Constructs a new <code>JDOFatalDataStoreException</code> with the specified detail message,
-   * nested <code>Throwable</code>s, and failed object.
-   *
-   * @param msg the detail message.
-   * @param nested the nested <code>Throwable[]</code>.
-   * @param failed the failed object.
-   */
-  public JDOFatalDataStoreException(String msg, Throwable[] nested, Object failed) {
-    super(msg, nested, failed);
-  }
-
-  /**
-   * Constructs a new <code>JDOFatalDataStoreException</code> with the specified detail message,
-   * nested <code>Throwable</code>s, and failed object.
-   *
-   * @param msg the detail message.
-   * @param nested the nested <code>Throwable</code>.
-   * @param failed the failed object.
-   */
-  public JDOFatalDataStoreException(String msg, Throwable nested, Object failed) {
-    super(msg, nested, failed);
-  }
+    /**
+     * Constructs a new <code>JDOFatalDataStoreException</code> with the specified
+     * detail message, nested <code>Throwable</code>s, and failed object.
+     * @param msg the detail message.
+     * @param nested the nested <code>Throwable</code>.
+     * @param failed the failed object.
+     */
+    public JDOFatalDataStoreException(String msg, Throwable nested, Object failed) {
+        super(msg, nested, failed);
+    }
 }
+
diff --git a/api/src/main/java/javax/jdo/JDOFatalException.java b/api/src/main/java/javax/jdo/JDOFatalException.java
index eb39889e..6247306c 100644
--- a/api/src/main/java/javax/jdo/JDOFatalException.java
+++ b/api/src/main/java/javax/jdo/JDOFatalException.java
@@ -5,13 +5,13 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- *
+ * 
  *     https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
+ * 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
  * limitations under the License.
  */
 
@@ -22,82 +22,75 @@
 
 package javax.jdo;
 
-/**
- * This class represents exceptions that are fatal; that is, the condition that caused it cannot be
- * bypassed even if the operation is retried.
+/** This class represents exceptions that are fatal; that is, the condition
+ * that caused it cannot be bypassed even if the operation is retried.
  *
  * @version 1.0
  */
 public class JDOFatalException extends JDOException {
 
-  private static final long serialVersionUID = -414371106009364006L;
-
-  /** Constructs a new <code>JDOFatalException</code> without a detail message. */
-  public JDOFatalException() {}
-
-  /**
-   * Constructs a new <code>JDOFatalException</code> with the specified detail message.
-   *
-   * @param msg the detail message.
-   */
-  public JDOFatalException(String msg) {
-    super(msg);
-  }
-
-  /**
-   * Constructs a new <code>JDOFatalException</code> with the specified detail message and nested
-   * <code>Throwable</code>s.
-   *
-   * @param msg the detail message.
-   * @param nested the nested <code>Throwable[]</code>.
-   */
-  public JDOFatalException(String msg, Throwable[] nested) {
-    super(msg, nested);
-  }
+	private static final long serialVersionUID = -414371106009364006L;
 
-  /**
-   * Constructs a new <code>JDOFatalException</code> with the specified detail message and nested
-   * <code>Throwable</code>s.
-   *
-   * @param msg the detail message.
-   * @param nested the nested <code>Throwable</code>.
-   */
-  public JDOFatalException(String msg, Throwable nested) {
-    super(msg, nested);
-  }
+	/**
+     * Constructs a new <code>JDOFatalException</code> without a detail message.
+     */
+    public JDOFatalException() {
+    }
 
-  /**
-   * Constructs a new <code>JDOFatalException</code> with the specified detail message and failed
-   * object.
-   *
-   * @param msg the detail message.
-   * @param failed the failed object.
-   */
-  public JDOFatalException(String msg, Object failed) {
-    super(msg, failed);
-  }
+    /**
+     * Constructs a new <code>JDOFatalException</code> with the specified detail message.
+     * @param msg the detail message.
+     */
+    public JDOFatalException(String msg) {
+        super(msg);
+    }
 
-  /**
-   * Constructs a new <code>JDOFatalException</code> with the specified detail message, nested
-   * <code>Throwable</code>s, and failed object.
-   *
-   * @param msg the detail message.
-   * @param nested the nested <code>Throwable[]</code>.
-   * @param failed the failed object.
-   */
-  public JDOFatalException(String msg, Throwable[] nested, Object failed) {
-    super(msg, nested, failed);
-  }
+    /**
+     * Constructs a new <code>JDOFatalException</code> with the specified detail
+     * message and nested <code>Throwable</code>s.
+     * @param msg the detail message.
+     * @param nested the nested <code>Throwable[]</code>.
+     */
+    public JDOFatalException(String msg, Throwable[] nested) {
+        super(msg, nested);
+    }
+  
+    /**
+     * Constructs a new <code>JDOFatalException</code> with the specified detail
+     * message and nested <code>Throwable</code>s.
+     * @param msg the detail message.
+     * @param nested the nested <code>Throwable</code>.
+     */
+    public JDOFatalException(String msg, Throwable nested) {
+        super(msg, nested);
+    }
+  
+    /** Constructs a new <code>JDOFatalException</code> with the specified detail message
+     * and failed object.
+     * @param msg the detail message.
+     * @param failed the failed object.
+     */
+    public JDOFatalException(String msg, Object failed) {
+        super(msg, failed);
+    }
+  
+    /** Constructs a new <code>JDOFatalException</code> with the specified detail message,
+     * nested <code>Throwable</code>s, and failed object.
+     * @param msg the detail message.
+     * @param nested the nested <code>Throwable[]</code>.
+     * @param failed the failed object.
+     */
+    public JDOFatalException(String msg, Throwable[] nested, Object failed) {
+        super(msg, nested, failed);
+    }
 
-  /**
-   * Constructs a new <code>JDOFatalException</code> with the specified detail message, nested
-   * <code>Throwable</code>s, and failed object.
-   *
-   * @param msg the detail message.
-   * @param nested the nested <code>Throwable</code>.
-   * @param failed the failed object.
-   */
-  public JDOFatalException(String msg, Throwable nested, Object failed) {
-    super(msg, nested, failed);
-  }
+    /** Constructs a new <code>JDOFatalException</code> with the specified detail message,
+     * nested <code>Throwable</code>s, and failed object.
+     * @param msg the detail message.
+     * @param nested the nested <code>Throwable</code>.
+     * @param failed the failed object.
+     */
+    public JDOFatalException(String msg, Throwable nested, Object failed) {
+        super(msg, nested, failed);
+    }
 }
diff --git a/api/src/main/java/javax/jdo/JDOFatalInternalException.java b/api/src/main/java/javax/jdo/JDOFatalInternalException.java
index b239d638..5ba042e5 100644
--- a/api/src/main/java/javax/jdo/JDOFatalInternalException.java
+++ b/api/src/main/java/javax/jdo/JDOFatalInternalException.java
@@ -5,13 +5,13 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- *
+ * 
  *     https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
+ * 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
  * limitations under the License.
  */
 
@@ -22,82 +22,79 @@
 
 package javax.jdo;
 
-/**
- * This class represents errors in the implementation for which no user error handling is possible.
- * The error should be reported to the JDO vendor for corrective action.
+/** This class represents errors in the implementation for which no user
+ * error handling is possible.  The error should be reported to the JDO
+ * vendor for corrective action.
  *
  * @version 1.0
  */
 public class JDOFatalInternalException extends JDOFatalException {
 
-  private static final long serialVersionUID = -2315924677228266735L;
+	private static final long serialVersionUID = -2315924677228266735L;
 
-  /** Constructs a new <code>JDOFatalInternalException</code> without a detail message. */
-  public JDOFatalInternalException() {}
+    /**
+     * Constructs a new <code>JDOFatalInternalException</code> without a detail message.
+     */
+    public JDOFatalInternalException() {
+    }
 
-  /**
-   * Constructs a new <code>JDOFatalInternalException</code> with the specified detail message.
-   *
-   * @param msg the detail message.
-   */
-  public JDOFatalInternalException(String msg) {
-    super(msg);
-  }
+    /**
+     * Constructs a new <code>JDOFatalInternalException</code> with the specified detail message.
+     * @param msg the detail message.
+     */
+    public JDOFatalInternalException(String msg) {
+        super(msg);
+    }
 
-  /**
-   * Constructs a new <code>JDOFatalInternalException</code> with the specified detail message and
-   * nested <code>Throwable</code>s.
-   *
-   * @param msg the detail message.
-   * @param nested the nested <code>Throwable[]</code>.
-   */
-  public JDOFatalInternalException(String msg, Throwable[] nested) {
-    super(msg, nested);
-  }
+    /**
+     * Constructs a new <code>JDOFatalInternalException</code> with the specified
+     * detail message and nested <code>Throwable</code>s.
+     * @param msg the detail message.
+     * @param nested the nested <code>Throwable[]</code>.
+     */
+    public JDOFatalInternalException(String msg, Throwable[] nested) {
+        super(msg, nested);
+    }
 
-  /**
-   * Constructs a new <code>JDOFatalInternalException</code> with the specified detail message and
-   * nested <code>Throwable</code>s.
-   *
-   * @param msg the detail message.
-   * @param nested the nested <code>Throwable</code>.
-   */
-  public JDOFatalInternalException(String msg, Throwable nested) {
-    super(msg, nested);
-  }
+    /**
+     * Constructs a new <code>JDOFatalInternalException</code> with the specified
+     * detail message and nested <code>Throwable</code>s.
+     * @param msg the detail message.
+     * @param nested the nested <code>Throwable</code>.
+     */
+    public JDOFatalInternalException(String msg, Throwable nested) {
+        super(msg, nested);
+    }
 
-  /**
-   * Constructs a new <code>JDOFatalInternalException</code> with the specified detail message and
-   * failed object.
-   *
-   * @param msg the detail message.
-   * @param failed the failed object.
-   */
-  public JDOFatalInternalException(String msg, Object failed) {
-    super(msg, failed);
-  }
+    /**
+     * Constructs a new <code>JDOFatalInternalException</code> 
+     * with the specified detail message and failed object.
+     * @param msg the detail message.
+     * @param failed the failed object.
+     */
+    public JDOFatalInternalException(String msg, Object failed) {
+        super(msg, failed);
+    }
 
-  /**
-   * Constructs a new <code>JDOFatalInternalException</code> with the specified detail message,
-   * nested <code>Throwable</code>s, and failed object.
-   *
-   * @param msg the detail message.
-   * @param nested the nested <code>Throwable[]</code>.
-   * @param failed the failed object.
-   */
-  public JDOFatalInternalException(String msg, Throwable[] nested, Object failed) {
-    super(msg, nested, failed);
-  }
+    /**
+     * Constructs a new <code>JDOFatalInternalException</code> with the specified
+     * detail message, nested <code>Throwable</code>s, and failed object.
+     * @param msg the detail message.
+     * @param nested the nested <code>Throwable[]</code>.
+     * @param failed the failed object.
+     */
+    public JDOFatalInternalException(String msg, Throwable[] nested, Object failed) {
+        super(msg, nested, failed);
+    }
 
-  /**
-   * Constructs a new <code>JDOFatalInternalException</code> with the specified detail message,
-   * nested <code>Throwable</code>s, and failed object.
-   *
-   * @param msg the detail message.
-   * @param nested the nested <code>Throwable</code>.
-   * @param failed the failed object.
-   */
-  public JDOFatalInternalException(String msg, Throwable nested, Object failed) {
-    super(msg, nested, failed);
-  }
+    /**
+     * Constructs a new <code>JDOFatalInternalException</code> with the specified
+     * detail message, nested <code>Throwable</code>s, and failed object.
+     * @param msg the detail message.
+     * @param nested the nested <code>Throwable</code>.
+     * @param failed the failed object.
+     */
+    public JDOFatalInternalException(String msg, Throwable nested, Object failed) {
+        super(msg, nested, failed);
+    }
 }
diff --git a/api/src/main/java/javax/jdo/JDOFatalUserException.java b/api/src/main/java/javax/jdo/JDOFatalUserException.java
index f43cfd2c..8dc1434d 100644
--- a/api/src/main/java/javax/jdo/JDOFatalUserException.java
+++ b/api/src/main/java/javax/jdo/JDOFatalUserException.java
@@ -5,13 +5,13 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- *
+ * 
  *     https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
+ * 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
  * limitations under the License.
  */
 
@@ -22,81 +22,75 @@
 
 package javax.jdo;
 
-/**
- * This class represents user errors that cannot be retried.
+/** This class represents user errors that cannot be retried.  
  *
  * @version 1.0
  */
 public class JDOFatalUserException extends JDOFatalException {
 
-  private static final long serialVersionUID = -7451285498620809419L;
-
-  /** Constructs a new <code>JDOFatalUserException</code> without a detail message. */
-  public JDOFatalUserException() {}
-
-  /**
-   * Constructs a new <code>JDOFatalUserException</code> with the specified detail message.
-   *
-   * @param msg the detail message.
-   */
-  public JDOFatalUserException(String msg) {
-    super(msg);
-  }
+	private static final long serialVersionUID = -7451285498620809419L;
 
-  /**
-   * Constructs a new <code>JDOFatalUserException</code> with the specified detail message and
-   * nested <code>Throwable</code>s.
-   *
-   * @param msg the detail message.
-   * @param nested the nested <code>Throwable[]</code>.
-   */
-  public JDOFatalUserException(String msg, Throwable[] nested) {
-    super(msg, nested);
-  }
+    /**
+     * Constructs a new <code>JDOFatalUserException</code> without a detail message.
+     */
+    public JDOFatalUserException() {
+    }
 
-  /**
-   * Constructs a new <code>JDOFatalUserException</code> with the specified detail message and
-   * nested <code>Throwable</code>s.
-   *
-   * @param msg the detail message.
-   * @param nested the nested <code>Throwable</code>.
-   */
-  public JDOFatalUserException(String msg, Throwable nested) {
-    super(msg, nested);
-  }
+    /**
+     * Constructs a new <code>JDOFatalUserException</code> with the specified detail message.
+     * @param msg the detail message.
+     */
+    public JDOFatalUserException(String msg) {
+        super(msg);
+    }
 
-  /**
-   * Constructs a new <code>JDOFatalUserException</code> with the specified detail message and
-   * failed object.
-   *
-   * @param msg the detail message.
-   * @param failed the failed object.
-   */
-  public JDOFatalUserException(String msg, Object failed) {
-    super(msg, failed);
-  }
-
-  /**
-   * Constructs a new <code>JDOFatalUserException</code> with the specified detail message, nested
-   * <code>Throwable</code>s, and failed object.
-   *
-   * @param msg the detail message.
-   * @param nested the nested <code>Throwable[]</code>.
-   * @param failed the failed object.
-   */
-  public JDOFatalUserException(String msg, Throwable[] nested, Object failed) {
-    super(msg, nested, failed);
-  }
-
-  /**
-   * Constructs a new <code>JDOFatalUserException</code> with the specified detail message, nested
-   * <code>Throwable</code>s, and failed object.
-   *
-   * @param msg the detail message.
-   * @param nested the nested <code>Throwable</code>.
-   * @param failed the failed object.
-   */
-  public JDOFatalUserException(String msg, Throwable nested, Object failed) {
-    super(msg, nested, failed);
-  }
+    /**
+     * Constructs a new <code>JDOFatalUserException</code> with the specified
+     * detail message and nested <code>Throwable</code>s.
+     * @param msg the detail message.
+     * @param nested the nested <code>Throwable[]</code>.
+     */
+    public JDOFatalUserException(String msg, Throwable[] nested) {
+        super(msg, nested);
+    }
+  
+    /**
+     * Constructs a new <code>JDOFatalUserException</code> with the specified
+     * detail message and nested <code>Throwable</code>s.
+     * @param msg the detail message.
+     * @param nested the nested <code>Throwable</code>.
+     */
+    public JDOFatalUserException(String msg, Throwable nested) {
+        super(msg, nested);
+    }
+  
+    /** Constructs a new <code>JDOFatalUserException</code> with the specified
+     * detail message and failed object.
+     * @param msg the detail message.
+     * @param failed the failed object.
+     */
+    public JDOFatalUserException(String msg, Object failed) {
+        super(msg, failed);
+    }
+  
+    /** Constructs a new <code>JDOFatalUserException</code> with the specified
+     * detail message, nested <code>Throwable</code>s, and failed object.
+     * @param msg the detail message.
+     * @param nested the nested <code>Throwable[]</code>.
+     * @param failed the failed object.
+     */
+    public JDOFatalUserException(String msg, Throwable[] nested, Object failed) {
+        super(msg, nested, failed);
+    }
+  
+    /** Constructs a new <code>JDOFatalUserException</code> with the specified
+     * detail message, nested <code>Throwable</code>s, and failed object.
+     * @param msg the detail message.
+     * @param nested the nested <code>Throwable</code>.
+     * @param failed the failed object.
+     */
+    public JDOFatalUserException(String msg, Throwable nested, Object failed) {
+        super(msg, nested, failed);
+    }
 }
+
diff --git a/api/src/main/java/javax/jdo/JDOHelper.java b/api/src/main/java/javax/jdo/JDOHelper.java
index 0b68680b..892d4683 100644
--- a/api/src/main/java/javax/jdo/JDOHelper.java
+++ b/api/src/main/java/javax/jdo/JDOHelper.java
@@ -5,13 +5,13 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- *
+ * 
  *     https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
+ * 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
  * limitations under the License.
  */
 
@@ -19,7 +19,7 @@
  * JDOHelper.java
  *
  */
-
+ 
 package javax.jdo;
 
 import java.io.BufferedReader;
@@ -44,6 +44,7 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Properties;
+
 import javax.jdo.spi.I18NHelper;
 import javax.jdo.spi.JDOImplHelper;
 import javax.jdo.spi.JDOImplHelper.StateInterrogationBooleanReturn;
@@ -58,6 +59,7 @@ import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.parsers.FactoryConfigurationError;
 import javax.xml.parsers.ParserConfigurationException;
+
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 import org.w3c.dom.NamedNodeMap;
@@ -67,1614 +69,1806 @@ import org.xml.sax.ErrorHandler;
 import org.xml.sax.SAXException;
 import org.xml.sax.SAXParseException;
 
+
 /**
- * This class can be used by a JDO-aware application to call the JDO behavior of <code>
- * PersistenceCapable</code> instances without declaring them to be <code>PersistenceCapable</code>.
- *
- * <p>It is also used to acquire a <code>PersistenceManagerFactory</code> via various methods.
- *
- * <p>This helper class defines static methods that allow a JDO-aware application to examine the
- * runtime state of instances. For example, an application can discover whether the instance is
- * persistent, transactional, dirty, new, deleted, or detached; and to get its associated <code>
- * PersistenceManager</code> if it has one.
- *
+ * This class can be used by a JDO-aware application to call the JDO behavior
+ * of <code>PersistenceCapable</code> instances without declaring them to be
+ * <code>PersistenceCapable</code>.
+ * <P>It is also used to acquire a <code>PersistenceManagerFactory</code> via 
+ * various methods.
+ * <P>This helper class defines static methods that allow a JDO-aware
+ * application to examine the runtime state of instances.  For example,
+ * an application can discover whether the instance is persistent, 
+ * transactional, dirty, new, deleted, or detached; and to get its associated
+ * <code>PersistenceManager</code> if it has one.
+ * 
  * @version 2.1
  */
 public class JDOHelper implements Constants {
 
-  /** A mapping from jdoconfig.xsd element attributes to PMF properties. */
-  static final Map<String, String> ATTRIBUTE_PROPERTY_XREF = createAttributePropertyXref();
-
-  /** The Internationalization message helper. */
-  private static final I18NHelper msg = I18NHelper.getInstance("javax.jdo.Bundle"); // NOI18N
-
-  /**
-   * Creates a map from jdoconfig.xsd element attributes to PMF properties.
-   *
-   * @return An unmodifiable Map of jdoconfig.xsd element attributes to PMF properties.
-   */
-  static Map<String, String> createAttributePropertyXref() {
-    Map<String, String> xref = new HashMap<String, String>();
-
-    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);
-
-    return Collections.unmodifiableMap(xref);
-  }
-
-  /** The JDOImplHelper instance used for handling non-binary-compatible implementations. */
-  private static JDOImplHelper implHelper =
-      (JDOImplHelper)
-          doPrivileged(
-              new PrivilegedAction<JDOImplHelper>() {
-                public JDOImplHelper run() {
-                  return JDOImplHelper.getInstance();
+    /**
+     * A mapping from jdoconfig.xsd element attributes to PMF properties.
+     */
+    static final Map<String, String> ATTRIBUTE_PROPERTY_XREF
+        = createAttributePropertyXref();
+
+    /** The Internationalization message helper.
+     */
+    private final static I18NHelper msg = 
+        I18NHelper.getInstance ("javax.jdo.Bundle"); //NOI18N
+
+    /**
+     * Creates a map from jdoconfig.xsd element attributes to PMF properties.
+     * @return An unmodifiable Map of jdoconfig.xsd element attributes to PMF
+     * properties.
+     */
+    static Map<String, String> createAttributePropertyXref() {
+        Map<String, String> xref = new HashMap<String,String>();
+
+        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);
+
+        return Collections.unmodifiableMap(xref);
+    }
+
+    /** The JDOImplHelper instance used for handling non-binary-compatible
+     *  implementations.
+     */
+    private static JDOImplHelper implHelper = (JDOImplHelper)
+        doPrivileged(
+            new PrivilegedAction<JDOImplHelper> () {
+                public JDOImplHelper run () {
+                    return JDOImplHelper.getInstance();
                 }
-              });
-
-  /**
-   * The singleton instance of JDOHelper.
-   *
-   * @since 2.1
-   */
-  private static JDOHelper instance = new JDOHelper();
-
-  /**
-   * Return the singleton instance of JDOHelper. This instance is thread-safe.
-   *
-   * @since 2.1
-   * @return the thread-safe singleton JDOHelper
-   */
-  public static JDOHelper getInstance() {
-    return instance;
-  }
-
-  /**
-   * Some applications might prefer to use instance methods instead of static methods.
-   *
-   * @since 2.1
-   */
-  public JDOHelper() {}
-
-  /**
-   * The stateless instance used for handling non-binary-compatible implementations of
-   * getPersistenceManager.
-   */
-  static StateInterrogationObjectReturn getPersistenceManager =
-      new StateInterrogationObjectReturn() {
-        public Object get(Object pc, StateInterrogation si) {
-          return si.getPersistenceManager(pc);
-        }
-      };
-
-  /**
-   * The stateless instance used for handling non-binary-compatible implementations of getObjectId.
-   */
-  static StateInterrogationObjectReturn getObjectId =
-      new StateInterrogationObjectReturn() {
-        public Object get(Object pc, StateInterrogation si) {
-          return si.getObjectId(pc);
-        }
-      };
-
-  /**
-   * The stateless instance used for handling non-binary-compatible implementations of
-   * getTransactionalObjectId.
-   */
-  static StateInterrogationObjectReturn getTransactionalObjectId =
-      new StateInterrogationObjectReturn() {
-        public Object get(Object pc, StateInterrogation si) {
-          return si.getTransactionalObjectId(pc);
-        }
-      };
-
-  /**
-   * The stateless instance used for handling non-binary-compatible implementations of getVersion.
-   */
-  static StateInterrogationObjectReturn getVersion =
-      new StateInterrogationObjectReturn() {
-        public Object get(Object pc, StateInterrogation si) {
-          return si.getVersion(pc);
+            }
+        );
+
+    /** The singleton instance of JDOHelper.
+     * @since 2.1
+     */
+    private static JDOHelper instance = new JDOHelper();
+
+    /**
+     * Return the singleton instance of JDOHelper. This instance is 
+     * thread-safe.
+     * @since 2.1
+     * @return the thread-safe singleton JDOHelper
+     */
+    public static JDOHelper getInstance() {
+        return instance;
+    }
+
+    /** Some applications might prefer to use instance
+     * methods instead of static methods.
+     * @since 2.1
+     */
+    public JDOHelper() {}
+
+    /** The stateless instance used for handling non-binary-compatible
+    *  implementations of getPersistenceManager.
+    */
+    static StateInterrogationObjectReturn getPersistenceManager =
+        new StateInterrogationObjectReturn() {
+            public Object get(Object pc, StateInterrogation si) {
+                return si.getPersistenceManager(pc);
+            }
+        };
+
+   /** The stateless instance used for handling non-binary-compatible
+    *  implementations of getObjectId.
+    */
+    static StateInterrogationObjectReturn getObjectId =
+        new StateInterrogationObjectReturn() {
+            public Object get(Object pc, StateInterrogation si) {
+                return si.getObjectId(pc);
+            }
+        };
+
+   /** The stateless instance used for handling non-binary-compatible
+    *  implementations of getTransactionalObjectId.
+    */
+    static StateInterrogationObjectReturn getTransactionalObjectId =
+        new StateInterrogationObjectReturn() {
+            public Object get(Object pc, StateInterrogation si) {
+                return si.getTransactionalObjectId(pc);
+            }
+        };
+
+   /** The stateless instance used for handling non-binary-compatible
+    *  implementations of getVersion.
+    */
+    static StateInterrogationObjectReturn getVersion =
+        new StateInterrogationObjectReturn() {
+            public Object get(Object pc, StateInterrogation si) {
+                return si.getVersion(pc);
+            }
+        };
+
+   /** The stateless instance used for handling non-binary-compatible
+    *  implementations of isPersistent.
+    */
+    static StateInterrogationBooleanReturn isPersistent =
+        new StateInterrogationBooleanReturn() {
+            public Boolean is(Object pc, StateInterrogation si) {
+                return si.isPersistent(pc);
+            }
+        };
+
+   /** The stateless instance used for handling non-binary-compatible
+    *  implementations of isTransactional.
+    */
+    static StateInterrogationBooleanReturn isTransactional =
+        new StateInterrogationBooleanReturn() {
+            public Boolean is(Object pc, StateInterrogation si) {
+                return si.isTransactional(pc);
+            }
+        };
+
+   /** The stateless instance used for handling non-binary-compatible
+    *  implementations of isDirty.
+    */
+    static StateInterrogationBooleanReturn isDirty =
+        new StateInterrogationBooleanReturn() {
+            public Boolean is(Object pc, StateInterrogation si) {
+                return si.isDirty(pc);
+            }
+        };
+
+   /** The stateless instance used for handling non-binary-compatible
+    *  implementations of isNew.
+    */
+    static StateInterrogationBooleanReturn isNew =
+        new StateInterrogationBooleanReturn() {
+            public Boolean is(Object pc, StateInterrogation si) {
+                return si.isNew(pc);
+            }
+        };
+
+   /** The stateless instance used for handling non-binary-compatible
+    *  implementations of isDeleted.
+    */
+    static StateInterrogationBooleanReturn isDeleted =
+        new StateInterrogationBooleanReturn() {
+            public Boolean is(Object pc, StateInterrogation si) {
+                return si.isDeleted(pc);
+            }
+        };
+
+   /** The stateless instance used for handling non-binary-compatible
+    *  implementations of isDetached.
+    */
+    static StateInterrogationBooleanReturn isDetached =
+        new StateInterrogationBooleanReturn() {
+            public Boolean is(Object pc, StateInterrogation si) {
+                return si.isDetached(pc);
+            }
+        };
+
+    /** Return the associated <code>PersistenceManager</code> if there is one.
+     * Transactional and persistent instances return the associated
+     * <code>PersistenceManager</code>.  
+     *
+     * <P>Transient non-transactional instances and instances of classes 
+     * that do not implement <code>PersistenceCapable</code> return 
+     * <code>null</code>.
+     * @see PersistenceCapable#jdoGetPersistenceManager()
+     * @param pc the <code>PersistenceCapable</code> instance.
+     * @return the <code>PersistenceManager</code> associated with the parameter
+     * instance.
+     */
+     public static PersistenceManager getPersistenceManager(Object pc) {
+        if (pc instanceof PersistenceCapable) {
+            return ((PersistenceCapable)pc).jdoGetPersistenceManager();
+        } else {
+            return (PersistenceManager)
+                implHelper.nonBinaryCompatibleGet(pc, getPersistenceManager);
         }
-      };
-
-  /**
-   * The stateless instance used for handling non-binary-compatible implementations of isPersistent.
-   */
-  static StateInterrogationBooleanReturn isPersistent =
-      new StateInterrogationBooleanReturn() {
-        public Boolean is(Object pc, StateInterrogation si) {
-          return si.isPersistent(pc);
+      }
+    
+    /** Explicitly mark the parameter instance and field dirty.
+     * Normally, <code>PersistenceCapable</code> classes are able to detect 
+     * changes made to their fields.  However, if a reference to an array is 
+     * given to a method outside the class, and the array is modified, then the
+     * persistent instance is not aware of the change.  This API allows the
+     * application to notify the instance that a change was made to a field.
+     *
+     * <P>Transient instances and instances of classes 
+     * that do not implement <code>PersistenceCapable</code> ignore this method.
+     * @see PersistenceCapable#jdoMakeDirty(String fieldName)
+     * @param pc the <code>PersistenceCapable</code> instance.
+     * @param fieldName the name of the field to be marked dirty.
+     */
+    public static void makeDirty(Object pc, String fieldName) {
+        if (pc instanceof PersistenceCapable) {
+            ((PersistenceCapable)pc).jdoMakeDirty(fieldName);
+        } else {
+             implHelper.nonBinaryCompatibleMakeDirty(pc, fieldName);
         }
-      };
-
-  /**
-   * The stateless instance used for handling non-binary-compatible implementations of
-   * isTransactional.
-   */
-  static StateInterrogationBooleanReturn isTransactional =
-      new StateInterrogationBooleanReturn() {
-        public Boolean is(Object pc, StateInterrogation si) {
-          return si.isTransactional(pc);
+    }
+    
+    /** Return a copy of the JDO identity associated with the parameter 
+     * instance.
+     *
+     * <P>Persistent instances of <code>PersistenceCapable</code> classes have a
+     * JDO identity managed by the <code>PersistenceManager</code>.  This method
+     * returns a copy of the ObjectId that represents the JDO identity.  
+     * 
+     * <P>Transient instances and instances of classes that do not implement 
+     * <code>PersistenceCapable</code> return <code>null</code>.
+     *
+     * <P>The ObjectId may be serialized
+     * and later restored, and used with a <code>PersistenceManager</code> from 
+     * the same JDO implementation to locate a persistent instance with the same
+     * data store identity.
+     *
+     * <P>If the JDO identity is managed by the application, then the ObjectId 
+     * may be used with a <code>PersistenceManager</code> from any JDO 
+     * implementation that supports the <code>PersistenceCapable</code> class.
+     *
+     * <P>If the JDO identity is not managed by the application or the data 
+     * store, then the ObjectId returned is only valid within the current 
+     * transaction.
+     *<P>
+     * @see PersistenceManager#getObjectId(Object pc)
+     * @see PersistenceCapable#jdoGetObjectId()
+     * @see PersistenceManager#getObjectById(Object oid, boolean validate)
+     * @param pc the PersistenceCapable instance.
+     * @return a copy of the ObjectId of the parameter instance as of the 
+     * beginning of the transaction.
+     */
+    public static Object getObjectId(Object pc) {
+      if (pc instanceof PersistenceCapable) {
+          return ((PersistenceCapable)pc).jdoGetObjectId();
+        } else {
+            return implHelper.nonBinaryCompatibleGet(pc, getObjectId);
         }
-      };
+    }
 
-  /** The stateless instance used for handling non-binary-compatible implementations of isDirty. */
-  static StateInterrogationBooleanReturn isDirty =
-      new StateInterrogationBooleanReturn() {
-        public Boolean is(Object pc, StateInterrogation si) {
-          return si.isDirty(pc);
+    /** Get object ids for a collection of instances. For each instance
+     * in the parameter, the getObjectId method is called. This method
+     * returns one identity instance for each element 
+     * in the parameter. The order of iteration of the returned
+     * Collection exactly matches the order of iteration of the
+     * parameter Collection.
+     * @param pcs the persistence-capable instances
+     * @return the object ids of the parameters
+     * @see #getObjectId(Object pc)
+     * @see #getObjectIds(Object[] pcs)
+     * @since 2.0
+     */
+    public static Collection<Object> getObjectIds(Collection<?> pcs) {
+        ArrayList<Object> result = new ArrayList<Object>();
+        for (Iterator<?> it = pcs.iterator(); it.hasNext();) {
+            result.add(getObjectId(it.next()));
         }
-      };
+        return result;
+    }
 
-  /** The stateless instance used for handling non-binary-compatible implementations of isNew. */
-  static StateInterrogationBooleanReturn isNew =
-      new StateInterrogationBooleanReturn() {
-        public Boolean is(Object pc, StateInterrogation si) {
-          return si.isNew(pc);
-        }
-      };
-
-  /**
-   * The stateless instance used for handling non-binary-compatible implementations of isDeleted.
-   */
-  static StateInterrogationBooleanReturn isDeleted =
-      new StateInterrogationBooleanReturn() {
-        public Boolean is(Object pc, StateInterrogation si) {
-          return si.isDeleted(pc);
-        }
-      };
-
-  /**
-   * The stateless instance used for handling non-binary-compatible implementations of isDetached.
-   */
-  static StateInterrogationBooleanReturn isDetached =
-      new StateInterrogationBooleanReturn() {
-        public Boolean is(Object pc, StateInterrogation si) {
-          return si.isDetached(pc);
+    /** Get object ids for an array of instances. For each instance
+     * in the parameter, the getObjectId method is called. This method
+     * returns one identity instance for each element 
+     * in the parameter. The order of instances of the returned
+     * array exactly matches the order of instances of the
+     * parameter array.
+     * @param pcs the persistence-capable instances
+     * @return the object ids of the parameters
+     * @see #getObjectId(Object pc)
+     * @see #getObjectIds(Collection pcs)
+     * @since 2.0
+     */
+    public static Object[] getObjectIds(Object[] pcs) {
+        Object[] result = new Object[pcs.length];
+        for (int i = 0; i < pcs.length; ++i) {
+            result[i] = getObjectId(pcs[i]);
         }
-      };
-
-  /**
-   * Return the associated <code>PersistenceManager</code> if there is one. Transactional and
-   * persistent instances return the associated <code>PersistenceManager</code>.
-   *
-   * <p>Transient non-transactional instances and instances of classes that do not implement <code>
-   * PersistenceCapable</code> return <code>null</code>.
-   *
-   * @see PersistenceCapable#jdoGetPersistenceManager()
-   * @param pc the <code>PersistenceCapable</code> instance.
-   * @return the <code>PersistenceManager</code> associated with the parameter instance.
-   */
-  public static PersistenceManager getPersistenceManager(Object pc) {
-    if (pc instanceof PersistenceCapable) {
-      return ((PersistenceCapable) pc).jdoGetPersistenceManager();
-    } else {
-      return (PersistenceManager) implHelper.nonBinaryCompatibleGet(pc, getPersistenceManager);
+        return result;
     }
-  }
-
-  /**
-   * Explicitly mark the parameter instance and field dirty. Normally, <code>PersistenceCapable
-   * </code> classes are able to detect changes made to their fields. However, if a reference to an
-   * array is given to a method outside the class, and the array is modified, then the persistent
-   * instance is not aware of the change. This API allows the application to notify the instance
-   * that a change was made to a field.
-   *
-   * <p>Transient instances and instances of classes that do not implement <code>PersistenceCapable
-   * </code> ignore this method.
-   *
-   * @see PersistenceCapable#jdoMakeDirty(String fieldName)
-   * @param pc the <code>PersistenceCapable</code> instance.
-   * @param fieldName the name of the field to be marked dirty.
-   */
-  public static void makeDirty(Object pc, String fieldName) {
-    if (pc instanceof PersistenceCapable) {
-      ((PersistenceCapable) pc).jdoMakeDirty(fieldName);
-    } else {
-      implHelper.nonBinaryCompatibleMakeDirty(pc, fieldName);
+
+    /** Return a copy of the JDO identity associated with the parameter 
+     * instance.
+     *
+     * @see PersistenceCapable#jdoGetTransactionalObjectId()
+     * @see PersistenceManager#getObjectById(Object oid, boolean validate)
+     * @param pc the <code>PersistenceCapable</code> instance.
+     * @return a copy of the ObjectId of the parameter instance as modified in 
+     * this transaction.
+     */
+    public static Object getTransactionalObjectId(Object pc) {
+      if (pc instanceof PersistenceCapable) {
+          return ((PersistenceCapable)pc).jdoGetTransactionalObjectId();
+        } else {
+            return implHelper.nonBinaryCompatibleGet(
+                pc, getTransactionalObjectId);
+        }
     }
-  }
-
-  /**
-   * Return a copy of the JDO identity associated with the parameter instance.
-   *
-   * <p>Persistent instances of <code>PersistenceCapable</code> classes have a JDO identity managed
-   * by the <code>PersistenceManager</code>. This method returns a copy of the ObjectId that
-   * represents the JDO identity.
-   *
-   * <p>Transient instances and instances of classes that do not implement <code>PersistenceCapable
-   * </code> return <code>null</code>.
-   *
-   * <p>The ObjectId may be serialized and later restored, and used with a <code>PersistenceManager
-   * </code> from the same JDO implementation to locate a persistent instance with the same data
-   * store identity.
-   *
-   * <p>If the JDO identity is managed by the application, then the ObjectId may be used with a
-   * <code>PersistenceManager</code> from any JDO implementation that supports the <code>
-   * PersistenceCapable</code> class.
-   *
-   * <p>If the JDO identity is not managed by the application or the data store, then the ObjectId
-   * returned is only valid within the current transaction.
-   *
-   * <p>
-   *
-   * @see PersistenceManager#getObjectId(Object pc)
-   * @see PersistenceCapable#jdoGetObjectId()
-   * @see PersistenceManager#getObjectById(Object oid, boolean validate)
-   * @param pc the PersistenceCapable instance.
-   * @return a copy of the ObjectId of the parameter instance as of the beginning of the
-   *     transaction.
-   */
-  public static Object getObjectId(Object pc) {
-    if (pc instanceof PersistenceCapable) {
-      return ((PersistenceCapable) pc).jdoGetObjectId();
-    } else {
-      return implHelper.nonBinaryCompatibleGet(pc, getObjectId);
+    
+    /**
+     * Return the version of the instance.
+     * @since 2.0
+     * @param pc the instance
+     * @return the version of the instance
+     */
+    public static Object getVersion (Object pc) {
+      if (pc instanceof PersistenceCapable) {
+          return ((PersistenceCapable)pc).jdoGetVersion();
+        } else {
+            return implHelper.nonBinaryCompatibleGet(pc, getVersion);
+        }
     }
-  }
-
-  /**
-   * Get object ids for a collection of instances. For each instance in the parameter, the
-   * getObjectId method is called. This method returns one identity instance for each element in the
-   * parameter. The order of iteration of the returned Collection exactly matches the order of
-   * iteration of the parameter Collection.
-   *
-   * @param pcs the persistence-capable instances
-   * @return the object ids of the parameters
-   * @see #getObjectId(Object pc)
-   * @see #getObjectIds(Object[] pcs)
-   * @since 2.0
-   */
-  public static Collection<Object> getObjectIds(Collection<?> pcs) {
-    ArrayList<Object> result = new ArrayList<Object>();
-    for (Iterator<?> it = pcs.iterator(); it.hasNext(); ) {
-      result.add(getObjectId(it.next()));
+    /** Tests whether the parameter instance is dirty.
+     *
+     * Instances that have been modified, deleted, or newly 
+     * made persistent in the current transaction return <code>true</code>.
+     *
+     *<P>Transient instances and instances of classes that do not implement 
+     * <code>PersistenceCapable</code> return <code>false</code>.
+     *<P>
+     * @see javax.jdo.spi.StateManager#makeDirty(PersistenceCapable pc, 
+     * String fieldName)
+     * @see PersistenceCapable#jdoIsDirty()
+     * @param pc the <code>PersistenceCapable</code> instance.
+     * @return <code>true</code> if the parameter instance has been modified in 
+     * the current transaction.
+     */
+    public static boolean isDirty(Object pc) {
+      if (pc instanceof PersistenceCapable) {
+          return ((PersistenceCapable)pc).jdoIsDirty();
+        } else {
+            return implHelper.nonBinaryCompatibleIs(pc, isDirty);
+        }
     }
-    return result;
-  }
-
-  /**
-   * Get object ids for an array of instances. For each instance in the parameter, the getObjectId
-   * method is called. This method returns one identity instance for each element in the parameter.
-   * The order of instances of the returned array exactly matches the order of instances of the
-   * parameter array.
-   *
-   * @param pcs the persistence-capable instances
-   * @return the object ids of the parameters
-   * @see #getObjectId(Object pc)
-   * @see #getObjectIds(Collection pcs)
-   * @since 2.0
-   */
-  public static Object[] getObjectIds(Object[] pcs) {
-    Object[] result = new Object[pcs.length];
-    for (int i = 0; i < pcs.length; ++i) {
-      result[i] = getObjectId(pcs[i]);
+
+    /** Tests whether the parameter instance is transactional.
+     *
+     * Instances whose state is associated with the current transaction 
+     * return true. 
+     *
+     *<P>Transient instances and instances of classes that do not implement 
+     * <code>PersistenceCapable</code> return <code>false</code>.
+     * @see PersistenceCapable#jdoIsTransactional()
+     * @param pc the <code>PersistenceCapable</code> instance.
+     * @return <code>true</code> if the parameter instance is transactional.
+     */
+    public static boolean isTransactional(Object pc) {
+      if (pc instanceof PersistenceCapable) {
+          return ((PersistenceCapable)pc).jdoIsTransactional();
+        } else {
+            return implHelper.nonBinaryCompatibleIs(pc, isTransactional);
+        }
     }
-    return result;
-  }
-
-  /**
-   * Return a copy of the JDO identity associated with the parameter instance.
-   *
-   * @see PersistenceCapable#jdoGetTransactionalObjectId()
-   * @see PersistenceManager#getObjectById(Object oid, boolean validate)
-   * @param pc the <code>PersistenceCapable</code> instance.
-   * @return a copy of the ObjectId of the parameter instance as modified in this transaction.
-   */
-  public static Object getTransactionalObjectId(Object pc) {
-    if (pc instanceof PersistenceCapable) {
-      return ((PersistenceCapable) pc).jdoGetTransactionalObjectId();
-    } else {
-      return implHelper.nonBinaryCompatibleGet(pc, getTransactionalObjectId);
+
+    /** Tests whether the parameter instance is persistent.
+     *
+     * Instances that represent persistent objects in the data store 
+     * return <code>true</code>. 
+     *
+     *<P>Transient instances and instances of classes that do not implement 
+     * <code>PersistenceCapable</code> return <code>false</code>.
+     *<P>
+     * @see PersistenceManager#makePersistent(Object pc)
+     * @see PersistenceCapable#jdoIsPersistent()
+     * @param pc the <code>PersistenceCapable</code> instance.
+     * @return <code>true</code> if the parameter instance is persistent.
+     */
+    public static boolean isPersistent(Object pc) {
+      if (pc instanceof PersistenceCapable) {
+          return ((PersistenceCapable)pc).jdoIsPersistent();
+        } else {
+            return implHelper.nonBinaryCompatibleIs(pc, isPersistent);
+        }
     }
-  }
-
-  /**
-   * Return the version of the instance.
-   *
-   * @since 2.0
-   * @param pc the instance
-   * @return the version of the instance
-   */
-  public static Object getVersion(Object pc) {
-    if (pc instanceof PersistenceCapable) {
-      return ((PersistenceCapable) pc).jdoGetVersion();
-    } else {
-      return implHelper.nonBinaryCompatibleGet(pc, getVersion);
+
+    /** Tests whether the parameter instance has been newly made persistent.
+     *
+     * Instances that have been made persistent in the current transaction 
+     * return <code>true</code>.
+     *
+     *<P>Transient instances and instances of classes that do not implement 
+     * <code>PersistenceCapable</code> return <code>false</code>.
+     *<P>
+     * @see PersistenceManager#makePersistent(Object pc)
+     * @see PersistenceCapable#jdoIsNew()
+     * @param pc the <code>PersistenceCapable</code> instance.
+     * @return <code>true</code> if the parameter instance was made persistent
+     * in the current transaction.
+     */
+    public static boolean isNew(Object pc) {
+      if (pc instanceof PersistenceCapable) {
+          return ((PersistenceCapable)pc).jdoIsNew();
+        } else {
+            return implHelper.nonBinaryCompatibleIs(pc, isNew);
+        }
     }
-  }
-  /**
-   * Tests whether the parameter instance is dirty.
-   *
-   * <p>Instances that have been modified, deleted, or newly made persistent in the current
-   * transaction return <code>true</code>.
-   *
-   * <p>Transient instances and instances of classes that do not implement <code>PersistenceCapable
-   * </code> return <code>false</code>.
-   *
-   * <p>
-   *
-   * @see javax.jdo.spi.StateManager#makeDirty(PersistenceCapable pc, String fieldName)
-   * @see PersistenceCapable#jdoIsDirty()
-   * @param pc the <code>PersistenceCapable</code> instance.
-   * @return <code>true</code> if the parameter instance has been modified in the current
-   *     transaction.
-   */
-  public static boolean isDirty(Object pc) {
-    if (pc instanceof PersistenceCapable) {
-      return ((PersistenceCapable) pc).jdoIsDirty();
-    } else {
-      return implHelper.nonBinaryCompatibleIs(pc, isDirty);
+
+    /** Tests whether the parameter instance has been deleted.
+     *
+     * Instances that have been deleted in the current transaction return 
+     * <code>true</code>.
+     *
+     *<P>Transient instances and instances of classes that do not implement 
+     * <code>PersistenceCapable</code> return <code>false</code>.
+     *<P>
+     * @see PersistenceManager#deletePersistent(Object pc)
+     * @see PersistenceCapable#jdoIsDeleted()
+     * @param pc the <code>PersistenceCapable</code> instance.
+     * @return <code>true</code> if the parameter instance was deleted
+     * in the current transaction.
+     */
+    public static boolean isDeleted(Object pc) {
+      if (pc instanceof PersistenceCapable) {
+          return ((PersistenceCapable)pc).jdoIsDeleted();
+        } else {
+            return implHelper.nonBinaryCompatibleIs(pc, isDeleted);
+        }
     }
-  }
-
-  /**
-   * Tests whether the parameter instance is transactional.
-   *
-   * <p>Instances whose state is associated with the current transaction return true.
-   *
-   * <p>Transient instances and instances of classes that do not implement <code>PersistenceCapable
-   * </code> return <code>false</code>.
-   *
-   * @see PersistenceCapable#jdoIsTransactional()
-   * @param pc the <code>PersistenceCapable</code> instance.
-   * @return <code>true</code> if the parameter instance is transactional.
-   */
-  public static boolean isTransactional(Object pc) {
-    if (pc instanceof PersistenceCapable) {
-      return ((PersistenceCapable) pc).jdoIsTransactional();
-    } else {
-      return implHelper.nonBinaryCompatibleIs(pc, isTransactional);
+    
+    /**
+     * Tests whether the parameter instance has been detached.
+     * 
+     * Instances that have been detached return true.
+     * 
+     * <P>Transient instances return false.
+     * <P>
+     * @see PersistenceCapable#jdoIsDetached()
+     * @return <code>true</code> if this instance is detached.
+     * @since 2.0
+     * @param pc the instance
+     */
+    public static boolean isDetached(Object pc) {
+      if (pc instanceof PersistenceCapable) {
+          return ((PersistenceCapable)pc).jdoIsDetached();
+        } else {
+            return implHelper.nonBinaryCompatibleIs(pc, isDetached);
+        }
     }
-  }
-
-  /**
-   * Tests whether the parameter instance is persistent.
-   *
-   * <p>Instances that represent persistent objects in the data store return <code>true</code>.
-   *
-   * <p>Transient instances and instances of classes that do not implement <code>PersistenceCapable
-   * </code> return <code>false</code>.
-   *
-   * <p>
-   *
-   * @see PersistenceManager#makePersistent(Object pc)
-   * @see PersistenceCapable#jdoIsPersistent()
-   * @param pc the <code>PersistenceCapable</code> instance.
-   * @return <code>true</code> if the parameter instance is persistent.
-   */
-  public static boolean isPersistent(Object pc) {
-    if (pc instanceof PersistenceCapable) {
-      return ((PersistenceCapable) pc).jdoIsPersistent();
-    } else {
-      return implHelper.nonBinaryCompatibleIs(pc, isPersistent);
+
+    /** Accessor for the state of the passed object.
+     * @param pc The object
+     * @return The object state
+     * @since 2.1
+     */
+    public static ObjectState getObjectState(Object pc) {
+        if (pc == null) {
+            return null;
+        }
+
+        if (isDetached(pc)) {
+            if (isDirty(pc)) {
+                // Detached Dirty
+                return ObjectState.DETACHED_DIRTY;
+            }
+            else {
+                // Detached Not Dirty
+                return ObjectState.DETACHED_CLEAN;
+            }
+        }
+        else {
+            if (isPersistent(pc)) {
+                if (isTransactional(pc)) {
+                    if (isDirty(pc)) {
+                        if (isNew(pc)) {
+                            if (isDeleted(pc)) {
+                                // Persistent Transactional Dirty New Deleted
+                                return ObjectState.PERSISTENT_NEW_DELETED;
+                            } else {
+                                // Persistent Transactional Dirty New Not Deleted
+                                return ObjectState.PERSISTENT_NEW;
+                            }
+                        } else {
+                            if (isDeleted(pc)) {
+                                // Persistent Transactional Dirty Not New Deleted
+                                return ObjectState.PERSISTENT_DELETED;
+                            } else {
+                                // Persistent Transactional Dirty Not New Not Deleted
+                                return ObjectState.PERSISTENT_DIRTY;
+                            }
+                        }
+                    } else {
+                        // Persistent Transactional Not Dirty
+                        return ObjectState.PERSISTENT_CLEAN;
+                    }
+                }
+                else {
+                    if (isDirty(pc)) {
+                    // Persistent Nontransactional Dirty
+                        return ObjectState.PERSISTENT_NONTRANSACTIONAL_DIRTY;
+                    }
+                    else {
+                    // Persistent Nontransactional Not Dirty
+                        return ObjectState.HOLLOW_PERSISTENT_NONTRANSACTIONAL;
+                    }
+                }
+            }
+            else {
+                if (isTransactional(pc)) {
+                    if (isDirty(pc)) {
+                        // Not Persistent Transactional Dirty
+                        return ObjectState.TRANSIENT_DIRTY;                        
+                    } else {
+                        // Not Persistent Transactional Not Dirty
+                        return ObjectState.TRANSIENT_CLEAN;
+                    }
+                }
+                else {
+                    // Not Persistent Not Transactional
+                    return ObjectState.TRANSIENT;
+                }
+            }
+        }
     }
-  }
-
-  /**
-   * Tests whether the parameter instance has been newly made persistent.
-   *
-   * <p>Instances that have been made persistent in the current transaction return <code>true</code>
-   * .
-   *
-   * <p>Transient instances and instances of classes that do not implement <code>PersistenceCapable
-   * </code> return <code>false</code>.
-   *
-   * <p>
-   *
-   * @see PersistenceManager#makePersistent(Object pc)
-   * @see PersistenceCapable#jdoIsNew()
-   * @param pc the <code>PersistenceCapable</code> instance.
-   * @return <code>true</code> if the parameter instance was made persistent in the current
-   *     transaction.
-   */
-  public static boolean isNew(Object pc) {
-    if (pc instanceof PersistenceCapable) {
-      return ((PersistenceCapable) pc).jdoIsNew();
-    } else {
-      return implHelper.nonBinaryCompatibleIs(pc, isNew);
+
+    /** Get the anonymous <code>PersistenceManagerFactory</code> configured via
+     * the standard configuration file resource "META-INF/jdoconfig.xml", using
+     * the current thread's context class loader
+     * to locate the configuration file resource(s).
+     * @return the anonymous <code>PersistenceManagerFactory</code>.
+     * @since 2.1
+     * @see #getPersistenceManagerFactory(Map,String,ClassLoader,ClassLoader)
+     */
+    public static PersistenceManagerFactory getPersistenceManagerFactory() {
+        ClassLoader cl = getContextClassLoader();
+        return getPersistenceManagerFactory(
+                null, ANONYMOUS_PERSISTENCE_MANAGER_FACTORY_NAME, cl, cl);
     }
-  }
-
-  /**
-   * Tests whether the parameter instance has been deleted.
-   *
-   * <p>Instances that have been deleted in the current transaction return <code>true</code>.
-   *
-   * <p>Transient instances and instances of classes that do not implement <code>PersistenceCapable
-   * </code> return <code>false</code>.
-   *
-   * <p>
-   *
-   * @see PersistenceManager#deletePersistent(Object pc)
-   * @see PersistenceCapable#jdoIsDeleted()
-   * @param pc the <code>PersistenceCapable</code> instance.
-   * @return <code>true</code> if the parameter instance was deleted in the current transaction.
-   */
-  public static boolean isDeleted(Object pc) {
-    if (pc instanceof PersistenceCapable) {
-      return ((PersistenceCapable) pc).jdoIsDeleted();
-    } else {
-      return implHelper.nonBinaryCompatibleIs(pc, isDeleted);
+
+    /** Get the anonymous <code>PersistenceManagerFactory</code> configured via
+     * the standard configuration file resource "META-INF/jdoconfig.xml", using
+     * the given class loader.
+     * @return the anonymous <code>PersistenceManagerFactory</code>.
+     * @param pmfClassLoader the ClassLoader used to load resources and classes
+     * @since 2.1
+     * @see #getPersistenceManagerFactory(Map,String,ClassLoader,ClassLoader)
+     */
+    public static PersistenceManagerFactory getPersistenceManagerFactory(
+            ClassLoader pmfClassLoader) {
+        return getPersistenceManagerFactory(
+                null,
+                ANONYMOUS_PERSISTENCE_MANAGER_FACTORY_NAME,
+                pmfClassLoader, pmfClassLoader);
     }
-  }
-
-  /**
-   * Tests whether the parameter instance has been detached.
-   *
-   * <p>Instances that have been detached return true.
-   *
-   * <p>Transient instances return false.
-   *
-   * <p>
-   *
-   * @see PersistenceCapable#jdoIsDetached()
-   * @return <code>true</code> if this instance is detached.
-   * @since 2.0
-   * @param pc the instance
-   */
-  public static boolean isDetached(Object pc) {
-    if (pc instanceof PersistenceCapable) {
-      return ((PersistenceCapable) pc).jdoIsDetached();
-    } else {
-      return implHelper.nonBinaryCompatibleIs(pc, isDetached);
+
+    /** Get a <code>PersistenceManagerFactory</code> based on a <code>Properties</code>
+     * instance, using the current thread's context class loader to locate the
+     * <code>PersistenceManagerFactory</code> class.
+     * @return the <code>PersistenceManagerFactory</code>.
+     * @param props a <code>Properties</code> instance with properties of the
+     * <code>PersistenceManagerFactory</code>.
+     * @see #getPersistenceManagerFactory(java.util.Map,ClassLoader)
+     */
+    public static PersistenceManagerFactory getPersistenceManagerFactory
+            (Map<?, ?> props) {
+        return getPersistenceManagerFactory(
+                null, props, getContextClassLoader());
     }
-  }
-
-  /**
-   * Accessor for the state of the passed object.
-   *
-   * @param pc The object
-   * @return The object state
-   * @since 2.1
-   */
-  public static ObjectState getObjectState(Object pc) {
-    if (pc == null) {
-      return null;
+
+
+    /** Get a <code>PersistenceManagerFactory</code> based on a 
+     * <code>Map</code> and a class loader.
+     * This method delegates to the getPersistenceManagerFactory
+     * method that takes a Map of overrides and a Map of properties,
+     * passing null as the overrides parameter.
+     * @see #getPersistenceManagerFactory(java.util.Map, java.util.Map, ClassLoader)
+     * @return the <code>PersistenceManagerFactory</code>.
+     * @param props a <code>Map</code> with properties of the 
+     * <code>PersistenceManagerFactory</code>.
+     * @param pmfClassLoader the class loader used to load the
+     * <code>PersistenceManagerFactory</code> class
+     * @since 1.0
+     */
+    public static PersistenceManagerFactory getPersistenceManagerFactory
+            (Map<?, ?> props, ClassLoader pmfClassLoader) {
+        return getPersistenceManagerFactory(
+                null, props, pmfClassLoader);
     }
 
-    if (isDetached(pc)) {
-      if (isDirty(pc)) {
-        // Detached Dirty
-        return ObjectState.DETACHED_DIRTY;
-      } else {
-        // Detached Not Dirty
-        return ObjectState.DETACHED_CLEAN;
-      }
-    } else {
-      if (isPersistent(pc)) {
-        if (isTransactional(pc)) {
-          if (isDirty(pc)) {
-            if (isNew(pc)) {
-              if (isDeleted(pc)) {
-                // Persistent Transactional Dirty New Deleted
-                return ObjectState.PERSISTENT_NEW_DELETED;
-              } else {
-                // Persistent Transactional Dirty New Not Deleted
-                return ObjectState.PERSISTENT_NEW;
-              }
-            } else {
-              if (isDeleted(pc)) {
-                // Persistent Transactional Dirty Not New Deleted
-                return ObjectState.PERSISTENT_DELETED;
-              } else {
-                // Persistent Transactional Dirty Not New Not Deleted
-                return ObjectState.PERSISTENT_DIRTY;
-              }
-            }
-          } else {
-            // Persistent Transactional Not Dirty
-            return ObjectState.PERSISTENT_CLEAN;
-          }
-        } else {
-          if (isDirty(pc)) {
-            // Persistent Nontransactional Dirty
-            return ObjectState.PERSISTENT_NONTRANSACTIONAL_DIRTY;
-          } else {
-            // Persistent Nontransactional Not Dirty
-            return ObjectState.HOLLOW_PERSISTENT_NONTRANSACTIONAL;
-          }
-        }
-      } else {
-        if (isTransactional(pc)) {
-          if (isDirty(pc)) {
-            // Not Persistent Transactional Dirty
-            return ObjectState.TRANSIENT_DIRTY;
-          } else {
-            // Not Persistent Transactional Not Dirty
-            return ObjectState.TRANSIENT_CLEAN;
-          }
+    /**
+     * Get a <code>PersistenceManagerFactory</code> based on a 
+     * <code>Map</code> of overrides, a <code>Map</code> of 
+     * properties, and a class loader.
+     * The following are standard key names:
+     * <BR><code>"javax.jdo.PersistenceManagerFactoryClass"
+     * <BR>"javax.jdo.option.Optimistic",
+     * <BR>"javax.jdo.option.RetainValues",
+     * <BR>"javax.jdo.option.RestoreValues",
+     * <BR>"javax.jdo.option.IgnoreCache",
+     * <BR>"javax.jdo.option.NontransactionalRead",
+     * <BR>"javax.jdo.option.NontransactionalWrite",
+     * <BR>"javax.jdo.option.Multithreaded",
+     * <BR>"javax.jdo.option.ConnectionUserName",
+     * <BR>"javax.jdo.option.ConnectionPassword",
+     * <BR>"javax.jdo.option.ConnectionURL",
+     * <BR>"javax.jdo.option.ConnectionFactoryName",
+     * <BR>"javax.jdo.option.ConnectionFactory2Name",
+     * <BR>"javax.jdo.option.Mapping",
+     * <BR>"javax.jdo.mapping.Catalog",
+     * <BR>"javax.jdo.mapping.Schema",
+     * <BR>"javax.jdo.option.PersistenceUnitName",
+     * <BR>"javax.jdo.option.DetachAllOnCommit",
+     * <BR>"javax.jdo.option.CopyOnAttach",
+     * <BR>"javax.jdo.option.ReadOnly",
+     * <BR>"javax.jdo.option.TransactionIsolationLevel",
+     * <BR>"javax.jdo.option.TransactionType",
+     * <BR>"javax.jdo.option.ServerTimeZoneID",
+     * <BR>"javax.jdo.option.DatastoreReadTimeoutMillis",
+     * <BR>"javax.jdo.option.DatastoreWriteTimeoutMillis",
+     * <BR>"javax.jdo.option.Name".
+     * </code>
+     * and properties of the form
+     * <BR><code>javax.jdo.option.InstanceLifecycleListener.{listenerClass}[=[{pcClasses}]]</code>
+     * where <code>{listenerClass}</code> is the fully qualified name of a
+     * class that implements
+     * {@link javax.jdo.listener.InstanceLifecycleListener}, and
+     * <code>{pcClasses}</code> is an optional comma- or whitespace-delimited
+     * list of persistence-capable classes to be observed; the absence of a
+     * value for a property of this form means that instances of all
+     * persistence-capable classes will be observed by an instance of the given
+     * listener class.
+     * <P>JDO implementations
+     * are permitted to define key values of their own.  Any key values not
+     * recognized by the implementation must be ignored.  Key values that are
+     * recognized but not supported by an implementation must result in a
+     * <code>JDOFatalUserException</code> thrown by the method.
+     * <P>The returned <code>PersistenceManagerFactory</code> is not 
+     * configurable (the <code>set<I>XXX</I></code> methods will throw an 
+     * exception).
+     * <P>JDO implementations might manage a map of instantiated
+     * <code>PersistenceManagerFactory</code> instances based on specified 
+     * property key values, and return a previously instantiated 
+     * <code>PersistenceManagerFactory</code> instance.  In this case, the 
+     * properties of the returned instance must exactly match the requested 
+     * properties.
+     * @param overrides Overrides of properties
+     * @param props a <code>Properties</code> instance with properties of the 
+     * <code>PersistenceManagerFactory</code>.
+     * @param pmfClassLoader the class loader to use to load the
+     * <code>PersistenceManagerFactory</code> class
+     * @return the <code>PersistenceManagerFactory</code>.
+     * @throws JDOFatalUserException if
+     * <ul><li>the pmfClassLoader passed is invalid; or 
+     * </li><li>a valid class name cannot be obtained from
+     * either <code>props</code> or system resources 
+     * (an entry in META-INF/services/javax.jdo.PersistenceManagerFactory); or
+     * </li><li>all implementations throw an exception.
+     * </li></ul>
+     * @since 2.1
+     */
+    protected static PersistenceManagerFactory getPersistenceManagerFactory
+            (Map<?, ?> overrides, Map<?, ?> props, ClassLoader pmfClassLoader) {
+        
+        List<Throwable> exceptions = new ArrayList<Throwable>();
+        if (pmfClassLoader == null)
+            throw new JDOFatalUserException (msg.msg (
+                "EXC_GetPMFNullLoader")); //NOI18N
+
+        JDOImplHelper.assertOnlyKnownStandardProperties(overrides);
+        JDOImplHelper.assertOnlyKnownStandardProperties(props);
+        
+        // first try to get the class name from the properties object.
+        String pmfClassName = (String) props.get (
+                PROPERTY_PERSISTENCE_MANAGER_FACTORY_CLASS);
+
+        if (!isNullOrBlank(pmfClassName)) {
+            // a valid name was returned from the properties.
+            return invokeGetPersistenceManagerFactoryOnImplementation(
+                    pmfClassName, overrides, props, pmfClassLoader);
+
         } else {
-          // Not Persistent Not Transactional
-          return ObjectState.TRANSIENT;
-        }
-      }
-    }
-  }
-
-  /**
-   * Get the anonymous <code>PersistenceManagerFactory</code> configured via the standard
-   * configuration file resource "META-INF/jdoconfig.xml", using the current thread's context class
-   * loader to locate the configuration file resource(s).
-   *
-   * @return the anonymous <code>PersistenceManagerFactory</code>.
-   * @since 2.1
-   * @see #getPersistenceManagerFactory(Map,String,ClassLoader,ClassLoader)
-   */
-  public static PersistenceManagerFactory getPersistenceManagerFactory() {
-    ClassLoader cl = getContextClassLoader();
-    return getPersistenceManagerFactory(null, ANONYMOUS_PERSISTENCE_MANAGER_FACTORY_NAME, cl, cl);
-  }
-
-  /**
-   * Get the anonymous <code>PersistenceManagerFactory</code> configured via the standard
-   * configuration file resource "META-INF/jdoconfig.xml", using the given class loader.
-   *
-   * @return the anonymous <code>PersistenceManagerFactory</code>.
-   * @param pmfClassLoader the ClassLoader used to load resources and classes
-   * @since 2.1
-   * @see #getPersistenceManagerFactory(Map,String,ClassLoader,ClassLoader)
-   */
-  public static PersistenceManagerFactory getPersistenceManagerFactory(ClassLoader pmfClassLoader) {
-    return getPersistenceManagerFactory(
-        null, ANONYMOUS_PERSISTENCE_MANAGER_FACTORY_NAME, pmfClassLoader, pmfClassLoader);
-  }
-
-  /**
-   * Get a <code>PersistenceManagerFactory</code> based on a <code>Properties</code> instance, using
-   * the current thread's context class loader to locate the <code>PersistenceManagerFactory</code>
-   * class.
-   *
-   * @return the <code>PersistenceManagerFactory</code>.
-   * @param props a <code>Properties</code> instance with properties of the <code>
-   *     PersistenceManagerFactory</code>.
-   * @see #getPersistenceManagerFactory(java.util.Map,ClassLoader)
-   */
-  public static PersistenceManagerFactory getPersistenceManagerFactory(Map<?, ?> props) {
-    return getPersistenceManagerFactory(null, props, getContextClassLoader());
-  }
-
-  /**
-   * Get a <code>PersistenceManagerFactory</code> based on a <code>Map</code> and a class loader.
-   * This method delegates to the getPersistenceManagerFactory method that takes a Map of overrides
-   * and a Map of properties, passing null as the overrides parameter.
-   *
-   * @see #getPersistenceManagerFactory(java.util.Map, java.util.Map, ClassLoader)
-   * @return the <code>PersistenceManagerFactory</code>.
-   * @param props a <code>Map</code> with properties of the <code>PersistenceManagerFactory</code>.
-   * @param pmfClassLoader the class loader used to load the <code>PersistenceManagerFactory</code>
-   *     class
-   * @since 1.0
-   */
-  public static PersistenceManagerFactory getPersistenceManagerFactory(
-      Map<?, ?> props, ClassLoader pmfClassLoader) {
-    return getPersistenceManagerFactory(null, props, pmfClassLoader);
-  }
-
-  /**
-   * Get a <code>PersistenceManagerFactory</code> based on a <code>Map</code> of overrides, a <code>
-   * Map</code> of properties, and a class loader. The following are standard key names: <br>
-   * <code>"javax.jdo.PersistenceManagerFactoryClass"
-   * <BR>"javax.jdo.option.Optimistic",
-   * <BR>"javax.jdo.option.RetainValues",
-   * <BR>"javax.jdo.option.RestoreValues",
-   * <BR>"javax.jdo.option.IgnoreCache",
-   * <BR>"javax.jdo.option.NontransactionalRead",
-   * <BR>"javax.jdo.option.NontransactionalWrite",
-   * <BR>"javax.jdo.option.Multithreaded",
-   * <BR>"javax.jdo.option.ConnectionUserName",
-   * <BR>"javax.jdo.option.ConnectionPassword",
-   * <BR>"javax.jdo.option.ConnectionURL",
-   * <BR>"javax.jdo.option.ConnectionFactoryName",
-   * <BR>"javax.jdo.option.ConnectionFactory2Name",
-   * <BR>"javax.jdo.option.Mapping",
-   * <BR>"javax.jdo.mapping.Catalog",
-   * <BR>"javax.jdo.mapping.Schema",
-   * <BR>"javax.jdo.option.PersistenceUnitName",
-   * <BR>"javax.jdo.option.DetachAllOnCommit",
-   * <BR>"javax.jdo.option.CopyOnAttach",
-   * <BR>"javax.jdo.option.ReadOnly",
-   * <BR>"javax.jdo.option.TransactionIsolationLevel",
-   * <BR>"javax.jdo.option.TransactionType",
-   * <BR>"javax.jdo.option.ServerTimeZoneID",
-   * <BR>"javax.jdo.option.DatastoreReadTimeoutMillis",
-   * <BR>"javax.jdo.option.DatastoreWriteTimeoutMillis",
-   * <BR>"javax.jdo.option.Name".
-   * </code> and properties of the form <br>
-   * <code>javax.jdo.option.InstanceLifecycleListener.{listenerClass}[=[{pcClasses}]]</code> where
-   * <code>{listenerClass}</code> is the fully qualified name of a class that implements {@link
-   * javax.jdo.listener.InstanceLifecycleListener}, and <code>{pcClasses}</code> is an optional
-   * comma- or whitespace-delimited list of persistence-capable classes to be observed; the absence
-   * of a value for a property of this form means that instances of all persistence-capable classes
-   * will be observed by an instance of the given listener class.
-   *
-   * <p>JDO implementations are permitted to define key values of their own. Any key values not
-   * recognized by the implementation must be ignored. Key values that are recognized but not
-   * supported by an implementation must result in a <code>JDOFatalUserException</code> thrown by
-   * the method.
-   *
-   * <p>The returned <code>PersistenceManagerFactory</code> is not configurable (the <code>
-   * set<I>XXX</I></code> methods will throw an exception).
-   *
-   * <p>JDO implementations might manage a map of instantiated <code>PersistenceManagerFactory
-   * </code> instances based on specified property key values, and return a previously instantiated
-   * <code>PersistenceManagerFactory</code> instance. In this case, the properties of the returned
-   * instance must exactly match the requested properties.
-   *
-   * @param overrides Overrides of properties
-   * @param props a <code>Properties</code> instance with properties of the <code>
-   *     PersistenceManagerFactory</code>.
-   * @param pmfClassLoader the class loader to use to load the <code>PersistenceManagerFactory
-   *     </code> class
-   * @return the <code>PersistenceManagerFactory</code>.
-   * @throws JDOFatalUserException if
-   *     <ul>
-   *       <li>the pmfClassLoader passed is invalid; or
-   *       <li>a valid class name cannot be obtained from either <code>props</code> or system
-   *           resources (an entry in META-INF/services/javax.jdo.PersistenceManagerFactory); or
-   *       <li>all implementations throw an exception.
-   *     </ul>
-   *
-   * @since 2.1
-   */
-  protected static PersistenceManagerFactory getPersistenceManagerFactory(
-      Map<?, ?> overrides, Map<?, ?> props, ClassLoader pmfClassLoader) {
-
-    List<Throwable> exceptions = new ArrayList<Throwable>();
-    if (pmfClassLoader == null)
-      throw new JDOFatalUserException(msg.msg("EXC_GetPMFNullLoader")); // NOI18N
-
-    JDOImplHelper.assertOnlyKnownStandardProperties(overrides);
-    JDOImplHelper.assertOnlyKnownStandardProperties(props);
-
-    // first try to get the class name from the properties object.
-    String pmfClassName = (String) props.get(PROPERTY_PERSISTENCE_MANAGER_FACTORY_CLASS);
-
-    if (!isNullOrBlank(pmfClassName)) {
-      // a valid name was returned from the properties.
-      return invokeGetPersistenceManagerFactoryOnImplementation(
-          pmfClassName, overrides, props, pmfClassLoader);
-
-    } else {
-      /*
-       * If you have a jar file that provides the jdo implementation,
-       * a file naming the implementation goes into the file
-       * packaged into the jar file, called
-       * META-INF/services/javax.jdo.PersistenceManagerFactory.
-       * The contents of the file is a string that is the PMF class name,
-       * null or blank.
-       * For each file in pmfClassLoader named
-       * META-INF/services/javax.jdo.PersistenceManagerFactory,
-       * this method will try to invoke the getPersistenceManagerFactory
-       * method of the implementation class.
-       * Return the factory if a valid class name is extracted from
-       * resources and the invocation returns an instance.
-       * Otherwise add the exception thrown to
-       * an exception list.
-       */
-      Enumeration<URL> urls = null;
-      try {
-        urls = getResources(pmfClassLoader, SERVICE_LOOKUP_PMF_RESOURCE_NAME);
-      } catch (Throwable ex) {
-        exceptions.add(ex);
-      }
+            /*
+             * If you have a jar file that provides the jdo implementation,
+             * a file naming the implementation goes into the file 
+             * packaged into the jar file, called
+             * META-INF/services/javax.jdo.PersistenceManagerFactory.
+             * The contents of the file is a string that is the PMF class name, 
+             * null or blank. 
+             * For each file in pmfClassLoader named
+             * META-INF/services/javax.jdo.PersistenceManagerFactory,
+             * this method will try to invoke the getPersistenceManagerFactory
+             * method of the implementation class. 
+             * Return the factory if a valid class name is extracted from 
+             * resources and the invocation returns an instance.  
+             * Otherwise add the exception thrown to 
+             * an exception list.
+             */
+            Enumeration<URL> urls = null;
+            try {
+                urls = getResources(pmfClassLoader,
+                        SERVICE_LOOKUP_PMF_RESOURCE_NAME);
+            } catch (Throwable ex) {
+                exceptions.add(ex);
+            }
 
-      if (urls != null) {
-        while (urls.hasMoreElements()) {
+            if (urls != null){
+                while (urls.hasMoreElements()) {
 
-          try {
-            pmfClassName = getClassNameFromURL((URL) urls.nextElement());
+                    try {
+                        pmfClassName = getClassNameFromURL(
+                                (URL) urls.nextElement());
 
-            // return the implementation that is valid.
-            PersistenceManagerFactory pmf =
-                invokeGetPersistenceManagerFactoryOnImplementation(
-                    pmfClassName, overrides, props, pmfClassLoader);
-            return pmf;
+                        // return the implementation that is valid.
+                        PersistenceManagerFactory pmf = 
+                            invokeGetPersistenceManagerFactoryOnImplementation(
+                                pmfClassName, overrides, props, pmfClassLoader);
+                        return pmf;
 
-          } catch (Throwable ex) {
+                    } catch (Throwable ex) {
 
-            // remember exceptions from failed pmf invocations
-            exceptions.add(ex);
-          }
+                        // remember exceptions from failed pmf invocations
+                        exceptions.add(ex);
+
+                    }
+                }
+            }
         }
-      }
+
+        // no PMF class name in props and no services.  
+
+        throw new JDOFatalUserException(msg.msg(
+                "EXC_GetPMFNoPMFClassNamePropertyOrPUNameProperty"),
+                (Throwable[])
+                    exceptions.toArray(new Throwable[exceptions.size()]));
     }
 
-    // no PMF class name in props and no services.
-
-    throw new JDOFatalUserException(
-        msg.msg("EXC_GetPMFNoPMFClassNamePropertyOrPUNameProperty"),
-        (Throwable[]) exceptions.toArray(new Throwable[exceptions.size()]));
-  }
-
-  /**
-   * Get a class name from a URL. The URL is from getResources with e.g.
-   * META-INF/services/javax.jdo.PersistenceManagerFactory as the parameter. Parse the file,
-   * removing blank lines, comment lines, and comments.
-   *
-   * @param url the URL of the services file
-   * @return the name of the class contained in the file
-   * @throws java.io.IOException Throw if an error occurs on accessing this URL
-   * @since 2.1
-   */
-  protected static String getClassNameFromURL(URL url) throws IOException {
-    InputStream is = openStream(url);
-    BufferedReader reader = new BufferedReader(new InputStreamReader(is));
-    String line = null;
-    try {
-      while ((line = reader.readLine()) != null) {
-        line = line.trim();
-        if (line.length() == 0 || line.startsWith("#")) {
-          continue;
-        }
-        // else assume first line of text is the PMF class name
-        String[] tokens = line.split("\\s");
-        String pmfClassName = tokens[0];
-        int indexOfComment = pmfClassName.indexOf("#");
-        if (indexOfComment == -1) {
-          return pmfClassName;
+    /** Get a class name from a URL. The URL is from getResources with 
+     * e.g. META-INF/services/javax.jdo.PersistenceManagerFactory as the
+     * parameter. Parse the file, removing blank lines, comment lines,
+     * and comments.
+     * @param url the URL of the services file
+     * @return the name of the class contained in the file
+     * @throws java.io.IOException Throw if an error occurs on accessing this URL
+     * @since 2.1
+     */
+    protected static String getClassNameFromURL (URL url) 
+            throws IOException {
+        InputStream is = openStream(url);
+        BufferedReader reader = new BufferedReader(new InputStreamReader(is));
+        String line = null;
+        try {
+            while ((line = reader.readLine()) != null) {
+                line = line.trim();
+                if (line.length() == 0 || line.startsWith("#")) {
+                    continue;
+                }
+                // else assume first line of text is the PMF class name
+                String[] tokens = line.split("\\s");
+                String pmfClassName = tokens[0];
+                int indexOfComment = pmfClassName.indexOf("#");
+                if (indexOfComment == -1) {
+                    return pmfClassName;
+                }
+                // else pmfClassName has a comment at the end of it -- remove
+                return pmfClassName.substring(0, indexOfComment);
+            }
+            return null;
+        } finally {
+            try {
+                reader.close();
+            }
+            catch (IOException x) {
+                // gulp
+            }
         }
-        // else pmfClassName has a comment at the end of it -- remove
-        return pmfClassName.substring(0, indexOfComment);
-      }
-      return null;
-    } finally {
-      try {
-        reader.close();
-      } catch (IOException x) {
-        // gulp
-      }
     }
-  }
-
-  /**
-   * Returns a named {@link PersistenceManagerFactory} or persistence unit.
-   *
-   * @since 2.1
-   * @see #getPersistenceManagerFactory(Map,String,ClassLoader,ClassLoader)
-   * @param name Name of the PMF
-   * @return PersistenceManagerFactory
-   */
-  public static PersistenceManagerFactory getPersistenceManagerFactory(String name) {
-    ClassLoader cl = getContextClassLoader();
-    return getPersistenceManagerFactory(null, name, cl, cl);
-  }
-
-  /**
-   * Returns a named {@link PersistenceManagerFactory} or persistence unit.
-   *
-   * @since 1.0
-   * @see #getPersistenceManagerFactory(Map,String,ClassLoader,ClassLoader)
-   * @param name Name of the PMF
-   * @param loader ClassLoader to use
-   * @return PersistenceManagerFactory
-   */
-  public static PersistenceManagerFactory getPersistenceManagerFactory(
-      String name, ClassLoader loader) {
-
-    return getPersistenceManagerFactory(null, name, loader, loader);
-  }
-
-  /**
-   * Returns a named {@link PersistenceManagerFactory} or persistence unit.
-   *
-   * @since 2.0
-   * @see #getPersistenceManagerFactory(Map,String,ClassLoader,ClassLoader)
-   * @param name Name of the PMF
-   * @param resourceLoader ClassLoader to use for loading resources
-   * @param pmfLoader ClassLoader to use for loading the PMF
-   * @return PersistenceManagerFactory
-   */
-  public static PersistenceManagerFactory getPersistenceManagerFactory(
-      String name, ClassLoader resourceLoader, ClassLoader pmfLoader) {
-
-    return getPersistenceManagerFactory(null, name, resourceLoader, pmfLoader);
-  }
-
-  /**
-   * Returns a named {@link PersistenceManagerFactory} or persistence unit.
-   *
-   * @since 2.1
-   * @see #getPersistenceManagerFactory(Map,String,ClassLoader,ClassLoader)
-   * @param name Name of the PMF
-   * @param overrides Property overrides
-   * @return PersistenceManagerFactory
-   */
-  public static PersistenceManagerFactory getPersistenceManagerFactory(
-      Map<?, ?> overrides, String name) {
-
-    ClassLoader cl = getContextClassLoader();
-    return getPersistenceManagerFactory(overrides, name, cl, cl);
-  }
-
-  /**
-   * Returns a named {@link PersistenceManagerFactory} or persistence unit.
-   *
-   * @since 2.1
-   * @see #getPersistenceManagerFactory(Map,String,ClassLoader,ClassLoader)
-   * @param overrides Property overrides
-   * @param name Name of the PMF
-   * @param resourceLoader ClassLoader to use for loading resources
-   * @return The PMF
-   */
-  public static PersistenceManagerFactory getPersistenceManagerFactory(
-      Map<?, ?> overrides, String name, ClassLoader resourceLoader) {
-
-    return getPersistenceManagerFactory(overrides, name, resourceLoader, resourceLoader);
-  }
-
-  /**
-   * Returns a {@link PersistenceManagerFactory} configured based on the properties stored in the
-   * resource at <code>name</code>, or, if not found, returns a {@link PersistenceManagerFactory}
-   * with the given name or, if not found, returns a <code>javax.persistence.EntityManagerFactory
-   * </code> cast to a {@link PersistenceManagerFactory}. If the name given is null or consists only
-   * of whitespace, it is interpreted as {@link
-   * Constants#ANONYMOUS_PERSISTENCE_MANAGER_FACTORY_NAME}. The following are standard key names:
-   * <br>
-   * <code>"javax.jdo.PersistenceManagerFactoryClass"
-   * <BR>"javax.jdo.option.Optimistic",
-   * <BR>"javax.jdo.option.RetainValues",
-   * <BR>"javax.jdo.option.RestoreValues",
-   * <BR>"javax.jdo.option.IgnoreCache",
-   * <BR>"javax.jdo.option.NontransactionalRead",
-   * <BR>"javax.jdo.option.NontransactionalWrite",
-   * <BR>"javax.jdo.option.Multithreaded",
-   * <BR>"javax.jdo.option.ConnectionUserName",
-   * <BR>"javax.jdo.option.ConnectionPassword",
-   * <BR>"javax.jdo.option.ConnectionURL",
-   * <BR>"javax.jdo.option.ConnectionFactoryName",
-   * <BR>"javax.jdo.option.ConnectionFactory2Name",
-   * <BR>"javax.jdo.option.Mapping",
-   * <BR>"javax.jdo.mapping.Catalog",
-   * <BR>"javax.jdo.mapping.Schema",
-   * <BR>"javax.jdo.option.PersistenceUnitName".
-   * <BR>"javax.jdo.option.DetachAllOnCommit".
-   * <BR>"javax.jdo.option.CopyOnAttach".
-   * <BR>"javax.jdo.option.TransactionType".
-   * <BR>"javax.jdo.option.ServerTimeZoneID".
-   * <BR>"javax.jdo.option.DatastoreReadTimeoutMillis",
-   * <BR>"javax.jdo.option.DatastoreWriteTimeoutMillis",
-   * <BR>"javax.jdo.option.Name".
-   * </code> and properties of the form <br>
-   * <code>javax.jdo.option.InstanceLifecycleListener.{listenerClass}[=[{pcClasses}]]</code> where
-   * <code>{listenerClass}</code> is the fully qualified name of a class that implements {@link
-   * javax.jdo.listener.InstanceLifecycleListener}, and <code>{pcClasses}</code> is an optional
-   * comma- or whitespace-delimited list of persistence-capable classes to be observed; the absence
-   * of a value for a property of this form means that instances of all persistence-capable classes
-   * will be observed by an instance of the given listener class.
-   *
-   * <p>JDO implementations are permitted to define key values of their own. Any key values not
-   * recognized by the implementation must be ignored. Key values that are recognized but not
-   * supported by an implementation must result in a <code>JDOFatalUserException</code> thrown by
-   * the method.
-   *
-   * <p>The returned <code>PersistenceManagerFactory</code> is not configurable (the <code>
-   * set<I>XXX</I></code> methods will throw an exception).
-   *
-   * <p>This method loads the properties found at <code>name</code>, if any, via <code>
-   * resourceLoader</code>, and creates a {@link PersistenceManagerFactory} with <code>pmfLoader
-   * </code>. Any exceptions thrown during resource loading will be wrapped in a {@link
-   * JDOFatalUserException}. If multiple PMFs with the requested name are found, a {@link
-   * JDOFatalUserException} is thrown.
-   *
-   * @since 2.1
-   * @param overrides a Map containing properties that override properties defined in any resources
-   *     loaded according to the "name" parameter
-   * @param name interpreted as the name of the resource containing the PMF properties, the name of
-   *     the PMF, or the persistence unit name, in that order; if name is null, blank or whitespace,
-   *     it is interpreted as indicating the anonymous {@link PersistenceManagerFactory}.
-   * @param resourceLoader the class loader to use to load properties file resources; must be
-   *     non-null if <code>name</code> is non-null or blank
-   * @param pmfLoader the class loader to use to load the {@link PersistenceManagerFactory} or
-   *     <code>javax.persistence.EntityManagerFactory</code> classes
-   * @return the {@link PersistenceManagerFactory} with properties in the given resource, with the
-   *     given name, or with the given persitence unit name
-   * @see Constants#ANONYMOUS_PERSISTENCE_MANAGER_FACTORY_NAME
-   */
-  public static PersistenceManagerFactory getPersistenceManagerFactory(
-      Map<?, ?> overrides, String name, ClassLoader resourceLoader, ClassLoader pmfLoader) {
-    if (pmfLoader == null)
-      throw new JDOFatalUserException(msg.msg("EXC_GetPMFNullPMFLoader")); // NOI18N
-    if (resourceLoader == null) {
-      throw new JDOFatalUserException(msg.msg("EXC_GetPMFNullPropsLoader")); // NOI18N
+
+    /**
+     * Returns a named {@link PersistenceManagerFactory} or persistence unit.
+     * @since 2.1
+     * @see #getPersistenceManagerFactory(Map,String,ClassLoader,ClassLoader)
+     * @param name Name of the PMF
+     * @return PersistenceManagerFactory
+     */
+    public static PersistenceManagerFactory getPersistenceManagerFactory
+        (String name) {
+        ClassLoader cl = getContextClassLoader();
+        return getPersistenceManagerFactory(null, name, cl, cl);
     }
 
-    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)) {
-      props = loadPropertiesFromResource(resourceLoader, name);
+    /**
+     * Returns a named {@link PersistenceManagerFactory} or persistence unit.
+     * @since 1.0
+     * @see #getPersistenceManagerFactory(Map,String,ClassLoader,ClassLoader)
+     * @param name Name of the PMF
+     * @param loader ClassLoader to use
+     * @return PersistenceManagerFactory
+     */
+    public static PersistenceManagerFactory getPersistenceManagerFactory
+        (String name, ClassLoader loader) {
+        
+        return getPersistenceManagerFactory(null, name, loader, loader);
     }
 
-    if (props != null) {
-      // 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);
-      return getPersistenceManagerFactory(overrides, props, pmfLoader);
+    /**
+     * Returns a named {@link PersistenceManagerFactory} or persistence unit.
+     * @since 2.0
+     * @see #getPersistenceManagerFactory(Map,String,ClassLoader,ClassLoader)
+     * @param name Name of the PMF
+     * @param resourceLoader ClassLoader to use for loading resources
+     * @param pmfLoader ClassLoader to use for loading the PMF
+     * @return PersistenceManagerFactory
+     */
+    public static PersistenceManagerFactory getPersistenceManagerFactory
+        (String name, ClassLoader resourceLoader, ClassLoader pmfLoader) {
+
+        return getPersistenceManagerFactory(
+                null, name, resourceLoader, pmfLoader);
     }
-    // props were null; try getting from jdoconfig.xml
-    props = getPropertiesFromJdoconfig(name, resourceLoader);
-    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);
-      // we have loaded a Properties, delegate to implementation
-      return getPersistenceManagerFactory(overrides, props, pmfLoader);
+
+    /**
+     * Returns a named {@link PersistenceManagerFactory} or persistence unit.
+     * @since 2.1
+     * @see #getPersistenceManagerFactory(Map,String,ClassLoader,ClassLoader)
+     * @param name Name of the PMF
+     * @param overrides Property overrides
+     * @return PersistenceManagerFactory
+     */
+    public static PersistenceManagerFactory getPersistenceManagerFactory
+            (Map<?, ?> overrides, String name) {
+
+        ClassLoader cl = getContextClassLoader();
+        return getPersistenceManagerFactory(overrides, name, cl, cl);
     }
-    // no properties found; last try to see if name is a JPA PU name
-    if (!ANONYMOUS_PERSISTENCE_MANAGER_FACTORY_NAME.equals(name)) {
-      props = new Properties();
-      props.put(PROPERTY_PERSISTENCE_UNIT_NAME, name);
-      return getPersistenceManagerFactory(overrides, props, pmfLoader);
+
+    /**
+     * Returns a named {@link PersistenceManagerFactory} or persistence unit.
+     * @since 2.1
+     * @see #getPersistenceManagerFactory(Map,String,ClassLoader,ClassLoader)
+     * @param overrides Property overrides
+     * @param name Name of the PMF
+     * @param resourceLoader ClassLoader to use for loading resources
+     * @return The PMF
+     */
+    public static PersistenceManagerFactory getPersistenceManagerFactory
+            (Map<?, ?> overrides, String name, ClassLoader resourceLoader) {
+
+        return getPersistenceManagerFactory(
+                overrides, name, resourceLoader, resourceLoader);
     }
+    
+
+    /**
+     * Returns a {@link PersistenceManagerFactory} configured based
+     * on the properties stored in the resource at
+     * <code>name</code>, or, if not found, returns a
+     * {@link PersistenceManagerFactory} with the given
+     * name or, if not found, returns a
+     * <code>javax.persistence.EntityManagerFactory</code> cast to a
+     * {@link PersistenceManagerFactory}.  If the name given is null or consists
+     * only of whitespace, it is interpreted as
+     * {@link Constants#ANONYMOUS_PERSISTENCE_MANAGER_FACTORY_NAME}.
+     * The following are standard key names:
+     * <BR><code>"javax.jdo.PersistenceManagerFactoryClass"
+     * <BR>"javax.jdo.option.Optimistic",
+     * <BR>"javax.jdo.option.RetainValues",
+     * <BR>"javax.jdo.option.RestoreValues",
+     * <BR>"javax.jdo.option.IgnoreCache",
+     * <BR>"javax.jdo.option.NontransactionalRead",
+     * <BR>"javax.jdo.option.NontransactionalWrite",
+     * <BR>"javax.jdo.option.Multithreaded",
+     * <BR>"javax.jdo.option.ConnectionUserName",
+     * <BR>"javax.jdo.option.ConnectionPassword",
+     * <BR>"javax.jdo.option.ConnectionURL",
+     * <BR>"javax.jdo.option.ConnectionFactoryName",
+     * <BR>"javax.jdo.option.ConnectionFactory2Name",
+     * <BR>"javax.jdo.option.Mapping",
+     * <BR>"javax.jdo.mapping.Catalog",
+     * <BR>"javax.jdo.mapping.Schema",
+     * <BR>"javax.jdo.option.PersistenceUnitName".
+     * <BR>"javax.jdo.option.DetachAllOnCommit".
+     * <BR>"javax.jdo.option.CopyOnAttach".
+     * <BR>"javax.jdo.option.TransactionType".
+     * <BR>"javax.jdo.option.ServerTimeZoneID".
+     * <BR>"javax.jdo.option.DatastoreReadTimeoutMillis",
+     * <BR>"javax.jdo.option.DatastoreWriteTimeoutMillis",
+     * <BR>"javax.jdo.option.Name".
+     * </code>
+     * and properties of the form
+     * <BR><code>javax.jdo.option.InstanceLifecycleListener.{listenerClass}[=[{pcClasses}]]</code>
+     * where <code>{listenerClass}</code> is the fully qualified name of a
+     * class that implements
+     * {@link javax.jdo.listener.InstanceLifecycleListener}, and
+     * <code>{pcClasses}</code> is an optional comma- or whitespace-delimited
+     * list of persistence-capable classes to be observed; the absence of a
+     * value for a property of this form means that instances of all
+     * persistence-capable classes will be observed by an instance of the given
+     * listener class.
+     * <P>JDO implementations
+     * are permitted to define key values of their own.  Any key values not
+     * recognized by the implementation must be ignored.  Key values that are
+     * recognized but not supported by an implementation must result in a
+     * <code>JDOFatalUserException</code> thrown by the method.
+     * <P>The returned <code>PersistenceManagerFactory</code> is not 
+     * configurable (the <code>set<I>XXX</I></code> methods will throw an 
+     * exception).
+     * 
+     * This method loads the properties found at <code>name</code>, if any, via
+     * <code>resourceLoader</code>, and creates a {@link
+     * PersistenceManagerFactory} with <code>pmfLoader</code>. Any
+     * exceptions thrown during resource loading will
+     * be wrapped in a {@link JDOFatalUserException}.
+     * If multiple PMFs with the requested name are found, a
+     * {@link JDOFatalUserException} is thrown.
+     * @since 2.1
+     * @param overrides a Map containing properties that override properties
+     * defined in any resources loaded according to the "name" parameter
+     * @param name interpreted as the name of the resource containing the PMF
+     * properties, the name of the PMF, or the persistence unit name, in that
+     * order; if name is null, blank or whitespace, it is interpreted as
+     * indicating the anonymous {@link PersistenceManagerFactory}.
+     * @param resourceLoader the class loader to use to load properties file
+     * resources; must be non-null if <code>name</code> is non-null or blank
+     * @param pmfLoader the class loader to use to load the 
+     * {@link PersistenceManagerFactory} or
+     * <code>javax.persistence.EntityManagerFactory</code> classes
+     * @return the {@link PersistenceManagerFactory} with properties in the
+     * given resource, with the given name, or with the given persitence unit name
+     * @see Constants#ANONYMOUS_PERSISTENCE_MANAGER_FACTORY_NAME
+     */
+    public static PersistenceManagerFactory getPersistenceManagerFactory(
+            Map<?, ?> overrides,
+            String name,
+            ClassLoader resourceLoader,
+            ClassLoader pmfLoader) {
+        if (pmfLoader == null)
+            throw new JDOFatalUserException (msg.msg (
+                "EXC_GetPMFNullPMFLoader")); //NOI18N
+        if (resourceLoader == null) {
+            throw new JDOFatalUserException(msg.msg(
+                "EXC_GetPMFNullPropsLoader")); //NOI18N
+        }
 
-    // no PMF found; give up
-    throw new JDOFatalUserException(
-        msg.msg("EXC_NoPMFConfigurableViaPropertiesOrXML", name)); // NOI18N
-  }
-
-  /**
-   * Invoke the getPersistenceManagerFactory method on the implementation. If the overrides
-   * parameter to this method is not null, the static method with Map overrides, Map properties
-   * parameters will be invoked. If the overrides parameter to this method is null, the static
-   * method with Map properties parameter will be invoked.
-   *
-   * @param pmfClassName the name of the implementation factory class
-   * @param overrides a Map of overrides
-   * @param properties a Map of properties
-   * @param cl the class loader to use to load the implementation class
-   * @return the PersistenceManagerFactory
-   */
-  protected static PersistenceManagerFactory invokeGetPersistenceManagerFactoryOnImplementation(
-      String pmfClassName, Map<?, ?> overrides, Map<?, ?> properties, ClassLoader cl) {
-    if (overrides != null) {
-      // overrides is not null; use getPersistenceManagerFactory(Map overrides, Map props)
-      try {
-        Class<?> implClass = forName(pmfClassName, true, cl);
-        Method m =
-            getMethod(
-                implClass,
-                "getPersistenceManagerFactory", // NOI18N
-                new Class[] {Map.class, Map.class});
-        PersistenceManagerFactory pmf =
-            (PersistenceManagerFactory) invoke(m, null, new Object[] {overrides, properties});
-        if (pmf == null) {
-          throw new JDOFatalInternalException(msg.msg("EXC_GetPMFNullPMF", pmfClassName)); // NOI18N
+        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)) {
+            props = loadPropertiesFromResource(resourceLoader, name);
         }
-        return pmf;
-
-      } catch (ClassNotFoundException e) {
-        throw new JDOFatalUserException(
-            msg.msg("EXC_GetPMFClassNotFound", pmfClassName), e); // NOI18N
-      } catch (NoSuchMethodException e) {
-        throw new JDOFatalInternalException(
-            msg.msg("EXC_GetPMFNoSuchMethod2", pmfClassName), e); // NOI18N
-      } catch (NullPointerException e) {
-        throw new JDOFatalInternalException(
-            msg.msg("EXC_GetPMFNullPointerException", pmfClassName), e); // NOI18N
-      } catch (IllegalAccessException e) {
-        throw new JDOFatalUserException(
-            msg.msg("EXC_GetPMFIllegalAccess", pmfClassName), e); // NOI18N
-      } catch (ClassCastException e) {
-        throw new JDOFatalInternalException(
-            msg.msg("EXC_GetPMFClassCastException", pmfClassName), e); // NOI18N
-      } catch (InvocationTargetException ite) {
-        Throwable nested = ite.getTargetException();
-        if (nested instanceof JDOException) {
-          throw (JDOException) nested;
-        } else
-          throw new JDOFatalInternalException(
-              msg.msg("EXC_GetPMFUnexpectedException"), ite); // NOI18N
-      }
-    } else {
-      // overrides is null; use getPersistenceManagerFactory(Map props)
-      try {
-        Class<?> implClass = forName(pmfClassName, true, cl);
-        Method m =
-            getMethod(
-                implClass,
-                "getPersistenceManagerFactory", // NOI18N
-                new Class[] {Map.class});
-        PersistenceManagerFactory pmf =
-            (PersistenceManagerFactory) invoke(m, null, new Object[] {properties});
-        if (pmf == null) {
-          throw new JDOFatalInternalException(msg.msg("EXC_GetPMFNullPMF", pmfClassName)); // NOI18N
+
+        if (props != null) {
+            // 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);
+            return getPersistenceManagerFactory(overrides, props, pmfLoader);
         }
-        return pmf;
-      } catch (ClassNotFoundException e) {
-        throw new JDOFatalUserException(
-            msg.msg("EXC_GetPMFClassNotFound", pmfClassName), e); // NOI18N
-      } catch (NoSuchMethodException e) {
-        throw new JDOFatalInternalException(
-            msg.msg("EXC_GetPMFNoSuchMethod", pmfClassName), e); // NOI18N
-      } catch (NullPointerException e) {
-        throw new JDOFatalInternalException(
-            msg.msg("EXC_GetPMFNullPointerException", pmfClassName), e); // NOI18N
-      } catch (IllegalAccessException e) {
-        throw new JDOFatalUserException(
-            msg.msg("EXC_GetPMFIllegalAccess", pmfClassName), e); // NOI18N
-      } catch (ClassCastException e) {
-        throw new JDOFatalInternalException(
-            msg.msg("EXC_GetPMFClassCastException", pmfClassName), e); // NOI18N
-      } catch (InvocationTargetException ite) {
-        Throwable nested = ite.getTargetException();
-        if (nested instanceof JDOException) {
-          throw (JDOException) nested;
-        } else
-          throw new JDOFatalInternalException(
-              msg.msg("EXC_GetPMFUnexpectedException"), ite); // NOI18N
-      }
+        // props were null; try getting from jdoconfig.xml
+        props = getPropertiesFromJdoconfig(name, resourceLoader);
+        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);
+            // 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)) {
+            props = new Properties();
+            props.put(PROPERTY_PERSISTENCE_UNIT_NAME, name);
+            return getPersistenceManagerFactory(overrides, props, pmfLoader);
+        }
+        
+        // no PMF found; give up
+        throw new JDOFatalUserException (msg.msg (
+            "EXC_NoPMFConfigurableViaPropertiesOrXML", name)); //NOI18N
     }
-  }
-
-  /**
-   * Load a Properties instance by name from the class loader.
-   *
-   * @param resourceLoader the class loader from which to load the properties
-   * @param name the name of the resource
-   * @return a Properties instance or null if no resource is found
-   */
-  protected static Map<Object, Object> loadPropertiesFromResource(
-      ClassLoader resourceLoader, String name) {
-    InputStream in = null;
-    Properties props = null;
-    // try to load resources from properties file
-    try {
-      in = getResourceAsStream(resourceLoader, name);
-      if (in != null) {
-        // then some kind of resource was found by the given name;
-        // assume that it's a properties file
-        props = new Properties();
-        ((Properties) props).load(in);
-      }
-    } catch (IOException ioe) {
-      throw new JDOFatalUserException(msg.msg("EXC_GetPMFIOExceptionRsrc", name), ioe); // NOI18N
-    } finally {
-      if (in != null) {
+
+    /** Invoke the getPersistenceManagerFactory method on the implementation.
+     * If the overrides parameter to this method is not null, the static method 
+     * with Map overrides, Map properties parameters will be invoked.
+     * If the overrides parameter to this method is null,  the static method 
+     * with Map properties parameter will be invoked.
+     * @param pmfClassName the name of the implementation factory class
+     * @param overrides a Map of overrides
+     * @param properties a Map of properties
+     * @param cl the class loader to use to load the implementation class
+     * @return the PersistenceManagerFactory
+     */
+    protected static PersistenceManagerFactory
+        invokeGetPersistenceManagerFactoryOnImplementation(
+            String pmfClassName, Map<?, ?> overrides, Map<?, ?> properties, ClassLoader cl) {
+        if (overrides != null) {
+            // overrides is not null; use getPersistenceManagerFactory(Map overrides, Map props)
+            try {
+                Class<?> implClass = forName(pmfClassName, true, cl);
+                Method m = getMethod(implClass,
+                        "getPersistenceManagerFactory", //NOI18N
+                        new Class[]{Map.class, Map.class});
+                PersistenceManagerFactory pmf = 
+                    (PersistenceManagerFactory) invoke(m,
+                        null, new Object[]{overrides, properties});
+                if (pmf == null) {
+                        throw new JDOFatalInternalException(msg.msg (
+                            "EXC_GetPMFNullPMF", pmfClassName)); //NOI18N
+                    }
+                return pmf;
+
+            } catch (ClassNotFoundException e) {
+                throw new JDOFatalUserException(msg.msg(
+                        "EXC_GetPMFClassNotFound", pmfClassName), e); //NOI18N
+            } catch (NoSuchMethodException e) {
+                throw new JDOFatalInternalException(msg.msg(
+                        "EXC_GetPMFNoSuchMethod2", pmfClassName), e); //NOI18N
+            } catch (NullPointerException e) {
+                throw new JDOFatalInternalException (msg.msg(
+                    "EXC_GetPMFNullPointerException", pmfClassName), e); //NOI18N
+            } catch (IllegalAccessException e) {
+                throw new JDOFatalUserException(msg.msg(
+                        "EXC_GetPMFIllegalAccess", pmfClassName), e); //NOI18N
+            } catch (ClassCastException e) {
+                throw new JDOFatalInternalException (msg.msg(
+                    "EXC_GetPMFClassCastException", pmfClassName), e); //NOI18N
+            } catch (InvocationTargetException ite) {
+                Throwable nested = ite.getTargetException();
+                if (nested instanceof JDOException) {
+                    throw (JDOException)nested;
+                } else throw new JDOFatalInternalException (msg.msg(
+                    "EXC_GetPMFUnexpectedException"), ite); //NOI18N
+            }
+        } else {
+            // overrides is null; use getPersistenceManagerFactory(Map props)
+            try {
+                Class<?> implClass = forName(pmfClassName, true, cl);
+                Method m = getMethod(implClass,
+                        "getPersistenceManagerFactory", //NOI18N
+                        new Class[]{Map.class});
+                PersistenceManagerFactory pmf = 
+                    (PersistenceManagerFactory) invoke(m,
+                        null, new Object[]{properties});
+                if (pmf == null) {
+                        throw new JDOFatalInternalException(msg.msg (
+                            "EXC_GetPMFNullPMF", pmfClassName)); //NOI18N
+                    }
+                return pmf;
+            } catch (ClassNotFoundException e) {
+                throw new JDOFatalUserException(msg.msg(
+                        "EXC_GetPMFClassNotFound", pmfClassName), e); //NOI18N
+            } catch (NoSuchMethodException e) {
+                throw new JDOFatalInternalException(msg.msg(
+                        "EXC_GetPMFNoSuchMethod", pmfClassName), e); //NOI18N
+            } catch (NullPointerException e) {
+                throw new JDOFatalInternalException (msg.msg(
+                    "EXC_GetPMFNullPointerException", pmfClassName), e); //NOI18N
+            } catch (IllegalAccessException e) {
+                throw new JDOFatalUserException(msg.msg(
+                        "EXC_GetPMFIllegalAccess", pmfClassName), e); //NOI18N
+            } catch (ClassCastException e) {
+                throw new JDOFatalInternalException (msg.msg(
+                    "EXC_GetPMFClassCastException", pmfClassName), e); //NOI18N
+            } catch (InvocationTargetException ite) {
+                Throwable nested = ite.getTargetException();
+                if (nested instanceof JDOException) {
+                    throw (JDOException)nested;
+                } else throw new JDOFatalInternalException (msg.msg(
+                    "EXC_GetPMFUnexpectedException"), ite); //NOI18N
+            }
+        }
+    }
+
+    /** Load a Properties instance by name from the class loader.
+     * 
+     * @param resourceLoader the class loader from which to load the properties
+     * @param name the name of the resource
+     * @return a Properties instance or null if no resource is found
+     */
+    protected static Map<Object,Object> loadPropertiesFromResource(
+            ClassLoader resourceLoader, String name) {
+        InputStream in = null;
+        Properties props = null;
+        // try to load resources from properties file
         try {
-          in.close();
+            in = getResourceAsStream(resourceLoader, name);
+            if (in != null) {
+                // then some kind of resource was found by the given name;
+                // assume that it's a properties file
+                props = new Properties();
+                ((Properties) props).load(in);
+            }
         } catch (IOException ioe) {
+            throw new JDOFatalUserException(msg.msg(
+                "EXC_GetPMFIOExceptionRsrc", name), ioe); //NOI18N
+        } finally {
+            if (in != null) {
+                try {
+                    in.close();
+                } catch (IOException ioe) {
+                }
+            }
         }
-      }
+        return props;
     }
-    return props;
-  }
-
-  /**
-   * @see #getNamedPMFProperties(String,ClassLoader,String)
-   * @since 2.1
-   * @param name Name of the PMF
-   * @param resourceLoader ClassLoader to use for loading resources
-   * @return The properties for this PMF
-   */
-  protected static Map<Object, Object> getPropertiesFromJdoconfig(
-      String name, ClassLoader resourceLoader) {
-    return getNamedPMFProperties(name, resourceLoader, JDOCONFIG_RESOURCE_NAME);
-  }
-
-  /**
-   * Find and return the named {@link PersistenceManagerFactory}'s properties, or null if not found.
-   * If multiple named PMF property sets with the given name are found (including anonymous ones),
-   * throw {@link JDOFatalUserException}. This method is here only to facilitate testing; the
-   * parameter "jdoconfigResourceName" in public usage should always have the value given in the
-   * constant {@link Constants#JDOCONFIG_RESOURCE_NAME}.
-   *
-   * @param name The persistence unit name; null is disallowed.
-   * @param resourceLoader The ClassLoader used to load the standard JDO configuration file.
-   * @param jdoconfigResourceName The name of the configuration file to read. In public usage, this
-   *     should always be the value of {@link Constants#JDOCONFIG_RESOURCE_NAME}.
-   * @return The named <code>PersistenceManagerFactory</code> properties if found, null if not.
-   * @since 2.1
-   * @throws JDOFatalUserException if multiple named PMF property sets are found with the given
-   *     name, or any other exception is encountered.
-   */
-  protected static Map<Object, Object> getNamedPMFProperties(
-      String name, ClassLoader resourceLoader, String jdoconfigResourceName) {
-    // key is PU name, value is Map of PU properties
-    Map<String, Map<Object, Object>> propertiesByNameInAllConfigs =
-        new HashMap<String, Map<Object, Object>>();
-    try {
-      URL firstFoundConfigURL = null;
-
-      // get all JDO configurations
-      Enumeration<URL> resources = getResources(resourceLoader, jdoconfigResourceName);
-
-      if (resources.hasMoreElements()) {
-        ArrayList<URL> processedResources = new ArrayList<URL>();
-
-        // get ready to parse XML
-        DocumentBuilderFactory factory = getDocumentBuilderFactory();
-        do {
-          URL currentConfigURL = resources.nextElement();
-          if (processedResources.contains(currentConfigURL)) {
-            continue;
-          } else {
-            processedResources.add(currentConfigURL);
-          }
-
-          Map<String, Map<Object, Object>> propertiesByNameInCurrentConfig =
-              readNamedPMFProperties(currentConfigURL, name, factory);
-
-          // try to detect duplicate requested PU
-          if (propertiesByNameInCurrentConfig.containsKey(name)) {
-            // possible dup -- check for it
-            if (firstFoundConfigURL == null) {
-              firstFoundConfigURL = currentConfigURL;
+
+    /**
+     * @see #getNamedPMFProperties(String,ClassLoader,String)
+     * @since 2.1
+     * @param name Name of the PMF
+     * @param resourceLoader ClassLoader to use for loading resources
+     * @return The properties for this PMF
+     */
+    protected static Map<Object,Object> getPropertiesFromJdoconfig(
+            String name,
+            ClassLoader resourceLoader) {
+        return getNamedPMFProperties(name, resourceLoader, JDOCONFIG_RESOURCE_NAME);
+    }
+
+    /**
+     * Find and return the named {@link PersistenceManagerFactory}'s properties,
+     * or null if not found.
+     * If multiple named PMF property sets with
+     * the given name are found (including anonymous ones), throw
+     * {@link JDOFatalUserException}.
+     * This method is here only to facilitate testing; the parameter
+     * "jdoconfigResourceName" in public usage should always have the value
+     * given in the constant {@link Constants#JDOCONFIG_RESOURCE_NAME}.
+     *
+     * @param name The persistence unit name; null is disallowed.
+     * @param resourceLoader The ClassLoader used to load the standard JDO
+     * configuration file.
+     * @param jdoconfigResourceName The name of the configuration file to read.
+     * In public usage, this should always be the value of
+     * {@link Constants#JDOCONFIG_RESOURCE_NAME}.
+     * @return The named <code>PersistenceManagerFactory</code> properties if
+     * found, null if not.
+     * @since 2.1
+     * @throws JDOFatalUserException if multiple named PMF property sets are
+     * found with the given name, or any other exception is encountered.
+     */
+    protected static Map<Object,Object> getNamedPMFProperties(
+            String name,
+            ClassLoader resourceLoader,
+            String jdoconfigResourceName) {
+        // key is PU name, value is Map of PU properties
+        Map<String,Map<Object,Object>> propertiesByNameInAllConfigs
+                = new HashMap<String,Map<Object,Object>>();
+        try {
+            URL firstFoundConfigURL = null;
+
+            // get all JDO configurations
+            Enumeration<URL> resources =
+                getResources(resourceLoader, jdoconfigResourceName);
+
+            if (resources.hasMoreElements()) {
+                ArrayList<URL> processedResources = new ArrayList<URL>();
+
+                // get ready to parse XML
+                DocumentBuilderFactory factory = getDocumentBuilderFactory();
+                do {
+                    URL currentConfigURL = resources.nextElement();
+                    if (processedResources.contains(currentConfigURL)) {
+                        continue;
+                    }
+                    else {
+                        processedResources.add(currentConfigURL);
+                    }
+                    
+                    Map<String,Map<Object,Object>> propertiesByNameInCurrentConfig =
+                        readNamedPMFProperties(
+                            currentConfigURL,
+                            name,
+                            factory);
+
+                    // try to detect duplicate requested PU
+                    if (propertiesByNameInCurrentConfig.containsKey(name)) {
+                        // possible dup -- check for it
+                        if (firstFoundConfigURL == null) {
+                            firstFoundConfigURL = currentConfigURL;
+                        }
+                        
+                        if (propertiesByNameInAllConfigs.containsKey(name))
+                            throw new JDOFatalUserException (msg.msg(
+                                "EXC_DuplicateRequestedNamedPMFFoundInDifferentConfigs",
+                                "".equals(name)
+                                        ? "(anonymous)"
+                                        : name,
+                                firstFoundConfigURL.toExternalForm(),
+                                currentConfigURL.toExternalForm())); //NOI18N
+                    }
+                    // no dups -- add found PUs to all PUs and keep going
+                    propertiesByNameInAllConfigs
+                        .putAll(propertiesByNameInCurrentConfig);
+                } while (resources.hasMoreElements());
             }
+        }
+        catch (FactoryConfigurationError e) {
+            throw new JDOFatalUserException(
+                msg.msg("ERR_NoDocumentBuilderFactory"), e);
+        }
+        catch (IOException ioe) {
+            throw new JDOFatalUserException (msg.msg (
+                "EXC_GetPMFIOExceptionRsrc", name), ioe); //NOI18N
+        }
 
-            if (propertiesByNameInAllConfigs.containsKey(name))
-              throw new JDOFatalUserException(
-                  msg.msg(
-                      "EXC_DuplicateRequestedNamedPMFFoundInDifferentConfigs",
-                      "".equals(name) ? "(anonymous)" : name,
-                      firstFoundConfigURL.toExternalForm(),
-                      currentConfigURL.toExternalForm())); // NOI18N
-          }
-          // no dups -- add found PUs to all PUs and keep going
-          propertiesByNameInAllConfigs.putAll(propertiesByNameInCurrentConfig);
-        } while (resources.hasMoreElements());
-      }
-    } catch (FactoryConfigurationError e) {
-      throw new JDOFatalUserException(msg.msg("ERR_NoDocumentBuilderFactory"), e);
-    } catch (IOException ioe) {
-      throw new JDOFatalUserException(msg.msg("EXC_GetPMFIOExceptionRsrc", name), ioe); // NOI18N
+        // done with reading all config resources;
+        // return what we found, which may very well be null
+        return (Map<Object,Object>) propertiesByNameInAllConfigs.get(name);
     }
 
-    // done with reading all config resources;
-    // return what we found, which may very well be null
-    return (Map<Object, Object>) propertiesByNameInAllConfigs.get(name);
-  }
 
-  protected static DocumentBuilderFactory getDocumentBuilderFactory() {
-    @SuppressWarnings("static-access")
-    DocumentBuilderFactory factory = implHelper.getRegisteredDocumentBuilderFactory();
-    if (factory == null) {
-      factory = getDefaultDocumentBuilderFactory();
+    protected static DocumentBuilderFactory getDocumentBuilderFactory() {
+        @SuppressWarnings("static-access")
+        DocumentBuilderFactory factory =
+                implHelper.getRegisteredDocumentBuilderFactory();
+        if (factory == null) {
+            factory = getDefaultDocumentBuilderFactory();
+        }
+        return factory;
     }
-    return factory;
-  }
-
-  protected static DocumentBuilderFactory getDefaultDocumentBuilderFactory() {
-    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
-    factory.setIgnoringComments(true);
-    factory.setNamespaceAware(true);
-    factory.setValidating(false);
-    factory.setIgnoringElementContentWhitespace(true);
-    factory.setExpandEntityReferences(true);
-
-    return factory;
-  }
-
-  protected static ErrorHandler getErrorHandler() {
-    @SuppressWarnings("static-access")
-    ErrorHandler handler = implHelper.getRegisteredErrorHandler();
-    if (handler == null) {
-      handler = getDefaultErrorHandler();
+    
+    protected static DocumentBuilderFactory getDefaultDocumentBuilderFactory() {
+        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+        factory.setIgnoringComments(true);
+        factory.setNamespaceAware(true);
+        factory.setValidating(false);
+        factory.setIgnoringElementContentWhitespace(true);
+        factory.setExpandEntityReferences(true);
+
+        return factory;
     }
-    return handler;
-  }
-
-  protected static ErrorHandler getDefaultErrorHandler() {
-    return new ErrorHandler() {
-      public void error(SAXParseException exception) throws SAXException {
-        throw exception;
-      }
 
-      public void fatalError(SAXParseException exception) throws SAXException {
-        throw exception;
-      }
+    protected static ErrorHandler getErrorHandler() {
+        @SuppressWarnings("static-access")
+        ErrorHandler handler = implHelper.getRegisteredErrorHandler();
+        if (handler == null) {
+            handler = getDefaultErrorHandler();
+        }
+        return handler;
+    }
+    
+    protected static ErrorHandler getDefaultErrorHandler() {
+        return new ErrorHandler() {
+                public void error(SAXParseException exception)
+                        throws SAXException {
+                    throw exception;
+                }
 
-      public void warning(SAXParseException exception) throws SAXException {
-        // gulp:  ignore warnings
-      }
-    };
-  }
-
-  /**
-   * Reads JDO configuration file, creates a Map for each persistence-manager-factory, then returns
-   * the map.
-   *
-   * @param url URL of a JDO configuration file compliant with javax/jdo/jdoconfig.xsd.
-   * @param requestedPMFName The name of the requested persistence unit (allows for fail-fast).
-   * @param factory The <code>DocumentBuilderFactory</code> to use for XML parsing.
-   * @return a Map&lt;String,Map&gt; holding persistence unit configurations; for the anonymous
-   *     persistence unit, the value of the String key is the empty string, "".
-   */
-  protected static Map<String, Map<Object, Object>> readNamedPMFProperties(
-      URL url, String requestedPMFName, DocumentBuilderFactory factory) {
-    requestedPMFName = requestedPMFName == null ? "" : requestedPMFName.trim();
-
-    Map<String, Map<Object, Object>> propertiesByName = new HashMap<String, Map<Object, Object>>();
-    InputStream in = null;
-    try {
-      DocumentBuilder builder = factory.newDocumentBuilder();
-      builder.setErrorHandler(getErrorHandler());
-
-      in = openStream(url);
-      Document doc = builder.parse(in);
-
-      Element root = doc.getDocumentElement();
-      if (root == null) {
-        throw new JDOFatalUserException(
-            msg.msg("EXC_InvalidJDOConfigNoRoot", url.toExternalForm()));
-      }
+                public void fatalError(SAXParseException exception)
+                        throws SAXException {
+                    throw exception;
+                }
 
-      NodeList pmfs = root.getElementsByTagName(ELEMENT_PERSISTENCE_MANAGER_FACTORY);
+                public void warning(SAXParseException exception)
+                        throws SAXException {
+                    // gulp:  ignore warnings
+                }
+            };
+    }
 
-      for (int i = 0; i < pmfs.getLength(); i++) {
-        Node pmfElement = pmfs.item(i);
 
-        Properties pmfPropertiesFromAttributes = readPropertiesFromPMFElementAttributes(pmfElement);
+    /**
+     * Reads JDO configuration file, creates a Map for each
+     * persistence-manager-factory, then returns the map.
+     * @param url URL of a JDO configuration file compliant with javax/jdo/jdoconfig.xsd.
+     * @param requestedPMFName The name of the requested
+     *   persistence unit (allows for fail-fast).
+     * @param factory The <code>DocumentBuilderFactory</code> to use for XML parsing.
+     * @return a Map&lt;String,Map&gt; holding persistence unit configurations; for the
+     *   anonymous persistence unit, the value of the String key is the empty string, "".
+     */
+    protected static Map<String,Map<Object,Object>> readNamedPMFProperties(
+            URL url,
+            String requestedPMFName,
+            DocumentBuilderFactory factory) {
+        requestedPMFName = requestedPMFName == null
+            ? ""
+            : requestedPMFName.trim();
+
+        Map<String,Map<Object,Object>>
+                propertiesByName = new HashMap<String,Map<Object,Object>>();
+        InputStream in = null;
+        try {
+            DocumentBuilder builder = factory.newDocumentBuilder();
+            builder.setErrorHandler(getErrorHandler());
 
-        Properties pmfPropertiesFromElements = readPropertiesFromPMFSubelements(pmfElement, url);
+            in = openStream(url);
+            Document doc = builder.parse(in);
... 376424 lines suppressed ...