Für die Speicherung unkritischer Daten oder während der Entwicklung kann es sinnvoll sein, anstatt eines komplexen DBMS´s eine leichtgewichtige eingebettete Datenbank, wie z.B. Apache Derby einzusetzen.
In diesem Artikel soll beschrieben werden, wie man die Erstellung einer Apache Derby Datenbank im Embedded Mode für die Verwendung in einer Enterprise Application in IBM WebSphere bewerkstelligen kann.
Vorbereitung
Als erstes muss sichergestellt werden, dass im entsprechenden Scope die folgenden benötigten Umgebungsvariablen im WebSphere gesetzt sind:
Variablenname
|
Bedeutung
|
Beispielwert
|
---|---|---|
DERBY_JDBC_DRIVER_PATH | Zeigt auf das Verzeichnis, welches den JDBC Treiber für die Derby Datenbank enthält. | ${WAS_INSTALL_ROOT}/derby/lib |
WAS_INSTALL_ROOT (optional) |
Zeigt auf das Installationsverzeichnis des WebSphere Servers. | /opt/IBM/WebSphere/AppServer |
USER_INSTALL_ROOT | Zeigt auf das entsprechende Installationsverzeichnis des Nutzers | /opt/IBM/WebSphere/AppServer/profiles/AppSrv01 |
Einrichtung
Falls noch nicht vorhanden, muss unter dem Menüpunkt Resources -> JDBC -> JDBC Providers ein neuer Provider für die Derby Datenbank im entsprechenden Scope erstellt werden.
Anschließend muss unter Resources -> JDBC -> Data Sources mit den folgenden Schritten eine neue Derby Datasource angelegt werden. Bei der Auswahl des JDBC Providers muss der gewünschte Derby JDBC Provider ausgewählt werden, z.B. "Default Grid Derby JDBC Provider".



Abschließend muss noch in den Custom Properties der soeben erstellten Derby Datasource eingestellt werden, dass sie bei Bedarf neu im Dateisystem angelegt werden soll. Diese Einstellung erreicht man unter Resources -> JDBC -> Data sources -> ${My Derby DataSource} -> Custom Properties (auf der rechten Seite). Anschließend öffnet sich die folgende Ansicht:

Der Wert für createDatabase muss hier auf "create" gesetzt werden. Anschließend kann die Verbindung getestet werden und die Derby Datenbank wird unter ihrem konfigurierten JNDI - Namen erreichbar sein.
Code Beispiel
Es folgt ein vereinfachtes Beispiel, was exemplarisch den Zugriff auf die eingebettete Datenbank demonstriert:
public class DerbyService { private Hashtable<String, String> env; private Context ctx; private static final String SQL_TABLE_NAME = "EMPLOYEE"; private static final String SQL_CREATE_TABLE = "CREATE TABLE employee(id INT PRIMARY KEY, name CHAR(40), vorname CHAR(40))"; private static final String SQL_INSERT_ENTRY = "INSERT INTO employee(id, name, vorname) VALUES (?, 'Mustermann', 'Max')"; private static final String SQL_SELECT_ALL = "SELECT * FROM employee"; public DerbyService() { env = new Hashtable<String, String>(); env.put(PROPS.JNDI_CACHE_OBJECT, PROPS.JNDI_CACHE_OBJECT_CLEARED); try { ctx = new InitialContext(env); DataSource ds = (DataSource) ctx.lookup("jdbc/test/derby"); Connection connection = ds.getConnection(); DatabaseMetaData md = connection.getMetaData(); ResultSet rs = md.getTables(null, null, "%", null); boolean tableExists = false; while (rs.next()) { if (rs.getString(3).equals(SQL_TABLE_NAME)) { tableExists = true; } } Statement st = connection.createStatement(); if(!tableExists) { st.execute(SQL_CREATE_TABLE); } int id = 0; rs = st.executeQuery(SQL_SELECT_ALL); if(rs.next()) { String name = rs.getString("name"); id = rs.getInt("id"); } id++; PreparedStatement psInsertSQL = connection.prepareStatement(SQL_INSERT_ENTRY); psInsertSQL.setInt(1, id); psInsertSQL.execute(); } catch (Exception e) { e.printStackTrace(); } } }
Weiterführende Quellen:
- http://www-01.ibm.com/support/knowledgecenter/SS7JFU_8.5.5/com.ibm.websphere.express.iseries.doc/ae/udat_minreq.html
- http://www.jairrillo.com/blog/2008/05/26/how-to-setup-a-datasource-on-websphere-61-for-mysql-step-by-step/
- http://veithen.blogspot.de/2009/11/creating-test-data-source-in-websphere.html
- http://db.apache.org/derby/docs/10.7/tools/ttoolsij97656.html
- http://sankarrk.wordpress.com/2010/09/15/access-apache-derby-through-command-prompt-linux/
- https://db.apache.org/derby/docs/10.2/getstart/tgssetupjavaenvir.html