Getting Started with Gemini DBAccess 
------------------------------------

Gemini DBAccess provides a way for a database to be accessed through JDBC in a modular environment like OSGi.


Required Bundles
----------------

To run Gemini DBAccess in OSGi you will need to have the following:

1. OSGi Framework

You may use Plugin Development Environment (PDE) in Eclipse, which will give you access to the Equinox 
OSGi framework, or you may execute outside of PDE and use any OSGi framework you choose, such as Felix.

2. Database and JDBC driver

You should have installed and started your database server. DBAccess bundles do not start databases or servers. 
It is assumed that such servers are already running. If the driver is not already OSGi-ready then you may need 
to create a bundle. If the drivers have been packaged with DBAccess then you will not need additional copies.

*** Note: The JDBC drivers for the Derby embedded database are shipped with Gemini DBAccess.

3. OSGi Enterprise API bundle

Some of the OSGi Enterprise APIs are used by DBAccess so the osgi.enterprise bundle must be resident. It normally 
includes both the source and the class files so it can be used for both execution and debugging. It can be obtained
here: http://www.osgi.org/Download/Release4V42

*** Note: This bundle is shipped with Gemini DBAccess.

4. The Gemini DBAccess bundles

There are typically three bundles for each supported database. The first bundle is the JDBC driver bundle 
and includes the JDBC driver code. If a driver is already OSGi-ready then it should be bundlized
appropriately. If the driver is not already in an appropriate OSGi bundle then DBAccess will either provide 
one, or explain how to create one, depending upon whether the driver JARs may be distributed or not.

The second bundle is a DBAccess bundle that contains most of the logic to implement and register the 
DataSourceFactory service as specified by the OSGi JDBC specification. It is independent of the
specifc JDBC driver.

The third bundle is also a DBAccess bundle that contains the JDBC driver specific parts.

For example, the following bundles provide support for the Derby client/server database: 

1. org.apache.derby - the derby JDBC driver jars
2. org.eclipse.gemini.dbaccess.util - the Gemini supporting classes common to all JDBC drivers
3. org.eclipse.gemini.dbaccess.derby - the Gemini supporting classes for Derby

*** Note: These bundles are shipped with Gemini DBAccess.




Maven Build
-----------

1) Install Maven 3.
2) You may need to configure the proxy settings. In case you are behind a firewall, edit the file 
/mvn_parent/settings.xml and replace the TODOs with the right proxy settings.
3) To execute the build, go into /mvn_parent and run on the command line:
> mvn clean install
or, if you have configured the settings.xml:
> mvn -fae -s settings.xml clean install


Some remarks on what the build does:
- the folder /mvn_parent contains a pom.xml which is the "parent" of all
subprojects. Every bundle which is build has its own pom.xml file
- it builds every bundle (result as usually for maven is under /target in the
respective directory)
- A feature, which currently includes everything except the tests, is also built.
- An update site is generated: /gemini.dbaccess.updatesite . When this is build, you
should find there under /target/site/ a p2 repository containing the feature
and all plugins included into it. 
- currently not all tests are executed
- If you add findbugs:findbugs at the end of the command line, you'll find in the different
/target directories which are produced some information from findbugs. This could be aggregated 
and displayed in late stage by Hudson. To try it, just run:
> mvn clean install findbugs:findbugs
or, if you have configured the settings.xml:
> mvn -fae -s settings.xml clean install findbugs:findbugs


Installation
------------

If you use the Eclipse IDE, the easiest way to consume the bundles is the update site at
http://www.eclipse.org/gemini/dbaccess/download/. Alternatively, if running in the 
Eclipse IDE you can also import the various bundles (the framework will already be there) as plug-ins 
into your workspace. 

If you are not using an (Eclipse) IDE, but are using the framework directly then follow the 
documentation of the framework for installing the bundles.


Some Hints when Working with the Gemeini DBAccess Project 
--------------------------------------------------------

To compile and run the projects in Eclipse, you have to open the gemini.dbaccess.targetdef project, 
open the file gemini.dbaccess.target with the Target Editor and execute "Set as Target Platform"
