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 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 is 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).
