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 cl...@apache.org on 2021/05/07 23:12:07 UTC

[db-jdo] 25/43: Updated initial 2.0.1 branch: - Removed api20 directory. - Updated currentVersion entry to 2.0.1 in core20, enhancer20, and tck20. - Updated the JPOX dependency to 1.1.1. - Updated the Derby dependency to 10.1.3.1.

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

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

commit 01439560a4d8218e913675000123dbec4ad43060
Author: Michael Bouschen <mb...@apache.org>
AuthorDate: Tue Oct 3 19:17:10 2006 +0000

    Updated initial 2.0.1 branch:
    - Removed api20 directory.
    - Updated currentVersion entry to 2.0.1 in core20, enhancer20, and tck20.
    - Updated the JPOX dependency to 1.1.1.
    - Updated the Derby dependency to 10.1.3.1.
---
 api20/LICENSE.txt                                  |  202 ----
 api20/maven.xml                                    |   71 --
 api20/project.properties                           |   24 -
 api20/project.xml                                  |  104 --
 api20/src/java/javax/jdo/Bundle.properties         |   78 --
 api20/src/java/javax/jdo/Extent.java               |   89 --
 api20/src/java/javax/jdo/FetchPlan.java            |  219 ----
 api20/src/java/javax/jdo/InstanceCallbacks.java    |   70 --
 api20/src/java/javax/jdo/JDOCanRetryException.java |   94 --
 .../src/java/javax/jdo/JDODataStoreException.java  |   95 --
 .../javax/jdo/JDODetachedFieldAccessException.java |   73 --
 api20/src/java/javax/jdo/JDOException.java         |  295 -----
 .../java/javax/jdo/JDOFatalDataStoreException.java |   74 --
 api20/src/java/javax/jdo/JDOFatalException.java    |   95 --
 .../java/javax/jdo/JDOFatalInternalException.java  |   67 --
 .../src/java/javax/jdo/JDOFatalUserException.java  |   94 --
 api20/src/java/javax/jdo/JDOHelper.java            |  835 --------------
 .../java/javax/jdo/JDONullIdentityException.java   |   77 --
 .../java/javax/jdo/JDOObjectNotFoundException.java |   69 --
 .../jdo/JDOOptimisticVerificationException.java    |   70 --
 .../javax/jdo/JDOUnsupportedOptionException.java   |   66 --
 .../java/javax/jdo/JDOUserCallbackException.java   |   67 --
 api20/src/java/javax/jdo/JDOUserException.java     |   94 --
 api20/src/java/javax/jdo/PersistenceManager.java   | 1086 -------------------
 .../java/javax/jdo/PersistenceManagerFactory.java  |  432 --------
 api20/src/java/javax/jdo/Query.java                |  586 ----------
 api20/src/java/javax/jdo/Transaction.java          |  198 ----
 .../java/javax/jdo/datastore/DataStoreCache.java   |  169 ---
 .../java/javax/jdo/datastore/JDOConnection.java    |   55 -
 api20/src/java/javax/jdo/datastore/Sequence.java   |   82 --
 api20/src/java/javax/jdo/datastore/package.html    |   26 -
 .../src/java/javax/jdo/identity/ByteIdentity.java  |  131 ---
 .../src/java/javax/jdo/identity/CharIdentity.java  |  143 ---
 api20/src/java/javax/jdo/identity/IntIdentity.java |  128 ---
 .../src/java/javax/jdo/identity/LongIdentity.java  |  130 ---
 .../java/javax/jdo/identity/ObjectIdentity.java    |  152 ---
 .../src/java/javax/jdo/identity/ShortIdentity.java |  128 ---
 .../javax/jdo/identity/SingleFieldIdentity.java    |  188 ----
 .../java/javax/jdo/identity/StringIdentity.java    |   96 --
 api20/src/java/javax/jdo/identity/package.html     |   26 -
 .../java/javax/jdo/listener/AttachCallback.java    |   49 -
 .../jdo/listener/AttachLifecycleListener.java      |   55 -
 .../src/java/javax/jdo/listener/ClearCallback.java |   42 -
 .../javax/jdo/listener/ClearLifecycleListener.java |   58 -
 .../jdo/listener/CreateLifecycleListener.java      |   41 -
 .../java/javax/jdo/listener/DeleteCallback.java    |   41 -
 .../jdo/listener/DeleteLifecycleListener.java      |   53 -
 .../java/javax/jdo/listener/DetachCallback.java    |   47 -
 .../jdo/listener/DetachLifecycleListener.java      |   54 -
 .../javax/jdo/listener/DirtyLifecycleListener.java |   48 -
 .../javax/jdo/listener/InstanceLifecycleEvent.java |  190 ----
 .../jdo/listener/InstanceLifecycleListener.java    |   34 -
 .../src/java/javax/jdo/listener/LoadCallback.java  |   41 -
 .../javax/jdo/listener/LoadLifecycleListener.java  |   41 -
 .../src/java/javax/jdo/listener/StoreCallback.java |   44 -
 .../javax/jdo/listener/StoreLifecycleListener.java |   52 -
 api20/src/java/javax/jdo/listener/package.html     |   54 -
 api20/src/java/javax/jdo/package.html              |   90 --
 api20/src/java/javax/jdo/spi/Detachable.java       |   46 -
 api20/src/java/javax/jdo/spi/I18NHelper.java       |  403 -------
 api20/src/java/javax/jdo/spi/JDOImplHelper.java    |  935 ----------------
 api20/src/java/javax/jdo/spi/JDOPermission.java    |  134 ---
 .../src/java/javax/jdo/spi/PersistenceCapable.java |  593 ----------
 .../src/java/javax/jdo/spi/RegisterClassEvent.java |  122 ---
 .../java/javax/jdo/spi/RegisterClassListener.java  |   43 -
 .../src/java/javax/jdo/spi/StateInterrogation.java |  250 -----
 api20/src/java/javax/jdo/spi/StateManager.java     |  515 ---------
 api20/src/java/javax/jdo/spi/package.html          |   47 -
 api20/src/schema/javax/jdo/jdo.dtd                 |  226 ----
 api20/src/schema/javax/jdo/jdo.xsd                 | 1144 --------------------
 api20/src/schema/javax/jdo/jdoquery.dtd            |   28 -
 api20/src/schema/javax/jdo/jdoquery.xsd            |  108 --
 api20/src/schema/javax/jdo/orm.dtd                 |  167 ---
 api20/src/schema/javax/jdo/orm.xsd                 |  775 -------------
 api20/test/java/javax/jdo/JDOHelperTest.java       |  525 ---------
 .../java/javax/jdo/identity/ByteIdentityTest.java  |  129 ---
 .../java/javax/jdo/identity/CharIdentityTest.java  |  138 ---
 .../javax/jdo/identity/ConcreteTestIdentity.java   |   53 -
 .../java/javax/jdo/identity/IntIdentityTest.java   |  128 ---
 .../java/javax/jdo/identity/LongIdentityTest.java  |  129 ---
 .../javax/jdo/identity/ObjectIdentityTest.java     |  425 --------
 .../java/javax/jdo/identity/ShortIdentityTest.java |  128 ---
 .../jdo/identity/SingleFieldIdentityTest.java      |  109 --
 .../javax/jdo/identity/StringIdentityTest.java     |   91 --
 .../jdo/listener/InstanceLifecycleEventTest.java   |  130 ---
 api20/test/java/javax/jdo/pc/PCPoint.java          |  460 --------
 api20/test/java/javax/jdo/schema/XMLTest.java      |  128 ---
 .../test/java/javax/jdo/spi/JDOImplHelperTest.java |  202 ----
 .../java/javax/jdo/spi/StateInterrogationTest.java |  540 ---------
 api20/test/java/javax/jdo/util/AbstractTest.java   |  102 --
 .../java/javax/jdo/util/BatchResultPrinter.java    |  103 --
 .../test/java/javax/jdo/util/BatchTestRunner.java  |  163 ---
 api20/test/java/javax/jdo/util/XMLTestUtil.java    |  561 ----------
 api20/test/schema/Negative0-dtd.jdo                |    7 -
 api20/test/schema/Negative0-dtd.jdoquery           |    7 -
 api20/test/schema/Negative0-dtd.orm                |    7 -
 api20/test/schema/Negative0-xsd.jdo                |    7 -
 api20/test/schema/Negative0-xsd.jdoquery           |    8 -
 api20/test/schema/Negative0-xsd.orm                |    7 -
 api20/test/schema/Positive0-dtd.jdo                |    9 -
 api20/test/schema/Positive0-dtd.jdoquery           |   14 -
 api20/test/schema/Positive0-dtd.orm                |    9 -
 api20/test/schema/Positive0-xsd.jdo                |    9 -
 api20/test/schema/Positive0-xsd.jdoquery           |   14 -
 api20/test/schema/Positive0-xsd.orm                |    9 -
 api20/test/schema/Positive1-dtd.jdo                |  130 ---
 api20/test/schema/Positive1-dtd.orm                |   97 --
 api20/test/schema/Positive1-xsd.jdo                |  131 ---
 api20/test/schema/Positive1-xsd.orm                |   99 --
 api20/test/schema/Positive15.1-dtd.orm             |   17 -
 api20/test/schema/Positive15.1-xsd.orm             |   17 -
 api20/test/schema/Positive15.2.1-dtd.orm           |   26 -
 api20/test/schema/Positive15.2.1-xsd.orm           |   26 -
 api20/test/schema/Positive15.2.2-dtd.orm           |   23 -
 api20/test/schema/Positive15.2.2-xsd.orm           |   23 -
 api20/test/schema/Positive15.3.1-dtd.orm           |   16 -
 api20/test/schema/Positive15.3.1-xsd.orm           |   16 -
 api20/test/schema/Positive15.3.2-dtd.orm           |   18 -
 api20/test/schema/Positive15.3.2-xsd.orm           |   18 -
 api20/test/schema/Positive15.3.3-dtd.orm           |   16 -
 api20/test/schema/Positive15.3.3-xsd.orm           |   16 -
 api20/test/schema/Positive15.3.4-dtd.orm           |   20 -
 api20/test/schema/Positive15.3.4-xsd.orm           |   20 -
 api20/test/schema/Positive15.3.5-dtd.orm           |   24 -
 api20/test/schema/Positive15.3.5-xsd.orm           |   24 -
 api20/test/schema/Positive15.3.6-dtd.orm           |   21 -
 api20/test/schema/Positive15.3.6-xsd.orm           |   21 -
 api20/test/schema/Positive15.4-dtd.orm             |   35 -
 api20/test/schema/Positive15.4-xsd.orm             |   35 -
 api20/test/schema/Positive15.5-dtd.orm             |   20 -
 api20/test/schema/Positive15.5-xsd.orm             |   20 -
 api20/test/schema/Positive15.6-dtd.orm             |   20 -
 api20/test/schema/Positive15.6-xsd.orm             |   20 -
 api20/test/schema/Positive15.8.1-dtd.orm           |   27 -
 api20/test/schema/Positive15.8.1-xsd.orm           |   27 -
 api20/test/schema/Positive15.8.2-dtd.orm           |   27 -
 api20/test/schema/Positive15.8.2-xsd.orm           |   27 -
 api20/test/schema/Positive15.8.3-dtd.orm           |   21 -
 api20/test/schema/Positive15.8.3-xsd.orm           |   21 -
 api20/test/schema/Positive99-dtd.jdo               |  430 --------
 api20/test/schema/Positive99-dtd.jdoquery          |   45 -
 api20/test/schema/Positive99-dtd.orm               |  337 ------
 api20/test/schema/Positive99-xsd.jdo               |  432 --------
 api20/test/schema/Positive99-xsd.jdoquery          |   47 -
 api20/test/schema/Positive99-xsd.orm               |  339 ------
 api20/xdocs/index.xml                              |   37 -
 api20/xdocs/navigation.xml                         |   37 -
 core20/project.xml                                 |    2 +-
 enhancer20/project.xml                             |    4 +-
 project.xml                                        |    2 +-
 tck20/project.xml                                  |   18 +-
 151 files changed, 13 insertions(+), 20535 deletions(-)

diff --git a/api20/LICENSE.txt b/api20/LICENSE.txt
deleted file mode 100644
index d645695..0000000
--- a/api20/LICENSE.txt
+++ /dev/null
@@ -1,202 +0,0 @@
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed 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
-
-       http://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
-   limitations under the License.
diff --git a/api20/maven.xml b/api20/maven.xml
deleted file mode 100644
index 78b9b48..0000000
--- a/api20/maven.xml
+++ /dev/null
@@ -1,71 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Copyright 2005 The Apache Software Foundation
-
-    Licensed 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
-  
-       http://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
-    limitations under the License.
--->
-
-<project default="default"
-    xmlns:j="jelly:core"
-    xmlns:ant="jelly:ant"
-    >
-
-    <!-- ==================== -->
-    <!-- Default Global Goals -->
-    <!-- ==================== -->
-
-    <goal name="default">
-        <attainGoal name="jar:install"/>
-    </goal>
-
-    <goal name="build">
-        <attainGoal name="javadoc"/>
-        <attainGoal name="default"/>
-    </goal>
-
-    <goal name="rebuild">
-        <attainGoal name="clean"/>
-        <attainGoal name="build"/>
-    </goal>
-
-    <goal name="clobber">
-        <attainGoal name="clean"/>
-        <delete>
-            <fileset dir="." defaultexcludes="no" includes="**/*~"/>
-        </delete>
-    </goal>
-
-    <!-- ======== -->
-    <!-- XML test -->
-    <!-- ======== -->
-
-    <!-- Run XML parser on JDO metadata files (suffix .jdo, .orm or .jdoquery).             -->
-    <!-- The tool uses the following system properties:                                     -->
-    <!--   javax.jdo.metadata: a comma separated list of JDO metadata files or directories. -->
-    <!--   javax.jdo.recursive: recursively serach directories.                             -->
-    <goal name="xmltest" prereqs="test:compile">
-        <java classname="javax.jdo.util.XMLTestUtil" fork="true">
-            <classpath> 
-                <pathelement location="${xmlapis.jarfile}"/>
-                <pathelement location="${xerces.jarfile}"/>
-                <pathelement location="${maven.build.dir}/classes"/>
-                <pathelement location="${maven.build.dir}/test-classes"/>
-            </classpath> 
-            <sysproperty key="javax.jdo.metadata" value="${javax.jdo.metadata}"/>
-            <sysproperty key="javax.jdo.recursive" value="${javax.jdo.recursive}"/>
-            <sysproperty key="javax.xml.parsers.DocumentBuilderFactory" 
-                         value="${javax.xml.parsers.DocumentBuilderFactory}"/>
-        </java>
-    </goal>
-
-</project>
diff --git a/api20/project.properties b/api20/project.properties
deleted file mode 100644
index e02241a..0000000
--- a/api20/project.properties
+++ /dev/null
@@ -1,24 +0,0 @@
-#
-# Copyright 2006 The Apache Software Foundation.
-# 
-# Licensed 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 
-# 
-#     http://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 
-# limitations under the License.
-
-maven.junit.sysproperties = javax.xml.parsers.DocumentBuilderFactory basedir
-javax.xml.parsers.DocumentBuilderFactory=org.apache.xerces.jaxp.DocumentBuilderFactoryImpl
-
-xmlapis.jarfile = ${pom.getDependencyPath('xml-apis:xml-apis')}
-xerces.jarfile = ${pom.getDependencyPath('xerces:xerces')}
-junit.jarfile = ${pom.getDependencyPath('junit:junit')}
-
-# Manifest seed file
-maven.jar.manifest = ${basedir}/../JDO20.MF
diff --git a/api20/project.xml b/api20/project.xml
deleted file mode 100644
index 43d53ce..0000000
--- a/api20/project.xml
+++ /dev/null
@@ -1,104 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Copyright 2006 The Apache Software Foundation
-
-    Licensed 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
-  
-       http://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
-    limitations under the License.
--->
-
-<project>
-    <pomVersion>3</pomVersion>
-    <extend>../project.xml</extend>
-    <!-- ============== -->
-    <!-- Identification -->
-    <!-- ============== -->
-    <name>JDO2 API</name>
-    <groupId>javax.jdo</groupId>
-    <artifactId>jdo2-api</artifactId>
-    <currentVersion>2.0</currentVersion>
-    <package>javax.jdo</package>
-    <shortDescription>Java Data Objects 2.0 (JDO) API</shortDescription>
-    <description>The Java Data Objects 2.0 (JDO) API is a standard interface-based 
-Java model abstraction of persistence, developed as Java Specification 
-Request 243 under the auspices of the Java Community Process.</description>
-    <repository />
-    <!-- ============ -->
-    <!-- Dependencies -->
-    <!-- ============ -->
-    <dependencies>
-        <dependency>
-            <groupId>geronimo-spec</groupId>
-            <artifactId>geronimo-spec-jta</artifactId>
-            <version>1.0.1B-rc2</version>
-        </dependency>
-        <dependency>
-            <groupId>xerces</groupId>
-            <artifactId>xerces</artifactId>
-            <version>2.4.0</version>
-        </dependency>
-        <dependency>
-            <groupId>xml-apis</groupId>
-            <artifactId>xml-apis</artifactId>
-            <version>1.0.b2</version>
-        </dependency>
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <version>3.8.1</version>
-        </dependency>
-    </dependencies>
-    <!-- =================== -->
-    <!-- Build Specification -->
-    <!-- =================== -->
-    <build>
-        <sourceDirectory>src/java</sourceDirectory>
-        <unitTestSourceDirectory>test/java</unitTestSourceDirectory>
-        <!-- Unit test cases -->
-        <unitTest>
-            <includes>
-                <include>**/*Test.java</include>
-            </includes>
-            <excludes>
-                <exclude>javax/jdo/util/AbstractTest.java</exclude>
-                <exclude>javax/jdo/pc/*.java</exclude>
-            </excludes>
-            <resources>
-                <resource>
-                <directory>${basedir}/test/schema</directory>
-                <includes>
-                    <include>**/*.jdo</include>
-                    <include>**/*.jdoquery</include>
-                    <include>**/*.orm</include>
-                </includes>
-                </resource>
-            </resources>
-        </unitTest>
-        <!-- J A R  R E S O U R C E S -->
-        <!-- Resources that are packaged up inside the JAR file -->
-        <resources>
-            <resource>
-                <directory>${basedir}/src/java</directory>
-                <includes>
-                    <include>javax/jdo/*.properties</include>
-                </includes>
-            </resource>
-            <resource>
-                <directory>${basedir}/src/schema</directory>
-                <includes>
-                    <include>javax/jdo/*.dtd</include>
-                    <include>javax/jdo/*.xsd</include>
-                </includes>
-            </resource>
-        </resources>
-    </build>
-</project>
-
diff --git a/api20/src/java/javax/jdo/Bundle.properties b/api20/src/java/javax/jdo/Bundle.properties
deleted file mode 100644
index 3aa8d5f..0000000
--- a/api20/src/java/javax/jdo/Bundle.properties
+++ /dev/null
@@ -1,78 +0,0 @@
-#
-# Copyright 2005 The Apache Software Foundation.
-# 
-# Licensed 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 
-# 
-#     http://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 
-# limitations under the License.
-
-# ResourceBundle properties file for JDO
-ERR_AbstractClassNoIdentity=Abstract class {0} does not implement key field helper methods
-ERR_CannotInitCause=The initCause method cannot be used. To set the cause of this exception, \
-use a constructor with a Throwable[] argument.
-ERR_StateManagerClassCast=An element of the parameter collection is of class {0}.  \
-The parameter collection must contain only elements that are instances of java.lang.Class.
-ERR_NoMetadata=No metadata has been registered for class {0}.
-EXC_GetPMFNoSuchMethod=Method getPersistenceManagerFactory(Properties) does not exist or is not public.
-EXC_GetPMFUnexpectedException=Unexpected exception caught.
-EXC_GetPMFClassNotFound=Class {0} was not found.
-EXC_GetPMFIllegalAccess=Illegal Access for class {0}.
-EXC_GetPMFNoClassNameProperty=A property named javax.jdo.PersistenceManagerFactoryClass must be specified.
-MSG_FailedObject=FailedObject:
-MSG_NestedThrowables=NestedThrowables:
-MSG_NestedThrowablesStackTrace=NestedThrowablesStackTrace:
-MSG_ExceptionGettingFailedToString=Exception getting failed.toString(): ''{0}''.
-MSG_ExceptionGettingFailedToStringObjectId=Exception getting failed.toString(): ''{0}''. ObjectId of failed instance: ''{1}''. 
-ERR_NullClass=JDO implementation error: the parameter class object must not be null.
-EXC_GetPMFNullResource: The resource name argument to this method cannot be null.
-EXC_GetPMFNullLoader: The class loader argument to this method cannot be null.
-EXC_GetPMFNullPropsLoader: The class loader argument to this method cannot be null.
-EXC_GetPMFNullPMFLoader: The class loader argument to this method cannot be null.
-EXC_GetPMFNullStream: The stream argument to this method cannot be null.
-EXC_GetPMFNoResource: The resource named "{0}" could not be found in the class loader "{1}".
-EXC_GetPMFIOExceptionRsrc: An IOException was thrown while loading the resource \
-named "{0}" into a java.util.Properties object.
-EXC_GetPMFIOExceptionStream: An IOException was thrown while loading the stream \
-into a java.util.Properties object.
-EXC_GetPMFNullFile: The file argument to this method cannot be null.
-EXC_GetPMFNoFile: The file named "{0}" could not be found.
-EXC_GetPMFIOExceptionFile: An IOException was thrown while loading the file \
-named "{0}" into a java.util.Properties object.
-EXC_GetPMFNullJndiLoc: The JNDI location argument to this method cannot be null.
-EXC_GetPMFNamingException: A NamingException was thrown while obtaining the \
-PersistenceManagerFactory at "{0}" from JNDI.
-EXC_GetPMFNullPointerException: The PersistenceManagerFactory class must define a static \
-method \nPersistenceManagerFactory getPersistenceManagerFactory(Map props). \nThe class "{0}"\n\
-defines a non-static getPersistenceManagerFactory(Map props) method.
-EXC_GetPMFClassCastException: The PersistenceManagerFactory class must define a static \
-method \nPersistenceManagerFactory getPersistenceManagerFactory(Map props). \nThe class "{0}"\n\
-has the wrong return type for the getPersistenceManagerFactory(Map props) method.
-EXC_StringWrongLength: There must be exactly one character in the id in the input String for CharIdentity.
-EXC_IllegalEventType:The event type is outside the range of valid event types.
-EXC_SingleFieldIdentityNullParameter: The identity must not be null.
-EXC_ObjectIdentityStringConstruction: The identity instance could not be constructed. \
-\nThe exception thrown was: "{0}". \
-\nParsed the class name as "{1}" and key as "{2}".
-EXC_ObjectIdentityStringConstructionNoDelimiter: Missing delimiter ":".
-EXC_ObjectIdentityStringConstructionTooShort: Parameter is too short.
-EXC_ObjectIdentityStringConstructionUsage: The instance could not be constructed \
-from the parameter String "{0}". \
-\nThe parameter String is of the form "<className>:<keyString>".
-EXC_CreateKeyAsObjectMustNotBeCalled: The method createKeyAsObject must not be called \
-because the keyAsObject field must never be null for this class.
-EXC_CurrencyStringConstructorIllegalArgument: The instance could not be constructed \
-with the argument "{0}". Try "USD".
-EXC_CurrencyStringConstructorException: An exception was thrown during construction \
-of the Currency instance.
-EXC_LocaleStringConstructorException: An exception was thrown during construction \
-of the Locale instance.
-EXC_DateStringConstructor: Error parsing Date string "{0}" at position {1} \
-using date format "{2}".
-MSG_unknown: unknown
diff --git a/api20/src/java/javax/jdo/Extent.java b/api20/src/java/javax/jdo/Extent.java
deleted file mode 100644
index 44811af..0000000
--- a/api20/src/java/javax/jdo/Extent.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- * 
- * Licensed 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 
- * 
- *     http://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 
- * limitations under the License.
- */
-
-/*
- * Extent.java
- *
- */
-
-package javax.jdo;
-
-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
- * possibly including its subclasses.
- * <P>The <code>Extent</code> instance has two possible uses:
- * <ol>
- * <li>to iterate all instances of a particular class 
- * <li>to execute a <code>Query</code> in the data store over all instances
- * of a particular class
- * </ol>
- * @version 2.0
- */
-public interface Extent {
-        
-    /** 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 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();
-
-    /** An <code>Extent</code> contains all instances of a particular class in the data
-     * store; this method returns the <code>Class</code> of the instances.
-      * @return the <code>Class</code> of instances of this <code>Extent</code>.
-      */
-    Class 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 it);
-    
-    /** Get the fetch plan associated with this Extent.
-     * @return the fetch plan
-     * @since 2.0
-     */
-    FetchPlan getFetchPlan();
-}
-
diff --git a/api20/src/java/javax/jdo/FetchPlan.java b/api20/src/java/javax/jdo/FetchPlan.java
deleted file mode 100644
index 24c3ab2..0000000
--- a/api20/src/java/javax/jdo/FetchPlan.java
+++ /dev/null
@@ -1,219 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- * 
- * Licensed 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 
- * 
- *     http://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 
- * limitations under the License.
- */
-
-/*
- * 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>.
- * @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.
-     * @return the FetchPlan
-     * @since 2.0
-     */
-    FetchPlan addGroup(String fetchGroupName);
-
-    /** 
-     * Remove the fetch group from the set active fetch groups. 
-     * @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 collection containing the names 
-     * of all active fetch groups.
-     * @return an immutable collection containing the names 
-     * of all 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.
-     * @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.
-     * @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}.
-     */
-    FetchPlan setDetachmentOptions(int options);
- 
-    /**
-     * Get options used during detachment.
-     */
-    int getDetachmentOptions();
-  
-}
-
diff --git a/api20/src/java/javax/jdo/InstanceCallbacks.java b/api20/src/java/javax/jdo/InstanceCallbacks.java
deleted file mode 100644
index 8d7b934..0000000
--- a/api20/src/java/javax/jdo/InstanceCallbacks.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- * 
- * Licensed 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 
- * 
- *     http://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 
- * limitations under the License.
- */
-
-/*
- * InstanceCallbacks.java
- *
- */
- 
-package javax.jdo;
-
-/** 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>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>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.
- *
- * @since 1.0
- * @version 2.0
- */
-public interface InstanceCallbacks 
-    extends javax.jdo.listener.ClearCallback, 
-        javax.jdo.listener.DeleteCallback,
-        javax.jdo.listener.LoadCallback,
-        javax.jdo.listener.StoreCallback {
-}
diff --git a/api20/src/java/javax/jdo/JDOCanRetryException.java b/api20/src/java/javax/jdo/JDOCanRetryException.java
deleted file mode 100644
index cef0363..0000000
--- a/api20/src/java/javax/jdo/JDOCanRetryException.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- * 
- * Licensed 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 
- * 
- *     http://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 
- * limitations under the License.
- */
-
-/*
- * JDOCanRetryException.java
- *
- */
-
-package javax.jdo;
-
-/** This is the base class for exceptions that can be retried.
- *
- * @version 1.0
- */
-public class JDOCanRetryException extends JDOException {
-
-  /**
-   * 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);
-  }
-  
-  /**
-   * 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);
-  }
-}
-
diff --git a/api20/src/java/javax/jdo/JDODataStoreException.java b/api20/src/java/javax/jdo/JDODataStoreException.java
deleted file mode 100644
index 9736108..0000000
--- a/api20/src/java/javax/jdo/JDODataStoreException.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- * 
- * Licensed 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 
- * 
- *     http://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 
- * limitations under the License.
- */
-
-/*
- * JDODataStoreException.java
- *
- */
-
-package javax.jdo;
-
-/** This class represents data store exceptions that can be retried.
- *
- * @version 1.0
- */
-public class JDODataStoreException extends JDOCanRetryException {
-
-  /**
-   * 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 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,
-   * 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/api20/src/java/javax/jdo/JDODetachedFieldAccessException.java b/api20/src/java/javax/jdo/JDODetachedFieldAccessException.java
deleted file mode 100644
index 343e019..0000000
--- a/api20/src/java/javax/jdo/JDODetachedFieldAccessException.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- * 
- * Licensed 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 
- * 
- *     http://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 
- * limitations under the License.
- */
-
-/*
- * JDODetachedFieldAccessException.java
- *
- */
-
-package javax.jdo;
-
-/** 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 {
-
-  /**
-   * 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.
-   * @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 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/api20/src/java/javax/jdo/JDOException.java b/api20/src/java/javax/jdo/JDOException.java
deleted file mode 100644
index 813b559..0000000
--- a/api20/src/java/javax/jdo/JDOException.java
+++ /dev/null
@@ -1,295 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- * 
- * Licensed 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 
- * 
- *     http://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 
- * limitations under the License.
- */
-
-/*
- * JDOException.java
- *
- */
-
-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.
- * @author Craig Russell
- * @version 1.0.2
- */
-public class JDOException extends java.lang.RuntimeException {
-  
-  /** 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;
-  }
-  
-  /** 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 {
-          return nested[0];
-      }
-  }
-  
-  /** 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);
-    }
-
-    /**
-     * 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;
-        }
-    }
-
-    /**
-     * 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;
-        }
-    }
-
-    /**
-     * 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/api20/src/java/javax/jdo/JDOFatalDataStoreException.java b/api20/src/java/javax/jdo/JDOFatalDataStoreException.java
deleted file mode 100644
index f7c0ca0..0000000
--- a/api20/src/java/javax/jdo/JDOFatalDataStoreException.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- * 
- * Licensed 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 
- * 
- *     http://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 
- * limitations under the License.
- */
-
-/*
- * JDOFatalDataStoreException.java
- *
- */
-
-package javax.jdo;
-
-/** This class represents data store exceptions that cannot be retried.
- *
- * @version 1.0.1
- */
-public class JDOFatalDataStoreException extends JDOFatalException {
-
-  /**
-   * Constructs a new <code>JDOFatalDataStoreException</code> without a detail message.
-   */
-  public JDOFatalDataStoreException() {
-  }
-  
-
-  /**
-   * 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 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);
-  }
-}
-
diff --git a/api20/src/java/javax/jdo/JDOFatalException.java b/api20/src/java/javax/jdo/JDOFatalException.java
deleted file mode 100644
index 4df8e6c..0000000
--- a/api20/src/java/javax/jdo/JDOFatalException.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- * 
- * Licensed 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 
- * 
- *     http://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 
- * limitations under the License.
- */
-
-/*
- * JDOFatalException.java
- *
- */
-
-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.
- *
- * @version 1.0
- */
-public class JDOFatalException extends JDOException {
-
-  /**
-   * 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);
-  }
-  
-  /**
-   * 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);
-  }
-}
-
diff --git a/api20/src/java/javax/jdo/JDOFatalInternalException.java b/api20/src/java/javax/jdo/JDOFatalInternalException.java
deleted file mode 100644
index 264ee4c..0000000
--- a/api20/src/java/javax/jdo/JDOFatalInternalException.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- * 
- * Licensed 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 
- * 
- *     http://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 
- * limitations under the License.
- */
-
-/*
- * JDOFatalInternalException.java
- *
- */
-
-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.
- *
- * @version 1.0
- */
-public class JDOFatalInternalException extends JDOFatalException {
-
-  /**
-   * 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 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);
-  }
-}
-
diff --git a/api20/src/java/javax/jdo/JDOFatalUserException.java b/api20/src/java/javax/jdo/JDOFatalUserException.java
deleted file mode 100644
index c704730..0000000
--- a/api20/src/java/javax/jdo/JDOFatalUserException.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- * 
- * Licensed 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 
- * 
- *     http://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 
- * limitations under the License.
- */
-
-/*
- * JDOUserException.java
- *
- */
-
-package javax.jdo;
-
-/** This class represents user errors that cannot be retried.  
- *
- * @version 1.0
- */
-public class JDOFatalUserException extends JDOFatalException {
-
-  /**
-   * 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);
-  }
-
-  /**
-   * 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/api20/src/java/javax/jdo/JDOHelper.java b/api20/src/java/javax/jdo/JDOHelper.java
deleted file mode 100644
index 44d0622..0000000
--- a/api20/src/java/javax/jdo/JDOHelper.java
+++ /dev/null
@@ -1,835 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- * 
- * Licensed 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 
- * 
- *     http://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 
- * limitations under the License.
- */
-
-/*
- * JDOHelper.java
- *
- */
- 
-package javax.jdo;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.InputStream;
-import java.io.IOException;
-
-import java.lang.reflect.Method;
-import java.lang.reflect.InvocationTargetException;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Properties;
-
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-
-import javax.jdo.spi.I18NHelper;
-import javax.jdo.spi.JDOImplHelper;
-import javax.jdo.spi.JDOImplHelper.StateInterrogationBooleanReturn;
-import javax.jdo.spi.JDOImplHelper.StateInterrogationObjectReturn;
-import javax.jdo.spi.PersistenceCapable;
-import javax.jdo.spi.StateInterrogation;
-
-import javax.naming.Context;
-import javax.naming.InitialContext;
-import javax.naming.NamingException;
-
-import javax.rmi.PortableRemoteObject;
-
-
-/**
- * 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.0
- */
-public class JDOHelper extends Object {
-      
-    /** The Internationalization message helper.
-     */
-    private final static I18NHelper msg = 
-        I18NHelper.getInstance ("javax.jdo.Bundle"); //NOI18N
-
-    /** The JDOImplHelper instance used for handling non-binary-compatible
-     *  implementations.
-     */
-    private static JDOImplHelper implHelper = (JDOImplHelper)
-        AccessController.doPrivileged(
-            new PrivilegedAction () {
-                public Object run () {
-                    return JDOImplHelper.getInstance();
-                }
-            }
-        );
-
-   /** 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);
-        }
-      }
-    
-    /** 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.
-     *
-     * <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);
-        }
-    }
-
-    /** 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 getObjectIds(Collection pcs) {
-        ArrayList result = new ArrayList();
-        for (Iterator it = pcs.iterator(); it.hasNext();) {
-            result.add(getObjectId(it.next()));
-        }
-        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]);
-        }
-        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);
-        }
-    }
-    
-    /**
-     * 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 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);
-        }
-    }
-
-    /** 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);
-        }
-    }
-
-    /** 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);
-        }
-    }
-
-    /** 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 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 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);
-        }
-    }
-    
-    /** 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(Map,ClassLoader)
-     */
-    public static PersistenceManagerFactory getPersistenceManagerFactory
-            (Map props) {
-        ClassLoader cl = getContextClassLoader();
-        return getPersistenceManagerFactory (props, cl);
-    }
-    
-    /**
-     * Get a <code>PersistenceManagerFactory</code> based on a 
-     * <code>Properties</code> instance and a class loader.
-     * The following are standard key values:
-     * <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".
-     * </code><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.
-     * @return the <code>PersistenceManagerFactory</code>.
-     * @param props a <code>Properties</code> instance with properties of the 
-     * <code>PersistenceManagerFactory</code>.
-     * @param cl the class loader to use to load the 
-     * <code>PersistenceManagerFactory</code> class
-     */
-    public static PersistenceManagerFactory getPersistenceManagerFactory
-            (Map props, ClassLoader cl) {
-        String pmfClassName = (String) props.get (
-            "javax.jdo.PersistenceManagerFactoryClass"); //NOI18N
-        if (pmfClassName == null) {
-            throw new JDOFatalUserException (msg.msg(
-                "EXC_GetPMFNoClassNameProperty")); // NOI18N
-        }
-        try {
-            Class pmfClass = cl.loadClass (pmfClassName);
-            Method pmfMethod = pmfClass.getMethod(
-                "getPersistenceManagerFactory", //NOI18N
-                    new Class[] {Map.class});
-            return (PersistenceManagerFactory) pmfMethod.invoke (
-                null, new Object[] {props});
-        } catch (ClassNotFoundException cnfe) {
-            throw new JDOFatalUserException (msg.msg(
-                "EXC_GetPMFClassNotFound", pmfClassName), cnfe); //NOI18N
-        } catch (IllegalAccessException iae) {
-            throw new JDOFatalUserException (msg.msg(
-                "EXC_GetPMFIllegalAccess", pmfClassName), iae); //NOI18N
-        } catch (NoSuchMethodException nsme) {
-            throw new JDOFatalInternalException (msg.msg(
-                "EXC_GetPMFNoSuchMethod"), nsme); //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
-        } catch (NullPointerException e) {
-            throw new JDOFatalInternalException (msg.msg(
-                "EXC_GetPMFNullPointerException", pmfClassName), e); //NOI18N
-        } catch (ClassCastException e) {
-            throw new JDOFatalInternalException (msg.msg(
-                "EXC_GetPMFClassCastException", pmfClassName), e); //NOI18N
-        } catch (Exception e) {
-            throw new JDOFatalInternalException (msg.msg(
-                "EXC_GetPMFUnexpectedException"), e); //NOI18N
-        }
-    }
-    
-    /**
-     * Returns a {@link PersistenceManagerFactory} configured based
-     * on the properties stored in the resource at
-     * <code>propsResource</code>. This method is equivalent to
-     * invoking {@link
-     * #getPersistenceManagerFactory(String,ClassLoader)} with
-     * <code>Thread.currentThread().getContextClassLoader()</code> as
-     * the <code>loader</code> argument.
-     * @since 2.0
-     * @param propsResource the resource containing the Properties
-     * @return the PersistenceManagerFactory
-     */
-    public static PersistenceManagerFactory getPersistenceManagerFactory
-        (String propsResource) {
-        return getPersistenceManagerFactory (propsResource,
-            getContextClassLoader());
-    }
-
-    /**
-     * Returns a {@link PersistenceManagerFactory} configured based
-     * on the properties stored in the resource at
-     * <code>propsResource</code>. Loads the resource via
-     * <code>loader</code>, and creates a {@link
-     * PersistenceManagerFactory} with <code>loader</code>. Any
-     * <code>IOException</code>s thrown during resource loading will
-     * be wrapped in a {@link JDOFatalUserException}.
-     * @since 2.0
-     * @param propsResource the resource containing the Properties
-     * @param loader the class loader to use to load both the propsResource and 
-     * the <code>PersistenceManagerFactory</code> class
-     * @return the PersistenceManagerFactory
-     */
-    public static PersistenceManagerFactory getPersistenceManagerFactory
-        (String propsResource, ClassLoader loader) {
-        return getPersistenceManagerFactory(propsResource, loader, loader);
-    }
-        
-    /**
-     * Returns a {@link PersistenceManagerFactory} configured based
-     * on the properties stored in the resource at
-     * <code>propsResource</code>. Loads the Properties via
-     * <code>propsLoader</code>, and creates a {@link
-     * PersistenceManagerFactory} with <code>pmfLoader</code>. Any
-     * <code>IOException</code>s thrown during resource loading will
-     * be wrapped in a {@link JDOFatalUserException}.
-     * @since 2.0
-     * @param propsResource the resource containing the Properties
-     * @param propsLoader the class loader to use to load the propsResource
-     * @param pmfLoader the class loader to use to load the 
-     * <code>PersistenceManagerFactory</code> class
-     * @return the PersistenceManagerFactory
-     */
-    public static PersistenceManagerFactory getPersistenceManagerFactory
-        (String propsResource, ClassLoader propsLoader, ClassLoader pmfLoader) {
-        
-        if (propsResource == null)
-            throw new JDOFatalUserException (msg.msg (
-                "EXC_GetPMFNullResource")); //NOI18N
-        if (propsLoader == null)
-            throw new JDOFatalUserException (msg.msg (
-                "EXC_GetPMFNullPropsLoader")); //NOI18N
-        if (pmfLoader == null)
-            throw new JDOFatalUserException (msg.msg (
-                "EXC_GetPMFNullPMFLoader")); //NOI18N
-
-        Properties props = new Properties ();
-        InputStream in = null;
-        try {
-            in = propsLoader.getResourceAsStream (propsResource);
-            if (in == null)
-                throw new JDOFatalUserException (msg.msg (
-                    "EXC_GetPMFNoResource", propsResource, propsLoader)); //NOI18N
-            props.load (in);
-        } catch (IOException ioe) {
-            throw new JDOFatalUserException (msg.msg (
-                "EXC_GetPMFIOExceptionRsrc", propsResource), ioe); //NOI18N
-        }
-        finally {
-            if (in != null)
-                try {
-                    in.close (); 
-                } catch (IOException ioe) { }
-        }
-
-        return getPersistenceManagerFactory (props, pmfLoader);
-    }
-
-
-    /**
-     * Returns a {@link PersistenceManagerFactory} configured based
-     * on the properties stored in the file at
-     * <code>propsFile</code>. This method is equivalent to
-     * invoking {@link
-     * #getPersistenceManagerFactory(File,ClassLoader)} with
-     * <code>Thread.currentThread().getContextClassLoader()</code> as
-     * the <code>loader</code> argument.
-     * @since 2.0
-     * @param propsFile the file containing the Properties
-     * @return the PersistenceManagerFactory
-     */
-    public static PersistenceManagerFactory getPersistenceManagerFactory
-        (File propsFile) {
-        return getPersistenceManagerFactory (propsFile,
-            getContextClassLoader());
-    }
-
-    /**
-     * Returns a {@link PersistenceManagerFactory} configured based
-     * on the properties stored in the file at
-     * <code>propsFile</code>. Creates a {@link
-     * PersistenceManagerFactory} with <code>loader</code>. Any
-     * <code>IOException</code>s or
-     * <code>FileNotFoundException</code>s thrown during resource
-     * loading will be wrapped in a {@link JDOFatalUserException}.
-     * @since 2.0
-     * @param propsFile the file containing the Properties
-     * @param loader the class loader to use to load the 
-     * <code>PersistenceManagerFactory</code> class
-     * @return the PersistenceManagerFactory
-     */
-    public static PersistenceManagerFactory getPersistenceManagerFactory
-        (File propsFile, ClassLoader loader) {
-        if (propsFile == null)
-            throw new JDOFatalUserException (msg.msg (
-                "EXC_GetPMFNullFile")); //NOI18N
-        if (loader == null)
-            throw new JDOFatalUserException (msg.msg (
-                "EXC_GetPMFNullLoader")); //NOI18N
-        Properties props = new Properties ();
-        InputStream in = null;
-        try {
-            in = new FileInputStream (propsFile);
-            props.load (in);
-        } catch (FileNotFoundException fnfe) {
-            throw new JDOFatalUserException (msg.msg (
-                "EXC_GetPMFNoFile", propsFile, loader), fnfe); //NOI18N
-        } catch (IOException ioe) {
-            throw new JDOFatalUserException (msg.msg (
-                "EXC_GetPMFIOExceptionFile", propsFile), ioe); //NOI18N
-        } finally {
-            if (in != null)
-                try { 
-                    in.close (); 
-                } catch (IOException ioe) { }
-        }
-        return getPersistenceManagerFactory (props, loader);
-    }
-
-    /**
-     * Returns a {@link PersistenceManagerFactory} at the JNDI
-     * location specified by <code>jndiLocation</code> in the context
-     * <code>context</code>. If <code>context</code> is
-     * <code>null</code>, <code>new InitialContext()</code> will be
-     * used. This method is equivalent to invoking {@link
-     * #getPersistenceManagerFactory(String,Context,ClassLoader)}
-     * with <code>Thread.currentThread().getContextClassLoader()</code> as
-     * the <code>loader</code> argument.
-     * @since 2.0
-     * @param jndiLocation the JNDI location containing the 
-     * PersistenceManagerFactory
-     * @param context the context in which to find the named
-     * PersistenceManagerFactory
-     * @return the PersistenceManagerFactory
-     */
-    public static PersistenceManagerFactory getPersistenceManagerFactory
-        (String jndiLocation, Context context) {
-        return getPersistenceManagerFactory (jndiLocation, context,
-            getContextClassLoader());
-    }
-
-
-    /**
-     * Returns a {@link PersistenceManagerFactory} at the JNDI
-     * location specified by <code>jndiLocation</code> in the context
-     * <code>context</code>. If <code>context</code> is
-     * <code>null</code>, <code>new InitialContext()</code> will be
-     * used. Creates a {@link PersistenceManagerFactory} with
-     * <code>loader</code>. Any <code>NamingException</code>s thrown
-     * will be wrapped in a {@link JDOFatalUserException}.
-     * @since 2.0
-     * @param jndiLocation the JNDI location containing the 
-     * PersistenceManagerFactory
-     * @param context the context in which to find the named 
-     * PersistenceManagerFactory
-     * @param loader the class loader to use to load the 
-     * <code>PersistenceManagerFactory</code> class
-     * @return the PersistenceManagerFactory
-     */
-    public static PersistenceManagerFactory getPersistenceManagerFactory
-        (String jndiLocation, Context context, ClassLoader loader) {
-        if (jndiLocation == null)
-            throw new JDOFatalUserException (msg.msg (
-                "EXC_GetPMFNullJndiLoc")); //NOI18N
-        if (loader == null)
-            throw new JDOFatalUserException (msg.msg (
-                "EXC_GetPMFNullLoader")); //NOI18N
-        try {
-            if (context == null)
-                context = new InitialContext ();
-
-            Object o = context.lookup (jndiLocation);
-            return (PersistenceManagerFactory) PortableRemoteObject.narrow
-                (o, PersistenceManagerFactory.class);
-        } catch (NamingException ne) {
-            throw new JDOFatalUserException (msg.msg (
-                "EXC_GetPMFNamingException", jndiLocation, loader), ne); //NOI18N
-        }
-    }
-    
-    /**
-     * Returns a {@link PersistenceManagerFactory} configured based
-     * on the Properties stored in the input stream at
-     * <code>stream</code>. This method is equivalent to
-     * invoking {@link
-     * #getPersistenceManagerFactory(InputStream,ClassLoader)} with
-     * <code>Thread.currentThread().getContextClassLoader()</code> as
-     * the <code>loader</code> argument.
-     * @since 2.0
-     * @param stream the stream containing the Properties
-     * @return the PersistenceManagerFactory
-     */
-    public static PersistenceManagerFactory getPersistenceManagerFactory
-        (InputStream stream) {
-        return getPersistenceManagerFactory (stream,
-            getContextClassLoader());
-    }
-
-    /**
-     * Returns a {@link PersistenceManagerFactory} configured based
-     * on the Properties stored in the input stream at
-     * <code>stream</code>. Creates a {@link
-     * PersistenceManagerFactory} with <code>loader</code>. Any
-     * <code>IOException</code>s thrown during resource
-     * loading will be wrapped in a {@link JDOFatalUserException}.
-     * @since 2.0
-     * @param stream the stream containing the Properties
-     * @param loader the class loader to use to load the 
-     * <code>PersistenceManagerFactory</code> class
-     * @return the PersistenceManagerFactory
-     */
-    public static PersistenceManagerFactory getPersistenceManagerFactory
-        (InputStream stream, ClassLoader loader) {
-        if (stream == null)
-            throw new JDOFatalUserException (msg.msg (
-                "EXC_GetPMFNullStream")); //NOI18N
-        if (loader == null)
-            throw new JDOFatalUserException (msg.msg (
-                "EXC_GetPMFNullLoader")); //NOI18N
-        Properties props = new Properties ();
-        try {
-            props.load (stream);
-        } catch (IOException ioe) {
-            throw new JDOFatalUserException
-                (msg.msg ("EXC_GetPMFIOExceptionStream"), ioe); //NOI18N
-        }
-        return getPersistenceManagerFactory (props, loader);
-    }
-
-    /** Get the context class loader associated with the current thread. 
-     * This is done in a doPrivileged block because it is a secure method.
-     * @return the current thread's context class loader.
-     * @since 2.0
-     */
-    private static ClassLoader getContextClassLoader() {
-        return (ClassLoader)AccessController.doPrivileged(
-            new PrivilegedAction () {
-                public Object run () {
-                    return Thread.currentThread().getContextClassLoader();
-                }
-            }
-        );
-    }
-}
diff --git a/api20/src/java/javax/jdo/JDONullIdentityException.java b/api20/src/java/javax/jdo/JDONullIdentityException.java
deleted file mode 100644
index dece60e..0000000
--- a/api20/src/java/javax/jdo/JDONullIdentityException.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- * 
- * Licensed 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 
- * 
- *     http://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 
- * limitations under the License.
- */
-
-/*
- * JDONullIdentityException.java
- *
- */
-
-package javax.jdo;
-
-/** An instance of this class is thrown when attempting to create an object id
- *  when the object id constructor parameter is null. This might occur when 
- *  creating an object id instance from a transient instance where an identity 
- *  field is null.
- *
- * @since 2.0
- * @version 2.0
- */
-public class JDONullIdentityException extends JDOUserException {
-
-  /**
-   * Constructs a new <code>JDONullIdentityException</code> without a detail message.
-   */
-  public JDONullIdentityException() {
-  }
-
-  /**
-   * Constructs a new <code>JDONullIdentityException</code> with the specified detail message.
-   * @param msg the detail message.
-   */
-  public JDONullIdentityException(String msg) {
-    super(msg);
-  }
-
-  /** Constructs a new <code>JDONullIdentityException</code> with the specified detail message
-   * and failed object.
-   * @param msg the detail message.
-   * @param failed the failed object.
-   */
-  public JDONullIdentityException(String msg, Object failed) {
-    super(msg, failed);
-  }
-
-  /**
-   * Constructs a new <code>JDONullIdentityException</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 JDONullIdentityException(String msg, Throwable[] nested) {
-    super(msg, nested);
-  }
-
-  /**
-   * Constructs a new <code>JDONullIdentityException</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 JDONullIdentityException(String msg, Throwable nested) {
-    super(msg, nested);
-  }
-
-}
diff --git a/api20/src/java/javax/jdo/JDOObjectNotFoundException.java b/api20/src/java/javax/jdo/JDOObjectNotFoundException.java
deleted file mode 100644
index b407e0a..0000000
--- a/api20/src/java/javax/jdo/JDOObjectNotFoundException.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- * 
- * Licensed 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 
- * 
- *     http://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 
- * limitations under the License.
- */
-
-/*
- * JDOObjectNotFoundException.java
- *
- */
-
-package javax.jdo;
-
-/** This class represents exceptions caused by the user accessing 
- * an object that does not exist in the datastore.
- *
- * @since 1.0.1
- * @version 1.0.1
- */
-public class JDOObjectNotFoundException extends JDODataStoreException {
-
-  /**
-   * Constructs a new <code>JDOObjectNotFoundException</code> 
-   * without a detail message.
-   */
-  public JDOObjectNotFoundException() {
-  }
-  
-
-  /**
-   * Constructs a new <code>JDOObjectNotFoundException</code> 
-   * with the specified detail message.
-   * @param msg the detail message.
-   */
-  public JDOObjectNotFoundException(String msg) {
-    super(msg);
-  }
-
-  /** Constructs a new <code>JDOObjectNotFoundException</code> with the specified detail message
-   * and failed object.
-   * @param msg the detail message.
-   * @param failed the failed object.
-   */
-  public JDOObjectNotFoundException(String msg, Object failed) {
-    super(msg, failed);
-  }
-  
-  /**
-   * Constructs a new <code>JDOObjectNotFoundException</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 JDOObjectNotFoundException(String msg, Throwable[] nested) {
-    super(msg, nested);
-  }
-
-}
-
diff --git a/api20/src/java/javax/jdo/JDOOptimisticVerificationException.java b/api20/src/java/javax/jdo/JDOOptimisticVerificationException.java
deleted file mode 100644
index 06d75c6..0000000
--- a/api20/src/java/javax/jdo/JDOOptimisticVerificationException.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- * 
- * Licensed 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 
- * 
- *     http://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 
- * limitations under the License.
- */
-
-/*
- * JDOOptimisticVerificationException.java
- *
- */
-
-package javax.jdo;
-
-/** This class represents optimistic verification failures.  The nested
- * exception array contains an exception for each instance that failed
- * the optimistic verification.
- *
- * @since 1.0.1
- * @version 1.0.1
- */
-public class JDOOptimisticVerificationException extends JDOFatalDataStoreException {
-
-  /**
-   * Constructs a new <code>JDOOptimisticVerificationException</code> without a 
-   * detail message.
-   */
-  public JDOOptimisticVerificationException() {
-  }
-  
-
-  /**
-   * Constructs a new <code>JDOOptimisticVerificationException</code> with the 
-   * specified detail message.
-   * @param msg the detail message.
-   */
-  public JDOOptimisticVerificationException(String msg) {
-    super(msg);
-  }
-
-  /** Constructs a new <code>JDOOptimisticVerificationException</code> with the 
-   * specified detail message and failed object.
-   * @param msg the detail message.
-   * @param failed the failed object.
-   */
-  public JDOOptimisticVerificationException(String msg, Object failed) {
-    super(msg, failed);
-  }
-  
-  /**
-   * Constructs a new <code>JDOOptimisticVerificationException</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 JDOOptimisticVerificationException(String msg, Throwable[] nested) {
-    super(msg, nested);
-  }
-
-}
-
diff --git a/api20/src/java/javax/jdo/JDOUnsupportedOptionException.java b/api20/src/java/javax/jdo/JDOUnsupportedOptionException.java
deleted file mode 100644
index 9d06f31..0000000
--- a/api20/src/java/javax/jdo/JDOUnsupportedOptionException.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- * 
- * Licensed 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 
- * 
- *     http://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 
- * limitations under the License.
- */
-
-/*
- * JDOUnsupportedOptionException.java
- *
- */
-
-package javax.jdo;
-
-/** This class represents exceptions caused by the use of optional features
- * not supported by the JDO implementation.
- *
- * @version 1.0
- */
-public class JDOUnsupportedOptionException extends JDOUserException {
-
-  /**
-   * Constructs a new <code>JDOUnsupportedOptionException</code> without a detail message.
-   */
-  public JDOUnsupportedOptionException() {
-  }
-  
-
-  /**
-   * Constructs a new <code>JDOUnsupportedOptionException</code> with the specified detail message.
-   * @param msg the detail message.
-   */
-  public JDOUnsupportedOptionException(String msg) {
-    super(msg);
-  }
-
-  /**
-   * Constructs a new <code>JDOUnsupportedOptionException</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 JDOUnsupportedOptionException(String msg, Throwable[] nested) {
-    super(msg, nested);
-  }
-
-  /**
-   * Constructs a new <code>JDOUnsupportedOptionException</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 JDOUnsupportedOptionException(String msg, Throwable nested) {
-    super(msg, nested);
-  }
-}
-
diff --git a/api20/src/java/javax/jdo/JDOUserCallbackException.java b/api20/src/java/javax/jdo/JDOUserCallbackException.java
deleted file mode 100644
index 31b2374..0000000
--- a/api20/src/java/javax/jdo/JDOUserCallbackException.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- * 
- * Licensed 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 
- * 
- *     http://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 
- * limitations under the License.
- */
-
-/*
- * JDOUserCallbackException.java
- *
- */
-
-package javax.jdo;
-
-/** This class represents exceptions caused by exceptions thrown
- * during execution of callbacks or listeners.
- *
- * @version 2.0
- */
-public class JDOUserCallbackException extends JDOUserException {
-
-  /**
-   * Constructs a new <code>JDOUserCallbackException</code> 
-   * without a detail message.
-   */
-  public JDOUserCallbackException() {
-  }
-
-  /**
-   * Constructs a new <code>JDOUserCallbackException</code> 
-   * with the specified detail message.
-   * @param msg the detail message.
-   */
-  public JDOUserCallbackException(String msg) {
-    super(msg);
-  }
-
-  /**
-   * Constructs a new <code>JDOUserCallbackException</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 JDOUserCallbackException(String msg, Throwable[] nested) {
-    super(msg, nested);
-  }
-
-  /**
-   * Constructs a new <code>JDOUserCallbackException</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 JDOUserCallbackException(String msg, Throwable nested) {
-    super(msg, nested);
-  }
-}
-
diff --git a/api20/src/java/javax/jdo/JDOUserException.java b/api20/src/java/javax/jdo/JDOUserException.java
deleted file mode 100644
index cb3e48d..0000000
--- a/api20/src/java/javax/jdo/JDOUserException.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- * 
- * Licensed 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 
- * 
- *     http://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 
- * limitations under the License.
- */
-
-/*
- * JDOUserException.java
- *
- */
-
-package javax.jdo;
-
-/** This class represents user errors that can possibly be retried.
- *
- * @version 1.0
- */
-public class JDOUserException extends JDOCanRetryException {
-
-  /**
-   * Constructs a new <code>JDOUserException</code> without a detail message.
-   */
-  public JDOUserException() {
-  }
-  
-
-  /**
-   * Constructs a new <code>JDOUserException</code> with the specified detail message.
-   * @param msg the detail message.
-   */
-  public JDOUserException(String msg) {
-    super(msg);
-  }
-
-  /**
-   * Constructs a new <code>JDOUserException</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 JDOUserException(String msg, Throwable[] nested) {
-    super(msg, nested);
-  }
-
-  /**
-   * Constructs a new <code>JDOUserException</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 JDOUserException(String msg, Throwable nested) {
-    super(msg, nested);
-  }
-  
-  /** Constructs a new <code>JDOUserException</code> with the specified detail message
-   * and failed object.
-   * @param msg the detail message.
-   * @param failed the failed object.
-   */
-  public JDOUserException(String msg, Object failed) {
-    super(msg, failed);
-  }
-  
-  /** Constructs a new <code>JDOUserException</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 JDOUserException(String msg, Throwable[] nested, Object failed) {
-    super(msg, nested, failed);
-  }
-  
-  /** Constructs a new <code>JDOUserException</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 JDOUserException(String msg, Throwable nested, Object failed) {
-    super(msg, nested, failed);
-  }
-}
-
diff --git a/api20/src/java/javax/jdo/PersistenceManager.java b/api20/src/java/javax/jdo/PersistenceManager.java
deleted file mode 100644
index c3f84b6..0000000
--- a/api20/src/java/javax/jdo/PersistenceManager.java
+++ /dev/null
@@ -1,1086 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- * 
- * Licensed 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 
- * 
- *     http://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 
- * limitations under the License.
- */
-
-/*
- * PersistenceManager.java
- *
- */
- 
-package javax.jdo;
-
-import java.util.Collection;
-
-import javax.jdo.datastore.JDOConnection;
-import javax.jdo.datastore.Sequence;
-
-import javax.jdo.listener.InstanceLifecycleListener;
-
-/** <code>PersistenceManager</code> is the primary interface for JDO-aware 
- * application components.  It is the factory for <code>Query</code> and 
- * <code>Transaction</code> instances, and contains methods to manage the 
- * life cycle of <code>PersistenceCapable</code> instances.
- *
- * <P>A <code>PersistenceManager</code> is obtained from the
- * {@link PersistenceManagerFactory}
- * (recommended) or by construction.
- * @version 2.0
- */
-
-public interface PersistenceManager {
-    /** 
-     * A <code>PersistenceManager</code> instance can be used until it is 
-     * closed.
-     * @return <code>true</code> if this <code>PersistenceManager</code> has 
-     * been closed.
-     * @see #close()
-     */
-    boolean isClosed ();
-    
-    /** Close this <code>PersistenceManager</code> so that no further requests 
-     * may be made on it.  A <code>PersistenceManager</code> instance can be 
-     * used only until it is closed.
-     *
-     * <P>Closing a <code>PersistenceManager</code> might release it to the pool 
-     * of available <code>PersistenceManager</code>s, or might be garbage 
-     * collected, at the option of the JDO implementation.  Before being used 
-     * again to satisfy a <code>getPersistenceManager()</code> request, the 
-     * default values for options will be restored to their values as specified 
-     * in the <code>PersistenceManagerFactory</code>.
-     *
-     * <P>This method closes the <code>PersistenceManager</code>.
-     */
-    void close ();
-
-    /** Return the <code>Transaction</code> instance associated with a 
-     * <code>PersistenceManager</code>. There is one <code>Transaction</code> 
-     * instance associated with each <code>PersistenceManager</code> instance.  
-     * The <code>Transaction</code> instance supports options as well as
-     * transaction completion requests.
-     * @return the <code>Transaction</code> associated with this
-     * <code>PersistenceManager</code>.
-     */
-    Transaction currentTransaction();
-
-    /** Mark an instance as no longer needed in the cache.  Eviction is normally
-     * done automatically by the <code>PersistenceManager</code> at transaction
-     * completion.  This method allows the application to explicitly provide a 
-     * hint to the <code>PersistenceManager</code> that the  instance is no 
-     * longer needed in the cache.
-     * @param pc the instance to evict from the cache.
-     */
-    void evict (Object pc);
-    
-    /** Mark an array of instances as no longer needed in the cache.
-     * @see #evict(Object pc)
-     * @param pcs the array of instances to evict from the cache.
-     */
-    void evictAll (Object[] pcs);
-    
-    /** Mark a <code>Collection</code> of instances as no longer needed in the 
-     * cache.
-     * @see #evict(Object pc)
-     * @param pcs the <code>Collection</code> of instances to evict from the 
-     * cache.
-     */
-    void evictAll (Collection pcs);
-    
-    /** Mark all persistent-nontransactional instances as no longer needed 
-     * in the cache.  It transitions
-     * all persistent-nontransactional instances to hollow.  Transactional
-     * instances are subject to eviction based on the RetainValues setting.
-     * @see #evict(Object pc)
-     */
-    void evictAll ();
-    
-    /** Refresh the state of the instance from the data store.
-     *
-     * <P>In an optimistic transaction, the state of instances in the cache
-     * might not match the state in the data store.  This method is used to
-     * reload the state of the instance from the data store so that a subsequent
-     * commit is more likely to succeed.
-     * <P>Outside a transaction, this method will refresh nontransactional 
-     * state.
-     * @param pc the instance to refresh.
-     */
-    void refresh (Object pc);
-    
-    /** Refresh the state of an array of instances from the data store.
-     *
-     * @see #refresh(Object pc)
-     * @param pcs the array of instances to refresh.
-     */
-    void refreshAll (Object[] pcs);
-    
-    /** Refresh the state of a <code>Collection</code> of instances from the 
-     * data store.
-     *
-     * @see #refresh(Object pc)
-     * @param pcs the <code>Collection</code> of instances to refresh.
-     */
-    void refreshAll (Collection pcs);
-    
-    /** Refresh the state of all applicable instances from the data store.
-     * <P>If called with an active transaction, all transactional instances
-     * will be refreshed.  If called outside an active transaction, all
-     * nontransactional instances will be refreshed.
-     * @see #refresh(Object pc)
-     */
-    void refreshAll ();
-
-    /**
-     * Refreshes all instances in the exception that failed verification.
-     *
-     * @since 2.0
-     */
-    void refreshAll (JDOException jdoe);
-    
-    /** Create a new <code>Query</code> with no elements.
-     * @return the new <code>Query</code>.
-     */
-    Query newQuery ();
-    
-    /** Create a new <code>Query</code> using elements from another 
-     * <code>Query</code>. The other <code>Query</code> must have been created 
-     * by the same JDO implementation. It might be active in a different 
-     * <code>PersistenceManager</code> or might have been serialized and 
-     * restored.
-     * <P>All of the settings of the other <code>Query</code> are copied to this 
-     * <code>Query</code>, except for the candidate <code>Collection</code> or 
-     * <code>Extent</code>.
-     * @return the new <code>Query</code>
-     * @param compiled another <code>Query</code> from the same JDO 
-     * implementation
-     */
-    Query newQuery (Object compiled);
-    
-    /** Create a Construct a new query instance using the specified String 
-     * as the single-string representation of the query.
-     * @param query the single-string query
-     * @return the new <code>Query</code>
-     * @since 2.0
-     */
-    Query newQuery (String query);
-    
-    /** Create a new <code>Query</code> using the specified language.
-     * @param language the language of the query parameter
-     * @param query the query, which is of a form determined by the language
-     * @return the new <code>Query</code>
-     */    
-    Query newQuery (String language, Object query);
-    
-    /** Create a new <code>Query</code> specifying the <code>Class</code> of the 
-     * candidate instances.
-     * @param cls the <code>Class</code> of the candidate instances
-     * @return the new <code>Query</code>
-     */
-    Query newQuery (Class cls);
-    
-    /** Create a new <code>Query</code> with the <code>Class</code> of the
-     * candidate instances and candidate <code>Extent</code>.
-     * @param cln the <code>Extent</code> of candidate instances
-     * @return the new <code>Query</code>
-     */
-    Query newQuery (Extent cln);
-    
-    /** Create a new <code>Query</code> with the candidate <code>Class</code> 
-     * and <code>Collection</code>.
-     * @param cls the <code>Class</code> of results
-     * @param cln the <code>Collection</code> of candidate instances
-     * @return the new <code>Query</code>
-     */
-    Query newQuery (Class cls, Collection cln);
-    
-    /** Create a new <code>Query</code> with the <code>Class</code> of the
-     * candidate instances and filter.
-     * @param cls the <code>Class</code> of results
-     * @param filter the filter for candidate instances
-     * @return the new <code>Query</code>
-     */
-    Query newQuery (Class cls, String filter);
-    
-    /** Create a new <code>Query</code> with the <code>Class</code> of the 
-     * candidate instances, 
-     * candidate <code>Collection</code>, and filter.
-     * @param cls the <code>Class</code> of candidate instances
-     * @param cln the <code>Collection</code> of candidate instances
-     * @param filter the filter for candidate instances
-     * @return the new <code>Query</code>
-     */
-    Query newQuery (Class cls, Collection cln, String filter);
-    
-    /** Create a new <code>Query</code> with the
-     * candidate <code>Extent</code> and filter; the class
-     * is taken from the <code>Extent</code>.
-     * @param cln the <code>Extent</code> of candidate instances
-     * @param filter the filter for candidate instances
-     * @return the new <code>Query</code>
-     */
-    Query newQuery (Extent cln, String filter);
-
-    /**
-     * Create a new <code>Query</code> with the given candidate class
-     * from a named query. The query name given must be the name of a
-     * query defined in metadata.
-     * @param cls the <code>Class</code> of candidate instances
-     * @param queryName the name of the query to look up in metadata
-     * @return the new <code>Query</code>
-     */
-    Query newNamedQuery (Class cls, String queryName);
-
-    /** The <code>PersistenceManager</code> manages a collection of instances in
-     * the data store based on the class of the instances.  This method returns
-     * an <code>Extent</code> of instances in the data store that might be 
-     * iterated or given to a <code>Query</code>.  The <code>Extent</code> 
-     * itself might not reference any instances, but only hold the class name 
-     * and an indicator as to whether subclasses are included in the 
-     * <code>Extent</code>.
-     * <P>Note that the <code>Extent</code> might be very large.
-     * @param persistenceCapableClass <code>Class</code> of instances
-     * @param subclasses whether to include instances of subclasses
-     * @return an <code>Extent</code> of the specified <code>Class</code>
-     * @see Query
-     */
-    Extent getExtent (Class persistenceCapableClass, boolean subclasses);
-
-    /**
-     * Equivalent to <code>getExtent (persistenceCapableClass,
-     * true)</code>.
-     * @see #getExtent(Class,boolean)
-     * @since 2.0
-     */
-    Extent getExtent (Class persistenceCapableClass);
-
-    /** This method locates a persistent instance in the cache of instances
-     * managed by this <code>PersistenceManager</code>.
-     * The <code>getObjectById</code> method attempts 
-     * to find an instance in the cache with the specified JDO identity. 
-     * The <code>oid</code> parameter object might have been returned by an 
-     * earlier call to <code>getObjectId</code> or 
-     * <code>getTransactionalObjectId</code>, or might have been constructed by
-     * the application. 
-     * <P>If the <code>PersistenceManager</code> is unable to resolve the 
-     * <code>oid</code> parameter to an ObjectId instance, then it throws a 
-     * <code>JDOUserException</code>.
-     * <P>If the <code>validate</code> flag is <code>false</code>, and there is 
-     * already an instance in the cache with the same JDO identity as the 
-     * <code>oid</code> parameter, then this method returns it. There is no 
-     * change made to the state of the returned instance.
-     * <P>If there is not an instance already in the cache with the same JDO
-     * identity as the <code>oid</code> parameter, then this method creates an 
-     * instance with the specified JDO identity and returns it. If there is no
-     * transaction in progress, the returned instance will be hollow or
-     * persistent-nontransactional, at the choice of the implementation.
-     * <P>If there is a transaction in progress, the returned instance will
-     * be hollow, persistent-nontransactional, or persistent-clean, at the
-     * choice of the implementation.
-     * <P>It is an implementation decision whether to access the data store,
-     * if required to determine the exact class. This will be the case of
-     * inheritance, where multiple <code>PersistenceCapable</code> classes share 
-     * the same ObjectId class.
-     * <P>If the validate flag is <code>false</code>, and the instance does not 
-     * exist in the data store, then this method might not fail. It is an
-     * implementation choice whether to fail immediately with a
-     * <code>JDOObjectNotFoundException</code>. But a subsequent access
-     * of the fields of the
-     * instance will throw a <code>JDOObjectNotFoundException</code>
-     * if the instance does not
-     * exist at that time. Further, if a relationship is established to this
-     * instance, then the transaction in which the association was made will
-     * fail.
-     * <P>If the <code>validate</code> flag is <code>true</code>, and there is 
-     * already a transactional instance in the cache with the same JDO identity 
-     * as the <code>oid</code> parameter, then this method returns it. There is 
-     * no change made to the state of the returned instance.
-     * <P>If there is an instance already in the cache with the same JDO 
-     * identity as the <code>oid</code> parameter, but the instance is not 
-     * transactional, then it must be verified in the data store. If the 
-     * instance does not exist in the datastore, then a 
-     * <code>JDOObjectNotFoundException</code> is thrown.
-     * <P>If there is not an instance already in the cache with the same JDO
-     * identity as the <code>oid</code> parameter, then this method creates an 
-     * instance with the specified JDO identity, verifies that it exists in the 
-     * data store, and returns it. If there is no transaction in progress, the
-     * returned instance will be hollow or persistent-nontransactional,
-     * at the choice of the implementation.
-     * <P>If there is a data store transaction in progress, the returned
-     * instance will be persistent-clean.
-     * If there is an optimistic transaction in progress, the returned
-     * instance will be persistent-nontransactional.
-     * @see #getObjectId(Object pc)
-     * @see #getTransactionalObjectId(Object pc)
-     * @return the <code>PersistenceCapable</code> instance with the specified 
-     * ObjectId
-     * @param oid an ObjectId
-     * @param validate if the existence of the instance is to be validated
-     */
-    Object getObjectById (Object oid, boolean validate);
-
-    /**
-     * Looks up the instance of the given type with the given key.
-     * @param cls The type of object to load
-     * @param key either the string representation of the object id, or
-     * an object representation of a single field identity key
-     * @return the corresponding persistent instance
-     * @since 2.0
-     */
-    Object getObjectById (Class cls, Object key);
-
-    /**
-     * Looks up the instance corresponding to the specified oid. This is
-     * equivalent to <code>getObjectById(oid, true);
-     * @param oid The object id of the object to load
-     * @return the corresponding persistent instance
-     */
-    Object getObjectById (Object oid);
-
-    /** The ObjectId returned by this method represents the JDO identity of
-     * the instance.  The ObjectId is a copy (clone) of the internal state
-     * of the instance, and changing it does not affect the JDO identity of
-     * the instance.  
-     * <P>The <code>getObjectId</code> method returns an ObjectId instance that 
-     * represents the object identity of the specified JDO instance. The 
-     * identity is guaranteed to be unique only in the context of the JDO
-     * <code>PersistenceManager</code> that created the identity, and only for 
-     * two types of JDO Identity: those that are managed by the application, and
-     * those that are managed by the data store.
-     * <P>If the object identity is being changed in the transaction, by the
-     * application modifying one or more of the application key fields,
-     * then this method returns the identity as of the beginning of the
-     * transaction. The value returned by <code>getObjectId</code> will be 
-     * different following <code>afterCompletion</code> processing for 
-     * successful transactions. <P>Within a transaction, the ObjectId returned 
-     * will compare equal to the ObjectId returned by only one among all JDO 
-     * instances associated with the <code>PersistenceManager</code> regardless
-     * of the type of ObjectId.
-     * <P>The ObjectId does not necessarily contain any internal state of the
-     * instance, nor is it necessarily an instance of the class used to
-     * manage identity internally. Therefore, if the application makes a
-     * change to the ObjectId instance returned by this method, there is
-     * no effect on the instance from which the ObjectId was obtained.
-     * <P>The <code>getObjectById</code> method can be used between instances of
-     * <code>PersistenceManager</code> of different JDO vendors only for 
-     * instances of persistence capable classes using application-managed 
-     * (primary key) JDO identity. If it is used for instances of classes using
-     * datastore identity, the method might succeed, but there are no guarantees
-     * that the parameter and return instances are related in any way.
-     * @see #getTransactionalObjectId(Object pc)
-     * @see #getObjectById(Object oid, boolean validate)
-     * @param pc the <code>PersistenceCapable</code> instance
-     * @return the ObjectId of the instance
-     */
-    Object getObjectId (Object pc);
-    
-    /** The ObjectId returned by this method represents the JDO identity of
-     * the instance.  The ObjectId is a copy (clone) of the internal state
-     * of the instance, and changing it does not affect the JDO identity of
-     * the instance.
-     * <P>If the object identity is being changed in the transaction, by the
-     * application modifying one or more of the application key fields,
-     * then this method returns the current identity in the transaction.
-     * <P>If there is no transaction in progress, or if none of the key fields
-     * is being modified, then this method will return the same value as
-     * <code>getObjectId</code>.
-     * @see #getObjectId(Object pc)
-     * @see #getObjectById(Object oid, boolean validate)
-     * @param pc a <code>PersistenceCapable</code> instance
-     * @return the ObjectId of the instance
-     */
-    Object getTransactionalObjectId (Object pc);
-
-    /** 
-     * This method returns an object id instance corresponding to the pcClass
-     * and key arguments.
-     * @param pcClass the <code>Class</code> of the persistence-capable instance
-     * @param key for single-field identity, the parameter for the
-     * constructor; for non-single-field application identity, the result 
-     * of toString() on the object id instance.
-     * @return an instance of the object identity class
-     */
-    Object newObjectIdInstance (Class pcClass, Object key);
-    
-    /**
-     * Return the objects with the given oids.
-     * @param oids the oids of the objects to return
-     * @param validate if true, the existance of the objects in
-     *     the datastore will be validated.
-     * @return the objects that were looked up, in the
-     *     same order as the oids parameter.
-     * @see #getObjectById(Object,boolean)
-     * @since 2.0
-     */
-    Collection getObjectsById (Collection oids, boolean validate);
-
-    /**
-     * Return the objects with the given oids. This method is equivalent 
-     * to calling {@link #getObjectsById(Collection, boolean)}
-     * with the validate flag true.
-     * @param oids the oids of the objects to return
-     * @return the objects that were looked up, in the
-     *     same order as the oids parameter.
-     * @see #getObjectsById(Collection,boolean)
-     * @since 2.0
-     */
-    Collection getObjectsById (Collection oids);
-
-    /**
-     * Return the objects with the given oids.
-     * @param oids the oids of the objects to return
-     * @param validate if true, the existance of the objects in
-     *     the datastore will be validated.
-     * @return the objects that were looked up, in the
-     *     same order as the oids parameter.
-     * @see #getObjectById(Object,boolean)
-     * @since 2.0
-     */
-    Object[] getObjectsById (Object[] oids, boolean validate);
-
-    /**
-     * Return the objects with the given oids. This method is equivalent
-     * to calling {@link #getObjectsById(Object[],boolean)} 
-     * with the validate flag true.
-     * @param oids the oids of the objects to return
-     * @return the objects that were looked up, in the
-     *     same order as the oids parameter.
-     * @see #getObjectsById(Object[],boolean)
-     * @since 2.0
-     */
-    Object[] getObjectsById (Object[] oids);
-
-    /** Make the parameter instance persistent in this 
-     * <code>PersistenceManager</code>.
-     * This method makes transient instances persistent and applies detached
-     * instance changes to the cache. It must be called in the context of
-     * an active transaction, or a JDOUserException is thrown. For a transient
-     * instance, it assigns an object identity to the instance and transitions
-     * it to persistent-new. Any transient instances reachable from this
-     * instance via persistent fields of this instance become provisionally
-     * persistent, transitively. That is, they behave as persistent-new
-     * instances (return true to isPersistent, isNew, and isDirty).
-     * But at commit time, the reachability algorithm is run again,
-     * and instances made provisionally persistent that are not then
-     * reachable from persistent instances will revert to transient.
-     * <P>During makePersistent of transient instances, the create life cycle
-     * listener is called.
-     * <P>For detached instances, it locates or instantiates a persistent
-     * instance with the same JDO identity as the detached instance,
-     * and merges the persistent state of the detached instance into the
-     * persistent instance. Only the state of persistent fields is merged.
-     * If non-persistent state needs to be copied, the application should
-     * use the jdoPostAttach callback or the postAttach lifecycle event
-     * listener. Any references to the detached instances from instances
-     * in the closure of the parameter instances are modified to refer to
-     * the corresponding persistent instance instead of to the
-     * detached instance.
-     * <P>During attachment of detached instances, the attach callbacks
-     * and attach life cycle listeners are called.
-     * <P>During application of changes of the detached state, if the JDO
-     * implementation can determine that there were no changes made during
-     * detachment, then the implementation is not required to mark the
-     * corresponding instance dirty. If it cannot determine if changes
-     * were made, then it must mark the instance dirty.
-     * No consistency checking is done during makePersistent of detached
-     * instances. If consistency checking is required by the application,
-     * then flush or checkConsistency should be called after attaching the
-     * instances.
-     * <P>These methods have no effect on parameter persistent instances
-     * already managed by this PersistenceManager. They will throw a
-     * JDOUserException if the parameter instance is managed by a
-     * different PersistenceManager.
-     * If an instance is of a class whose identity type (application, 
-     * datastore, or none) is not supported by the JDO implementation, 
-     * then a JDOUserException will be thrown for that instance.
-     * The return value for parameter instances in the transient or persistent
-     * states is the same as the parameter value. The return value for
-     * parameter instances in the detached state is the persistent instance
-     * corresponding to the detached instance.
-     * The return values for makePersistentAll methods correspond by position
-     * to the parameter instances.
-     * @param pc an instance of a <code>Class</code> that is persistent
-     * capable.
-     * @return the parameter instance for parameters in the transient or
-     * persistent state, or the corresponding persistent instance 
-     * for detached parameter instances
-     */
-    Object makePersistent (Object pc);
-    
-    /** Make an array of instances persistent.
-     * @param pcs an array of instances
-     * @return the parameter instances for parameters in the transient or
-     * persistent state, or the corresponding persistent instance 
-     * for detached parameter instances, in the same order as in the 
-     * parameter array
-     * @see #makePersistent(Object pc)
-     */
-    Object[] makePersistentAll (Object[] pcs);
-    
-    /** Make a <code>Collection</code> of instances persistent.
-     * @param pcs a <code>Collection</code> of instances
-     * @return the parameter instance for parameters in the transient or
-     * persistent state, or the corresponding persistent instance 
-     * for detached parameter instances, with an iteration in the same order
-     * as in the parameter Collection
-     * @see #makePersistent(Object pc)
-     */
-    Collection makePersistentAll (Collection pcs);
-    
-    /** Delete the persistent instance from the data store.
-     * This method must be called in an active transaction.
-     * The data store object will be removed at commit.
-     * Unlike <code>makePersistent</code>, which makes the closure of the 
-     * instance persistent, the closure of the instance is not deleted from the
-     * data store.  This method has no effect if the instance is already deleted
-     * in the current transaction.
-     * This method throws <code>JDOUserException</code> if the instance is 
-     * transient or is managed by another <code>PersistenceManager</code>.
-     *
-     * @param pc a persistent instance
-     */
-    void deletePersistent (Object pc);
-    
-    /** Delete an array of instances from the data store.
-     * @param pcs a <code>Collection</code> of persistent instances
-     * @see #deletePersistent(Object pc)
-     */
-    void deletePersistentAll (Object[] pcs);
-    
-    /** Delete a <code>Collection</code> of instances from the data store.
-     * @param pcs a <code>Collection</code> of persistent instances
-     * @see #deletePersistent(Object pc)
-     */
-    void deletePersistentAll (Collection pcs);
-    
-    /** Make an instance transient, removing it from management by this
-     * <code>PersistenceManager</code>.
-     *
-     * <P>The instance loses its JDO identity and it is no longer associated
-     * with any <code>PersistenceManager</code>.  The state of fields is 
-     * preserved unchanged.
-     * @param pc the instance to make transient.
-     */
-    void makeTransient (Object pc);
-    
-    /** Make an array of instances transient, removing them from management by 
-     * this <code>PersistenceManager</code>.
-     *
-     * <P>The instances lose their JDO identity and they are no longer 
-     * associated with any <code>PersistenceManager</code>.  The state of fields
-     * is preserved unchanged.
-     * @param pcs the instances to make transient.
-     */
-    void makeTransientAll (Object[] pcs);
-    
-    /** Make a <code>Collection</code> of instances transient, removing them 
-     * from management by this <code>PersistenceManager</code>.
-     *
-     * <P>The instances lose their JDO identity and they are no longer 
-     * associated with any <code>PersistenceManager</code>.  The state of fields
-     * is preserved unchanged.
-     * @param pcs the instances to make transient.
-     */ 
-    void makeTransientAll (Collection pcs);
-
-    /** Make an instance transient, removing it from management by this 
-     * <code>PersistenceManager</code>. If the useFetchPlan parameter is 
-     * false, this method behaves exactly as makeTransient(Object pc). 
-     * <P>The affected instance(s) lose their JDO identity and are no longer 
-     * associated with any <code>PersistenceManager</code>.  The state 
-     * of fields is unchanged.
-     * <P>If the useFetchPlan parameter is true, then the current FetchPlan
-     * is applied to the pc parameter, as if detachCopy(Object) had been
-     * called. After the graph of instances is loaded, the instances 
-     * reachable via loaded fields is made transient. The state of fields
-     * in the affected instances is as specified by the FetchPlan.
-     * <P>Unlike detachCopy, the instances are not detached; there is no
-     * detachment information in the instances.
-     * <P>The instances to be made transient do not need to
-     * implement the javax.jdo.spi.Detachable interface.
-     * @param pc the root instance to make transient.
-     * @param useFetchPlan whether to use the current fetch plan to determine
-     * which fields to load and which instances to make transient
-     * @since 2.0
-     */
-    void makeTransient (Object pc, boolean useFetchPlan);
-
-    /** Make instances transient, removing them from management
-     * by this <code>PersistenceManager</code>. If the useFetchPlan parameter
-     * is false, this method behaves exactly as makeTransientAll(Object[] pcs). 
-     * <P>The affected instance(s) lose their JDO identity and are no longer 
-     * associated with any <code>PersistenceManager</code>.  The state 
-     * of fields is unchanged.
-     * <P>If the useFetchPlan parameter is true, then the current FetchPlan
-     * is applied to the pcs parameters and the entire graph of instances 
-     * reachable via loaded fields is made transient. The state of fields
-     * in the affected instances is as specified by the FetchPlan.
-     * <P>Unlike detachCopy, the instances are not detached; there is no
-     * detachment information in the instances.
-     * <P>The instances to be made transient do not need to
-     * implement the javax.jdo.spi.Detachable interface.
-     * @param pcs the root instances to make transient.
-     * @param useFetchPlan whether to use the current fetch plan to determine
-     * which fields to load and which instances to make transient
-     * @since 2.0
-     */
-    void makeTransientAll (Object[] pcs, boolean useFetchPlan);
-    
-    /** Make instances transient, removing them from management
-     * by this <code>PersistenceManager</code>. If the useFetchPlan parameter
-     * is false, this method behaves exactly as 
-     * makeTransientAll(Collection pcs). 
-     * <P>The affected instance(s) lose their JDO identity and are no longer 
-     * associated with any <code>PersistenceManager</code>.  The state 
-     * of fields is unchanged.
-     * <P>If the useFetchPlan parameter is true, then the current FetchPlan
-     * is applied to the pcs parameters and the entire graph of instances 
-     * reachable via loaded fields is made transient. The state of fields
-     * in the affected instances is as specified by the FetchPlan.
-     * <P>Unlike detachCopy, the instances are not detached; there is no
-     * detachment information in the instances.
-     * <P>The instances to be made transient do not need to
-     * implement the javax.jdo.spi.Detachable interface.
-     * @param pcs the root instances to make transient.
-     * @param useFetchPlan whether to use the current fetch plan to determine
-     * which fields to load and which instances to make transient
-     * @since 2.0
-     */
-    void makeTransientAll (Collection pcs, boolean useFetchPlan);
-
-    /** Make an instance subject to transactional boundaries.
-     *
-     * <P>Transient instances normally do not observe transaction boundaries.
-     * This method makes transient instances sensitive to transaction 
-     * completion.  If an instance is modified in a transaction, and the 
-     * transaction rolls back, the state of the instance is restored to the 
-     * state before the first change in the transaction.
-     *
-     * <P>For persistent instances read in optimistic transactions, this method
-     * allows the application to make the state of the instance part of the
-     * transactional state.  At transaction commit, the state of the instance in
-     * the cache is compared to the state of the instance in the data store.  If 
-     * they are not the same, then an exception is thrown.
-     * @param pc the instance to make transactional.
-     */
-    void makeTransactional (Object pc);
-
-    /** Make an array of instances subject to transactional boundaries.
-     * @param pcs the array of instances to make transactional.
-     * @see #makeTransactional(Object pc)
-     */
-    void makeTransactionalAll (Object[] pcs);
-
-    /** Make a <code>Collection</code> of instances subject to transactional 
-     * boundaries.
-     * @param pcs the <code>Collection</code> of instances to make 
-     * transactional.
-     * @see #makeTransactional(Object pc)
-     */
-    void makeTransactionalAll (Collection pcs);
-    
-    /** Make an instance non-transactional after commit.
-     *
-     * <P>Normally, at transaction completion, instances are evicted from the
-     * cache.  This method allows an application to identify an instance as
-     * not being evicted from the cache at transaction completion.  Instead,
-     * the instance remains in the cache with nontransactional state.
-     *
-     * @param pc the instance to make nontransactional.
-     */
-    void makeNontransactional (Object pc);
-    
-    /** Make an array of instances non-transactional after commit.
-     *
-     * @param pcs the array of instances to make nontransactional.
-     * @see #makeNontransactional(Object pc)
-     */
-    void makeNontransactionalAll (Object[] pcs);
-    
-    /** Make a <code>Collection</code> of instances non-transactional after 
-     * commit.
-     *
-     * @param pcs the <code>Collection</code> of instances to make 
-     * nontransactional.
-     * @see #makeNontransactional(Object pc)
-     */
-    void makeNontransactionalAll (Collection pcs);
-
-    /** Retrieve field values of an instance from the store.  This tells
-     * the <code>PersistenceManager</code> that the application intends to use 
-     * the instance, and its field values must be retrieved.
-     * <P>The <code>PersistenceManager</code> might use policy information about 
-     * the class to retrieve associated instances.
-     * @param pc the instance
-     */
-    void retrieve (Object pc);
-    
-    /** Retrieve field values of an instance from the store.  This tells
-     * the <code>PersistenceManager</code> that the application intends to use 
-     * the instance, and its field values must be retrieved.
-     * <P>If the useFetchPlan parameter is false, this method behaves exactly
-     * as the corresponding method without the useFetchPlan parameter. 
-     * If the useFetchPlan parameter is true, and the fetch plan has not been
-     * modified from its default setting, all fields in the current fetch plan
-     * are fetched, and other fields might be fetched lazily by the
-     * implementation. If the useFetchPlan parameter is true, and the fetch
-     * plan has been changed from its default setting, then the fields
-     * specified by the fetch plan are loaded, along with related instances
-     * specified by the fetch plan.
-     * @param pc the instance
-     * @param useFetchPlan whether to use the current fetch plan to determine
-     * which fields to load and which instances to retrieve.
-     * @since 2.0
-     */
-    void retrieve (Object pc, boolean useFetchPlan);
-    
-    /** Retrieve field values of instances from the store.  This tells
-     * the <code>PersistenceManager</code> that the application intends to use 
-     * the instances, and all field values must be retrieved.
-     * <P>The <code>PersistenceManager</code> might use policy information about 
-     * the class to retrieve associated instances.
-     * @param pcs the instances
-     */
-    void retrieveAll (Collection pcs);
-    
-    /** Retrieve field values of instances from the store.  This tells
-     * the <code>PersistenceManager</code> that the application intends to use 
-     * the instances, and their field values should be retrieved.  The fields
-     * in the current fetch group must be retrieved, and the implementation
-     * might retrieve more fields than the current fetch group.
-     * <P>If the useFetchPlan parameter is false, this method behaves exactly
-     * as the corresponding method without the useFetchPlan parameter. 
-     * If the useFetchPlan parameter is true, and the fetch plan has not been
-     * modified from its default setting, all fields in the current fetch plan
-     * are fetched, and other fields might be fetched lazily by the
-     * implementation. If the useFetchPlan parameter is true, and the fetch
-     * plan has been changed from its default setting, then the fields
-     * specified by the fetch plan are loaded, along with related instances
-     * specified by the fetch plan.
-     * @param pcs the instances
-     * @param useFetchPlan whether to use the current fetch plan to determine
-     * which fields to load and which instances to retrieve.
-     * @since 1.0.1
-     */
-    void retrieveAll (Collection pcs, boolean useFetchPlan);
-    
-    /** Retrieve field values of instances from the store.  This tells
-     * the <code>PersistenceManager</code> that the application intends to use 
-     * the instances, and all field values must be retrieved.
-     * <P>The <code>PersistenceManager</code> might use policy information about 
-     * the class to retrieve associated instances.
-     * @param pcs the instances
-     */
-    void retrieveAll (Object[] pcs);
-           
-    /** Retrieve field values of instances from the store.  This tells
-     * the <code>PersistenceManager</code> that the application intends to use 
-     * the instances, and their field values should be retrieved.  The fields
-     * in the current fetch group must be retrieved, and the implementation
-     * might retrieve more fields than the current fetch group.
-     * <P>If the useFetchPlan parameter is false, this method behaves exactly
-     * as the corresponding method without the useFetchPlan parameter. 
-     * If the useFetchPlan parameter is true, and the fetch plan has not been
-     * modified from its default setting, all fields in the current fetch plan
-     * are fetched, and other fields might be fetched lazily by the
-     * implementation. If the useFetchPlan parameter is true, and the fetch
-     * plan has been changed from its default setting, then the fields
-     * specified by the fetch plan are loaded, along with related instances
-     * specified by the fetch plan.
-     * @param pcs the instances
-     * @param useFetchPlan whether to use the current fetch plan to determine
-     * which fields to load and which instances to retrieve.
-     * @since 1.0.1
-     */
-    void retrieveAll (Object[] pcs, boolean useFetchPlan);
-           
-    /** The application can manage the <code>PersistenceManager</code> instances
-     * more easily by having an application object associated with each
-     * <code>PersistenceManager</code> instance.
-     * @param o the user instance to be remembered by the 
-     * <code>PersistenceManager</code>
-     * @see #getUserObject
-     */
-    void setUserObject (Object o);
-    
-    /** The application can manage the <code>PersistenceManager</code> instances
-     * more easily by having an application object associated with each
-     * <code>PersistenceManager</code> instance.
-     * @return the user object associated with this 
-     * <code>PersistenceManager</code>
-     * @see #setUserObject
-     */
-    Object getUserObject ();
-     
-    /** This method returns the <code>PersistenceManagerFactory</code> used to 
-     * create this <code>PersistenceManager</code>.  
-     * @return the <code>PersistenceManagerFactory</code> that created
-     * this <code>PersistenceManager</code>
-     */
-    PersistenceManagerFactory getPersistenceManagerFactory();
-
-    /** Return the <code>Class</code> that implements the JDO Identity for the
-     * specified <code>PersistenceCapable</code> class.  The application can use 
-     * the returned <code>Class</code> to construct a JDO Identity instance for
-     * application identity <code>PersistenceCapable</code> classes.  This JDO 
-     * Identity instance can then be used to get an instance of the
-     * <code>PersistenceCapable</code> class for use in the application.
-     *
-     * <P>In order for the application to construct an instance of the ObjectId 
-     * class it needs to know the class being used by the JDO implementation.
-     * @param cls the <code>PersistenceCapable Class</code>
-     * @return the <code>Class</code> of the ObjectId of the parameter
-     * @see #getObjectById
-     */
-    Class getObjectIdClass(Class cls);
-  
-    /** Set the Multithreaded flag for this <code>PersistenceManager</code>.  
-     * Applications that use multiple threads to invoke methods or access fields 
-     * from instances managed by this <code>PersistenceManager</code> must set 
-     * this flag to <code>true</code>. 
-     * Instances managed by this <code>PersistenceManager</code> include 
-     * persistent or transactional instances of <code>PersistenceCapable</code> 
-     * classes, as well as helper instances such as <code>Query</code>, 
-     * <code>Transaction</code>, or <code>Extent</code>.
-     * @param flag the Multithreaded setting.
-     */
-    void setMultithreaded (boolean flag);
-  
-    /** Get the current Multithreaded flag for this 
-     * <code>PersistenceManager</code>.  
-     * @see #setMultithreaded
-     * @return the Multithreaded setting.
-     */
-    boolean getMultithreaded();
-    
-    /** Set the ignoreCache parameter for queries.
-     *
-     * <P>IgnoreCache set to <code>true</code> specifies that for all 
-     * <code>Query</code> instances created by this 
-     * <code>PersistenceManager</code>, the default is the cache should be 
-     * ignored for queries.
-     * @param flag the ignoreCache setting.
-     */
-    void setIgnoreCache(boolean flag);
-  
-    /** Get the ignoreCache setting for queries.
-     *
-     * <P>IgnoreCache set to <code>true</code> specifies that for all 
-     * <code>Query</code> instances created by this 
-     * <code>PersistenceManager</code>, the default is the cache should be 
-     * ignored for queries.
-     * @return the ignoreCache setting.
-     */
-   boolean getIgnoreCache();
-   
-   /** Gets the detachAllOnCommit setting.
-    * @see #setDetachAllOnCommit(boolean)
-    * @since 2.0
-    * @return the detachAllOnCommit setting.
-    */
-   boolean getDetachAllOnCommit();
-
-   /** Sets the detachAllOnCommit setting.
-    *
-    * <P>DetachAllOnCommit set to <code>false</code> specifies that the
-    * state of persistent instances in the cache after commit is defined
-    * by the <code>retainValues</code> flag. With this flag set to true,
-    * during beforeCompletion all cached instances are prepared for
-    * detachment according to the fetch plan in effect at commit. Loading
-    * fields and unloading fields required by the fetch plan is done after
-    * calling the user's <code>beforeCompletion</code> callback. During
-    * <code>afterCompletion</code>, before calling the user's
-    * <code>afterCompletion</code> callback, all detachable persistent
-    * instances in the cache transition to detached; non-detachable
-    * persistent instances transition to transient; and detachable
-    * instances can be serialized as detached instances. Transient
-    * transactional instances are unaffected by this flag.
-    *
-    * @see #getDetachAllOnCommit()
-    * @since 2.0
-    */
-   void setDetachAllOnCommit(boolean flag);
-   
-    /**
-     * Detach the specified instance from the <code>PersistenceManager</code>.
-     * The flags for detachment (DETACH_LOAD_FIELDS and DETACH_UNLOAD_FIELDS)
-     * and the active fetch groups determine the scope of fetching for the
-     * graph of instances reachable from the pc parameter. The state of fields
-     * in the affected instances is as specified by the FetchPlan.
-     * @param pc the instance to detach
-     * @return the detached instance
-     * @see #detachCopyAll(Object[])
-     * @since 2.0
-     */
-    Object detachCopy (Object pc);
-
-    /**
-     * Detach the specified instances from the <code>PersistenceManager</code>.
-     * The flags for detachment (DETACH_LOAD_FIELDS and DETACH_UNLOAD_FIELDS)
-     * and the active fetch groups determine the scope of fetching for the
-     * graph of instances reachable from the pcs parameter. The state of fields
-     * in the affected instances is as specified by the FetchPlan.
-     * @param pcs the instances to detach
-     * @return the detached instances
-     * @see #detachCopyAll(Object[])
-     * @since 2.0
-     */
-    Collection detachCopyAll (Collection pcs);
-
-    /**
-     * Detach the specified instances from the <code>PersistenceManager</code>.
-     * The flags for detachment (DETACH_LOAD_FIELDS and DETACH_UNLOAD_FIELDS)
-     * and the active fetch groups determine the scope of fetching for the
-     * graph of instances reachable from the pcs parameter. The state of fields
-     * in the affected instances is as specified by the FetchPlan.
-     * The objects returned can be manipulated and re-attached with 
-     * {@link #makePersistentAll(Object[])}. 
-     * The detached instances will be
-     * unmanaged copies of the specified parameters, and are suitable
-     * for serialization and manipulation outside of a JDO
-     * environment. When detaching instances, only fields in the
-     * current {@link FetchPlan} will be traversed. Thus, to detach a
-     * graph of objects, relations to other persistent instances must
-     * either be in the <code>default-fetch-group</code>, or in the
-     * current custom {@link FetchPlan}.
-     * @param pcs the instances to detach
-     * @return the detached instances
-     * @throws JDOUserException if any of the instances to be detached do not
-     * implement the javax.jdo.spi.Detachable interface.
-     * @see #makePersistentAll(Object[])
-     * @see #getFetchPlan
-     * @since 2.0
-     */
-    Object[] detachCopyAll (Object [] pcs);
-
-    /**
-     * Put the specified key-value pair into the map of user objects.
-     * @since 2.0
-     */
-    Object putUserObject (Object key, Object val);
-
-    /**
-     * Get the value for the specified key from the map of user objects.
-     * @param key the key of the object to be returned
-     * @return the object 
-     * @since 2.0
-     */
-    Object getUserObject (Object key);
-
-    /**
-     * Remove the specified key and its value from the map of user objects.
-     * @param key the key of the object to be removed
-     * @since 2.0
-     */
-    Object removeUserObject (Object key);
-
-    /**
-     * Flushes all dirty, new, and deleted instances to the data
-     * store. It has no effect if a transaction is not active.
-     * <p>If a datastore transaction is active, this method
-     * synchronizes the cache with the datastore and reports any
-     * exceptions.</p>
-     * <p>If an optimistic transaction is active, this method obtains
-     * a datastore connection, synchronizes the cache with the
-     * datastore using this connection and reports any
-     * exceptions. The connection obtained by this method is held
-     * until the end of the transaction.</p>
-     * <p>If exceptions occur during flush, the implementation will
-     * set the current transaction's <code>RollbackOnly</code> flag
-     * (see {@link Transaction#setRollbackOnly}).</p>
-     * @since	2.0
-     */
-    void flush ();
-
-    /**
-     * Validates the <code>PersistenceManager</code> cache with the
-     * datastore. This method has no effect if a transaction is not
-     * active.
-     * <p>If a datastore transaction is active, this method verifies
-     * the consistency of instances in the cache against the
-     * datastore. An implementation might flush instances as if
-     * {@link #flush} were called, but it is not required to do
-     * so.</p>
-     * <p>If an optimistic transaction is active, this method obtains
-     * a datastore connection and verifies the consistency of the
-     * instances in the cache against the datastore. If any
-     * inconsistencies are detected, a {@link
-     * JDOOptimisticVerificationException} is thrown. This exception
-     * contains a nested {@link JDOOptimisticVerificationException}
-     * for each object that failed the consistency check. No
-     * datastore resources acquired during the execution of this
-     * method are held beyond the scope of this method.</p>
-     * @since 2.0
-     */
-    void checkConsistency ();
-
-    /**
-     * Returns the <code>FetchPlan</code> used by this
-     * <code>PersistenceManager</code>.
-     * @return the FetchPlan
-     * @since 2.0
-     */
-    FetchPlan getFetchPlan ();
-
-    /**
-     * Creates an instance of a persistence-capable interface, 
-     * or of a concrete or abstract class. 
-     * The returned instance is transient.
-     * @param pcClass Must be a persistence-capable interface, 
-     * or a concrete or abstract class that is declared in the metadata.
-     * @return the created instance
-     * @since 2.0
-     */
-    Object newInstance (Class pcClass);
-
-    /**
-     * Returns the sequence identified by <code>name</code>.
-     * @param name the name of the Sequence
-     * @return the Sequence
-     * @since 2.0
-     */
-    Sequence getSequence (String name);
-
-    /**
-     * If this method is called while a datastore transaction is
-     * active, the object returned will be enlisted in the current
-     * transaction. If called in an optimistic transaction or outside
-     * an active transaction, the object returned will not be
-     * enlisted in any transaction.
-     * @return the JDOConnection instance
-     * @since 2.0
-     */
-    JDOConnection getDataStoreConnection ();
-
-    /**
-     * Adds the listener instance to the list of lifecycle event
-     * listeners. The <code>classes</code> parameter identifies all
-     * of the classes of interest. If the <code>classes</code>
-     * parameter is specified as <code>null</code>, events for all
-     * persistent classes and interfaces will be sent to
-     * <code>listenerInstance</code>.
-     * <p>The listenerInstance will be called for each event for which it
-     * implements the corresponding listenerInstance interface.</p>
-     * @param listener the lifecycle listener
-     * @param classes the classes of interest to the listener
-     * @since 2.0
-     */
-    void addInstanceLifecycleListener (InstanceLifecycleListener listener,
-        Class[] classes);
-
-    /**
-     * Removes the listener instance from the list of lifecycle event listeners.
-     * @param listener the listener instance to be removed
-     * @since 2.0
-     */
-    void removeInstanceLifecycleListener (InstanceLifecycleListener listener);
-}
diff --git a/api20/src/java/javax/jdo/PersistenceManagerFactory.java b/api20/src/java/javax/jdo/PersistenceManagerFactory.java
deleted file mode 100644
index f921fde..0000000
--- a/api20/src/java/javax/jdo/PersistenceManagerFactory.java
+++ /dev/null
@@ -1,432 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- * 
- * Licensed 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 
- * 
- *     http://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 
- * limitations under the License.
- */
-
-/*
- * PersistenceManagerFactory.java
- *
- */
- 
-package javax.jdo;
-
-import java.util.Properties;
-import java.util.Collection;
-
-import javax.jdo.datastore.DataStoreCache;
-
-import javax.jdo.listener.InstanceLifecycleListener;
-
-/** The <code>PersistenceManagerFactory</code> is the interface to use to obtain
- * <code>PersistenceManager</code> instances.  
- * All <code>PersistenceManager</code> instances obtained from the same 
- * <code>PersistenceManagerFactory</code> will have the same default properties.
- *
- * <P><code>PersistenceManagerFactory</code> instances may be configured and
- * serialized for later use.  They may be stored via JNDI and looked up
- * and used later.  Any properties configured will be saved and restored.
- *
- * <P>Once the first <code>PersistenceManager</code> is obtained from the 
- * <code>PersistenceManagerFactory</code>, the factory can no longer be 
- * configured.
- * <P>If the <code>ConnectionFactory</code> property is set 
- * (non-<code>null</code>) then all other Connection properties including 
- * <code>ConnectionFactoryName</code> are ignored;
- * otherwise, if <code>ConnectionFactoryName</code> is set 
- * (non-<code>null</code>) then all other Connection properties are ignored.
- * Similarly, if the <code>ConnectionFactory2</code> property is set 
- * (non-<code>null</code>) then <code>ConnectionFactory2Name</code> is ignored.
- * <P>Operational state (<code>PersistenceManager</code> pooling, connection 
- * pooling, operational parameters) must not be serialized.
- *
- * @version 2.0
- */
-
-public interface PersistenceManagerFactory extends java.io.Serializable {
-    
-    /** Close this PersistenceManagerFactory. Check for 
-     * JDOPermission("closePersistenceManagerFactory") and if not authorized, 
-     * throw SecurityException. 
-     * <P>If the authorization check succeeds, check to see that all 
-     * PersistenceManager instances obtained from this PersistenceManagerFactory 
-     * have no active transactions. If any PersistenceManager instances have 
-     * an active transaction, throw a JDOUserException, with one nested 
-     * JDOUserException for each PersistenceManager with an active Transaction. 
-     * <P>If there are no active transactions, then close all PersistenceManager 
-     * instances obtained from this PersistenceManagerFactory, mark this 
-     * PersistenceManagerFactory as closed, disallow getPersistenceManager 
-     * methods, and allow all other get methods. If a set method or 
-     * getPersistenceManager method is called after close, then 
-     * JDOUserException is thrown.
-     * @since 1.0.1
-     */
-    void close();
-    
-    /** 
-     * A <code>PersistenceManagerFactory</code> instance can be used 
-     * until it is closed.
-     * @return <code>true</code> if this <code>PersistenceManagerFactory</code>
-     * has been closed.
-     * @see #close()
-     * @since 2.0
-     */
-    boolean isClosed();
-    
-    /** Get an instance of <code>PersistenceManager</code> from this factory.  
-     * The instance has default values for options.
-     *
-     * <P>After the first use of <code>getPersistenceManager</code>, no "set" 
-     * methods will succeed.
-     *
-     * @return a <code>PersistenceManager</code> instance with default options.
-     */
-    PersistenceManager getPersistenceManager();
-
-    /** Get an instance of <code>PersistenceManager</code> from this factory.  
-     * The instance has default values for options.  
-     * The parameters <code>userid</code> and <code>password</code> are used 
-     * when obtaining datastore connections from the connection pool.
-     *
-     * <P>After the first use of <code>getPersistenceManager</code>, no "set" 
-     * methods will succeed.
-     *
-     * @return a <code>PersistenceManager</code> instance with default options.
-     * @param userid the userid for the connection
-     * @param password the password for the connection
-     */
-    PersistenceManager getPersistenceManager(String userid, String password);
-
-    /** Set the user name for the data store connection.
-     * @param userName the user name for the data store connection.
-     */
-    void setConnectionUserName(String userName);
-
-    /** Get the user name for the data store connection.
-     * @return the user name for the data store connection.
-     */
-    String getConnectionUserName ();
-  
-    /** Set the password for the data store connection.
-     * @param password the password for the data store connection.
-     */
-    void setConnectionPassword (String password);
-  
-    /** Set the URL for the data store connection.
-     * @param url the URL for the data store connection.
-     */
-    void setConnectionURL (String url);
-
-    /** Get the URL for the data store connection.
-     * @return the URL for the data store connection.
-     */
-    String getConnectionURL ();
-  
-    /** Set the driver name for the data store connection.
-     * @param driverName the driver name for the data store connection.
-     */
-    void setConnectionDriverName  (String driverName);
-
-    /** Get the driver name for the data store connection.
-     * @return the driver name for the data store connection.
-     */
-    String getConnectionDriverName ();
-    
-    /** Set the name for the data store connection factory.
-     * @param connectionFactoryName the name of the data store connection 
-     * factory.
-     */
-    void setConnectionFactoryName (String connectionFactoryName);
-
-    /** Get the name for the data store connection factory.
-     * @return the name of the data store connection factory.
-     */
-    String getConnectionFactoryName ();
-  
-    /** Set the data store connection factory.  JDO implementations
-     * will support specific connection factories.  The connection
-     * factory interfaces are not part of the JDO specification.
-     * @param connectionFactory the data store connection factory.
-     */
-    void setConnectionFactory (Object connectionFactory);
-  
-    /** Get the data store connection factory.
-     * @return the data store connection factory.
-     */
-    Object getConnectionFactory ();
-  
-    /** Set the name for the second data store connection factory.  This is
-     * needed for managed environments to get nontransactional connections for
-     * optimistic transactions.
-     * @param connectionFactoryName the name of the data store connection 
-     * factory.
-     */
-    void setConnectionFactory2Name (String connectionFactoryName);
-
-    /** Get the name for the second data store connection factory.  This is
-     * needed for managed environments to get nontransactional connections for
-     * optimistic transactions.
-     * @return the name of the data store connection factory.
-     */
-    String getConnectionFactory2Name ();
-  
-    /** Set the second data store connection factory.  This is
-     * needed for managed environments to get nontransactional connections for
-     * optimistic transactions.  JDO implementations
-     * will support specific connection factories.  The connection
-     * factory interfaces are not part of the JDO specification.
-     * @param connectionFactory the data store connection factory.
-     */
-    void setConnectionFactory2 (Object connectionFactory);
-  
-    /** Get the second data store connection factory.  This is
-     * needed for managed environments to get nontransactional connections for
-     * optimistic transactions.
-     * @return the data store connection factory.
-     */
-    Object getConnectionFactory2 ();
-  
-    /** Set the default Multithreaded setting for all 
-     * <code>PersistenceManager</code> instances obtained from this factory.
-     *
-     * @param flag the default Multithreaded setting.
-     */
-    void setMultithreaded (boolean flag);
-  
-    /** Get the default Multithreaded setting for all 
-     * <code>PersistenceManager</code> instances obtained from this factory.  
-     *
-     * @return the default Multithreaded setting.
-     */
-    boolean getMultithreaded();
-    
-    /** Set the Mapping setting for this factory. This is used to find the 
-     * object-datastore mapping file(s).
-     *
-     * @param mapping the Mapping setting.
-     */
-    void setMapping (String mapping);
-  
-    /** Get the Mapping setting for this factory.  This is used to find the 
-     * object-datastore mapping file(s).
-     *
-     * @return the Mapping setting.
-     */
-    String getMapping ();
-    
-    /** Set the default Optimistic setting for all 
-     * <code>PersistenceManager</code> instances obtained from this factory.  
-     *
-     * @param flag the default Optimistic setting.
-     */
-    void setOptimistic (boolean flag);
-  
-    /** Get the default Optimistic setting for all 
-     * <code>PersistenceManager</code> instances obtained from this factory.  
-     *
-     * @return the default Optimistic setting.
-     */
-    boolean getOptimistic();
-    
-    /** Set the default RetainValues setting for all 
-     * <code>PersistenceManager</code> instances obtained from this factory.
-     *
-     * @param flag the default RetainValues setting.
-     */
-    void setRetainValues (boolean flag);
-  
-   /** Get the default RetainValues setting for all 
-    * <code>PersistenceManager</code> instances obtained from this factory.
-     *
-     * @return the default RetainValues setting.
-     */
-    boolean getRetainValues ();
-    
-    /** Set the default value for the RestoreValues property.  
-     * If <code>true</code>, at rollback, fields of newly persistent instances 
-     * are restored to 
-     * their values as of the beginning of the transaction, and the instances
-     * revert to transient.  Additionally, fields of modified
-     * instances of primitive types and immutable reference types
-     * are restored to their values as of the beginning of the 
-     * transaction.
-     * <P>If <code>false</code>, at rollback, the values of fields of 
-     * newly persistent instances are unchanged and the instances revert to
-     * transient.  Additionally, dirty instances transition to hollow.
-     * If an implementation does not support this option, a 
-     * <code>JDOUnsupportedOptionException</code> is thrown.
-     * @param restoreValues the value of the restoreValues property
-     */
-    void setRestoreValues(boolean restoreValues);
-    
-    /** Get the default value for the RestoreValues property.  
-     * @return the value of the restoreValues property
-     */
-    boolean getRestoreValues();
-    
-    /** Set the default NontransactionalRead setting for all 
-     * <code>PersistenceManager</code> instances obtained from this factory.  
-     *
-     * @param flag the default NontransactionalRead setting.
-     */
-    void setNontransactionalRead (boolean flag);
-  
-    /** Get the default NontransactionalRead setting for all 
-     * <code>PersistenceManager</code> instances obtained from this factory.
-     *
-     * @return the default NontransactionalRead setting.
-     */
-    boolean getNontransactionalRead ();
-    
-    /** Set the default NontransactionalWrite setting for all 
-     * <code>PersistenceManager</code> instances obtained from this factory.  
-     *
-     * @param flag the default NontransactionalWrite setting.
-     */
-    void setNontransactionalWrite (boolean flag);
-  
-    /** Get the default NontransactionalWrite setting for all 
-     * <code>PersistenceManager</code> instances obtained from this factory.
-     *
-     * @return the default NontransactionalWrite setting.
-     */
-    boolean getNontransactionalWrite ();
-    
-    /** Set the default IgnoreCache setting for all 
-     * <code>PersistenceManager</code> instances obtained from this factory.
-     *
-     * @param flag the default IgnoreCache setting.
-     */
-    void setIgnoreCache (boolean flag);
-  
-    /** Get the default IgnoreCache setting for all 
-     * <code>PersistenceManager</code> instances obtained from this factory.
-     *
-     * @return the default IngoreCache setting.
-     */
-    boolean getIgnoreCache ();
-  
-    /** Gets the detachAllOnCommit setting.
-     * @see #setDetachAllOnCommit(boolean)
-     * @since 2.0
-     * @return the default detachAllOnCommit setting.
-     */
-    boolean getDetachAllOnCommit();
-    
-    /** Sets the default detachAllOnCommit setting for all
-     * <code>PersistenceManager</code> instances obtained from this
-     * factory.
-     * @see #getDetachAllOnCommit()
-     * @since 2.0
-     */
-    void setDetachAllOnCommit(boolean flag);
-    
-    /** Return non-configurable properties of this 
-     * <code>PersistenceManagerFactory</code>.
-     * Properties with keys <code>VendorName</code> and 
-     * <code>VersionNumber</code> are required.  Other keys are optional.
-     * @return the non-configurable properties of this
-     * <code>PersistenceManagerFactory</code>.
-     */
-    Properties getProperties();
-    
-    /** The application can determine from the results of this
-     * method which optional features, and which query languages 
-     * are supported by the JDO implementation.
-     * <P>Each supported JDO optional feature is represented by a
-     * <code>String</code> with one of the following values:
-     *
-     * <P><code>javax.jdo.option.TransientTransactional
-     * <BR>javax.jdo.option.NontransactionalRead
-     * <BR>javax.jdo.option.NontransactionalWrite
-     * <BR>javax.jdo.option.RetainValues
-     * <BR>javax.jdo.option.Optimistic
-     * <BR>javax.jdo.option.ApplicationIdentity
-     * <BR>javax.jdo.option.DatastoreIdentity
-     * <BR>javax.jdo.option.NonDatastoreIdentity
-     * <BR>javax.jdo.option.ArrayList
-     * <BR>javax.jdo.option.HashMap
-     * <BR>javax.jdo.option.Hashtable
-     * <BR>javax.jdo.option.LinkedList
-     * <BR>javax.jdo.option.TreeMap
-     * <BR>javax.jdo.option.TreeSet
-     * <BR>javax.jdo.option.Vector
-     * <BR>javax.jdo.option.Map
-     * <BR>javax.jdo.option.List
-     * <BR>javax.jdo.option.Array  
-     * <BR>javax.jdo.option.NullCollection
-     * <BR>javax.jdo.option.ChangeApplicationIdentity
-     * <BR>javax.jdo.option.BinaryCompatibility
-     * <BR>javax.jdo.option.GetDataStoreConnection
-     * <BR>javax.jdo.option.UnconstrainedQueryVariables
-     * <BR>javax.jdo.query.SQL
-     * <BR>javax.jdo.query.JDOQL
-     * </code>
-     *
-     *<P>The standard JDO query language is represented by a 
-     * <code>String</code>:
-     *<P><code>javax.jdo.query.JDOQL</code>
-     * @return the <code>Collection</code> of <code>String</code>s representing 
-     * the supported options.
-     */    
-    Collection supportedOptions();
-   
-    /**
-     * Return the {@link DataStoreCache} that this factory uses for
-     * controlling a second-level cache. If this factory does not use
-     * a second-level cache, the returned instance does nothing. This
-     * method never returns <code>null</code>.
-     * @since 2.0
-     */
-    DataStoreCache getDataStoreCache ();
-
-    /**
-     * Add the parameter listener to the list of
-     * instance lifecycle event listeners set as the initial listeners
-     * for each PersistenceManager created by this PersistenceManagerFactory. 
-     * The <code>addInstanceLifecycleListener</code> and 
-     * <code>removeInstanceLifecycleListener</code>
-     * methods are considered to be configuration methods and
-     * can only be called when the PersistenceManagerFactory
-     * is configurable (before the first time {@link #getPersistenceManager}
-     * is called).
-     * <p>The <code>classes</code> parameter identifies all
-     * of the classes of interest. If the <code>classes</code>
-     * parameter is specified as <code>null</code>, events for all
-     * persistent classes and interfaces will be sent to the listener.</p>
-     * <p>The listener will be called for each event for which it
-     * implements the corresponding {@link InstanceLifecycleListener}
-     * interface.</p>
-     * @param listener the lifecycle listener
-     * @param classes the classes of interest to the listener
-     * @since 2.0
-     */
-    void addInstanceLifecycleListener (InstanceLifecycleListener listener,
-        Class[] classes);
-
-    /**
-     * Remove the parameter listener instance from the list of
-     * instance lifecycle event listeners set as the initial listeners
-     * for each PersistenceManager created by this PersistenceManagerFactory. 
-     * The <code>addInstanceLifecycleListener</code> and 
-     * <code>removeInstanceLifecycleListener</code>
-     * methods are considered to be configuration methods and
-     * can only be called when the PersistenceManagerFactory
-     * is configurable (before the first time {@link #getPersistenceManager}
-     * is called).
-     * @param listener the listener instance to be removed
-     * @since 2.0
-     */
-    void removeInstanceLifecycleListener (InstanceLifecycleListener listener);
-
-}
diff --git a/api20/src/java/javax/jdo/Query.java b/api20/src/java/javax/jdo/Query.java
deleted file mode 100644
index e206f3e..0000000
--- a/api20/src/java/javax/jdo/Query.java
+++ /dev/null
@@ -1,586 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- * 
- * Licensed 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 
- * 
- *     http://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 
- * limitations under the License.
- */
-
-/*
- * Query.java
- *
- */
-
-package javax.jdo;
-import java.io.Serializable;
-import java.util.Collection;
-import java.util.Map;
-
-/** The <code>Query</code> interface allows applications to obtain persistent
- * instances, values, and aggregate data
- * from the data store.
- *
- * The {@link PersistenceManager} is the factory for <code>Query</code> 
- * instances.  There may be many <code>Query</code> instances associated with a 
- * <code>PersistenceManager</code>.  Multiple queries might be executed 
- * simultaneously by different threads, but the implementation might choose to 
- * execute them serially.  In either case, the implementation must be thread 
- * safe.
- *
- * <P>There are three required elements in a <code>Query</code>: the class of 
- * the results, the candidate collection of instances, and the filter.
- *
- * <P>There are optional elements: parameter declarations, variable
- * declarations, import statements, ordering and grouping specifications,
- * result and result class, the range of results,
- * and flags indicating whether the query result
- * is unique and whether the query can be modified.
- * <P>The query namespace is modeled after methods in Java:
- * <ul>
- * <li><code>setClass</code> corresponds to the class definition
- * <li><code>declareParameters</code> corresponds to formal parameters of a 
- * method
- * <li><code>declareVariables</code> corresponds to local variables of a method
- * <li><code>setFilter</code> and <code>setOrdering</code> correspond to the 
- * method body
- * </ul>
- * <P>There are two namespaces in queries. Type names have their own
- * namespace that is separate from the namespace for fields, variables
- * and parameters.
- * <P>The method <code>setClass</code> introduces the name of the candidate 
- * class in the type namespace. The method <code>declareImports</code> 
- * introduces the names of the imported class or interface types in the type 
- * namespace. Imported type names must be unique. When used (e.g. in a parameter
- * declaration, cast expression, etc.) a type name must be the name of the 
- * candidate class, the name of a class or interface imported by method
- * <code>declareImports</code>, or denote a class or interface from the same
- * package as the candidate class.
- * <P>The method <code>setClass</code> introduces the names of the candidate 
- * class fields.
- * <P>The method <code>declareParameters</code> introduces the names of the
- * parameters. A name introduced by <code>declareParameters</code> hides the 
- * name of a candidate class field of the same name. Parameter names must be 
- * unique.
- * <P>The method <code>declareVariables</code> introduces the names of the 
- * variables.  A name introduced by <code>declareVariables</code> hides the name
- * of a candidate class field if equal. Variable names must be unique and must 
- * not conflict with parameter names.
- * <P>The result of the query by default is a list of result class instances,
- * but might be specified via <code>setResult</code>. The class of the result
- * by default is the candidate class, but might be specified via 
- * <code>setResultClass</code>.
- * <P>A hidden field may be accessed using the 'this' qualifier:
- * <code>this.fieldName</code>.
- * <P>The <code>Query</code> interface provides methods which execute the query
- * based on the parameters given. They return a single instance or a 
- * <code>List</code> of result class instances which the
- * user can iterate to get results. The signature
- * of the <code>execute</code> methods specifies that they return an 
- * <code>Object</code> which must be cast to the appropriate result by the user.
- * <P>Any parameters passed to the <code>execute</code> methods are used only 
- * for this execution, and are not remembered for future execution.
- * @version 2.0
- */
-
-public interface Query extends Serializable {
-    
-    /**
-     * The string constant used as the first argument to 
-     * {@link PersistenceManager#newQuery(String,Object)} to identify that the 
-     * created query should obey the JDOQL syntax and semantic rules.
-     * <p>This is the default query language used when creating a query with any
-     * of the other {@link PersistenceManager#newQuery} methods, except 
-     * {@link PersistenceManager#newQuery(Object)}, which uses the query 
-     * language of the compiled query template object passed to that method.</p>
-     * @since 2.0
-     */
-    String JDOQL = "javax.jdo.query.JDOQL";
-
-    /**
-     * The string constant used as the first argument to {@link
-     * PersistenceManager#newQuery(String,Object)} to identify that
-     * the created query should use SQL semantics. This is only
-     * meaningful for relational JDO implementations.
-     * <p>If this is used, the <code>Object</code> argument to the
-     * {@link PersistenceManager#newQuery(String,Object)} method
-     * should be a <code>String</code> containing a SQL
-     * <code>SELECT</code> statement.</p>
-     * @since 2.0
-     */
-    String SQL = "javax.jdo.query.SQL";
-
-    /** Set the class of the candidate instances of the query.
-     * <P>The class specifies the class
-     * of the candidates of the query.  Elements of the candidate collection
-     * that are of the specified class are filtered before being
-     * put into the result <code>Collection</code>.
-     *
-     * @param cls the <code>Class</code> of the candidate instances.
-     */
-    void setClass(Class cls);
-    
-    /** Set the candidate <code>Extent</code> to query.
-     * @param pcs the candidate <code>Extent</code>.
-     */
-    void setCandidates(Extent pcs);
-    
-    /** Set the candidate <code>Collection</code> to query.
-     * @param pcs the candidate <code>Collection</code>.
-     */
-    void setCandidates(Collection pcs);
-    
-    /** Set the filter for the query.
-     *
-     * <P>The filter specification is a <code>String</code> containing a Boolean
-     * expression that is to be evaluated for each of the instances
-     * in the candidate collection. If the filter is not specified,
-     * then it defaults to "true", which has the effect of filtering
-     * the input <code>Collection</code> only for class type.
-     * <P>An element of the candidate collection is returned in the result if:
-     * <ul><li>it is assignment compatible to the candidate <code>Class</code> 
-     * of the <code>Query</code>; and
-     * <li>for all variables there exists a value for which the filter
-     * expression evaluates to <code>true</code>.
-     * </ul>
-     * <P>The user may denote uniqueness in the filter expression by
-     * explicitly declaring an expression (for example, <code>e1 != e2</code>).
-     * <P>Rules for constructing valid expressions follow the Java
-     * language, except for these differences:
-     * <ul>
-     * <li>Equality and ordering comparisons between primitives and instances
-     * of wrapper classes are valid.
-     * <li>Equality and ordering comparisons of <code>Date</code> fields and 
-     * <code>Date</code> parameters are valid.
-     * <li>White space (non-printing characters space, tab, carriage
-     * return, and line feed) is a separator and is otherwise ignored.
-     * <li>The assignment operators <code>=</code>, <code>+=</code>, etc. and 
-     * pre- and post-increment and -decrement are not supported. Therefore, 
-     * there are no side effects from evaluation of any expressions.
-     * <li>Methods, including object construction, are not supported, except
-     * for <code>Collection.contains(Object o)</code>, 
-     * <code>Collection.isEmpty()</code>, 
-     * <code>String.startsWith(String s)</code>, and 
-     * <code>String.endsWith(String e)</code>.  Implementations might choose to
-     * support non-mutating method calls as non-standard extensions.
-     * <li>Navigation through a <code>null</code>-valued field, which would 
-     * throw <code>NullPointerException</code>, is treated as if the filter 
-     * expression returned <code>false</code> for the evaluation of the current
-     * set of variable values. Other values for variables might still qualify 
-     * the candidate instance for inclusion in the result set.
-     * <li>Navigation through multi-valued fields (<code>Collection</code> 
-     * types) is specified using a variable declaration and the
-     * <code>Collection.contains(Object o)</code> method.
-     * </ul>
-     * <P>Identifiers in the expression are considered to be in the name
-     * space of the specified class, with the addition of declared imports,
-     * parameters and variables. As in the Java language, <code>this</code> is a 
-     * reserved word which means the element of the collection being evaluated.
-     * <P>Navigation through single-valued fields is specified by the Java
-     * language syntax of <code>field_name.field_name....field_name</code>.
-     * <P>A JDO implementation is allowed to reorder the filter expression
-     * for optimization purposes.
-     * @param filter the query filter.
-     */
-    void setFilter(String filter);
-    
-    /** Set the import statements to be used to identify the fully qualified 
-     * name of variables or parameters.  Parameters and unbound variables might 
-     * come from a different class from the candidate class, and the names 
-     * need to be declared in an import statement to eliminate ambiguity. 
-     * Import statements are specified as a <code>String</code> with 
-     * semicolon-separated statements. 
-     * <P>The <code>String</code> parameter to this method follows the syntax of 
-     * the import statement of the Java language.
-     * @param imports import statements separated by semicolons.
-     */
-    void declareImports(String imports);
-    
-    /** Declare the list of parameters query execution.
-     *
-     * The parameter declaration is a <code>String</code> containing one or more 
-     * query parameter declarations separated with commas. Each parameter named 
-     * in the parameter declaration must be bound to a value when 
-     * the query is executed.
-     * <P>The <code>String</code> parameter to this method follows the syntax 
-     * for formal parameters in the Java language. 
-     * @param parameters the list of parameters separated by commas.
-     */
-    void declareParameters(String parameters);
-    
-    /** Declare the unbound variables to be used in the query. Variables 
-     * might be used in the filter, and these variables must be declared 
-     * with their type. The unbound variable declaration is a 
-     * <code>String</code> containing one or more unbound variable declarations
-     * separated with semicolons. It follows the syntax for local variables in 
-     * the Java language.
-     * @param variables the variables separated by semicolons.
-     */
-    void declareVariables(String variables);
-    
-    /** Set the ordering specification for the result <code>Collection</code>.  
-     * The ordering specification is a <code>String</code> containing one or
-     * more ordering declarations separated by commas.
-     *
-     * <P>Each ordering declaration is the name of the field on which
-     * to order the results followed by one of the following words:
-     * "<code>ascending</code>" or "<code>descending</code>".
-     *
-     *<P>The field must be declared in the candidate class or must be
-     * a navigation expression starting with a field in the candidate class.
-     *
-     *<P>Valid field types are primitive types except <code>boolean</code>; 
-     * wrapper types except <code>Boolean</code>; <code>BigDecimal</code>; 
-     * <code>BigInteger</code>; <code>String</code>; and <code>Date</code>.
-     * @param ordering the ordering specification.
-     */
-    void setOrdering(String ordering);
-    
-    /** Set the ignoreCache option.  The default value for this option was
-     * set by the <code>PersistenceManagerFactory</code> or the
-     * <code>PersistenceManager</code> used to create this <code>Query</code>.
-     *
-     * The ignoreCache option setting specifies whether the query should execute
-     * entirely in the back end, instead of in the cache.  If this flag is set
-     * to <code>true</code>, an implementation might be able to optimize the 
-     * query execution by ignoring changed values in the cache.  For optimistic
-     * transactions, this can dramatically improve query response times.
-     * @param ignoreCache the setting of the ignoreCache option.
-     */
-    void setIgnoreCache(boolean ignoreCache);   
-    
-    /** Get the ignoreCache option setting.
-     * @return the ignoreCache option setting.
-     * @see #setIgnoreCache
-     */
-    boolean getIgnoreCache();
-    
-    /** Verify the elements of the query and provide a hint to the query to
-     * prepare and optimize an execution plan.
-     */
-    void compile();
-    
-    /** Execute the query and return the filtered Collection.
-     * @return the filtered <code>Collection</code>.
-     * @see #executeWithArray(Object[] parameters)
-     */
-    Object execute();
-    
-    /** Execute the query and return the filtered <code>Collection</code>.
-     * @return the filtered <code>Collection</code>.
-     * @see #executeWithArray(Object[] parameters)
-     * @param p1 the value of the first parameter declared.
-     */
-    Object execute(Object p1);
-    
-    /** Execute the query and return the filtered <code>Collection</code>.
-     * @return the filtered <code>Collection</code>.
-     * @see #executeWithArray(Object[] parameters)
-     * @param p1 the value of the first parameter declared.
-     * @param p2 the value of the second parameter declared.
-     */
-    Object execute(Object p1, Object p2);
-    
-    /** Execute the query and return the filtered <code>Collection</code>.
-     * @return the filtered <code>Collection</code>.
-     * @see #executeWithArray(Object[] parameters)
-     * @param p1 the value of the first parameter declared.
-     * @param p2 the value of the second parameter declared.
-     * @param p3 the value of the third parameter declared.
-     */
-    Object execute(Object p1, Object p2, Object p3);
-    
-    /** Execute the query and return the filtered <code>Collection</code>.  The 
-     * query is executed with the parameters set by the <code>Map</code> values.  
-     * Each <code>Map</code> entry consists of a key which is the name of the 
-     * parameter in the <code>declareParameters</code> method, and a value which 
-     * is the value used in the <code>execute</code> method.  The keys in the 
-     * <code>Map</code> and the declared parameters must exactly match or a 
-     * <code>JDOUserException</code> is thrown.
-     * @return the filtered <code>Collection</code>.
-     * @see #executeWithArray(Object[] parameters)
-     * @param parameters the <code>Map</code> containing all of the parameters.
-     */
-    Object executeWithMap (Map parameters);
-    
-    /** Execute the query and return the filtered <code>Collection</code>.
-     *
-     * <P>The execution of the query obtains the values of the parameters and
-     * matches them against the declared parameters in order.  The names
-     * of the declared parameters are ignored.  The type of
-     * the declared parameters must match the type of the passed parameters,
-     * except that the passed parameters might need to be unwrapped to get
-     * their primitive values.
-     *
-     * <P>The filter, import, declared parameters, declared variables, and
-     * ordering statements are verified for consistency.
-     *
-     * <P>Each element in the candidate <code>Collection</code> is examined to 
-     * see that it is assignment compatible to the <code>Class</code> of the 
-     * query.  It is then evaluated by the Boolean expression of the filter.  
-     * The element passes the filter if there exist unique values for all 
-     * variables for which the filter expression evaluates to <code>true</code>.
-     * @return the filtered <code>Collection</code>.
-     * @param parameters the <code>Object</code> array with all of the 
-     * parameters.
-     */
-    Object executeWithArray (Object[] parameters);
-    
-    /** Get the <code>PersistenceManager</code> associated with this 
-     * <code>Query</code>.
-     *
-     * <P>If this <code>Query</code> was restored from a serialized form, it has
-     * no <code>PersistenceManager</code>, and this method returns 
-     * <code>null</code>.
-     * @return the <code>PersistenceManager</code> associated with this 
-     * <code>Query</code>.
-     */
-    PersistenceManager getPersistenceManager();
-  
-    /** Close a query result and release any resources associated with it.  The
-     * parameter is the return from <code>execute(...)</code> and might have 
-     * iterators open on it.  Iterators associated with the query result are 
-     * invalidated: they return <code>false</code>  to <code>hasNext()</code> 
-     * and throw <code>NoSuchElementException</code> to <code>next()</code>.
-     * @param queryResult the result of <code>execute(...)</code> on this 
-     * <code>Query</code> instance.
-     */    
-    void close (Object queryResult);
-    
-    /** Close all query results associated with this <code>Query</code> 
-     * instance, and release all resources associated with them.  The query 
-     * results might have iterators open on them.  Iterators associated with the
-     * query results are invalidated: 
-     * they return <code>false</code> to <code>hasNext()</code> and throw 
-     * <code>NoSuchElementException</code> to <code>next()</code>.
-     */    
-    void closeAll ();
-
-    /**
-     * Set the grouping expressions, optionally including a "having"
-     * clause. When grouping is specified, each result expression
-     * must either be an expression contained in the grouping, or an
-     * aggregate evaluated once per group.
-     * 
-     * @param	group	a comma-delimited list of expressions, optionally
-     * followed by the "having" keyword and a boolean expression
-     * @since	2.0
-     */
-    void setGrouping (String group);
-
-    /**
-     * Specify that only the first result of the query should be
-     * returned, rather than a collection. The execute method will
-     * return null if the query result size is 0.
-     * @since 2.0
-     * @param unique if true, only one element is returned
-     */
-    void setUnique (boolean unique);
-
-    /**
-     * Specifies what type of data this query should return. If this
-     * is unset or set to <code>null</code>, this query returns
-     * instances of the query's candidate class. If set, this query
-     * will return expressions, including field values (projections) and 
-     * aggregate function results.
-     * @param data a comma-delimited list of expressions 
-     * (fields, functions on fields, or aggregate functions) 
-     * to return from this query
-     * @since 2.0
-     */
-    void setResult (String data);
-
-    /**
-     * Specify the type of object in which to return each element of
-     * the result of invoking {@link #execute} or one of its siblings. 
-     * If the result is not set or set to null, the result class defaults
-     * to the candidate class of the query. If the result consists of one
-     * expression, the result class defaults to the type of that expression.
-     * If the result consists of more than one expression, the result class
-     * defaults to Object[].
-     * The result class may be specified to be one of the java.lang classes 
-     * Character, Boolean, Byte, Short, Integer, Long, Float, Double, String, 
-     * or Object[]; or one of the java.math classes BigInteger or BigDecimal; 
-     * or the java.util class Date; or one of the java.sql classes Date, 
-     * Time, or Timestamp; or a user-defined class.
-     * <P>If there are multiple result expressions, the result class 
-     * must be able to hold all elements of the result specification 
-     * or a JDOUserException is thrown. 
-     *<P>If there is only one result expression, the result class must be 
-     * assignable from the type of the result expression or must be able 
-     * to hold all elements of the result specification. A single value 
-     * must be able to be coerced into the specified result class 
-     * (treating wrapper classes as equivalent to their unwrapped 
-     * primitive types) or by matching. If the result class does not satisfy 
-     * these conditions, a JDOUserException is thrown.
-     *<P>A constructor of a result class specified in the setResult method 
-     * will be used if the results specification matches the parameters 
-     * of the constructor by position and type. If more than one constructor 
-     * satisfies the requirements, the JDO implementation chooses one of them. 
-     * If no constructor satisfies the results requirements, or if the result 
-     * class is specified via the setResultClass method, the following 
-     * requirements apply:
-     * <ul>
-     * <li>A user-defined result class must have a no-args constructor and 
-     * one or more public <code>set</code> or <code>put</code> methods or 
-     * fields. 
-     * <li>Each result expression must match one of:
-     * <ul>
-     * <li>a public field that matches the name of the result expression 
-     * and is of the type (treating wrapper types equivalent to primitive 
-     * types) of the result expression; 
-     * <li>or if no public field matches the name and type, a public 
-     * <code>set</code method that returns void and matches the name of the 
-     * result expression and takes a single parameter which is the 
-     * exact type of the result expression;
-     * <li>or if neither of the above applies,a public method must be found 
-     * with the signature <code>void put(Object, Object)</code>.
-     * During processing of the results,  
-     * the first argument is the name of the result expression and 
-     * the second argument is the value from the query result.
-     * </ul>
-     * </ul>
-     * Portable result classes do not invoke any persistence behavior 
-     * during their no-args constructor or <code>set</code methods.
-     * @param cls the result class
-     * @since 2.0
-     */
-    void setResultClass (Class cls);
-
-    /**
-     * Set the range of results to return. The execution of the query is
-     * modified to return only a subset of results. If the filter would
-     * normally return 100 instances, and fromIncl is set to 50, and
-     * toExcl is set to 70, then the first 50 results that would have 
-     * been returned are skipped, the next 20 results are returned and the
-     * remaining 30 results are ignored. An implementation should execute
-     * the query such that the range algorithm is done at the data store.
-     * @param fromIncl 0-based inclusive start index
-     * @param toExcl 0-based exclusive end index, or 
-     *     {@link Long#MAX_VALUE} for no limit.
-     * @since 2.0
-     */
-    void setRange (long fromIncl, long toExcl);
-
-    /**
-     * Set the range of results to return. The parameter is a String
-     * containing a comma-separated fromIncl and toExcl. The fromIncl and
-     * toExcl can be either String representations of long values, or can
-     * be parameters identified with a leading ":". For example, 
-     * <code>setRange("50, 70");</code> or 
-     * <code>setRange(":from, :to");</code> or 
-     * <code>setRange("50, :to");</code>.
-     * The execution of the query is
-     * modified to return only a subset of results. If the filter would
-     * normally return 100 instances, and fromIncl is set to 50, and
-     * toExcl is set to 70, then the first 50 results that would have 
-     * been returned are skipped, the next 20 results are returned and the
-     * remaining 30 results are ignored. An implementation should execute
-     * the query such that the range algorithm is done at the data store.
-     * @param fromInclToExcl comma-separated fromIncl and toExcl values
-     * @see #setRange(long, long)
-     * @since 2.0
-     */
-    void setRange (String fromInclToExcl);
-
-    /**
-     * Add a vendor-specific extension to this query. The key and value
-     * are not standard.
-     * An implementation must ignore keys that are not recognized.
-     * @param key the key of the extension
-     * @param value the value of the extension
-     * @since 2.0
-     */
-    void addExtension (String key, Object value);
-
-    /**
-     * Set multiple extensions, or use null to clear all extensions.
-     * Map keys and values are not standard.
-     * An implementation must ignore entries that are not recognized.
-     * @param extensions the map of extensions
-     * @see #addExtension
-     * @since 2.0
-     */
-    void setExtensions (Map extensions);
-
-    /**
-     * Returns the <code>FetchPlan</code> used by this
-     * <code>Query</code>. Modifications of the returned fetch plan will not
-     * cause this query's owning <code>PersistenceManager</code>'s
-     * <code>FetchPlan</code> to be modified.
-     * @since 2.0
-     * @return the fetch plan used by this query
-     */
-    FetchPlan getFetchPlan ();
-
-    /**
-     * Deletes all the instances of the candidate class that pass the
-     * filter.
-     * @see #deletePersistentAll()
-     * @param parameters for the query
-     * @return the number of instances of the candidate class that were deleted
-     * @since 2.0
-     */
-    long deletePersistentAll (Object[] parameters);
-
-    /**
-     * Deletes all the instances of the candidate class that pass the
-     * filter.
-     * @see #deletePersistentAll()
-     * @param parameters for the query
-     * @return the number of instances of the candidate class that were deleted
-     * @since 2.0
-     */
-    long deletePersistentAll (Map parameters);
-
-    /**
-     * Deletes all the instances of the candidate class that pass the
-     * filter. Returns the number of instances of the candidate
-     * class that were deleted, specifically not including the number
-     * of dependent and embedded instances.
-     * <P>Dirty instances of affected classes in the cache are first
-     * flushed to the datastore. Instances in the cache or brought into
-     * the cache as a result of executing one of the 
-     * <code>deletePersistentAll</code>
-     * methods undergo life cycle changes as if <code>deletePersistent</code>
-     * were called on them.
-     * <P>Specifically, if the class of deleted instances implements the
-     * delete callback interface, the corresponding callback methods
-     * are called on the deleted instances. Similarly, if there are
-     * lifecycle listeners registered for delete events on affected
-     * classes, the listener is called for each appropriate deleted instance.
-     * <P>Before returning control to the application, instances of affected
-     * classes in the cache are refreshed to reflect whether they were
-     * deleted from the datastore.
-     * 
-     * @return the number of instances of the candidate class that were deleted
-     * @since 2.0
-     */
-    long deletePersistentAll ();
-    
-    /**
-     * The unmodifiable flag, when set, disallows further 
-     * modification of the query, except for specifying the range, 
-     * result class, and ignoreCache option.
-     * The unmodifiable flag can also be set in metadata.
-     * @since 2.0
-      */
-    void setUnmodifiable();
-
-    /**
-     * The unmodifiable flag, when set, disallows further 
-     * modification of the query, except for specifying the range, 
-     * result class, and ignoreCache option.
-     * @return the current setting of the flag
-     * @since 2.0
-      */
-    boolean isUnmodifiable();
-
-}
diff --git a/api20/src/java/javax/jdo/Transaction.java b/api20/src/java/javax/jdo/Transaction.java
deleted file mode 100644
index 808a254..0000000
--- a/api20/src/java/javax/jdo/Transaction.java
+++ /dev/null
@@ -1,198 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- * 
- * Licensed 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 
- * 
- *     http://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 
- * limitations under the License.
- */
-
-/*
- * Transaction.java
- *
- */
- 
-package javax.jdo;
-import javax.transaction.Synchronization;
-
-/** The JDO <code>Transaction</code> interface provides for initiation and 
- * completion of transactions under user control.
- * It is a sub-interface of the {@link PersistenceManager}
- * that deals with options and transaction demarcation. 
- * <P>Transaction options include whether optimistic concurrency
- * control should be used for the current transaction, whether instances
- * may hold values in the cache outside transactions, and whether
- * values should be retained in the cache after transaction completion.  These
- * options are valid for both managed and non-managed transactions.
- *
- * <P>Transaction initiation and completion methods have similar semantics to
- * <code>javax.transaction.UserTransaction</code> when used outside a managed
- * environment. When used in a managed environment, transaction initiation 
- * and completion methods may only be used with bean-managed transaction 
- * semantics.
- * @version 2.0
- */
-
-public interface Transaction
-{
-    /** Begin a transaction.  The type of transaction is determined by the
-     * setting of the Optimistic flag.
-     * @see #setOptimistic
-     * @see #getOptimistic
-     * @throws JDOUserException if transactions are managed by a container
-     * in the managed environment, or if the transaction is already active.
-     */
-    void begin();
-    
-    /** Commit the current transaction.
-     * @throws JDOUserException if transactions are managed by a container
-     * in the managed environment, or if the transaction is not active.
-     */
-    void commit();
-    
-    /** Roll back the current transaction.
-     * @throws JDOUserException if transactions are managed by a container
-     * in the managed environment, or if the transaction is not active.
-     */
-    void rollback();
-
-    /** Returns whether there is a transaction currently active.
-     * @return <code>true</code> if the transaction is active.
-     */
-    boolean isActive();
-    
-    /**
-     * Returns the rollback-only status of the transaction. When
-     * begun, the rollback-only status is false. Either the 
-     * application or the JDO implementation may set this flag
-     * using setRollbackOnly.
-     * @return <code>true</code> if the transaction has been
-     * marked for rollback.
-     * @since 2.0
-     */
-    boolean getRollbackOnly();
-
-    /**
-     * Sets the rollback-only status of the transaction to <code>true</code>.
-     * After this flag is set to <code>true</code>, the transaction 
-     * can no longer be committed, and any attempt to commit the 
-     * transaction will throw <code>JDOUserException<code>.
-     * @since 2.0
-     */
-    void setRollbackOnly();
-
-    /** If <code>true</code>, allow persistent instances to be read without
-     * a transaction active.
-     * If an implementation does not support this option, a 
-     * <code>JDOUnsupportedOptionException</code> is thrown.
-     * @param nontransactionalRead the value of the nontransactionalRead 
-     * property
-     */
-    void setNontransactionalRead (boolean nontransactionalRead);
-    
-    /** If <code>true</code>, allows persistent instances to be read without
-     * a transaction active.
-     * @return the value of the nontransactionalRead property
-     */
-    boolean getNontransactionalRead ();
-    
-    /** If <code>true</code>, allow persistent instances to be written without
-     * a transaction active.
-     * If an implementation does not support this option, a 
-     * <code>JDOUnsupportedOptionException</code> is thrown.
-     * @param nontransactionalWrite the value of the nontransactionalRead 
-     * property
-     */
-    void setNontransactionalWrite (boolean nontransactionalWrite);
-    
-    /** If <code>true</code>, allows persistent instances to be written without
-     * a transaction active.
-     * @return the value of the nontransactionalWrite property
-     */
-    boolean getNontransactionalWrite ();
-    
-    /** If <code>true</code>, at commit instances retain their values and the 
-     * instances transition to persistent-nontransactional.
-     * If an implementation does not support this option, a 
-     * <code>JDOUnsupportedOptionException</code> is thrown.
-     * @param retainValues the value of the retainValues property
-     */
-    void setRetainValues(boolean retainValues);
-    
-    /** If <code>true</code>, at commit time instances retain their field 
-     * values.
-     * @return the value of the retainValues property
-     */
-    boolean getRetainValues();
-    
-    /** If <code>true</code>, at rollback, fields of newly persistent instances 
-     * are restored to 
-     * their values as of the beginning of the transaction, and the instances
-     * revert to transient.  Additionally, fields of modified
-     * instances of primitive types and immutable reference types
-     * are restored to their values as of the beginning of the 
-     * transaction.
-     * <P>If <code>false</code>, at rollback, the values of fields of 
-     * newly persistent instances are unchanged and the instances revert to
-     * transient.  Additionally, dirty instances transition to hollow.
-     * If an implementation does not support this option, a 
-     * <code>JDOUnsupportedOptionException</code> is thrown.
-     * @param restoreValues the value of the restoreValues property
-     */
-    void setRestoreValues(boolean restoreValues);
-    
-    /** Return the current value of the restoreValues property.
-     * @return the value of the restoreValues property
-     */
-    boolean getRestoreValues();
-    
-    /** Optimistic transactions do not hold data store locks until commit time.
-     * If an implementation does not support this option, a 
-     * <code>JDOUnsupportedOptionException</code> is thrown.
-     * @param optimistic the value of the Optimistic flag.
-     */
-    void setOptimistic(boolean optimistic);
-    
-    /** Optimistic transactions do not hold data store locks until commit time.
-     * @return the value of the Optimistic property.
-     */
-    boolean getOptimistic();
-    
-    /** The user can specify a <code>Synchronization</code> instance to be 
-     * notified on transaction completions.  The <code>beforeCompletion</code> 
-     * method is called prior to flushing instances to the data store.
-     *
-     * <P>The <code>afterCompletion</code> method is called after performing 
-     * state transitions of persistent and transactional instances, following 
-     * the data store commit or rollback operation.
-     * <P>Only one <code>Synchronization</code> instance can be registered with 
-     * the  <code>Transaction</code>. If the application requires more than one 
-     * instance to receive synchronization callbacks, then the single 
-     * application instance is responsible for managing them, and forwarding 
-     * callbacks to them.
-     * @param sync the <code>Synchronization</code> instance to be notified; 
-     * <code>null</code> for none
-     */
-    void setSynchronization(Synchronization sync);
-    
-    /** The user-specified <code>Synchronization</code> instance for this 
-     * <code>Transaction</code> instance.    
-     * @return the user-specified <code>Synchronization</code> instance.
-     */
-    Synchronization getSynchronization();
-
-    /** The <code>Transaction</code> instance is always associated with exactly 
-     * one <code>PersistenceManager</code>.
-     *
-     * @return the <code>PersistenceManager</code> for this 
-     * <code>Transaction</code> instance
-     */
-    PersistenceManager getPersistenceManager();
-}
diff --git a/api20/src/java/javax/jdo/datastore/DataStoreCache.java b/api20/src/java/javax/jdo/datastore/DataStoreCache.java
deleted file mode 100644
index 6531b66..0000000
--- a/api20/src/java/javax/jdo/datastore/DataStoreCache.java
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- * 
- * Licensed 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 
- * 
- *     http://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 
- * limitations under the License.
- */
-
-/*
- * DataStoreCache.java
- *
- */
- 
-package javax.jdo.datastore;
-
-import java.util.Collection;
-
-
-/** 
- * Many JDO implementations allow instances to be cached in a
- * second-level cache, and allow direct management of the cache by
- * knowledgeable applications. This interface standardizes this
- * behavior.
- * @since 2.0
- * @version 2.0
- */
-public interface DataStoreCache {
-
-    /** Evict the parameter instance from the second-level cache.
-     * @param oid the object id of the instance to evict.
-     * @since 2.0
-     */
-    void evict (Object oid);
-
-    /** Evict the parameter instances from the second-level cache.
-     * All instances in the PersistenceManager's cache are evicted 
-     * from the second-level cache.
-     * @since 2.0
-     */
-    void evictAll ();
-
-    /** Evict the parameter instances from the second-level cache.
-     * @param oids the object ids of the instance to evict.
-     * @since 2.0
-     */
-    void evictAll (Object[] oids);
-
-    /** Evict the parameter instances from the second-level cache.
-     * @param oids the object ids of the instance to evict.
-     * @since 2.0
-     */
-    void evictAll (Collection oids);
-
-    /** Evict the parameter instances from the second-level cache.
-     * @param pcClass the class of instances to evict
-     * @param subclasses if true, evict instances of subclasses also
-     * @since 2.0
-     */
-    void evictAll (Class pcClass, boolean subclasses);
-
-    /** Pin the parameter instance in the second-level cache.
-     * @param oid the object id of the instance to pin.
-     * @since 2.0
-     */
-    void pin (Object oid);
-
-    /** Pin the parameter instances in the second-level cache.
-     * @param oids the object ids of the instances to pin.
-     * @since 2.0
-     */
-    void pinAll (Collection oids);
-
-    /** Pin the parameter instances in the second-level cache.
-     * @param oids the object ids of the instances to pin.
-     * @since 2.0
-     */
-    void pinAll (Object[] oids);
-
-    /** Pin instances in the second-level cache.
-     * @param pcClass the class of instances to pin
-     * @param subclasses if true, pin instances of subclasses also
-     * @since 2.0
-     */
-    void pinAll (Class pcClass, boolean subclasses);
-
-    /** Unpin the parameter instance from the second-level cache.
-     * @param oid the object id of the instance to unpin.
-     * @since 2.0
-     */
-    void unpin(Object oid);
-
-    /** Unpin the parameter instances from the second-level cache.
-     * @param oids the object ids of the instance to evict.
-     * @since 2.0
-     */
-    void unpinAll(Collection oids);
-
-    /** Unpin the parameter instance from the second-level cache.
-     * @param oids the object id of the instance to evict.
-     * @since 2.0
-     */
-    void unpinAll(Object[] oids);
-
-    /** Unpin instances from the second-level cache.
-     * @param pcClass the class of instances to unpin
-     * @param subclasses if true, unpin instances of subclasses also
-     * @since 2.0
-     */
-    void unpinAll(Class pcClass, boolean subclasses);
-    
-    /** 
-     * This class is an empty implementation of the DataStoreCache 
-     * interface. It can be used by an implementation that does not
-     * support a second-level cache.
-     * @since 2.0
-     */
-    public class EmptyDataStoreCache implements DataStoreCache {
-        
-        public EmptyDataStoreCache() {
-        }
-        
-        public void evict(Object oid) {
-        }
-
-        public void evictAll() {
-        }
-
-        public void evictAll(Object[] oids) {
-        }
-
-        public void evictAll(Collection oids) {
-        }
-
-        public void evictAll(Class pcClass, boolean subclasses) {
-        }
-
-        public void pin(Object oid) {
-        }
-
-        public void pinAll(Object[] oids) {
-        }
-
-        public void pinAll(Collection oids) {
-        }
-
-        public void pinAll(Class pcClass, boolean subclasses) {
-        }
-
-        public void unpin(Object oid) {
-        }
-
-        public void unpinAll(Object[] oids) {
-        }
-
-        public void unpinAll(Collection oids) {
-        }
-
-        public void unpinAll(Class pcClass, boolean subclasses) {
-        }
-    }
-}
diff --git a/api20/src/java/javax/jdo/datastore/JDOConnection.java b/api20/src/java/javax/jdo/datastore/JDOConnection.java
deleted file mode 100644
index fa0d09b..0000000
--- a/api20/src/java/javax/jdo/datastore/JDOConnection.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- * 
- * Licensed 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 
- * 
- *     http://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 
- * limitations under the License.
- */
-
-/*
- * JDOConnection.java
- *
- */
- 
-package javax.jdo.datastore;
-
-/**
- * The underlying connection that is being used by a 
- * {@link javax.jdo.PersistenceManager}. 
- * @version 2.0
- * @since 2.0
- */
-public interface JDOConnection {
-
-    /**
-     * Returns the native, datastore-specific connection that this
-     * connection wraps. In general, it is not recommended that this
-     * native connection be used directly, since the JDO
-     * implementation has no way to intercept calls to it, so it is
-     * quite possible to put the <code>PersistenceManager</code>'s
-     * connection into an invalid state.
-     * @return the native connection
-     * @since 2.0
-     */
-    Object getNativeConnection ();
-    
-    /**
-     * Returns this connection to the JDO implementation.
-     * The object must be returned to the JDO implementation prior to
-     * calling any JDO method or performing any action on any persistent
-     * instance that might require the JDO implementation to use a
-     * connection. If the object has not been returned and the JDO
-     * implementation needs a connection, a <code>JDOUserException</code>
-     * is thrown.
-     * @since 2.0
-     */
-    void close();
-}
diff --git a/api20/src/java/javax/jdo/datastore/Sequence.java b/api20/src/java/javax/jdo/datastore/Sequence.java
deleted file mode 100644
index 3c03d5b..0000000
--- a/api20/src/java/javax/jdo/datastore/Sequence.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- * 
- * Licensed 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 
- * 
- *     http://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 
- * limitations under the License.
- */
-
-/*
- * Sequence.java
- *
- */
- 
-package javax.jdo.datastore;
-
-
-/**
- *	Implementations of this interface can be used to obtain
- *	sequences. The behavior with regard to the transaction and
- *	rollover behavior are defined in the metadata.
- *
- *	@version 2.0
- *	@since 2.0
- */
-public interface Sequence {
-
-    /**
-     * Returns the fully qualified name of the <code>Sequence</code>.
-     * @return the name of the sequence
-     */
-    String getName ();
-
-    /**
-     * Returns the next sequence value as an Object. If the next
-     * sequence value is not available, throw JDODataStoreException.
-     * @return the next value
-     */
-    Object next ();
-
-    /**
-     * Provides a hint to the implementation that the application
-     * will need <code>additional</code> sequence value objects in
-     * short order. There is no externally visible behavior of this
-     * method. It is used to potentially improve the efficiency of
-     * the algorithm of obtaining additional sequence value objects.
-     * @param additional the number of additional values to allocate
-     */
-    void allocate (int additional);
-
-    /**
-     * Returns the current sequence value object if it is
-     * available. It is intended to return a sequence value object
-     * previously used. If the current sequence value is not available,
-     * throw JDODataStoreException.
-     * @return the current value
-     */
-    Object current ();
-    
-    /** 
-     * Returns the next sequence value as a long. If the next
-     * sequence value is not available or is not numeric, throw
-     * JDODataStoreException.
-     * @return the next value
-     */
-    long nextValue();
-    
-    /** 
-     * Returns the current sequence value as a long. If the current
-     * sequence value is not available or is not numeric, throw
-     * JDODataStoreException.
-     * @return the current value
-     */
-    long currentValue();
-}
diff --git a/api20/src/java/javax/jdo/datastore/package.html b/api20/src/java/javax/jdo/datastore/package.html
deleted file mode 100644
index 97453e2..0000000
--- a/api20/src/java/javax/jdo/datastore/package.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!--
- Copyright 2005 The Apache Software Foundation.
- 
- Licensed 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 
- 
-     http://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 
- limitations under the License.
--->
-
-<html>
-<head>
-<title>Datastore package</title>
-<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-</head>
-
-<body bgcolor="#FFFFFF">
-This package contains the JDO specification datastore interfaces.
-</body>
-</html>
diff --git a/api20/src/java/javax/jdo/identity/ByteIdentity.java b/api20/src/java/javax/jdo/identity/ByteIdentity.java
deleted file mode 100644
index da47cdf..0000000
--- a/api20/src/java/javax/jdo/identity/ByteIdentity.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- * 
- * Licensed 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 
- * 
- *     http://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 
- * limitations under the License.
- */
-
-/*
- * ByteIdentity.java
- *
- */
- 
-package javax.jdo.identity;
-
-import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectOutput;
-
-/** This class is for identity with a single byte field.
- * @version 2.0
- */
-public class ByteIdentity extends SingleFieldIdentity {
-    
-    /** The key.
-     */
-    private byte key;
-    
-    /** Construct this instance with the key value.
-     */
-    private void construct(byte key) {
-        this.key = key;
-        hashCode = super.hashClassName() ^ key;
-    }
-    
-    /** Constructor with class and key.
-     * @param pcClass the target class
-     * @param key the key
-     */
-    public ByteIdentity(Class pcClass, byte key) {
-        super(pcClass);
-        construct(key);
-    }
-    
-    /** Constructor with class and key.
-     * @param pcClass the target class
-     * @param key the key
-     */
-    public ByteIdentity(Class pcClass, Byte key) {
-        super(pcClass);
-        setKeyAsObject(key);
-        construct(key.byteValue());
-    }
-
-    /** Constructor with class and key.
-     * @param pcClass the target class
-     * @param str the key
-     */
-    public ByteIdentity(Class pcClass, String str) {
-        super(pcClass);
-        assertKeyNotNull(str);
-        construct(Byte.parseByte(str));
-    }
-
-    /** Constructor only for Externalizable.
-     */
-    public ByteIdentity() {
-    }
-
-    /** Return the key.
-     * @return the key
-     */
-    public byte getKey() {
-        return key;
-    }
-
-    /** Return the String version of the key.
-     * @return the key.
-     */
-    public String toString() {
-        return Byte.toString(key);
-    }
-
-    /** Determine if the other object represents the same object id.
-     * @param obj the other object
-     * @return true if both objects represent the same object id
-     */
-    public boolean equals(Object obj) {
-        if (this == obj) {
-            return true;
-        } else if (!super.equals (obj)) {
-            return false;
-        } else {
-            ByteIdentity other = (ByteIdentity)obj;
-            return key == other.key;
-        }
-    }
-
-    /** Create the key as an Object.
-     * @return the key as an Object
-     * @since 2.0
-     */
-    protected Object createKeyAsObject() {
-        return new Byte(key);
-    }
-
-    /** Write this object. Write the superclass first.
-     * @param out the output
-     */
-    public void writeExternal(ObjectOutput out) throws IOException {
-        super.writeExternal (out);
-        out.writeByte (key);
-    }
-
-    /** Read this object. Read the superclass first.
-     * @param in the input
-     */
-    public void readExternal(ObjectInput in)
-		throws IOException, ClassNotFoundException {
-        super.readExternal (in);
-        key = in.readByte ();
-    }
-}
diff --git a/api20/src/java/javax/jdo/identity/CharIdentity.java b/api20/src/java/javax/jdo/identity/CharIdentity.java
deleted file mode 100644
index de5755f..0000000
--- a/api20/src/java/javax/jdo/identity/CharIdentity.java
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- * 
- * Licensed 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 
- * 
- *     http://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 
- * limitations under the License.
- */
-
-/*
- * CharIdentity.java
- *
- */
-
-package javax.jdo.identity;
-
-import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectOutput;
-
-import javax.jdo.spi.I18NHelper;
-
-/** This class is for identity with a single character field.
- * @version 2.0
- */
-public class CharIdentity extends SingleFieldIdentity {
-
-    /** The Internationalization message helper.
-     */
-    private static I18NHelper msg = I18NHelper.getInstance ("javax.jdo.Bundle"); //NOI18N
-
-    /** The key.
-     */
-    private char key;
-
-    private void construct(char key) {
-        this.key = key;
-        hashCode = hashClassName() ^ key;
-    }
-
-    /** Constructor with class and key.
-     * @param pcClass the target class
-     * @param key the key
-     */
-    public CharIdentity (Class pcClass, char key) {
-        super (pcClass);
-        construct(key);
-    }
-
-    /** Constructor with class and key.
-     * @param pcClass the target class
-     * @param key the key
-     */
-    public CharIdentity (Class pcClass, Character key) {
-        super (pcClass);
-        setKeyAsObject(key);
-        construct(key.charValue());
-    }
-
-    /** Constructor with class and key. The String must have exactly one
-     * character.
-     * @param pcClass the target class
-     * @param str the key
-     */
-    public CharIdentity (Class pcClass, String str) {
-        super(pcClass);
-        assertKeyNotNull(str);
-        if (str.length() != 1) 
-            throw new IllegalArgumentException(
-                msg.msg("EXC_StringWrongLength")); //NOI18N
-        construct(str.charAt(0));
-    }
-
-    /** Constructor only for Externalizable.
-     */
-    public CharIdentity () {
-    }
-
-    /** Return the key.
-     * @return the key
-     */
-    public char getKey () {
-        return key;
-    }
-
-    /** Return the String form of the key.
-     * @return the String form of the key
-     */
-    public String toString () {
-        return String.valueOf(key);
-    }
-
-    /** Determine if the other object represents the same object id.
-     * @param obj the other object
-     * @return true if both objects represent the same object id
-     */
-    public boolean equals (Object obj) {
-        if (this == obj) {
-            return true;
-        } else if (!super.equals (obj)) {
-            return false;
-        } else {
-            CharIdentity other = (CharIdentity) obj;
-            return key == other.key;
-        }
-    }
-
-    /** Create the key as an Object.
-     * @return the key as an Object
-     * @since 2.0
-     */
-    protected Object createKeyAsObject() {
-        return new Character(key);
-    }
-
-    /** Write this object. Write the superclass first.
-     * @param out the output
-     */
-    public void writeExternal(ObjectOutput out) throws IOException {
-        super.writeExternal (out);
-        out.writeChar(key);
-    }
-
-    /** Read this object. Read the superclass first.
-     * @param in the input
-     */
-    public void readExternal(ObjectInput in)
-		throws IOException, ClassNotFoundException {
-        super.readExternal (in);
-        key = in.readChar();
-    }
-    
-    private void computeHashCode() {
-        hashCode = hashClassName() ^ key;
-    }
-}
diff --git a/api20/src/java/javax/jdo/identity/IntIdentity.java b/api20/src/java/javax/jdo/identity/IntIdentity.java
deleted file mode 100644
index 7246279..0000000
--- a/api20/src/java/javax/jdo/identity/IntIdentity.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- * 
- * Licensed 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 
- * 
- *     http://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 
- * limitations under the License.
- */
-
-/*
- * IntIdentity.java
- *
- */
- 
-package javax.jdo.identity;
-
-import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectOutput;
-
-/** This class is for identity with a single int field.
- * @version 2.0
- */
-public class IntIdentity extends SingleFieldIdentity {
-
-    private int key;
-
-    private void construct(int key) {
-        this.key = key;
-        hashCode = hashClassName() ^ key;
-    }
-
-    /** Constructor with class and key.
-     * @param pcClass the class
-     * @param key the key
-     */
-    public IntIdentity (Class pcClass, int key) {
-        super(pcClass);
-        construct(key);
-	}
-
-    /** Constructor with class and key.
-     * @param pcClass the class
-     * @param key the key
-     */
-    public IntIdentity (Class pcClass, Integer key) {
-        super(pcClass);
-        setKeyAsObject(key);
-        construct(key.intValue ());
-    }
-
-
-    /** Constructor with class and key.
-     * @param pcClass the class
-     * @param str the key
-     */
-    public IntIdentity (Class pcClass, String str) {
-        super(pcClass);
-        assertKeyNotNull(str);
-        construct(Integer.parseInt(str));
-    }
-
-    /** Constructor only for Externalizable.
-     */
-    public IntIdentity () {
-    }
-
-    /** Return the key.
-     * @return the key
-     */
-    public int getKey () {
-        return key;
-    }
-
-    /** Return the String form of the key.
-     * @return the String form of the key
-     */
-    public String toString () {
-        return Integer.toString(key);
-    }
-
-    /** Determine if the other object represents the same object id.
-     * @param obj the other object
-     * @return true if both objects represent the same object id
-     */
-    public boolean equals (Object obj) {
-        if (this == obj) {
-            return true;
-        } else if (!super.equals (obj)) {
-            return false;
-        } else {
-            IntIdentity other = (IntIdentity) obj;
-            return key == other.key;
-        }
-    }
-
-    /** Create the key as an Object.
-     * @return the key as an Object
-     * @since 2.0
-     */
-    protected Object createKeyAsObject() {
-        return new Integer(key);
-    }
-
-    /** Write this object. Write the superclass first.
-     * @param out the output
-     */
-    public void writeExternal(ObjectOutput out) throws IOException {
-        super.writeExternal (out);
-        out.writeInt(key);
-    }
-
-    /** Read this object. Read the superclass first.
-     * @param in the input
-     */
-    public void readExternal(ObjectInput in)
-		throws IOException, ClassNotFoundException {
-        super.readExternal (in);
-        key = in.readInt();
-    }
-}
diff --git a/api20/src/java/javax/jdo/identity/LongIdentity.java b/api20/src/java/javax/jdo/identity/LongIdentity.java
deleted file mode 100644
index 2bc44d4..0000000
--- a/api20/src/java/javax/jdo/identity/LongIdentity.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- * 
- * Licensed 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 
- * 
- *     http://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 
- * limitations under the License.
- */
-
-/*
- * LongIdentity.java
- *
- */
- 
-package javax.jdo.identity;
-
-import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectOutput;
-
-/** This class is for identity with a single long field.
- * @version 2.0
- */
-public class LongIdentity extends SingleFieldIdentity {
-	
-    /** The key.
-     */
-    private long key;
-
-    private void construct(long key) {
-        this.key = key;
-        hashCode = hashClassName() ^ (int)key;
-    }
-
-    /** Constructor with class and key.
-     * @param pcClass the class
-     * @param key the key
-     */
-    public LongIdentity (Class pcClass, long key) {
-        super (pcClass);
-        construct(key);
-    }
-
-    /** Constructor with class and key.
-     * @param pcClass the class
-     * @param key the key
-     */
-    public LongIdentity (Class pcClass, Long key) {
-        super(pcClass);
-        setKeyAsObject(key);
-        construct(key.longValue());
-    }
-
-    /** Constructor with class and key.
-     * @param pcClass the class
-     * @param str the key
-     */
-    public LongIdentity (Class pcClass, String str) {
-        super(pcClass);
-        assertKeyNotNull(str);
-        construct(Long.parseLong(str));
-    }
-
-    /** Constructor only for Externalizable.
-     */
-    public LongIdentity () {
-    }
-
-    /** Return the key.
-     * @return the key
-     */
-    public long getKey () {
-        return key;
-    }
-
-    /** Return the String form of the key.
-     * @return the String form of the key
-     */
-    public String toString () {
-        return Long.toString(key);
-    }
-
-    /** Determine if the other object represents the same object id.
-     * @param obj the other object
-     * @return true if both objects represent the same object id
-     */
-    public boolean equals (Object obj) {
-        if (this == obj) {
-            return true;
-        } else if (!super.equals (obj)) {
-            return false;
-        } else {
-            LongIdentity other = (LongIdentity) obj;
-            return key == other.key;
-        }
-    }
-
-    /** Create the key as an Object.
-     * @return the key as an Object
-     * @since 2.0
-     */
-    protected Object createKeyAsObject() {
-        return new Long(key);
-    }
-
-    /** Write this object. Write the superclass first.
-     * @param out the output
-     */
-    public void writeExternal(ObjectOutput out) throws IOException {
-        super.writeExternal (out);
-        out.writeLong(key);
-    }
-
-    /** Read this object. Read the superclass first.
-     * @param in the input
-     */
-    public void readExternal(ObjectInput in)
-		throws IOException, ClassNotFoundException {
-        super.readExternal (in);
-        key = in.readLong();
-    }
-
-}
diff --git a/api20/src/java/javax/jdo/identity/ObjectIdentity.java b/api20/src/java/javax/jdo/identity/ObjectIdentity.java
deleted file mode 100644
index 9a132be..0000000
--- a/api20/src/java/javax/jdo/identity/ObjectIdentity.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- * 
- * Licensed 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 
- * 
- *     http://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 
- * limitations under the License.
- */
-
-/*
- * ObjectIdentity.java
- *
- */
- 
-package javax.jdo.identity;
-
-import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectOutput;
-
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-
-import javax.jdo.JDOUserException;
-
-import javax.jdo.spi.JDOImplHelper;
-
-/** This class is for identity with a single Object type field.
- * @version 2.0
- */
-public class ObjectIdentity extends SingleFieldIdentity {
-    
-    /** The key is stored in the superclass field keyAsObject.
-     */
-    
-    /** The JDOImplHelper instance used for parsing the String to an Object.
-     */
-    private static JDOImplHelper helper = (JDOImplHelper)
-        AccessController.doPrivileged(
-            new PrivilegedAction () {
-                public Object run () {
-                    return JDOImplHelper.getInstance();
-                }
-            }
-        );
-    
-    /** The delimiter for String constructor.
-     */
-    private static final String STRING_DELIMITER = ":"; //NOI18N
-    
-    /** Constructor with class and key.
-     * @param pcClass the class
-     * @param param the key
-     */
-    public ObjectIdentity (Class pcClass, Object param) {
-        super (pcClass);
-        assertKeyNotNull(param);
-        String paramString = null;
-        String keyString = null;
-        String className = null;
-        if (param instanceof String) {
-            /* The paramString is of the form "<className>:<keyString>" */
-            paramString = (String)param;
-            if (paramString.length() < 3) {
-                throw new JDOUserException(
-                    msg.msg("EXC_ObjectIdentityStringConstructionTooShort") + //NOI18N
-                    msg.msg("EXC_ObjectIdentityStringConstructionUsage", //NOI18N
-                        paramString));
-            }
-            int indexOfDelimiter = paramString.indexOf(STRING_DELIMITER);
-            if (indexOfDelimiter < 0) {
-                throw new JDOUserException(
-                    msg.msg("EXC_ObjectIdentityStringConstructionNoDelimiter") + //NOI18N
-                    msg.msg("EXC_ObjectIdentityStringConstructionUsage", //NOI18N
-                        paramString));
-            }
-            keyString = paramString.substring(indexOfDelimiter+1);
-            className = paramString.substring(0, indexOfDelimiter);
-            keyAsObject = helper.construct(className, keyString);
-        } else {
-            keyAsObject = param;
-        }
-        hashCode = hashClassName() ^ keyAsObject.hashCode();
-    }
-
-    /** Constructor only for Externalizable.
-     */
-    public ObjectIdentity () {
-    }
-
-    /** Return the key.
-     * @return the key
-     */
-    public Object getKey () {
-        return keyAsObject;
-    }
-
-    /** Return the String form of the object id. The class of the
-     * object id is written as the first part of the result so that
-     * the class can be reconstructed later. Then the toString
-     * of the key instance is appended. During construction, 
-     * this process is reversed. The class is extracted from 
-     * the first part of the String, and the String constructor
-     * of the key is used to construct the key itself.
-     * @return the String form of the key
-     */
-    public String toString () {
-        return keyAsObject.getClass().getName()
-                + STRING_DELIMITER
-                + keyAsObject.toString();
-    }
-
-    /** Determine if the other object represents the same object id.
-     * @param obj the other object
-     * @return true if both objects represent the same object id
-     */
-    public boolean equals (Object obj) {
-        if (this == obj) {
-            return true;
-        } else if (!super.equals (obj)) {
-            return false;
-        } else {
-            ObjectIdentity other = (ObjectIdentity) obj;
-            return keyAsObject.equals(other.keyAsObject);
-        }
-    }
-
-    /** Write this object. Write the superclass first.
-     * @param out the output
-     */
-    public void writeExternal(ObjectOutput out) throws IOException {
-        super.writeExternal (out);
-        out.writeObject(keyAsObject);
-    }
-
-    /** Read this object. Read the superclass first.
-     * @param in the input
-     */
-    public void readExternal(ObjectInput in)
-		throws IOException, ClassNotFoundException {
-        super.readExternal (in);
-        keyAsObject = in.readObject();
-    }
-    
-}
diff --git a/api20/src/java/javax/jdo/identity/ShortIdentity.java b/api20/src/java/javax/jdo/identity/ShortIdentity.java
deleted file mode 100644
index 69a3cc0..0000000
--- a/api20/src/java/javax/jdo/identity/ShortIdentity.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- * 
- * Licensed 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 
- * 
- *     http://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 
- * limitations under the License.
- */
-
-/*
- * ShortIdentity.java
- *
- */
- 
-package javax.jdo.identity;
-
-import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectOutput;
-
-/** This class is for identity with a single short field.
- * @version 2.0
- */
-public class ShortIdentity
-	extends SingleFieldIdentity
-{
-	private short key;
-
-    private void construct(short key) {
-        this.key = key;
-        hashCode = hashClassName() ^ key;
-    }
-
-    /** Constructor with class and key.
-     * @param pcClass the class
-     * @param key the key
-     */
-    public ShortIdentity (Class pcClass, short key) {
-        super(pcClass);
-        construct(key);
-    }
-
-    /** Constructor with class and key.
-     * @param pcClass the class
-     * @param key the key
-     */
-    public ShortIdentity (Class pcClass, Short key) {
-        super(pcClass);
-        setKeyAsObject(key);
-        construct(key.shortValue());
-    }
-
-    /** Constructor with class and key.
-     * @param pcClass the class
-     * @param str the key
-     */
-    public ShortIdentity (Class pcClass, String str) {
-        super(pcClass);
-        assertKeyNotNull(str);
-        construct(Short.parseShort (str));
-    }
-
-    /** Constructor only for Externalizable.
-     */
-    public ShortIdentity () {
-    }
-
-    /** Return the key.
-     * @return the key
-     */
-    public short getKey () {
-        return key;
-    }
-
-    /** Return the String form of the key.
-     * @return the String form of the key
-     */
-    public String toString () {
-        return Short.toString(key);
-    }
-
-    /** Determine if the other object represents the same object id.
-     * @param obj the other object
-     * @return true if both objects represent the same object id
-     */
-    public boolean equals (Object obj) {
-        if (this == obj) {
-            return true;
-        } else if (!super.equals (obj)) {
-            return false;
-        } else {
-            ShortIdentity other = (ShortIdentity) obj;
-            return key == other.key;
-        }
-    }
-
-    /** Create the key as an Object.
-     * @return the key as an Object
-     * @since 2.0
-     */
-    protected Object createKeyAsObject() {
-        return new Short(key);
-    }
-
-    /** Write this object. Write the superclass first.
-     * @param out the output
-     */
-    public void writeExternal(ObjectOutput out) throws IOException {
-        super.writeExternal (out);
-        out.writeShort(key);
-    }
-
-    /** Read this object. Read the superclass first.
-     * @param in the input
-     */
-    public void readExternal(ObjectInput in)
-		throws IOException, ClassNotFoundException {
-        super.readExternal (in);
-        key = in.readShort();
-    }
-}
diff --git a/api20/src/java/javax/jdo/identity/SingleFieldIdentity.java b/api20/src/java/javax/jdo/identity/SingleFieldIdentity.java
deleted file mode 100644
index 77056a2..0000000
--- a/api20/src/java/javax/jdo/identity/SingleFieldIdentity.java
+++ /dev/null
@@ -1,188 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- * 
- * Licensed 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 
- * 
- *     http://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 
- * limitations under the License.
- */
-
-/*
- * SingleFieldIdentity.java
- *
- */
- 
-package javax.jdo.identity;
-
-import java.io.Externalizable;
-import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectOutput;
-
-import javax.jdo.JDOFatalInternalException;
-import javax.jdo.JDONullIdentityException;
-
-import javax.jdo.spi.I18NHelper;
-
-/** This class is the abstract base class for all single field identity
- * classes. A common case of application identity uses exactly one 
- * persistent field in the class to represent identity. In this case, 
- * the application can use a standard JDO class instead of creating 
- * a new user-defined class for the purpose.
- * @version 2.0
- */
-public abstract class SingleFieldIdentity
-    implements Externalizable {
-    
-    /** The Internationalization message helper.
-     */
-    protected static I18NHelper msg = I18NHelper.getInstance ("javax.jdo.Bundle"); //NOI18N
-
-    /** The class of the target object.
-     */
-    transient private Class targetClass;
-    
-    /** The name of the class of the target object.
-     */
-    private String targetClassName;
-
-    /** The hashCode.
-     */
-    protected int hashCode;
-    
-    /** The key as an Object.
-     */
-    protected Object keyAsObject;
-
-    /** Constructor with target class.
-     * @param pcClass the class of the target
-     * @since 2.0
-     */
-    protected SingleFieldIdentity(Class pcClass) {
-        if (pcClass == null)
-            throw new NullPointerException();
-        targetClass = pcClass;
-        targetClassName = pcClass.getName();
-    }
-
-    /** Constructor only for Externalizable.
-     * @since 2.0
-     */
-    public SingleFieldIdentity () {
-    }
-
-    /** Set the given key as the key for this instance. 
-     * Compute the hash code for the instance.
-     * @since 2.0
-     */
-    protected void setKeyAsObject(Object key) {
-        assertKeyNotNull(key);
-        keyAsObject = key;
-    }
-
-    /** Assert that the key is not null. Throw a JDONullIdentityException
-     * if the given key is null.
-     * @since 2.0
-     */ 
-    protected void assertKeyNotNull(Object key) {
-        if (key == null) {
-            throw new JDONullIdentityException(
-                msg.msg("EXC_SingleFieldIdentityNullParameter")); //NOI18N
-        }
-    }
-    
-    /** Return the target class.
-     * @return the target class.
-     * @since 2.0
-     */
-    public Class getTargetClass() {
-        return targetClass;
-    }
-
-    /** Return the target class name.
-     * @return the target class name.
-     * @since 2.0
-     */
-    public String getTargetClassName() {
-        return targetClassName;
-    }
-
-    /** Return the key as an Object. The method is synchronized to avoid
-     * race conditions in multi-threaded environments.
-     * @return the key as an Object.
-     * @since 2.0
-     */
-    public synchronized Object getKeyAsObject() {
-        if (keyAsObject == null) {
-            keyAsObject = createKeyAsObject();
-        }
-        return keyAsObject;
-    }
-    
-    /** Create the key as an Object.
-     * @return the key as an Object;
-     * @since 2.0
-     */
-    protected Object createKeyAsObject() {
-        throw new JDOFatalInternalException
-                (msg.msg("EXC_CreateKeyAsObjectMustNotBeCalled"));
-    }
-    
-    /** Check the class and class name and object type. If restored
-     * from serialization, class will be null so compare class name.
-     * @param obj the other object
-     * @return true if the class or class name is the same
-     */
-    public boolean equals(Object obj) {
-        if (this == obj) {
-            return true;
-        } else if (obj == null || this.getClass() != obj.getClass()) {
-            return false;
-        } else {
-            SingleFieldIdentity other = (SingleFieldIdentity) obj;
-            if (targetClass != null && targetClass == other.targetClass)
-                return true;
-            return targetClassName.equals (other.targetClassName);
-        }
-    }
-
-    /** Return the hash code of the class name.
-     * @return the hash code of the class name
-     * @since 2.0
-     */
-    protected int hashClassName() {
-        return targetClassName.hashCode();
-    }
-    
-    /** Return the cached hash code.
-     * @return the cached hash code.
-     */
-    public int hashCode() {
-        return hashCode;
-    }
-    
-    /** Write to the output stream.
-     * @param out the stream
-     */
-    public void writeExternal(ObjectOutput out) throws IOException {
-        out.writeObject(targetClassName);
-        out.writeInt(hashCode);
-    }
-
-    /** Read from the input stream.
-     * Creates a new instance with the target class name set
-     */
-    public void readExternal(ObjectInput in)
-            throws IOException, ClassNotFoundException {
-        targetClass = null;
-        targetClassName = (String)in.readObject();
-        hashCode = in.readInt();
-    }
-}
diff --git a/api20/src/java/javax/jdo/identity/StringIdentity.java b/api20/src/java/javax/jdo/identity/StringIdentity.java
deleted file mode 100644
index 87e6c52..0000000
--- a/api20/src/java/javax/jdo/identity/StringIdentity.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- * 
- * Licensed 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 
- * 
- *     http://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 
- * limitations under the License.
- */
-
-/*
- * StringIdentity.java
- *
- */
- 
-package javax.jdo.identity;
-
-import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectOutput;
-
-/** This class is for identity with a single String field.
- * @version 2.0
- */
-public class StringIdentity extends SingleFieldIdentity {
-    
-    /** The key is stored in the superclass field keyAsObject.
-     */
-    
-    /** Constructor with class and key.
-     * @param pcClass the class
-     * @param key the key
-     */
-    public StringIdentity (Class pcClass, String key) {
-        super (pcClass);
-        setKeyAsObject(key);
-        hashCode = hashClassName() ^ key.hashCode();
-    }
-
-    /** Constructor only for Externalizable.
-     */
-    public StringIdentity () {
-    }
-
-    /** Return the key.
-     * @return the key
-     */
-    public String getKey () {
-        return (String)keyAsObject;
-    }
-
-    /** Return the String form of the key.
-     * @return the String form of the key
-     */
-    public String toString () {
-        return (String)keyAsObject;
-    }
-
-    /** Determine if the other object represents the same object id.
-     * @param obj the other object
-     * @return true if both objects represent the same object id
-     */
-    public boolean equals (Object obj) {
-        if (this == obj) {
-            return true;
-        } else if (!super.equals (obj)) {
-            return false;
-        } else {
-            StringIdentity other = (StringIdentity) obj;
-            return keyAsObject.equals(other.keyAsObject);
-        }
-    }
-
-    /** Write this object. Write the superclass first.
-     * @param out the output
-     */
-    public void writeExternal(ObjectOutput out) throws IOException {
-        super.writeExternal (out);
-        out.writeObject(keyAsObject);
-    }
-
-    /** Read this object. Read the superclass first.
-     * @param in the input
-     */
-    public void readExternal(ObjectInput in)
-		throws IOException, ClassNotFoundException {
-        super.readExternal (in);
-        keyAsObject = (String)in.readObject();
-    }
-}
diff --git a/api20/src/java/javax/jdo/identity/package.html b/api20/src/java/javax/jdo/identity/package.html
deleted file mode 100644
index fd59884..0000000
--- a/api20/src/java/javax/jdo/identity/package.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!--
- Copyright 2005 The Apache Software Foundation.
- 
- Licensed 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 
- 
-     http://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 
- limitations under the License.
--->
-
-<html>
-<head>
-<title>Identity package</title>
-<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-</head>
-
-<body bgcolor="#FFFFFF">
-This package contains the JDO specification identity interfaces and classes.
-</body>
-</html>
diff --git a/api20/src/java/javax/jdo/listener/AttachCallback.java b/api20/src/java/javax/jdo/listener/AttachCallback.java
deleted file mode 100644
index 01eb168..0000000
--- a/api20/src/java/javax/jdo/listener/AttachCallback.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- * 
- * Licensed 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 
- * 
- *     http://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 
- * limitations under the License.
- */
-
-/*
- * AttachCallback.java
- *
- */
- 
-package javax.jdo.listener;
-
-/**
- * This interface is used to notify instances of attach events.
- * @version 2.0
- * @since 2.0
- */
-public interface AttachCallback {
-    
-    /**
-     * This method is called during the execution of
-     * {@link javax.jdo.PersistenceManager#makePersistent} on the detached 
-     * instance before the copy is made.
-     * @since 2.0
-     */
-    public void jdoPreAttach();
-
-    /**
-     * This method is called during the execution of
-     * {@link javax.jdo.PersistenceManager#makePersistent} on the persistent
-     * instance after the copy is made.
-     * @param attached	The corresponding (non-attached) instance that was
-     * attached in the call to 
-     * {@link javax.jdo.PersistenceManager#makePersistent}.
-     * @since 2.0
-     */
-    public void jdoPostAttach(Object attached);
-}
diff --git a/api20/src/java/javax/jdo/listener/AttachLifecycleListener.java b/api20/src/java/javax/jdo/listener/AttachLifecycleListener.java
deleted file mode 100644
index 2ea59dc..0000000
--- a/api20/src/java/javax/jdo/listener/AttachLifecycleListener.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- * 
- * Licensed 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 
- * 
- *     http://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 
- * limitations under the License.
- */
-
-/*
- * AttachLifecycleListener.java
- *
- */
- 
-package javax.jdo.listener;
-
-/**
- * This interface is implemented by listeners to be notified of
- * attach events.
- * @version 2.0
- * @since 2.0
- */
-public interface AttachLifecycleListener
-    extends InstanceLifecycleListener {
-    
-    /**
-     * This method is called before a detached instance is attached, via the
-     * {@link javax.jdo.PersistenceManager#makePersistent} method. The source 
-     * instance is the detached instance. This method is called before the
-     * corresponding {@link AttachCallback#jdoPreAttach} on the detached
-     * instance.
-     * @param event the attach event.
-     * @since 2.0
-     */
-    void preAttach (InstanceLifecycleEvent event);
-    
-    /**
-     * This method is called after a detached instance is attached, via the
-     * {@link javax.jdo.PersistenceManager#makePersistent} method. The source
-     * instance is the corresponding persistent instance in the cache; the
-     * target instance is the detached instance. This method is called after
-     * the corresponding {@link AttachCallback#jdoPostAttach} on the
-     * persistent instance.
-     * @param event the attach event.
-     * @since 2.0
-     */
-    void postAttach (InstanceLifecycleEvent event);
-}
diff --git a/api20/src/java/javax/jdo/listener/ClearCallback.java b/api20/src/java/javax/jdo/listener/ClearCallback.java
deleted file mode 100644
index 78e20b8..0000000
--- a/api20/src/java/javax/jdo/listener/ClearCallback.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- * 
- * Licensed 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 
- * 
- *     http://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 
- * limitations under the License.
- */
-
-/*
- * ClearCallback.java
- *
- */
- 
-package javax.jdo.listener;
-
-
-/**
- * This interface is used to notify instances of clear events.
- * @version 2.0
- * @since 2.0
- */
-public interface ClearCallback {
-    
-    /**
-     * Called before the values in the instance are cleared.
-     *
-     * <P>Transient fields should be cleared in this method.  
-     * Associations between this
-     * instance and others in the runtime environment should be cleared.
-     *
-     * <P>This method is not modified by the enhancer.
-     */
-    void jdoPreClear();
-}
diff --git a/api20/src/java/javax/jdo/listener/ClearLifecycleListener.java b/api20/src/java/javax/jdo/listener/ClearLifecycleListener.java
deleted file mode 100644
index 3a43dcc..0000000
--- a/api20/src/java/javax/jdo/listener/ClearLifecycleListener.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- * 
- * Licensed 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 
- * 
- *     http://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 
- * limitations under the License.
- */
-
-/*
- * ClearLifecycleListener.java
- *
- */
-
-package javax.jdo.listener;
-
-/**
- * This interface is implemented by listeners to be notified of
- * clear events.
- * @version 2.0
- * @since 2.0
- */
-public interface ClearLifecycleListener
-    extends InstanceLifecycleListener {
-
-    /**
-     * This method is called before the implementation calls the instance
-     *  method {@link ClearCallback#jdoPreClear} and before it clears the values 
-     *  in the instance to their Java default values. This happens during 
-     *  an application call to evict, and in afterCompletion for commit 
-     *  with RetainValues false and rollback with RestoreValues false. 
-     *  <P>The method is called during any state transition to hollow.
-     *  Non-persistent, non-transactional fields should be cleared 
-     *  in this method. Associations between this instance and others 
-     *  in the runtime environment should be cleared. 
-     *  <P>This method is not modified by the enhancer, so access to fields 
-     *  is not mediated.
-     * @param event the clear event.
-     * @since 2.0
-     */
-    void preClear (InstanceLifecycleEvent event);
-    
-    /**
-     * This method is called after the {@link ClearCallback#jdoPreClear} 
-     * method is invoked on the instance and the fields have been cleared 
-     * by the JDO implementation.
-     * @param event the clear event.
-     * @since 2.0
-     */
-    void postClear (InstanceLifecycleEvent event);
-}
diff --git a/api20/src/java/javax/jdo/listener/CreateLifecycleListener.java b/api20/src/java/javax/jdo/listener/CreateLifecycleListener.java
deleted file mode 100644
index c2535b0..0000000
--- a/api20/src/java/javax/jdo/listener/CreateLifecycleListener.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- * 
- * Licensed 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 
- * 
- *     http://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 
- * limitations under the License.
- */
-
-/*
- * CreateLifecycleListener.java
- *
- */
-
-package javax.jdo.listener;
-
-/**
- * This interface is implemented by listeners to be notified of
- * create events.
- * @version 2.0
- * @since 2.0
- */
-public interface CreateLifecycleListener
-    extends InstanceLifecycleListener {
-
-    /**
-     * Invoked whenever an instance is made persistent via a
-     * call to {@link javax.jdo.PersistenceManager#makePersistent} or during
-     * persistence by reachability.
-     * @param event the create event.
-     * @since 2.0
-     */
-    void postCreate (InstanceLifecycleEvent event);
-}
diff --git a/api20/src/java/javax/jdo/listener/DeleteCallback.java b/api20/src/java/javax/jdo/listener/DeleteCallback.java
deleted file mode 100644
index 179017a..0000000
--- a/api20/src/java/javax/jdo/listener/DeleteCallback.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- * 
- * Licensed 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 
- * 
- *     http://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 
- * limitations under the License.
- */
-
-/*
- * DeleteCallback.java
- *
- */
- 
-package javax.jdo.listener;
-
-
-/** 
- * This interface is used to notify instances of delete events.
- * @version 2.0
- * @since 2.0
- */
-public interface DeleteCallback
-{
-    /**
-     * Called before the instance is deleted.
-     * This method is called before the state transition to persistent-deleted 
-     * or persistent-new-deleted. Access to field values within this call 
-     * are valid. Access to field values after this call are disallowed. 
-     * <P>This method is modified by the enhancer so that fields referenced 
-     * can be used in the business logic of the method.
-     */
-    void jdoPreDelete();
-}
diff --git a/api20/src/java/javax/jdo/listener/DeleteLifecycleListener.java b/api20/src/java/javax/jdo/listener/DeleteLifecycleListener.java
deleted file mode 100644
index fc931eb..0000000
--- a/api20/src/java/javax/jdo/listener/DeleteLifecycleListener.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- * 
- * Licensed 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 
- * 
- *     http://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 
- * limitations under the License.
- */
-
-/*
- * DeleteLifecycleListener.java
- *
- */
-
-package javax.jdo.listener;
-
-/**
- * This interface is implemented by listeners to be notified of
- * delete events.
- * @version 2.0
- * @since 2.0
- */
-public interface DeleteLifecycleListener
-    extends InstanceLifecycleListener {
-
-    /**
-     * Invoked whenever a persistent instance is deleted, for example
-     * during {@link javax.jdo.PersistenceManager#deletePersistent}. 
-     * Access to field values within this call are permitted.  
-     * <P>This method is called before the instance callback
-     * {@link DeleteCallback#jdoPreDelete}.
-     * @param event the delete event.
-     * @since 2.0
-     */
-    void preDelete (InstanceLifecycleEvent event);
-
-    /**
-     * Invoked whenever a persistent instance is deleted, for example
-     * during {@link javax.jdo.PersistenceManager#deletePersistent}.
-     * <P>This method is called after the instance transitions
-     * to persistent-deleted. Access to field values is not permitted.
-     * @param event the delete event.
-     * @since 2.0
-     */
-    void postDelete (InstanceLifecycleEvent event);
-}
diff --git a/api20/src/java/javax/jdo/listener/DetachCallback.java b/api20/src/java/javax/jdo/listener/DetachCallback.java
deleted file mode 100644
index b984a4d..0000000
--- a/api20/src/java/javax/jdo/listener/DetachCallback.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- * 
- * Licensed 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 
- * 
- *     http://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 
- * limitations under the License.
- */
-
-/*
- * DetachCallback.java
- *
- */
- 
-package javax.jdo.listener;
-
-/**
- * This interface is used to notify instances of detach events.
- * @version 2.0
- * @since 2.0
- */
-public interface DetachCallback {
-    
-    /**
-     * This method is called during the execution of
-     * {@link javax.jdo.PersistenceManager#detachCopy} on the
-     * persistent instance before the copy is made.
-     * @since 2.0
-     */
-    public void jdoPreDetach();
-
-    /**
-     * This method is called during the execution of
-     * {@link javax.jdo.PersistenceManager#detachCopy} on the
-     * detached instance after the copy is made.
-     * @param detached The corresponding (attached) persistent instance.
-     * @since 2.0
-     */
-    public void jdoPostDetach(Object detached);
-}
diff --git a/api20/src/java/javax/jdo/listener/DetachLifecycleListener.java b/api20/src/java/javax/jdo/listener/DetachLifecycleListener.java
deleted file mode 100644
index 09131bf..0000000
--- a/api20/src/java/javax/jdo/listener/DetachLifecycleListener.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- * 
- * Licensed 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 
- * 
- *     http://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 
- * limitations under the License.
- */
-
-/*
- * DetachLifecycleListener.java
- *
- */
- 
-package javax.jdo.listener;
-
-/**
- * This interface is implemented by listeners to be notified of
- * detach events.
- * @version 2.0
- * @since 2.0
- */
-public interface DetachLifecycleListener
-    extends InstanceLifecycleListener {
-    
-    /** 
-     * This method is called during the execution of 
-     * {@link javax.jdo.PersistenceManager#detachCopy} before the 
-     * detached copy is made. It is called before the method
-     * {@link DetachCallback#jdoPreDetach} is called on the
-     * instance to be detached.
-     * @param event the detach event.
-     * @since 2.0
-     */
-    void preDetach (InstanceLifecycleEvent event);
-    
-    /**
-     * This method is called during the execution of
-     * {@link javax.jdo.PersistenceManager#detachCopy} after the 
-     * detached copy is made. It is called after the method
-     * {@link DetachCallback#jdoPreDetach} is called on
-     * the detached instance.
-     * @param event the detach event.
-     * @since 2.0
-     */
-    void postDetach (InstanceLifecycleEvent event); 
-}
diff --git a/api20/src/java/javax/jdo/listener/DirtyLifecycleListener.java b/api20/src/java/javax/jdo/listener/DirtyLifecycleListener.java
deleted file mode 100644
index 2a450cf..0000000
--- a/api20/src/java/javax/jdo/listener/DirtyLifecycleListener.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- * 
- * Licensed 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 
- * 
- *     http://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 
- * limitations under the License.
- */
-
-/*
- * DirtyLifecycleListener.java
- *
- */
-
-package javax.jdo.listener;
-
-/**
- * This interface is implemented by listeners to be notified of
- * dirty events.
- * @version 2.0
- * @since 2.0
- */
-public interface DirtyLifecycleListener
-    extends InstanceLifecycleListener {
-
-    /**
-     *	Invoked whenever a persistent instance is first made dirty,
-     *	during an operation that modifies the value of a persistent or
-     *	transactional field. Called before the value is changed.
-     * @since 2.0
-     */
-    void preDirty (InstanceLifecycleEvent event);
-
-    /**
-     *	Invoked whenever a persistent instance is first made dirty,
-     *	during an operation that modifies the value of a persistent or
-     *	transactional field. Called after the value is changed.
-     * @since 2.0
-     */
-    void postDirty (InstanceLifecycleEvent event);
-}
diff --git a/api20/src/java/javax/jdo/listener/InstanceLifecycleEvent.java b/api20/src/java/javax/jdo/listener/InstanceLifecycleEvent.java
deleted file mode 100644
index b625c23..0000000
--- a/api20/src/java/javax/jdo/listener/InstanceLifecycleEvent.java
+++ /dev/null
@@ -1,190 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- * 
- * Licensed 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 
- * 
- *     http://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 
- * limitations under the License.
- */
-
-/*
- * InstanceLifecycleEvent.java
- *
- */
-
-package javax.jdo.listener;
-
-import javax.jdo.spi.I18NHelper;
-
-/**
- * This is the event class used in life cycle event notifications.
- * <P>Note that although InstanceLifecycleEvent inherits Serializable interface 
- * from EventObject, it is not intended to be Serializable. Appropriate 
- * serialization methods are implemented to throw NotSerializableException.
- * @version 2.0
- * @since 2.0
- */
-public class InstanceLifecycleEvent
-    extends java.util.EventObject {
-
-    private static final int FIRST_EVENT_TYPE = 0;
-    public static final int CREATE = 0;
-    public static final int LOAD = 1;
-    public static final int STORE = 2;
-    public static final int CLEAR = 3;
-    public static final int DELETE = 4;
-    public static final int DIRTY = 5;
-    public static final int DETACH = 6;
-    public static final int ATTACH = 7;
-    private static final int LAST_EVENT_TYPE = 7;
-
-    /** The Internationalization message helper.
-     */
-    private final static I18NHelper msg = I18NHelper.getInstance ("javax.jdo.Bundle"); //NOI18N
-
-    /**
-     * The event type that triggered the construction of this event object.
-     */
-    private final int eventType;
-    
-    /** 
-     * The "other" object associated with the event.
-     */
-    private final Object target;
-
-    /**
-     *	Creates a new event object with the specified
-     *	<code>source</code> and <code>type</code>.
-     * @param source the instance that triggered the event
-     * @param type the event type
-     * @since 2.0
-     */
-    public InstanceLifecycleEvent (Object source, int type) {
-        this(source, type, null);
-    }
-
-    /**
-     *	Creates a new event object with the specified
-     *	<code>source</code>, <code>type</code>, and <code>target</code>.
-     * @param source the instance that triggered the event
-     * @param type the event type
-     * @param target the "other" instance
-     * @since 2.0
-     */
-    public InstanceLifecycleEvent (Object source, int type, Object target) {
-        super (source);
-        if (type < FIRST_EVENT_TYPE || type > LAST_EVENT_TYPE) {
-            throw new IllegalArgumentException(msg.msg("EXC_IllegalEventType"));
-        }
-        eventType = type;
-        this.target = target;
-    }
-
-    /**
-     *	Returns the event type that triggered this event.
-     * @return the event type
-     * @since 2.0
-     */
-    public int getEventType () {
-        return eventType;
-    }
-
-    /**
-     * The source object of the Event.  Although not deprecated,
-     * it is recommended that the the methods
-     * <code>getPersistentInstance()</code> and
-     * <code>getDetachedInstance()</code> be used instead.
-     *
-     * @return   The persistent instance on any pre- callback except preAttach,
-     * or the detached instance for a postDetach or preAttach callback.
-     *
-     * @see #getPersistentInstance()
-     * @see #getDetachedInstance()
-     * @see "Section 12.15, Java Data Objects 2.0 Specification"
-     */
-    public Object getSource() {
-        return super.getSource();
-    }
-
-    /**
-     * The target object of the Event.  Although not deprecated,
-     * it is recommended that the the methods
-     * <code>getPersistentInstance()</code> and
-     * <code>getDetachedInstance()</code> be used instead.
-     *
-     * @return The detached instance for preDetach and postAttach, 
-     * the persistent instance otherwise.
-     *
-     * @since 2.0
-     * @see #getPersistentInstance()
-     * @see #getDetachedInstance()
-     * @see "Section 12.15, Java Data Objects 2.0 Specification"
-     */
-    public Object getTarget () {
-        return target;
-    }
-
-    /**
-     * Returns the persistent instance involved in the event.
-     *
-     * @return The persistent instance involved in the event, or null if there 
-     * was none.
-     *
-     * @see "Section 12.15, Java Data Objects 2.0 Specification"
-     */
-    public Object getPersistentInstance() {
-        switch (getEventType()) {
-            case DETACH:
-                return target == null
-                        ? getSource()   // preDetach:  source is persistent instance
-                        : getTarget();  // postDetach:  target is persistent instance
-            case ATTACH:
-                return target == null
-                        ? null          // preAttach:  no persistent instance yet
-                        : getSource();  // postAttach:  source is persistent instance
-        }
-
-        // for all other events, source is persistent instance
-        return getSource();
-    }
-
-    /**
-     * Returns the detached instance involved in the event.
-     *
-     * @return The detached instance involved in the event, or null if there was none.
-     *
-     * @see "Section 12.15, Java Data Objects 2.0 Specification"
-     */
-    public Object getDetachedInstance() {
-        switch (getEventType()) {
-            case DETACH:
-                return target == null
-                        ? null          // preDetach:  no detached instance yet
-                        : getSource();  // postDetach:  source is detached instance
-            case ATTACH:
-                return target == null
-                        ? getSource()   // preAttach:  source is detached instance
-                        : getTarget();  // postAttach:  target is detached instance
-        }
-
-        // for all other events, there is no detached instance
-        return null;
-    }
-
-    /**
-     * Serialization is not supported for InstanceLifecycleEvents.
-     * param out the output stream
-     * @since 2.0
-     */
-    private void writeObject(java.io.ObjectOutputStream out) 
-        throws java.io.IOException {
-        throw new java.io.NotSerializableException();
-    }
-}
diff --git a/api20/src/java/javax/jdo/listener/InstanceLifecycleListener.java b/api20/src/java/javax/jdo/listener/InstanceLifecycleListener.java
deleted file mode 100644
index 4067e86..0000000
--- a/api20/src/java/javax/jdo/listener/InstanceLifecycleListener.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- * 
- * Licensed 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 
- * 
- *     http://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 
- * limitations under the License.
- */
-
-/*
- * InstanceLifecycleListener.java
- *
- */
-
-package javax.jdo.listener;
-
-/**
- * All lifecycle listeners extend from this base interface.
- * In order to minimize the impact on domain classes, instance callbacks 
- * can be defined to use a life-cycle listener pattern instead of 
- * having the domain class implement the callback interface(s).
- *
- * @version 2.0
- * @since 2.0
- */
-public interface InstanceLifecycleListener {
-}
diff --git a/api20/src/java/javax/jdo/listener/LoadCallback.java b/api20/src/java/javax/jdo/listener/LoadCallback.java
deleted file mode 100644
index d76dfa1..0000000
--- a/api20/src/java/javax/jdo/listener/LoadCallback.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- * 
- * Licensed 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 
- * 
- *     http://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 
- * limitations under the License.
- */
-
-/*
- * LoadCallback.java
- *
- */
- 
-package javax.jdo.listener;
-
-/**
- * This interface is used to notify instances of load events.
- * @version 2.0
- * @since 2.0
- */
-public interface LoadCallback {
-    
-    /**
-     * Called after the values are loaded from the data store into
-     * this instance.
-     *
-     * <P>This method is not modified by the enhancer.
-     * <P>Derived fields should be initialized in this method.
-     * The context in which this call is made does not allow access to 
-     * other persistent JDO instances.
-     */
-    void jdoPostLoad();
-}
diff --git a/api20/src/java/javax/jdo/listener/LoadLifecycleListener.java b/api20/src/java/javax/jdo/listener/LoadLifecycleListener.java
deleted file mode 100644
index 2e6b87c..0000000
--- a/api20/src/java/javax/jdo/listener/LoadLifecycleListener.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- * 
- * Licensed 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 
- * 
- *     http://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 
- * limitations under the License.
- */
-
-/*
- * LoadLifecycleListener.java
- *
- */
-
-package javax.jdo.listener;
-
-/**
- * This interface is implemented by listeners to be notified of
- * load events.
- * @version 2.0
- * @since 2.0
- */
-public interface LoadLifecycleListener
-    extends InstanceLifecycleListener {
-
-    /**
-     * Invoked whenever a persistent instance is loaded from the data
-     * store. It is called after the method {@link LoadCallback#jdoPostLoad}
-     * is invoked on the persistent instance.
-     * @param event the load event.
-     * @since 2.0
-     */
-    void postLoad (InstanceLifecycleEvent event);
-}
diff --git a/api20/src/java/javax/jdo/listener/StoreCallback.java b/api20/src/java/javax/jdo/listener/StoreCallback.java
deleted file mode 100644
index efdeda1..0000000
--- a/api20/src/java/javax/jdo/listener/StoreCallback.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- * 
- * Licensed 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 
- * 
- *     http://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 
- * limitations under the License.
- */
-
-/*
- * StoreCallback.java
- *
- */
- 
-package javax.jdo.listener;
-
-/**
- * This interface is used to notify instances of store events.
- * @version 2.0
- * @since 2.0
- */
-public interface StoreCallback {
-    
-    /**
-     * Called before the values are stored from this instance to the
-     * data store.
-     *
-     * <P>Data store fields that might have been affected by modified
-     * non-persistent fields should be updated in this method.
-     *
-     * <P>This method is modified by the enhancer so that changes to 
-     * persistent fields will be reflected in the data store. 
-     * The context in which this call is made allows access to the 
-     * <code>PersistenceManager</code> and other persistent JDO instances.
-     */
-    void jdoPreStore();
-}
diff --git a/api20/src/java/javax/jdo/listener/StoreLifecycleListener.java b/api20/src/java/javax/jdo/listener/StoreLifecycleListener.java
deleted file mode 100644
index 4e88065..0000000
--- a/api20/src/java/javax/jdo/listener/StoreLifecycleListener.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- * 
- * Licensed 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 
- * 
- *     http://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 
- * limitations under the License.
- */
-
-/*
- * StoreLifecycleListener.java
- *
- */
-
-package javax.jdo.listener;
-
-/**
- * This interface is implemented by listeners to be notified of
- * store events.
- * @version 2.0
- * @since 2.0
- */
-public interface StoreLifecycleListener
-	extends InstanceLifecycleListener {
-
-    /**
-     * Invoked whenever a persistent instance is stored, for example during 
-     * {@link javax.jdo.PersistenceManager#flush} or 
-     * {@link javax.jdo.Transaction#commit}. It is called before the
-     * method {@link StoreCallback#jdoPreStore} is invoked.
-     * @param event the store event.
-     * @since 2.0
-     */
-    void preStore (InstanceLifecycleEvent event);
-    
-    /**
-     * Invoked whenever a persistent instance is stored, for example during 
-     * {@link javax.jdo.PersistenceManager#flush} or 
-     * {@link javax.jdo.Transaction#commit}. It is called after the
-     * field values have been stored.
-     * @param event the store event.
-     * @since 2.0
-     */
-    void postStore (InstanceLifecycleEvent event);
-}
diff --git a/api20/src/java/javax/jdo/listener/package.html b/api20/src/java/javax/jdo/listener/package.html
deleted file mode 100644
index c325c2c..0000000
--- a/api20/src/java/javax/jdo/listener/package.html
+++ /dev/null
@@ -1,54 +0,0 @@
-<!--
- Copyright 2005 The Apache Software Foundation.
- 
- Licensed 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 
- 
-     http://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 
- limitations under the License.
--->
-
-<html>
-<head>
-<title>Listener package</title>
-<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-</head>
-
-<body bgcolor="#FFFFFF">
-This package contains the JDO specification listener interfaces and classes.
-<P>There are two kinds of interfaces defined to allow an application to 
-manage life cycle changes to persistent objects. 
-<P>The first kind is defined
-on the persistent domain class itself. This allows methods in the domain class
-to be called during life cycle events. The domain class implements one or more
-of the interfaces 
-{@link javax.jdo.listener.AttachCallback}, 
-{@link javax.jdo.listener.ClearCallback}, 
-{@link javax.jdo.listener.DeleteCallback}, 
-{@link javax.jdo.listener.DetachCallback},
-{@link javax.jdo.listener.LoadCallback}, or 
-{@link javax.jdo.listener.StoreCallback}. 
-The methods in the interfaces
-are called during life cycle events.
-<P>The second kind is defined on an external class using the listener pattern.
-Instances of classes that implement one or more of the listener interfaces 
-{@link javax.jdo.listener.AttachLifecycleListener}, 
-{@link javax.jdo.listener.ClearLifecycleListener}, 
-{@link javax.jdo.listener.CreateLifecycleListener}, 
-{@link javax.jdo.listener.DeleteLifecycleListener}, 
-{@link javax.jdo.listener.DetachLifecycleListener}, 
-{@link javax.jdo.listener.DirtyLifecycleListener}, 
-{@link javax.jdo.listener.LoadLifecycleListener}, or 
-{@link javax.jdo.listener.StoreLifecycleListener}
-are registered
-with the PersistenceManager or PersistenceManagerFactory
-and receive callbacks during life cycle events
-of the persistent instances of interest.
-</body>
-</html>
diff --git a/api20/src/java/javax/jdo/package.html b/api20/src/java/javax/jdo/package.html
deleted file mode 100644
index 3cc37f0..0000000
--- a/api20/src/java/javax/jdo/package.html
+++ /dev/null
@@ -1,90 +0,0 @@
-<!--
- Copyright 2005 The Apache Software Foundation.
- 
- Licensed 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 
- 
-     http://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 
- limitations under the License.
--->
-
-<html>
-<head>
-<title>JDO package</title>
-<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-</head>
-
-<body bgcolor="#FFFFFF">
-This package contains the JDO specification interfaces and classes. 
-<P>There are two major objectives of the JDO architecture: 
-first, to provide application programmers a transparent,
-Java-centric view of persistent information, including enterprise data 
-and locally stored data; and second, to enable pluggable implementations 
-of data stores into 
-application servers.  Data stored in data stores is presented as
-instances of persistence-capable classes.
-<P>JDO defines interfaces and classes to be used by application programmers 
-when using classes whose instances are to be stored in persistent storage 
-(persistence-capable classes), and specifies the contracts between 
-suppliers of persistence-capable classes and the 
-runtime environment (which is part of the JDO implementation).
-<P>The JDO architecture defines a standard set of contracts between an 
-application programmer and an JDO vendor. These contracts focus on the 
-view of the Java instances of persistence capable classes.
-<P>The JDO PersistenceManagerFactory is the boostrap class for a JDO
-application.  The application gets an instance of the
-PersistenceManagerFactory by construction or via JDNI lookup.
-<P>The application acquires an instance of the JDO PersistenceManager by
-calling the getPersistenceManager method on an instance of JDO
-PersistenceManagerFactory.  
-<P>The JDO PersistenceManager is the primary interface for JDO-aware 
-application components: 
-<ul>
-<li>it gives access to the current Transaction interface;
-<li>it is the factory for the Query interface;
-<li>it contains methods for managing the life cycle of persistent instances.
-</ul>
-<P>A JDO PersistenceManager instance supports any number of JDO instances 
-at a time. It is responsible for managing the identity of its 
-associated JDO instances. A JDO instance is associated with either 
-zero or one JDO PersistenceManager. It will be zero if and only if the 
-JDO instance is transient nontransactional. As soon as the instance is made persistent 
-or transactional, it will be associated with exactly one JDO PersistenceManager.
-<P>A JDO PersistenceManager instance supports one transaction at a time, 
-and uses one connection to the underlying data source at a time. The JDO 
-PersistenceManager instance might use multiple transactions serially, 
-and might use multiple connections serially.
-<P>Normally, cache management is automatic and transparent. When instances 
-are queried, navigated to, or modified, instantiation of instances and 
-their fields and garbage collection of unreferenced instances occurs 
-without any explicit control. When the transaction in which persistent 
-instances are created, deleted, or modified commits, eviction is 
-automatically done by the transaction completion mechanisms. 
-<P>Operations on persistent JDO instances at the user's choice might be 
-performed in the context of a transaction. That is, the view of data 
-in the data store is transactionally consistent, according to the 
-standard definition of ACID transactions.
-<P>The Transaction interface is used to mark the beginning and end of a 
-application-defined unit of work.  The PersistenceManager allows the 
-application to get the instance that manages these transactional
-boundaries via the currentTransaction method.
-<P>The persistent manager instance is a factory for query instances, 
-and queries are executed in the context of the persistent manager instance. 
-The actual query execution might be performed by the JDO PersistenceManager 
-or might be delegated by the JDO PersistenceManager to its data store. 
-The actual query executed thus might be implemented in a very different 
-language from Java, and might be optimized to take advantage of particular 
-query language implementations.
-<P>Extents are collections of data store objects managed by the data store, 
-not by explicit user operations on collections. Extent capability is a 
-boolean property of classes that are persistence capable. If an instance 
-of a class that has a managed extent is made persistent via reachability, 
-the instance is put into the extent implicitly.
-</body>
-</html>
diff --git a/api20/src/java/javax/jdo/spi/Detachable.java b/api20/src/java/javax/jdo/spi/Detachable.java
deleted file mode 100644
index 9428ff3..0000000
--- a/api20/src/java/javax/jdo/spi/Detachable.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- * 
- * Licensed 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 
- * 
- *     http://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 
- * limitations under the License.
- */
-
-package javax.jdo.spi;
-
-/**
- * This interface is implemented by classes that can be detached from the
- * persistence context and later attached. The interface includes the 
- * contract by which the StateManager can set the object id, version,
- * BitSet of loaded fields, and BitSet of modified fields 
- * so they are preserved while outside the persistence environment.
- * <P>The detached state is stored as a field in each instance of Detachable. 
- * The field is serialized so as to maintain the state of the instance 
- * while detached. While detached, only the BitSet of modified fields 
- * will be modified. The structure of the Object[] jdoDetachedState
- * is as follows:
- *  <ul><li>jdoDetachedState[0]: the Object Id of the instance
- * </li><li>jdoDetachedState[1]: the Version of the instance
- * </li><li>jdoDetachedState[2]: a BitSet of loaded fields
- * </li><li>jdoDetachedState[3]: a BitSet of modified fields
- * </li></ul>
- * @version 2.0
- */
-
-public interface Detachable {
-
-    /** This method calls the StateManager with the current detached 
-     * state instance as a parameter and replaces the current detached 
-     * state instance with the value provided by the StateManager.  
-     * @since 2.0
-     */    
-    public void jdoReplaceDetachedState();
-}
diff --git a/api20/src/java/javax/jdo/spi/I18NHelper.java b/api20/src/java/javax/jdo/spi/I18NHelper.java
deleted file mode 100644
index 4fc1128..0000000
--- a/api20/src/java/javax/jdo/spi/I18NHelper.java
+++ /dev/null
@@ -1,403 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- * 
- * Licensed 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 
- * 
- *     http://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 
- * limitations under the License.
- */
-
-package javax.jdo.spi;
-
-import java.util.*;
-import java.text.MessageFormat;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-
-import javax.jdo.JDOFatalInternalException;
-
-/** Helper class for constructing messages from bundles.  The intended usage
- * of this class is to construct a new instance bound to a bundle, as in
- * <P>
- * <code>I18NHelper msg = I18NHelper.getInstance("javax.jdo.Bundle");</code>
- * <P>
- * This call uses the class loader that loaded the I18NHelper class to find
- * the specified Bundle. The class provides two overloaded getInstance
- * methods allowing to specify a different class loader: 
- * {@link #getInstance(Class cls)} looks for a bundle
- * called "Bundle.properties" located in the package of the specified class 
- * object and {@link #getInstance(String bundleName,ClassLoader loader)} 
- * uses the specified class loader to find the bundle.
- * <P>
- * Subsequently, instance methods can be used to format message strings 
- * using the text from the bundle, as in 
- * <P>
- * <code>throw new JDOFatalInternalException (msg.msg("ERR_NoMetadata", 
- * cls.getName()));</code>
- * @since 1.0.1
- * @version 1.1
- */        
-public class I18NHelper {
-
-    /** Bundles that have already been loaded 
-     */
-    private static Hashtable    bundles = new Hashtable();
-    
-    /** Helper instances that have already been created 
-     */
-    private static Hashtable    helpers = new Hashtable();
-    
-    /** The default locale for this VM.
-     */
-    private static Locale       locale = Locale.getDefault();
-
-    /** The name of the bundle used by this instance of the helper.
-     */
-    private final String        bundleName;
-
-    /** The bundle used by this instance of the helper.
-     */
-    private ResourceBundle      bundle = null;
-
-    /** Throwable if ResourceBundle couldn't be loaded
-     */
-    private Throwable           failure = null;
-
-    /** The unqualified standard name of a bundle. */
-    private static final String bundleSuffix = ".Bundle";    // NOI18N
-
-    /** Constructor */
-    private I18NHelper() {
-        this.bundleName = null;
-    }
-
-    /** Constructor for an instance bound to a bundle.
-     * @param bundleName the name of the resource bundle
-     * @param loader the class loader from which to load the resource
-     * bundle
-     */
-    private I18NHelper (String bundleName, ClassLoader loader) {
-        this.bundleName = bundleName;
-        try {
-            bundle = loadBundle (bundleName, loader);
-        }
-        catch (Throwable e) {
-            failure = e;
-        }
-    }
-    
-    /** An instance bound to a bundle. This method uses the current class 
-     * loader to find the bundle.
-     * @param bundleName the name of the bundle
-     * @return the helper instance bound to the bundle
-     */
-    public static I18NHelper getInstance (String bundleName) {
-        return getInstance (bundleName, I18NHelper.class.getClassLoader());
-    }
-
-    /** An instance bound to a bundle. This method figures out the bundle name
-     * for the class object's package and uses the class' class loader to
-     * find the bundle. Note, the specified class object must not be
-     * <code>null</code>.
-     * @param cls the class object from which to load the resource bundle
-     * @return the helper instance bound to the bundle
-     */
-    public static I18NHelper getInstance (final Class cls) {
-        ClassLoader classLoader = (ClassLoader) AccessController.doPrivileged (
-            new PrivilegedAction () {
-                public Object run () {
-                    return cls.getClassLoader();
-                }
-            }
-            );
-        String bundle = getPackageName (cls.getName()) + bundleSuffix;
-        return getInstance (bundle, classLoader);
-    }
-
-    /** An instance bound to a bundle. This method uses the specified class
-     * loader to find the bundle. Note, the specified class loader must not
-     * be <code>null</code>.
-     * @param bundleName the name of the bundle
-     * @param loader the class loader from which to load the resource
-     * bundle
-     * @return the helper instance bound to the bundle
-     */
-    public static I18NHelper getInstance (String bundleName, 
-                                          ClassLoader loader) {
-        I18NHelper helper = (I18NHelper) helpers.get (bundleName);
-        if (helper != null) {
-            return helper;
-        }
-        helper = new I18NHelper(bundleName, loader);
-        helpers.put (bundleName, helper);
-        // if two threads simultaneously create the same helper, return the first
-        // one to be put into the Hashtable.  The other will be garbage collected.
-        return (I18NHelper) helpers.get (bundleName);
-    }
-
-    /** Message formatter
-     * @param messageKey the message key
-     * @return the resolved message text
-     */
-    public String msg (String messageKey) {
-        assertBundle (messageKey);
-        return getMessage (bundle, messageKey);
-    }
-
-    /** Message formatter
-     * @param messageKey the message key
-     * @param arg1 the first argument
-     * @return the resolved message text
-     */
-    public String msg (String messageKey, Object arg1) {
-        assertBundle (messageKey);
-        return getMessage (bundle, messageKey, arg1);
-    }
-
-    /** Message formatter
-     * @param messageKey the message key
-     * @param arg1 the first argument
-     * @param arg2 the second argument
-     * @return the resolved message text
-     */
-    public String msg (String messageKey, Object arg1, Object arg2) {
-        assertBundle (messageKey);
-        return getMessage (bundle, messageKey, arg1, arg2);
-    }
-
-    /** Message formatter
-     * @param messageKey the message key
-     * @param arg1 the first argument
-     * @param arg2 the second argument
-     * @param arg3 the third argument
-     * @return the resolved message text
-     */
-    public String msg (String messageKey, Object arg1, Object arg2, Object arg3) {
-        assertBundle (messageKey);
-        return getMessage (bundle, messageKey, arg1, arg2, arg3);
-    }
-
-    /** Message formatter
-     * @param messageKey the message key
-     * @param args the array of arguments
-     * @return the resolved message text
-     */
-    public String msg (String messageKey, Object[] args) {
-        assertBundle (messageKey);
-        return getMessage (bundle, messageKey, args);
-    }
-
-    /** Message formatter
-     * @param messageKey the message key
-     * @param arg the argument
-     * @return the resolved message text
-     */
-    public String msg (String messageKey, int arg) {
-        assertBundle (messageKey);
-        return getMessage(bundle, messageKey, arg);
-    }
-    
-    /** Message formatter
-     * @param messageKey the message key
-     * @param arg the argument
-     * @return the resolved message text
-     */
-    public String msg (String messageKey, boolean arg) {
-        assertBundle (messageKey);
-        return getMessage(bundle, messageKey, arg);
-    }
-    
-    /** Returns the resource bundle used by this I18NHelper.
-     * @return the associated resource bundle
-     * @since 1.1
-     */
-    public ResourceBundle getResourceBundle () {
-        assertBundle ();
-        return bundle;
-    }
-    
-    //========= Internal helper methods ==========
-
-    /**
-     * Load ResourceBundle by bundle name
-     * @param bundleName the name of the bundle
-     * @param loader the class loader from which to load the resource bundle
-     * @return  the ResourceBundle
-     */
-    final private static ResourceBundle loadBundle(
-        String bundleName, ClassLoader loader) {
-        ResourceBundle messages = (ResourceBundle)bundles.get(bundleName);
-
-        if (messages == null) //not found as loaded - add
-        {
-            if (loader != null) {
-                messages = ResourceBundle.getBundle(bundleName, locale, loader);
-            } else {
-                // the JDO library is loaded by the boostrap class loader
-                messages = ResourceBundle.getBundle(bundleName, locale,
-                        getSystemClassLoaderPrivileged());
-            }
-            bundles.put(bundleName, messages);
-        }
-        return messages;
-    }
-
-    /** Assert resources available
-     * @since 1.1
-     * @throws JDOFatalInternalException if the resource bundle could not
-     * be loaded during construction.
-     */
-    private void assertBundle () {
-        if (failure != null)
-            throw new JDOFatalInternalException (
-                "No resources could be found for bundle:\"" + 
-                bundle + "\" ", failure);
-    }
-    
-    /** Assert resources available
-     * @param key the message key 
-     * @since 1.0.2
-     * @throws JDOFatalInternalException if the resource bundle could not
-     * be loaded during construction.
-     */
-    private void assertBundle (String key) {
-        if (failure != null)
-            throw new JDOFatalInternalException (
-                "No resources could be found to annotate error message key:\"" + 
-                key + "\"", failure);
-    }
-
-    /**
-     * Returns message as <code>String</code>
-     * @param messages the resource bundle
-     * @param messageKey the message key
-     * @return the resolved message text
-     */
-    final private static String getMessage(ResourceBundle messages, String messageKey) 
-    {
-        return messages.getString(messageKey);
-    }
-
-    /**
-     * Formats message by adding array of arguments
-     * @param messages the resource bundle
-     * @param messageKey the message key
-     * @param msgArgs an array of arguments to substitute into the message
-     * @return the resolved message text
-     */
-    final private static String getMessage(ResourceBundle messages, 
-            String messageKey, Object[] msgArgs) 
-    {
-        for (int i=0; i<msgArgs.length; i++) {
-            if (msgArgs[i] == null) msgArgs[i] = ""; // NOI18N
-        }
-        MessageFormat formatter = new MessageFormat(messages.getString(messageKey));
-        return formatter.format(msgArgs);
-    }
-    
-    /**
-     * Formats message by adding an <code>Object</code> argument.
-     * @param messages the resource bundle
-     * @param messageKey the message key
-     * @param arg the argument
-     * @return the resolved message text
-     */
-    final private static String getMessage(ResourceBundle messages, 
-            String messageKey, Object arg) 
-    {
-        Object []args = {arg};
-        return getMessage(messages, messageKey, args);
-    }
-    
-    /**
-     * Formats message by adding two <code>Object</code> arguments.
-     * @param messages the resource bundle
-     * @param messageKey the message key
-     * @param arg1 the first argument
-     * @param arg2 the second argument
-     * @return the resolved message text
-     */
-    final private static String getMessage(ResourceBundle messages, 
-            String messageKey, Object arg1, Object arg2) 
-    {
-        Object []args = {arg1, arg2};
-        return getMessage(messages, messageKey, args);
-    }
-    
-    /**
-     * Formats message by adding three <code>Object</code> arguments.
-     * @param messages the resource bundle
-     * @param messageKey the message key
-     * @param arg1 the first argument
-     * @param arg2 the second argument
-     * @param arg3 the third argument
-     * @return the resolved message text
-     */
-    final private static String getMessage(ResourceBundle messages, 
-            String messageKey, Object arg1, Object arg2, Object arg3) 
-    {
-        Object []args = {arg1, arg2, arg3};
-        return getMessage(messages, messageKey, args);
-    }
-
-    /**
-     * Formats message by adding an <code>int</code> as an argument.
-     * @param messages the resource bundle
-     * @param messageKey the message key
-     * @param arg the argument
-     * @return the resolved message text
-     */
-    final private static String getMessage(ResourceBundle messages, 
-            String messageKey, int arg) 
-    {
-        Object []args = {new Integer(arg)};
-        return getMessage(messages, messageKey, args);
-    }
-    
-    /**
-     * Formats message by adding a <code>boolean</code> as an argument.
-     * @param messages the resource bundle
-     * @param messageKey the message key
-     * @param arg the argument
-     * @return the resolved message text
-     */
-    final private static String getMessage(ResourceBundle messages, 
-            String messageKey, boolean arg) 
-    {
-        Object []args = {String.valueOf(arg)};
-        return getMessage(messages, messageKey, args);
-    }
-
-    /**  
-     * Returns the package portion of the specified class.
-     * @param className the name of the class from which to extract the 
-     * package 
-     * @return package portion of the specified class
-     */   
-    final private static String getPackageName(final String className)
-    { 
-        final int index = className.lastIndexOf('.');
-        return ((index != -1) ? className.substring(0, index) : ""); // NOI18N
-    }
-
-    /**
-     * Get the system class loader. This must be done in a doPrivileged 
-     * block because of security.
-     */
-    private static ClassLoader getSystemClassLoaderPrivileged() {
-        return (ClassLoader) AccessController.doPrivileged (
-            new PrivilegedAction () {
-                public Object run () {
-                    return ClassLoader.getSystemClassLoader();
-                }
-            }
-        );
-    }
-}
diff --git a/api20/src/java/javax/jdo/spi/JDOImplHelper.java b/api20/src/java/javax/jdo/spi/JDOImplHelper.java
deleted file mode 100644
index a5ec65b..0000000
--- a/api20/src/java/javax/jdo/spi/JDOImplHelper.java
+++ /dev/null
@@ -1,935 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- * 
- * Licensed 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 
- * 
- *     http://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 
- * limitations under the License.
- */
-
-/*
- * JDOImplHelper.java
- *
- */
-
-package javax.jdo.spi;
-
-import java.lang.reflect.Constructor;
-
-import java.text.DateFormat;
-import java.text.ParsePosition;
-import java.text.SimpleDateFormat;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Currency;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.WeakHashMap;
-
-import javax.jdo.JDOException;
-import javax.jdo.JDOFatalInternalException;
-import javax.jdo.JDOFatalUserException;
-import javax.jdo.JDOUserException;
-
-/** This class is a helper class for JDO implementations.  It contains methods
- * to register metadata for persistence-capable classes and to perform common
- * operations needed by implementations, not by end users.
- * <P><code>JDOImplHelper</code> allows construction of instances of 
- * persistence-capable classes without using reflection.
- * <P>Persistence-capable classes register themselves via a static method 
- * at class load time.
- * There is no security restriction on this access.  JDO implementations
- * get access to the functions provided by this class only if they are
- * authorized by the security manager.  To avoid having every call go through
- * the security manager, only the call to get an instance is checked.  Once an 
- * implementation
- * has an instance, any of the methods can be invoked without security checks.
- * @version 1.0.2
- *
- */
-public class JDOImplHelper extends java.lang.Object {
-    
-    /** This synchronized <code>HashMap</code> contains a static mapping of
-     * <code>PersistenceCapable</code> class to
-     * metadata for the class used for constructing new instances.  New entries
-     * are added by the static method in each <code>PersistenceCapable</code> 
-     * class.  Entries are never removed.
-     */    
-    private static Map registeredClasses = 
-            Collections.synchronizedMap(new HashMap ());
-    
-    /** This Set contains all classes that have registered for setStateManager
-     * permissions via authorizeStateManagerClass.
-     */
-    private static Map authorizedStateManagerClasses = new WeakHashMap();
-
-    /** This list contains the registered listeners for 
-     * <code>RegisterClassEvent</code>s.
-     */
-    private static List listeners = new ArrayList();
-    
-    /** The list of registered StateInterrogation instances
-     */
-    private static List stateInterrogations = new ArrayList();
-
-    /** The singleton <code>JDOImplHelper</code> instance.
-     */    
-    private static JDOImplHelper jdoImplHelper = new JDOImplHelper();
-    
-    /** The Internationalization message helper.
-     */
-    private final static I18NHelper msg = 
-            I18NHelper.getInstance ("javax.jdo.Bundle"); //NOI18N
-    
-    /** The DateFormat pattern.
-     */
-    private static String dateFormatPattern;
-
-    /** The default DateFormat instance.
-     */
-    private static DateFormat dateFormat;
-
-    /** Register the default DateFormat instance.
-     */
-    static {
-        jdoImplHelper.registerDateFormat(DateFormat.getDateTimeInstance());
-    }
-    
-    /** Creates new JDOImplHelper */
-    private JDOImplHelper() {
-    }
-    
-    /** Get an instance of <code>JDOImplHelper</code>.  This method
-     * checks that the caller is authorized for 
-     * <code>JDOPermission("getMetadata")</code>, and if not, throws 
-     * <code>SecurityException</code>.
-     * @return an instance of <code>JDOImplHelper</code>.
-     * @throws SecurityException if the caller is not authorized for 
-     * JDOPermission("getMetadata").
-     */    
-    public static JDOImplHelper getInstance() 
-        throws SecurityException {        
-        SecurityManager sec = System.getSecurityManager();
-        if (sec != null) { 
-            // throws exception if caller is not authorized
-            sec.checkPermission (JDOPermission.GET_METADATA);
-        }
-        return jdoImplHelper;
-    }
-    
-    /** Get the field names for a <code>PersistenceCapable</code> class.  The 
-     * order of fields is the natural ordering of the <code>String</code> class
-     * (without considering localization).
-     * @param pcClass the <code>PersistenceCapable</code> class.
-     * @return the field names for the class.
-     */    
-    public String[] getFieldNames (Class pcClass) {
-        Meta meta = getMeta (pcClass);
-        return meta.getFieldNames();
-    }
-
-    /** Get the field types for a <code>PersistenceCapable</code> class.  The 
-     * order of fields is the same as for field names.
-     * @param pcClass the <code>PersistenceCapable</code> class.
-     * @return the field types for the class.
-     */    
-    public Class[] getFieldTypes (Class pcClass) {
-        Meta meta = getMeta (pcClass);
-        return meta.getFieldTypes();
-    }
-            
-    /** Get the field flags for a <code>PersistenceCapable</code> class.  The 
-     * order of fields is the same as for field names.
-     * @param pcClass the <code>PersistenceCapable</code> class.
-     * @return the field types for the class.
-     */    
-    public byte[] getFieldFlags (Class pcClass) {
-        Meta meta = getMeta (pcClass);
-        return meta.getFieldFlags();
-    }
-            
-    /** Get the persistence-capable superclass for a 
-     * <code>PersistenceCapable</code> class.
-     * @param pcClass the <code>PersistenceCapable</code> class.
-     * @return The <code>PersistenceCapable</code> superclass for this class,
-     * or <code>null</code> if there isn't one.
-     */    
-    public Class getPersistenceCapableSuperclass (Class pcClass) {
-        Meta meta = getMeta (pcClass);
-        return meta.getPersistenceCapableSuperclass();
-    }
-            
-    
-    /** Create a new instance of the class and assign its 
-     * <code>jdoStateManager</code>.  The new instance has its 
-     * <code>jdoFlags</code> set to <code>LOAD_REQUIRED</code>.
-     * @see PersistenceCapable#jdoNewInstance(StateManager sm)
-     * @param pcClass the <code>PersistenceCapable</code> class.
-     * @param sm the <code>StateManager</code> which will own the new instance.
-     * @return the new instance, or <code>null</code> if the class is not 
-     * registered.
-     */    
-    public PersistenceCapable newInstance (Class pcClass, StateManager sm) {
-        Meta meta = getMeta (pcClass);
-        PersistenceCapable pcInstance = meta.getPC();
-        return pcInstance == null?null:pcInstance.jdoNewInstance(sm);
-    }
-    
-    /** Create a new instance of the class and assign its 
-     * <code>jdoStateManager</code> and key values from the ObjectId.  If the 
-     * oid parameter is <code>null</code>, no key values are copied.
-     * The new instance has its <code>jdoFlags</code> set to 
-     * <code>LOAD_REQUIRED</code>.
-     * @see PersistenceCapable#jdoNewInstance(StateManager sm, Object oid)
-     * @param pcClass the <code>PersistenceCapable</code> class.
-     * @param sm the <code>StateManager</code> which will own the new instance.
-     * @return the new instance, or <code>null</code> if the class is not 
-     * registered.
-     * @param oid the ObjectId instance from which to copy key field values.
- */    
-    public PersistenceCapable newInstance 
-            (Class pcClass, StateManager sm, Object oid) {
-        Meta meta = getMeta (pcClass);
-        PersistenceCapable pcInstance = meta.getPC();
-        return pcInstance == null?null:pcInstance.jdoNewInstance(sm, oid);
-    }
-    
-    /** Create a new instance of the ObjectId class of this
-     * <code>PersistenceCapable</code> class.
-     * It is intended only for application identity. This method should
-     * not be called for classes that use single field identity;
-     * newObjectIdInstance(Class, Object) should be used instead. 
-     * If the class has been 
-     * enhanced for datastore identity, or if the class is abstract, 
-     * null is returned.
-     * @param pcClass the <code>PersistenceCapable</code> class.
-     * @return the new ObjectId instance, or <code>null</code> if the class 
-     * is not registered.
-     */    
-    public Object newObjectIdInstance (Class pcClass) {
-        Meta meta = getMeta (pcClass);
-        PersistenceCapable pcInstance = meta.getPC();
-        return pcInstance == null?null:pcInstance.jdoNewObjectIdInstance();
-    }
-    
-    /** Create a new instance of the class used by the parameter Class
-     * for JDO identity, using the
-     * key constructor of the object id class. It is intended for single
-     * field identity. The identity
-     * instance returned has no relationship with the values of the primary key
-     * fields of the persistence-capable instance on which the method is called.
-     * If the key is the wrong class for the object id class, null is returned.
-     * <P>For classes that use single field identity, if the parameter is 
-     * of one of the following types, the behavior must be as specified:
-     * <ul><li><code>Number</code> or <code>Character</code>: the 
-     * parameter must be the single field
-     * type or the wrapper class of the primitive field type; the parameter
-     * is passed to the single field identity constructor
-     * </li><li><code>ObjectIdFieldSupplier</code>: the field value
-     * is fetched from the <code>ObjectIdFieldSupplier</code> and passed to the 
-     * single field identity constructor
-     * </li><li><code>String</code>: the String is passed to the 
-     * single field identity constructor
-     * </li></ul>
-     * @return the new ObjectId instance, or <code>null</code> 
-     * if the class is not registered.
-     * @param obj the <code>Object</code> form of the object id
-     * @param pcClass the <code>PersistenceCapable</code> class.
-     * @since 2.0
-     */
-    public Object newObjectIdInstance (Class pcClass, Object obj) {
-        Meta meta = getMeta (pcClass);
-        PersistenceCapable pcInstance = meta.getPC();
-        return (pcInstance == null)?null:pcInstance.jdoNewObjectIdInstance(obj);
-    }
-    
-    /** Copy fields from an outside source to the key fields in the ObjectId.
-     * This method is generated in the <code>PersistenceCapable</code> class to
-     * generate a call to the field manager for each key field in the ObjectId.  
-     * <P>For example, an ObjectId class that has three key fields 
-     * (<code>int id</code>, <code>String name</code>, and 
-     * <code>Float salary</code>) would have the method generated:
-     * <P><code>
-     * void jdoCopyKeyFieldsToObjectId (Object oid, ObjectIdFieldSupplier fm) {
-     * <BR>    oid.id = fm.fetchIntField (0);
-     * <BR>    oid.name = fm.fetchStringField (1);
-     * <BR>    oid.salary = fm.fetchObjectField (2);
-     * <BR>}</code>
-     * <P>The implementation is responsible for implementing the 
-     * <code>ObjectIdFieldSupplier</code> to provide the values for the key 
-     * fields.
-     * @param pcClass the <code>PersistenceCapable Class</code>.
-     * @param oid the ObjectId target of the copy.
-     * @param fm the field manager that supplies the field values.
- */    
-    public void copyKeyFieldsToObjectId 
-    (Class pcClass, PersistenceCapable.ObjectIdFieldSupplier fm, Object oid) {
-        Meta meta = getMeta (pcClass);
-        PersistenceCapable pcInstance = meta.getPC();
-        if (pcInstance == null) {
-            throw new JDOFatalInternalException (msg.msg(
-                    "ERR_AbstractClassNoIdentity", pcClass.getName())); //NOI18N
-        }
-        pcInstance.jdoCopyKeyFieldsToObjectId(fm, oid);
-    }
-
-    /** Copy fields to an outside source from the key fields in the ObjectId.
-     * This method is generated in the <code>PersistenceCapable</code> class to 
-     * generate a call to the field manager for each key field in the ObjectId.  
-     * For example, an ObjectId class that has three key fields 
-     * (<code>int id</code>, <code>String name</code>, and 
-     * <code>Float salary</code>) would have the method generated:
-     * <P><code>void jdoCopyKeyFieldsFromObjectId
-     * <BR>        (PersistenceCapable oid, ObjectIdFieldConsumer fm) {
-     * <BR>     fm.storeIntField (0, oid.id);
-     * <BR>     fm.storeStringField (1, oid.name);
-     * <BR>     fm.storeObjectField (2, oid.salary);
-     * <BR>}</code>
-     * <P>The implementation is responsible for implementing the
-     * <code>ObjectIdFieldConsumer</code> to store the values for the key 
-     * fields.
-     * @param pcClass the <code>PersistenceCapable</code> class
-     * @param oid the ObjectId source of the copy.
-     * @param fm the field manager that receives the field values.
-     */    
-    public void copyKeyFieldsFromObjectId
-    (Class pcClass, PersistenceCapable.ObjectIdFieldConsumer fm, Object oid) {
-        Meta meta = getMeta (pcClass);
-        PersistenceCapable pcInstance = meta.getPC();
-        if (pcInstance == null) {
-            throw new JDOFatalInternalException (msg.msg(
-                    "ERR_AbstractClassNoIdentity", pcClass.getName())); //NOI18N
-        }
-        pcInstance.jdoCopyKeyFieldsFromObjectId(fm, oid);
-    }
-    
-    /** Register metadata by class.  The registration will be done in the
-     * class named <code>JDOImplHelper</code> loaded by the same or an
-     * ancestor class loader as the <code>PersistenceCapable</code> class
-     * performing the registration. 
-     *
-     * @param pcClass the <code>PersistenceCapable</code> class
-     * used as the key for lookup.
-     * @param fieldNames an array of <code>String</code> field names for 
-     * persistent and transactional fields
-     * @param fieldTypes an array of <code>Class</code> field types
-     * @param fieldFlags the Field Flags for persistent and transactional fields
-     * @param pc an instance of the <code>PersistenceCapable</code> class
-     * @param persistenceCapableSuperclass the most immediate superclass that is
-     * <code>PersistenceCapable</code>
-     */    
-    public static void registerClass (Class pcClass, 
-            String[] fieldNames, Class[] fieldTypes, 
-            byte[] fieldFlags, Class persistenceCapableSuperclass,
-            PersistenceCapable pc) {
-        if (pcClass == null) 
-            throw new NullPointerException(msg.msg("ERR_NullClass")); //NOI18N
-        Meta meta = new Meta (fieldNames, fieldTypes, 
-            fieldFlags, persistenceCapableSuperclass, pc);
-        registeredClasses.put (pcClass, meta);
-
-        // handle class registration listeners
-        synchronized (listeners) {
-            if (!listeners.isEmpty()) {
-                RegisterClassEvent event = new RegisterClassEvent(
-                    jdoImplHelper, pcClass, fieldNames, fieldTypes, 
-                    fieldFlags, persistenceCapableSuperclass);
-                for (Iterator i = listeners.iterator(); i.hasNext();) {
-                    RegisterClassListener crl = 
-                        (RegisterClassListener)i.next();
-                    if (crl != null) {
-                        crl.registerClass(event);
-                    }
-                }
-            }
-        }
-    }
-        
-    /**
-     * Unregister metadata by class loader. This method unregisters all
-     * registered <code>PersistenceCapable</code> classes loaded by the
-     * specified class loader. Any attempt to get metadata for unregistered
-     * classes will result in a <code>JDOFatalUserException</code>. 
-     * @param cl the class loader.
-     * @since 1.0.2
-     */
-    public void unregisterClasses (ClassLoader cl)
-    {
-        SecurityManager sec = System.getSecurityManager();
-        if (sec != null) { 
-            // throws exception if caller is not authorized
-            sec.checkPermission (JDOPermission.MANAGE_METADATA);
-        }
-        synchronized(registeredClasses) {
-            for (Iterator i = registeredClasses.keySet().iterator(); 
-                 i.hasNext();) {
-                Class pcClass = (Class)i.next();
-                // Note, the pc class was registered by calling the static
-                // method JDOImplHelper.registerClass. This means the
-                // JDOImplHelper class loader is the same as or an ancestor
-                // of the class loader of the pc class. In this case method
-                // getClassLoader does not perform a security check for
-                // RuntimePermission("getClassLoader") and thus we do not 
-                // need a privileged block for the getClassLoader call.
-                if ((pcClass != null) && (pcClass.getClassLoader() == cl)) {
-                    // unregister pc class, if its class loader is the
-                    // specified one.
-                    i.remove();
-                }
-            }
-        }
-    }
-
-    /**
-     * Unregister metadata by class. This method unregisters the specified
-     * class. Any further attempt to get metadata for the specified class will
-     * result in a <code>JDOFatalUserException</code>. 
-     * @param pcClass the <code>PersistenceCapable</code> class to be 
-     * unregistered.
-     * @since 1.0.2
-     */
-    public void unregisterClass (Class pcClass)
-    {
-        if (pcClass == null) 
-            throw new NullPointerException(msg.msg("ERR_NullClass")); //NOI18N
-        SecurityManager sec = System.getSecurityManager();
-        if (sec != null) { 
-            // throws exception if caller is not authorized
-            sec.checkPermission (JDOPermission.MANAGE_METADATA);
-        }
-        registeredClasses.remove(pcClass);
-    }
-
-    /** 
-     * Add the specified <code>RegisterClassListener</code> to the listener 
-     * list.
-     * @param crl the listener to be added
-     */
-    public void addRegisterClassListener (RegisterClassListener crl) {
-        HashSet alreadyRegisteredClasses = null;
-        synchronized (listeners) {
-            listeners.add(crl);
-            // Make a copy of the existing set of registered classes.
-            // Between these two lines of code, any number of new class 
-            // registrations might occur, and will then all wait until this 
-            // synchronized block completes. Some of the class registrations 
-            // might be delivered twice to the newly registered listener.
-            alreadyRegisteredClasses = new HashSet (registeredClasses.keySet());
-        }
-        // new registrations will call the new listener while the following 
-        // occurs notify the new listener about already-registered classes
-        for (Iterator it = alreadyRegisteredClasses.iterator(); it.hasNext();) {
-            Class pcClass = (Class)it.next();
-            Meta meta = getMeta (pcClass);
-            RegisterClassEvent event = new RegisterClassEvent(
-                this, pcClass, meta.getFieldNames(), meta.getFieldTypes(), 
-                meta.getFieldFlags(), meta.getPersistenceCapableSuperclass());
-            crl.registerClass (event);
-        }
-    }
-
-    /** 
-     * Remove the specified <code>RegisterClassListener</code> from the listener
-     * list.
-     * @param crl the listener to be removed
-     */
-    public void removeRegisterClassListener (RegisterClassListener crl) {
-        synchronized (listeners) {
-            listeners.remove(crl);
-        }
-    }
-
-    /**
-     * Returns a collection of class objects of the registered 
-     * persistence-capable classes.
-     * @return registered persistence-capable classes
-     */
-    public Collection getRegisteredClasses() {
-        return Collections.unmodifiableCollection(registeredClasses.keySet());
-    }
-
-    /** Look up the metadata for a <code>PersistenceCapable</code> class.
-     * @param pcClass the <code>Class</code>.
-     * @return the <code>Meta</code> for the <code>Class</code>.
-     */    
-    private static Meta getMeta (Class pcClass) {
-        Meta ret = (Meta) registeredClasses.get (pcClass);
-        if (ret == null) {
-            throw new JDOFatalUserException(
-                msg.msg ("ERR_NoMetadata", pcClass.getName())); //NOI18N
-        }
-        return ret;
-    }
-    
-    /** Register a class authorized to replaceStateManager.  The caller of
-     * this method must be authorized for JDOPermission("setStateManager").
-     * During replaceStateManager, a persistence-capable class will call
-     * the corresponding checkAuthorizedStateManager and the class of the
-     * instance of the parameter must have been registered.
-     * @param smClass a Class that is authorized for 
-     * JDOPermission("setStateManager").
-     * @throws SecurityException if the caller is not authorized for 
-     * JDOPermission("setStateManager").
-     * @since 1.0.1
-     */
-    public static void registerAuthorizedStateManagerClass (Class smClass) 
-        throws SecurityException {
-        if (smClass == null) 
-            throw new NullPointerException(msg.msg("ERR_NullClass")); //NOI18N
-        SecurityManager sm = System.getSecurityManager();
-        if (sm != null) {
-            sm.checkPermission(JDOPermission.SET_STATE_MANAGER);
-        }
-        synchronized (authorizedStateManagerClasses) {
-            authorizedStateManagerClasses.put(smClass, null);
-        }
-    }
-    
-    /** Register classes authorized to replaceStateManager.  The caller of
-     * this method must be authorized for JDOPermission("setStateManager").
-     * During replaceStateManager, a persistence-capable class will call
-     * the corresponding checkAuthorizedStateManager and the class of the
-     * instance of the parameter must have been registered.
-     * @param smClasses a Collection of Classes that are authorized for 
-     * JDOPermission("setStateManager").
-     * @throws SecurityException if the caller is not authorized for 
-     * JDOPermission("setStateManager").
-     * @since 1.0.1
-     */
-    public static void registerAuthorizedStateManagerClasses (
-            Collection smClasses) throws SecurityException {
-        SecurityManager sm = System.getSecurityManager();
-        if (sm != null) {
-            sm.checkPermission(JDOPermission.SET_STATE_MANAGER);
-            synchronized (authorizedStateManagerClasses) {
-                for (Iterator it = smClasses.iterator(); it.hasNext();) {
-                    Object smClass = it.next();
-                    if (!(smClass instanceof Class)) {
-                        throw new ClassCastException(
-                            msg.msg("ERR_StateManagerClassCast", //NOI18N
-                                smClass.getClass().getName()));
-                    }
-                    registerAuthorizedStateManagerClass((Class)it.next());
-                }
-            }
-        }
-    }
-    
-    /** Check that the parameter instance is of a class that is authorized for
-     * JDOPermission("setStateManager").  This method is called by the
-     * replaceStateManager method in persistence-capable classes.
-     * A class that is passed as the parameter to replaceStateManager must be
-     * authorized for JDOPermission("setStateManager").  To improve performance,
-     * first the set of authorized classes is checked, and if not present, a
-     * regular permission check is made.  The regular permission check requires
-     * that all callers on the stack, including the persistence-capable class
-     * itself, must be authorized for JDOPermission("setStateManager").
-     * @param sm an instance of StateManager whose class is to be checked.
-     * @since 1.0.1
-     */
-    public static void checkAuthorizedStateManager (StateManager sm) {
-        checkAuthorizedStateManagerClass(sm.getClass());
-    }
-
-    /** Check that the parameter instance is a class that is authorized for
-     * JDOPermission("setStateManager").  This method is called by the
-     * constructors of JDO Reference Implementation classes.
-     * @param smClass a Class to be checked for JDOPermission("setStateManager")
-     * @since 1.0.1
-     */
-    public static void checkAuthorizedStateManagerClass (Class smClass) {
-        final SecurityManager scm = System.getSecurityManager();
-        if (scm == null) {
-            // if no security manager, no checking.
-            return;
-        }
-        synchronized(authorizedStateManagerClasses) {
-            if (authorizedStateManagerClasses.containsKey(smClass)) {
-                return;
-            }
-        }
-        // if not already authorized, perform "long" security checking.
-        scm.checkPermission(JDOPermission.SET_STATE_MANAGER);
-    }
-
-    /** 
-     * Construct an instance of a key class using a String as input.
-     * This is a helper interface for use with ObjectIdentity.
-     * Classes without a String constructor (such as those in java.lang
-     * and java.util) will use this interface for constructing new instances.
-     * The result might be a singleton or use some other strategy.
-     */
-    public interface StringConstructor {
-        /**
-         * Construct an instance of the class for which this instance
-         * is registered.
-         * @param s the parameter for construction
-         * @return the constructed object
-         */
-        public Object construct(String s);
-    }
-    
-    /** 
-     * Special StringConstructor instances for use with specific
-     * classes that have no public String constructor. The Map is
-     * keyed on class instance and the value is an instance of 
-     * StringConstructor.
-     */
-    static Map stringConstructorMap = new HashMap();
-
-    /**
-     * 
-     * Register special StringConstructor instances. These instances
-     * are for constructing instances from String parameters where there
-     * is no String constructor for them.
-     * @param cls the class to register a StringConstructor for
-     * @param sc the StringConstructor instance
-     * @return the previous StringConstructor registered for this class
-     */
-    public Object registerStringConstructor(Class cls, StringConstructor sc) {
-        synchronized(stringConstructorMap) {
-            return stringConstructorMap.put(cls, sc);
-        }
-    }
-
-    /** Register the default special StringConstructor instances.
-     */
-    static {
-        JDOImplHelper helper = getInstance();
-        if (isClassLoadable("java.util.Currency")) {
-            helper.registerStringConstructor(
-                    Currency.class, new StringConstructor() {
-                public Object construct(String s) {
-                    try {
-                        return Currency.getInstance(s);
-                    } catch (IllegalArgumentException ex) {
-                        throw new javax.jdo.JDOUserException(msg.msg(
-                            "EXC_CurrencyStringConstructorIllegalArgument", //NOI18N
-                            s), ex); 
-                    } catch (Exception ex) {
-                        throw new JDOUserException(msg.msg(
-                            "EXC_CurrencyStringConstructorException"), //NOI18N
-                            ex); 
-                    }
-                }
-            });
-        }
-        helper.registerStringConstructor(Locale.class, new StringConstructor() {
-            public Object construct(String s) {
-                try {
-                    return getLocale(s);
-                } catch (Exception ex) {
-                    throw new JDOUserException(msg.msg(
-                        "EXC_LocaleStringConstructorException"), ex); //NOI18N
-                }
-            }
-        });
-        helper.registerStringConstructor(Date.class, new StringConstructor() {
-            public synchronized Object construct(String s) {
-                try {
-                    // first, try the String as a Long
-                    return new Date(Long.parseLong(s));
-                } catch (NumberFormatException ex) {
-                    // not a Long; try the formatted date
-                    ParsePosition pp = new ParsePosition(0);
-                    Date result = dateFormat.parse(s, pp);
-                    if (result == null) {
-                        throw new JDOUserException (msg.msg(
-                            "EXC_DateStringConstructor", new Object[] //NOI18N
-                            {s, new Integer(pp.getErrorIndex()), 
-                             dateFormatPattern}));
-                    }
-                    return result;
-                }
-            }
-        });
-    }
-    
-    /**
-     * Parse the String to a Locale.
-     */
-    private static Locale getLocale(String s) {
-        String lang = s;
-        int firstUnderbar = s.indexOf('_');
-        if (firstUnderbar == -1) {
-            // nothing but language
-            return new Locale(lang);
-        }
-        lang = s.substring(0, firstUnderbar);
-        String country;
-        int secondUnderbar = s.indexOf('_', firstUnderbar + 1);
-        if (secondUnderbar == -1) {
-            // nothing but language, country
-            country = s.substring(firstUnderbar + 1);
-            return new Locale(lang, country);
-        }
-        country = s.substring(firstUnderbar + 1, secondUnderbar);
-        String variant = s.substring(secondUnderbar + 1);
-        return new Locale(lang, country, variant);
-    }
-    /**
-     * Determine if a class is loadable in the current environment.
-     */
-    private static boolean isClassLoadable(String className) {
-        try {
-            Class.forName(className);
-            return true;
-        } catch (ClassNotFoundException ex) {
-            return false;
-        }
-    }
-    
-    /**
-     * Construct an instance of the parameter class, using the keyString
-     * as an argument to the constructor. If the class has a StringConstructor
-     * instance registered, use it. If not, try to find a constructor for
-     * the class with a single String argument. Otherwise, throw a
-     * JDOUserException.
-     * @param className the name of the class
-     * @param keyString the String parameter for the constructor
-     * @return the result of construction
-     */
-    public static Object construct(String className, String keyString) {
-        StringConstructor stringConstructor;
-        try {
-            Class keyClass = Class.forName(className);
-            synchronized(stringConstructorMap) {
-                stringConstructor = 
-                        (StringConstructor) stringConstructorMap.get(keyClass);
-            }
-            if (stringConstructor != null) {
-                return stringConstructor.construct(keyString);
-            } else {
-                Constructor keyConstructor = 
-                    keyClass.getConstructor(new Class[]{String.class});
-                return keyConstructor.newInstance(new Object[]{keyString});
-            }
-        } catch (JDOException ex) {
-            throw ex;
-        } catch (Exception ex) {
-             /* ClassNotFoundException,
-                NoSuchMethodException,
-                InstantiationException,
-                IllegalAccessException,
-                InvocationTargetException */
-            throw new JDOUserException(
-                msg.msg("EXC_ObjectIdentityStringConstruction",  //NOI18N
-                new Object[] {ex.toString(), className, keyString}), ex);
-        }
-    }
-
-    /**
-     * Register a DateFormat instance for use with constructing Date 
-     * instances. The default is the default DateFormat instance.
-     * If the new instance implements SimpleDateFormat, get its pattern
-     * for error messages.
-     * @param df the DateFormat instance to use
-     */
-    public synchronized void registerDateFormat(DateFormat df) {
-        dateFormat = df;
-        if (df instanceof SimpleDateFormat) {
-            dateFormatPattern = ((SimpleDateFormat)df).toPattern();
-        } else {
-            dateFormatPattern = msg.msg("MSG_unknown"); //NOI18N
-        }
-    }
-
-    /** This is a helper class to manage metadata per persistence-capable
-     * class.  The information is used at runtime to provide field names and
-     * field types to the JDO Model.
-     *
-     * This is the value of the <code>HashMap</code> which
-     * relates the <code>PersistenceCapable Class</code>
-     * as a key to the metadata.
-     */    
-    static class Meta {
-        
-        /** Construct an instance of <code>Meta</code>.
-         * @param fieldNames An array of <code>String</code>
-         * @param fieldTypes An array of <code>Class</code>
-         * @param fieldFlags an array of <code>int</code>
-         * @param persistenceCapableSuperclass the most immediate 
-         * <code>PersistenceCapable</code> superclass
-         * @param pc An instance of the <code>PersistenceCapable</code> class
-         */        
-        Meta (String[] fieldNames, Class[] fieldTypes, byte[] fieldFlags,
-              Class persistenceCapableSuperclass, PersistenceCapable pc) {
-            this.fieldNames = fieldNames;
-            this.fieldTypes = fieldTypes;
-            this.fieldFlags = fieldFlags;
-            this.persistenceCapableSuperclass = persistenceCapableSuperclass;
-            this.pc = pc;
-        }
-    
-        /** This is an array of field names used
-         * for the Model at runtime.  The field
-         * is passed by the static class initialization.
-         */
-        String[] fieldNames;
-    
-        /** Get the field names from the metadata.
-         * @return the array of field names.
-         */
-        String[] getFieldNames() {
-            return fieldNames;
-        }
-    
-        /** This is an array of field types used
-         * for the Model at runtime.  The field
-         * is passed by the static class initialization.
-         */
-        Class[] fieldTypes;
-    
-        /** Get the field types from the metadata.
-         * @return the array of field types.
-         */
-        Class[] getFieldTypes() {
-            return fieldTypes;
-        }
-    
-        /** This is an array of field flags used
-         * for the Model at runtime.  The field
-         * is passed by the static class initialization.
-         */
-        byte[] fieldFlags;
-    
-        /** Get the field types from the metadata.
-         * @return the array of field types.
-         */
-        byte[] getFieldFlags() {
-            return fieldFlags;
-        }
-
-        /** This is the <code>Class</code> instance of the 
-         * <code>PersistenceCapable</code> superclass.
-         */
-        Class persistenceCapableSuperclass;
-    
-        /** Return the <code>PersistenceCapable</code> superclass.
-         * @return the <code>PersistenceCapable</code> superclass
-         */
-        Class getPersistenceCapableSuperclass() {
-            return persistenceCapableSuperclass;
-        }
-        /** This is an instance of <code>PersistenceCapable</code>,
-         * used at runtime to create new instances.
-         */
-        PersistenceCapable pc;
-    
-        /** Get an instance of the <code>PersistenceCapable</code> class.
-         * @return an instance of the <code>PersistenceCapable Class</code>.
-         */
-        PersistenceCapable getPC() {
-            return pc;
-        }
-    
-        /** Return the string form of the metadata.
-         * @return the string form
-         */
-        public String toString() {
-            return "Meta-" + pc.getClass().getName(); //NOI18N
-        }
-    }
-    
-    /** Add a StateInterrogation to the list. Create a new list
-     * in case there is an iterator open on the original list.
-     */
-    public synchronized void addStateInterrogation(StateInterrogation si) {
-        List newList = new ArrayList(stateInterrogations);
-        newList.add(si);
-        stateInterrogations = newList;
-    }
-    
-    /** Remove a StateInterrogation from the list. Create a new list
-     * in case there is an iterator open on the original list.
-     */
-    public synchronized void removeStateInterrogation(StateInterrogation si) {
-        List newList = new ArrayList(stateInterrogations);
-        newList.remove(si);
-        stateInterrogations = newList;
-    }
-    
-    /** Return an Iterator over all StateInterrogation instances.
-     * Synchronize to avoid add/remove/iterate conflicts.
-     */
-    private synchronized Iterator getStateInterrogationIterator() {
-        return stateInterrogations.iterator();
-    }
-    
-    /** Mark a non-binary-compatible instance dirty. Delegate to all
-     * registered StateInterrogation instances until one of them
-     * handles the call.
-     */
-    public void nonBinaryCompatibleMakeDirty(Object pc, String fieldName) {
-        Iterator sit = getStateInterrogationIterator();
-        while (sit.hasNext()) {
-            StateInterrogation si = (StateInterrogation)sit.next();
-            if (si.makeDirty(pc, fieldName)) return;
-        }
-    }
-    
-    /** Determine the state of a non-binary-compatible instance.
-     * Delegate to all registered StateInterrogation instances until
-     * one of them handles the call (returns a non-null Boolean 
-     * with the answer).
-     * The caller provides the stateless "method object" that does 
-     * the actual call to the StateInterrogation instance.
-     */
-    public boolean nonBinaryCompatibleIs(Object pc, 
-            StateInterrogationBooleanReturn sibr) {
-        Iterator sit = getStateInterrogationIterator();
-        while (sit.hasNext()) {
-            StateInterrogation si = (StateInterrogation)sit.next();
-            Boolean result = sibr.is(pc, si);
-            if (result != null) return result.booleanValue();
-        }
-        return false;
-    }
-    
-    /** Return an object associated with a non-binary-compatible instance.
-     * Delegate to all registered StateInterrogation instances until
-     * one of them handles the call (returns a non-null answer).
-     * The caller provides the stateless "method object" that does 
-     * the actual call to the StateInterrogation instance.
-     */
-    public Object nonBinaryCompatibleGet(Object pc, 
-            StateInterrogationObjectReturn sibr) {
-        Iterator sit = getStateInterrogationIterator();
-        while (sit.hasNext()) {
-            StateInterrogation si = (StateInterrogation)sit.next();
-            Object result = sibr.get(pc, si);
-            if (result != null) return result;
-        }
-        return null;
-    }
-    
-    /** This is an interface used to interrogate the state of an instance
-     * that does not implement PersistenceCapable. It is used for the
-     * methods that return a boolean value.
-     */
-    public static interface StateInterrogationBooleanReturn {
-        public Boolean is(Object pc, StateInterrogation si);
-    }
-    
-    /** This is an interface used to interrogate the state of an instance
-     * that does not implement PersistenceCapable. It is used for the
-     * methods that return an Object value.
-     */
-    public static interface StateInterrogationObjectReturn {
-        public Object get(Object pc, StateInterrogation si);
-    }
-}
diff --git a/api20/src/java/javax/jdo/spi/JDOPermission.java b/api20/src/java/javax/jdo/spi/JDOPermission.java
deleted file mode 100644
index 745edf5..0000000
--- a/api20/src/java/javax/jdo/spi/JDOPermission.java
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- * 
- * Licensed 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 
- * 
- *     http://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 
- * limitations under the License.
- */
-
-package javax.jdo.spi;
-
-/**
- * The <code>JDOPermission</code> class is for operations that are reserved for 
- * JDO implementations and should not be called by other code.  A
- * <code>JDOPermission</code> is a <em>named permission</em> and has no
- * actions.  There are two names currently defined.  Each named permission
- * has a corresponding public static final field which contains an instance
- * of the named permission.
- * <P>
- * The following table
- * provides a summary description of what each named permission allows,
- * and discusses the risks of granting code the permission.
- * <P>
- *
- * <table border=1 cellpadding=5>
- * <tr>
- * <th>Permission Target Name</th>
- * <th>What the Permission Allows</th>
- * <th>Risks of Allowing this Permission</th>
- * </tr>
- *
- * <tr>
- *   <td><code>setStateManager</code></td>
- *   <td>This allows setting the <code>StateManager</code> for an instance of 
- *   <code>PersistenceCapable</code>. The <code>StateManager</code>
- *   has unlimited access to get and set persistent and transactional fields of
- *   the <code>PersistenceCapable</code> instance.</td>
- *   <td>This is dangerous in that information (possibly confidential) 
- *   normally unavailable would be accessible to malicious code.</td>
- * </tr>
- *
- * <tr>
- *   <td><code>getMetadata</code></td>
- *   <td>This allows getting metadata for any <code>PersistenceCapable</code> 
- *   class that has registered with <code>JDOImplHelper</code>.</td>
- *   <td>This is dangerous in that metadata information (possibly confidential) 
- *   normally unavailable would be accessible to malicious code.</td>
- * </tr>
- *
- * <tr>
- *   <td><code>manageMetadata</code></td>
- *   <td>This allows managing metadata for any <code>PersistenceCapable</code> 
- *   class that has registered with <code>JDOImplHelper</code>.</td>
- *   <td>This is dangerous in that metadata information (possibly confidential) 
- *   normally unavailable would be manageable (modifiable) by malicious code.
- *   </td>
- * </tr>
- *
- * <tr>
- *   <td><code>closePersistenceManagerFactory</code></td>
- *   <td>This allows closing a <code>PersistenceManagerFactory</code>,
- *       thereby releasing resources.</td> 
- *   <td>This is dangerous in that resources bound to the
- *       <code>PersistenceManagerFactory</code> would be releaseable by
- *       malicious code.</td>  
- * </tr>
- *
- * </table>
- *
- * @see java.security.Permission
- * @see java.security.BasicPermission
- * @see javax.jdo.spi.JDOImplHelper
- * @see javax.jdo.spi.PersistenceCapable
- * @version 1.0.2
- */
-public final
-class JDOPermission extends java.security.BasicPermission {
-    
-    /**
-     * Constructs a <code>JDOPermission</code> with the specified name.
-     *
-     * @param name the name of the <code>JDOPermission</code>
-     */
-    public JDOPermission(String name) {
-        super(name);
-    }
-
-    /**
-     * Constructs a <code>JDOPermission</code> with the specified name and 
-     * actions.  The actions should be <code>null</code>; they are ignored. 
-     * This constructor exists for use by the <code>Policy</code> object
-     * to instantiate new <code>Permission</code> objects.
-     *
-     * @param name the name of the <code>JDOPermission</code>
-     * @param actions should be <code>null</code>.
-     */
-    public JDOPermission(String name, String actions) {
-        super(name, actions);
-    }
-
-    /** An instance of <code>JDOPermission</code> to be used for
-     * <code>getMetadata</code> permission checking.
-     */
-    public final static JDOPermission GET_METADATA = 
-        new JDOPermission("getMetadata"); // NOI18N
-    
-    /** An instance of <code>JDOPermission</code> to be used for
-     * <code>manageMetadata</code> permission checking.
-     * @since 1.0.2
-     */
-    public final static JDOPermission MANAGE_METADATA = 
-        new JDOPermission("manageMetadata"); // NOI18N
-    
-    /** An instance of <code>JDOPermission</code> to be used for
-     * <code>setStateManager</code> permission checking.
-     */
-    public final static JDOPermission SET_STATE_MANAGER = 
-        new JDOPermission("setStateManager"); // NOI18N
-    
-    /** An instance of <code>JDOPermission</code> to be used for
-     * <code>closePersistenceManagerFactory</code> permission checking.
-     * @since 1.0.1
-     */
-    public final static JDOPermission CLOSE_PERSISTENCE_MANAGER_FACTORY = 
-        new JDOPermission("closePersistenceManagerFactory"); // NOI18N
-    
-}
diff --git a/api20/src/java/javax/jdo/spi/PersistenceCapable.java b/api20/src/java/javax/jdo/spi/PersistenceCapable.java
deleted file mode 100644
index 46ad460..0000000
--- a/api20/src/java/javax/jdo/spi/PersistenceCapable.java
+++ /dev/null
@@ -1,593 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- * 
- * Licensed 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 
- * 
- *     http://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 
- * limitations under the License.
- */
-
-package javax.jdo.spi;
-
-import javax.jdo.PersistenceManager;
-
-/**
- * A class that can be managed by a binary-compatible JDO implementation 
- * must implement this interface.
- *
- * <P>This interface defines methods that allow the implementation to manage
- * the instances.  It also defines 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
- * PersistenceManager, object identity, and version if it has one.
- *
- * <P>In the Reference Implementation, the JDO Enhancer modifies the class
- * to implement PersistenceCapable prior to loading the class into the runtime
- * environment.  The Reference Enhancer also adds code to implement the
- * methods defined by PersistenceCapable.
- *
- *<P>The extra methods in the PersistenceCapable interface might be generated
- * by pre-processing a .java file, or might be generated from a tool directly.
- * The exact technique for generating the extra methods is not specified by
- * JDO.
- *
- * <P>The PersistenceCapable interface is designed to avoid name conflicts
- * in the scope of user-defined classes.  All of its declared method
- * names are prefixed with 'jdo'.
- * @version 2.0
- */
-public interface PersistenceCapable {
-    /** If jdoFlags is set to READ_WRITE_OK, then the fields in the default fetch group
-     * can be accessed for read or write without notifying the StateManager.
-     */
-    static final byte READ_WRITE_OK = 0;
-    
-    /** If jdoFlags is set to LOAD_REQUIRED, then the fields in the default fetch group
-     * cannot be accessed for read or write without notifying the StateManager.
-     */
-    static final byte LOAD_REQUIRED = 1;
-    
-    /** If jdoFlags is set to READ_OK, then the fields in the default fetch group
-     * can be accessed for read without notifying the StateManager.
-     */
-    static final byte READ_OK = -1;
-    
-    /** If jdoFieldFlags for a field includes CHECK_READ, then
-     * the field has been enhanced to call the jdoStateManager on read
-     * if the jdoFlags setting is not READ_OK or READ_WRITE_OK.
-     */
-    static final byte CHECK_READ = 1;
-    
-    /** If jdoFieldFlags for a field includes MEDIATE_READ, then
-     * the field has been enhanced to always call the jdoStateManager
-     * on all reads.
-     */
-    static final byte MEDIATE_READ = 2;
-    
-    /** If jdoFieldFlags for a field includes CHECK_WRITE,
-     * then the field has been enhanced to call the
-     * jdoStateManager on write if the jdoFlags setting is not
-     * READ_WRITE_OK;.
-     */
-    static final byte CHECK_WRITE = 4;
-    
-    /** If jdoFieldFlags for a field includes MEDIATE_WRITE, then
-     * the field has been enhanced to always call the jdoStateManager
-     * on all writes.
-     */
-    static final byte MEDIATE_WRITE = 8;
-    
-    /** If jdoFieldFlags for a field includes SERIALIZABLE,
-     * then the field is not declared as TRANSIENT.
-     */
-    static final byte SERIALIZABLE = 16;
-    
-    /** Return the associated PersistenceManager if there is one.
-     * Transactional and persistent instances return the associated
-     * PersistenceManager.
-     *
-     * <P>Transient non-transactional instances return null.
-     * <P>This method always delegates to the StateManager if it is non-null.
-     * @return the PersistenceManager associated with this instance.
-     */
-    PersistenceManager jdoGetPersistenceManager();
-    
-    /** This method sets the StateManager instance that manages the state
-     * of this instance. This method is normally used by the StateManager
-     * during the process of making an instance persistent, transient,
-     * or transactional.
-     *
-     * The caller of this method must have JDOPermission for the instance,
-     * if the instance is not already owned by a StateManager.
-     * If the parameter is null, and the StateManager approves the change,
-     * then the jdoFlags field will be reset to READ_WRITE_OK.
-     * If the parameter is not null, and the security manager approves
-     * the change, then the jdoFlags field will be reset to LOAD_REQUIRED.
-     * @param sm The StateManager which will own this instance, or null
-     * to reset the instance to transient state
-     * @throws SecurityException if the caller does not have JDOPermission
-     * @see JDOPermission
-     */
-    void jdoReplaceStateManager(StateManager sm)
-    throws SecurityException;
-    
-    /** The owning StateManager uses this method to ask the instance to
-     * provide the value of the single field identified by fieldNumber.
-     * @param fieldNumber the field whose value is to be provided by
-     * a callback to the StateManager's
-     * providedXXXField method
-     */
-    void jdoProvideField(int fieldNumber);
-    
... 11686 lines suppressed ...