= Apache OpenJPA - README

== Preface
Thank you for downloading this release of Apache OpenJPA.

Apache OpenJPA is an implementation of the Java Persistence API specification.


== License
The content of this repository is licensed under Apache License 2.0
http://www.apache.org/licenses/LICENSE-2.0

== Further Information

The following files can be found in the openjpa-project subdirectory:

* openjpa-project/BUILDING.txt
* openjpa-project/CHANGES.txt
* openjpa-project/RELEASE-NOTES.html

For documentation and project information, please visit our project site:
    http://openjpa.apache.org/


== Compiling

The best way to compile Apache OpenJPA yourself is to run the build against the default derby database.

 $> mvn clean install -Dsurefire.excludes.locking=**/*

== Testing against different Databases

The Apache OpenJPA project also contains a setup for testing against multiple databases.
The easiest way is to use Docker.
We assume that Docker is installed to be used from your current user.
The respective database image has to be started manually bofore starting the build.
The reason for not starting it as part of the build itself is to be able to look at the database content after the build did run.

To start e.g. a PostgreSQL Docker image you can simply invoke the following command.
Note the -N Maven option which stands for 'non-recursive'.
This is used because the docker container is configured only at the root project but not at his children.

 mvn -N -Ptest-mysql-docker docker:start

After that you can execute your tests with the respective Maven profile

 mvn clean install -Ptest-mysql-docker

Once the Docker image for the database is not needed any longer one can stop and remove it:

 mvn -N -Ptest-mysql-docker docker:stop
 mvn -N -Ptest-mysql-docker docker:remove


The following Maven profiles do exist so far:

* test-mysql-docker
* test-mariadb-docker
* test-postgresql-docker

