This is the release candidate 1 of the JDO 2 project. It includes
the JDO 2.0 TCK and its dependencies:

- api20 contains source to build jdo.jar, which defines the JDO API version 2.0
- core20 contains the JDO2 core, including utility and metadata model classes
- enhancer20 contains the utility classes used for verifying enhanced files
- tck20 contains the JDO 2.0 Technology Compatibility Kit

-------------
Prerequisites
-------------

- Maven
You must have Maven version 1.0.1 or 1.0.2 to build the projects from source
and to execute the TCK. You can download maven from 
http://maven.apache.org/start/download.html

Note that maven uses the user.home system property for the location
of the maven local repostitory: ${user.home}/.maven/repository.
Under Windows this system property is C:\Documents and Settings\<user> 
no matter what the HOME variable is set to. As a workaround you may set the 
system property by adding -Duser.home=%HOME% to the environment variable 
MAVEN_OPTS.

- JNDI implementation (fscontext.jar and providerutil.jar)
The JNDI test cases in tck20 need a JNDI implementation.
The TCK is configured to use Sun's JNDI implementation.
To use your own implementation, put the implementation
jar files into lib/ext and update jndi.properties in the TCK directory
src/conf.  To download Sun's implementation, go to 
http://java.sun.com/products/jndi/downloads/index.html,
click the Download button at 'Download JNDI 1.2.1 & More', accept a license 
agreement, download 'File System Service Provider, 1.2 Beta 3' and then unpack
the downloaded zip. It includes the jars fscontext.jar and providerutil.jar.

- JPOX
The Reference Implementation for JDO 2.0 is JPOX. The tck20 subproject 
automatically downloads the JPOX jar files via maven configuration.

- derby
The default datastore for tck20 is derby. The tck20 subproject 
automatically downloads version 10.1.1.0 of derby and derbytools.
NOTE!! Mac OSX users must uncomment derby.storage.fileSyncTransactionLog=true 
in tck20/src/conf/derby.properties. For details, please see the Derby JIRA 
issue DERBY-1 at http://issues.apache.org/jira/browse/DERBY-1

-------
Notes
-------

- Logging
Apache JDO uses the apache commons logging package for logging.

- Checkstyle
The file jdo_check.xml includes the checkstyle configuration. It is borrowed
from the sun_checks.xml, but does not use all of the sun rules and customizes 
some other rules. The checkstyle configuration is not yet finished.

- Mevenide
Mevenide is a nice maven plugin for IDEs (see http://mevenide.codehaus.org).
You find download instructions in http://mevenide.codehaus.org/download.html.
For Netbeans, once you installed the plugin, you should be able to open an 
existing maven project by File -> Open Project -> Open Project Folder.
Navigate to a directory including a maven project (e.g. api20) and choose this 
directory. Netbeans will create a project folder. If you right-click the Maven 
project you can examine the contents of the project.xml (see Properties) or 
execute goals.

-------
Running the TCK
-------

This version of the TCK is almost final.  

In the tck20 project, run "maven build" to build the tck.  This will 
compile, enhance, install the schemas, and run all the tests on all 
supported databases and identitytypes.

You may use the following custom goals and command line options
with the tck20 project:

Custom Goals:
    * help - displays help text describing custom goals and options
    * runtck.jdori - runs the TCK on the JDO Reference Implementation
    * runtck.iut - runs the TCK on the implementation under test
    * installSchema - installs the database schema
    * enhance.jdori - enhances the class files using the JDO RI enhancer
    * enhance.iut - enhances the class files using the
                    implementation under test's enhancer
    * debugtck.jdori - waits for a debugger to attach and then runs the TCK
                     on the JDO RI
    * debugtck.iut - waits for a debugger to attach and then runs the TCK
                     on the implementation under test


Command Line Options:
    -Djdo.tck.cfglist=<configuration file list>
          Overrides the definition of jdo.tck.cfglist found in
          tck20/src/conf/configuration.list by supplying
          one or more space-separated test configuration files.
          Test configuration files typically have the .conf extension.
          To run a single test, create a .conf file (copy an existing
          file) and put the test into the jdo.tck.classes property.

      -Djdo.tck.dblist=<database list>
          Overrides the property value in project.properties by supplying
          one or more space-separated database names

      -Djdo.tck.identitytypes=<identity type list>
            Overrides the property value in project.properties by supplying
            one or more space-separated identity types (applicationidentity
            or datastoreidentity) to use for this run.

      -Djdo.tck.cleanupaftertest=xxx - true/false. Setting it to false will
            retain data in database after test. This will allow inspection of
            data after test is run. Default is true

      -Djdo.tck.debug.port=##### - the port number the JVM should listen for
            a debugger on (default 8787)

      -Djdo.tck.debug.jvmargs=xxx - the "-Xdebug ..." arguments in the event
            you want to supply your own debug directives


Maven looks for the following configuration files in src/conf:
    * configurations.list
          A list of files. Each file listed is a test configuration file.
    * test configuration files
          Each of these files sets values for
                jdo.tck.testdescription - an optional string describing
                    the purpose of these tests
                jdo.tck.classes - a list of one or more test classes.
                jdo.tck.testdata - fully qualified file name
                    (not required by all tests)
                jdo.tck.standarddata - fully qualified file name
                    (not required by all tests)
                jdo.tck.mapping - file designator that maven.xml uses
                    to build a javax.jdo.option.Mapping value and
                    corresponding schema name
    * exclude.list
          A list of test classes NOT to execute during a TCK test run

Examples:
   maven -Djdo.tck.identitytypes=datastoreidentity installSchema
       Installs the database schema for datastore identity for all
       supported databases

   maven -Djdo.tck.cfglist="alltests.conf cfg1.conf" runtck.jdori
       Runs the test configurations specified in alltests.conf and cfg1.conf
       on the JDORI, using all supported identity types and databases.

   maven -Djdo.tck.cfglist=detach.conf debugtck.jdori
       Runs the test detach.conf configuration, waiting for a debugger to
       attach on the default port

   maven -Djdo.tck.cfglist=detach.conf -Djdo.tck.debug.port=9343 debugtck.jdori
       Runs the test detach.conf configuration, waiting for a debugger to
       attach on port 9343

Note:
   By default, the database schema is NOT installed when the custom goals
     runtck.iut and runtck.jdori are run.
   maven build installs the database schema and runs the TCK on the
     JDO Reference Implementation.
   Enhancement is always done before running the TCK when the enhanced classes
     are not up to date.

