Getting Started with Gemini JPA 
--------------------------------

Gemini JPA implements the OSGi JPA specification. It uses EclipseLink as the JPA provider.

Required Bundles
----------------

To run Gemini JPA in OSGi you will need to have the following:

1. OSGi Framework

You may use any OSGi r4.3 compliant framework. Equinox 3.7 may be used within Eclipse through PDE,
or on its own in standalone mode. Felix 4.0 has also been tested.

2. OSGi Enterprise API bundle

Gemini JPA implements some of the OSGi Enterprise APIs so the "osgi.enterprise" bundle must be resident.
This bundle includes both the source and the class files so it can be used for both execution and debugging.
The Gemini DBAccess download includes this bundle as part of its download, or it can be downloaded from
the OSGi web site: http://www.osgi.org/Download/Release4V43. It is also in Maven Central.

3. Gemini DBAccess (Optional)

While you don't strictly require Gemini DBAccess to run Gemini JPA it is strongly recommended. It renders 
your application much more modular and allows the driver to be in a separate bundle from the persistence 
provider. The actual bundles you need depend upon the database you are using. 
If DBAccess is not present you will need to package the JDBC driver JAR in the persistence unit bundle and 
set the bundle classpath of the bundle to include the JAR.

4. EclipseLink bundles

The following EclipseLink bundles are required:

- javax.persistence
- org.eclipse.persistence.asm
- org.eclipse.persistence.antlr
- org.eclipse.persistence.core
- org.eclipse.persistence.jpa
- org.eclipse.persistence.jpa.jpql

These bundles must be from EclipseLink 2.4.0 GA or later. 

Note: Do *NOT* use "org.eclipse.persistence.jpa.osgi" or any of the equinox or weaving bundles shipped with EclipseLink.

5. Gemini JPA bundles

Gemini JPA is composed of a single bundle: "org.elipse.gemini.jpa". 
This bundle contains all of the Gemini JPA supporting classes.

Additional sample bundles are also part of the distribution.

Installation
------------

If running in PDE then unzip the files into a directory and import the various projects into your workspace, 
or even better, create a target platform with all of the bundles in it, or install from a P2 repository.
If you are using the framework directly then unzip the distribution files and follow the documentation of
the framework for installing the bundles described above. Note that the "osgi.enterprise" bundle has an
optional dependency on the "javax.persistence" package (exported by the EclipseLink bundle of that name), which 
is not optional when using the JPA classes.

Configuration
-------------

Gemini JPA does not require any special environment configuration, however, if you ensure that the javax.persistence 
and DBAccess bundles have been started before any applications, then Gemini JPA will not have to do as much refreshing 
of bundles during startup.

Running the Samples
-------------------

[Basic Sample]

The basic sample is a persistence unit and client combined within a single bundle: "org.eclipse.gemini.jpa.sample.basic".
Once Gemini JPA and Gemini DBAccess are installed and running you need only install and run this bundle to see the sample 
persistence unit and client interact. Although the client is contained within the same bundle as the persistence unit, it 
still uses the EntityManagerFactory (EMF) service exported by Gemini JPA. Take a look at the Activator class to see how a 
client typically accesses the EMF service.

[Config Admin Sample]

The config admin sample is composed of three bundles: 

  1) org.eclipse.gemini.jpa.sample.configadmin.pu - persistence unit bundle
        * Contains a Library persistence unit with a persistence.xml descriptor
          but no database connection property information in the descriptor.
		  
  2) org.eclipse.gemini.jpa.sample.configadmin.gen - Configuration generator bundle
        * Creates an OSGi Configuration object containing the database connection 
		  properties used by the persistence unit.
		  
  3) org.eclipse.gemini.jpa.sample.configadmin - client
        * Client code that imports the entity packages of the persistence unit
		  and operates on the entities.

All three bundles must be installed and started for the sample to work.
In addition, the relevant configuration admin bundle for your OSGi framework must be installed
(e.g. "org.eclipse.equinox.cm" for Equinox and "org.apache.felix.configadmin" for Felix).
