<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

      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.
-->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
	<META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=utf-8">
	<TITLE>JDO 3 TCK README</TITLE>
</HEAD>
<BODY LANG="en-US" DIR="LTR">
<H1>The JDO 3 Technology Compatibility Kit</H1>
<UL>
    <LI><a href="#overview">Overview</a></LI>
    <!-- For minor release change documentation
    <LI><a href="#changes">Changes since the last release</a></LI>
    -->
    <LI><a href="#prereqs">Prerequisites</a>
    <UL>
        <LI><a href="#maven">Maven</a></LI>
        <LI><a href="#jndi">JNDI Implementation</a></LI>
    </UL>
    </LI>
    <LI><a href="#building">Building the TCK from source</a></LI>
    <LI><a href="#running">Running the TCK</a>
    <UL>
        <LI><a href="#goals">Custom Goals</a></LI>
        <LI><a href="#cli">Command Line Options</a></LI>
        <LI><a href="#files">Files</a></LI>
        <LI><a href="#examples">Examples</a></LI>
    </UL></LI>
    </UL>
<a name="overview"></a>
<H2>Overview of the JDO 3 Technology Compatibility Kit</H2>
<p>
The JDO 3 project includes the JDO 3 TCK and its dependencies:
</p>
<UL>
    <LI>api contains source to build jdo-api-3.0.1.jar, which defines the JDO API version 3.0 for Java 1.5 and later.</LI>
    <LI>tck contains the JDO 3.0 Technology Compatibility Kit for Java 1.5 and later.</LI>
</UL>
<p>
JDO releases may be downloaded from <a href="http://db.apache.org/jdo/downloads.html">the Apache JDO downloads page</a>. Minor updates of releases are only available as source from the Subversion repository. Follow the instructions <a href="#building">below</a> to build the TCK from source.
<p>
For complete rules for certifying a JDO implementation,
see RunRules.html in the top level tck project directory.
</p>
<!-- When creating a new minor release branch, list changes from the major release here 

<a name="changes"></a>
<h2>Changes since the Major Release</h2>
<p>
</p>

-->
<a name="prereqs"></a>
<h2>Prerequisites</h2>
<p>
You must install the software listed in the following sections
to successfully run the TCK.
Other dependencies, such as the reference implementation, DataNucleus,
and the Apache Derby database, are downloaded automatically by maven.
Note that Apache JDO uses the apache commons logging package for logging.
</p>
<a name="maven"></a>
<h3>Maven</h3>
<p>
You must have Maven version 1.1 to build the projects from source and to execute
the TCK. You can download maven from http://maven.apache.org/start/download.html
</p><p>
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\<i>user</i> 
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.
</p> <p>
Mevenide is a nice maven plugin for IDEs available from http://mevenide.codehaus.org.
In Netbeans, after you install the plugin, you can open an 
existing maven project by File -> Open Project -> Open Project Folder.
Navigate to a directory including a maven project (e.g. api) 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.
</p>
<a name="jndi"></a>
<h3>JNDI implementation (fscontext.jar and providerutil.jar)</h3>
<p>
The JNDI test cases in tck 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.
</p>
<a name="building"></a>
<h2>Building the TCK from Source</h2>
For instructions for checking out the JDO source, see the Apache JDO <a href="http://db.apache.org/jdo/svn.html">source code</a> page.
<p>
To build the TCK dependencies, change to the top level directory of the branch you are working in (or trunk if you are using the latest unreleased code) and run
<pre>
maven tck.default
</pre>
Then change to the "tck" directory and run
<pre>
maven build
</pre>
When execution completes, you are ready to run the TCK.
<p>
<a name="running"></a>
<h2>Running the TCK</h2>
<p>
In the tck project, run "maven build" to build the tck.  This will 
compile, enhance, install the schemas, and run all the tests on the RI on all 
supported databases and identitytypes.
</p>
<p>
You may use the following custom goals and command line options
with the tck project:
</p>
<a name="goals"></a>
<h3>Custom Goals</h3>
<DL>
    <DT>help
    <DD>displays help text describing custom goals and options
    <DT>runtck.jdori
    <DD>runs the TCK on the JDO Reference Implementation
    <DT>runtck.iut
    <DD>runs the TCK on the implementation under test
    <DT>installSchema
    <DD>installs the database schema
    <DT>enhance.jdori
    <DD>enhances the class files using the JDO RI enhancer
    <DT>enhance.iut
    <DD>enhances the class files using the implementation under test's enhancer
    <DT>debugtck.jdori
    <DD>waits for a debugger to attach and then runs the TCK on the JDO RI
    <DT>debugtck.iut
    <DD>waits for a debugger to attach and then runs the TCK on the implementation under test
    <DT>cleanClasses
    <DD>deletes classes and enhanced classes
</DL>

<a name="cli"></a>
    <h3>Command Line Options</h3>
    <DL>
        <DT>-Djdo.tck.cfglist=<i>configuration file list</i><DD>Overrides the definition of jdo.tck.cfglist found in tck/src/conf/configuration.list by supplying one or more comma-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.
        <DT>-Djdo.tck.dblist=<i>database list</i><DD>Overrides the property value in project.properties by supplying one or more comma-separated database names
        <DT>-Djdo.tck.identitytypes=<i>identity type list</i><DD>Overrides the property value in project.properties by supplying one or more comma-separated identity types (applicationidentity or datastoreidentity) to use for this run.
        <DT>-Djdo.tck.cleanupaftertest=<i>boolean</i><DD>When false, data is retained in the database after the test. This allows inspection of data after test is run. Default is true.
        <DT>-Djdo.tck.debug.port=<i>port number</i><DD>Sets the port number the JVM should listen for a debugger on. Default is 8787.
        <DT>-Djdo.tck.debug.jvmargs=<i>args</i><DD>Sets the "-Xdebug ..." arguments to allow you to supply your own debug directives.
</DL>
<a name="files"></a>
<h3>Files</h3>
<p>Maven looks for the following configuration files in src/conf:
<UL>
    <LI>configurations.list
    <br>A list of files. Each file listed is a test configuration file.</LI>
    <LI>test configuration files (*.conf)
    <br>Each of these files sets values for
    <DL>
        <DT>jdo.tck.testdescription 
        <DD>An optional string describing the purpose of these tests
        <DT>jdo.tck.classes 
        <DD>A list of one or more test classes (required)
        <DT>jdo.tck.testdata 
        <DD>The fully qualified file name of the xml test data file(optional)
        <DT>jdo.tck.standarddata 
        <DD>The fully qualified file name of the xml test data file(optional)
        <DT>jdo.tck.mapping 
        <DD>The file designator that maven.xml uses to build a javax.jdo.option.Mapping value and corresponding schema name (required)
</DL></LI>
     <LI>exclude.list
        <br>A list of test classes NOT to execute during a TCK test run</LI>
</UL>
<a name="examples"></a>
<h3>Examples</h3>
<DL>
    <DT>maven -Djdo.tck.identitytypes=datastoreidentity installSchema
    <DD>Installs the database schema for datastore identity for all supported databases

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

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

     <DT>maven -Djdo.tck.cfglist=detach.conf -Djdo.tck.debug.port=9343 debugtck.jdori
     <DD>Runs the test detach.conf configuration, waiting for a debugger to attach on port 9343
</DL>
<p>
Note:
</p>
<UL>
    <LI type="none">By default, the database schema is NOT installed when the custom goals runtck.iut and runtck.jdori are run.</LI>
     <LI type="none">maven build installs the database schema and runs the TCK on the JDO Reference Implementation.</LI>
     <LI type="none">Enhancement is always done before running the TCK when the enhanced classes are not up to date.</LI>
</UL>

 </BODY>
 </HTML>

