DatabaseService
Wichtiger Hinweis: Datenbanken und für den Zugriff auf Datenbanken verwendete JDBC-Treiber sind Produkte von Drittherstellern und werden weder von Lobster unterstützt, noch von Lobster zur Verfügung gestellt. Eine eventuell dennoch geleistete Unterstützung oder Beratung zu Datenbanken bzw. JDBC-Treibern durch den Lobster-Support ist freiwillig und impliziert in keinem Fall einen Übergang der Verantwortung auf diesen. Die Installation, der Betrieb und die Wartung von Datenbanken/JDBC-Treibern, bzw. durchgeführte Maßnahmen an diesen, unterliegen immer und ausnahmslos der Verantwortlichkeit des Kunden.
Der Lobster-Support unterstützt Sie natürlich gerne bei den nötigen internen Konfigurationen zur Anbindung funktionierender Fremdsysteme.
Der DatabaseService ermöglicht den neutralen Zugriff auf Datenbanken. Folgendes wird hierbei unterstützt.
Connection-Pooling - Verbindungen zu Datenbanken werden im Vorfeld geöffnet und offen gehalten, sodass schneller innerhalb von Applikationen auf diese zugegriffen werden kann.
Datentypneutralisierung - Datenbankspezifische Eigenheiten bei Standarddatentypen werden neutralisiert, z. B. beim Format von Datum und Zeit, sodass keine datenbankabhängigen Umwandlungen auf Applikationsseite notwendig werden.
Automatische Wiederverbindung - Die Gültigkeit einer bestehenden Datenbankverbindung wird in regelmäßigen Abständen überprüft und - im Falle eines Verbindungsverlusts - automatisch neu aufgebaut.
Jede angebundene Datenbank wird über einen sogenannten Datenbank-Alias repräsentiert, hinter dem alle datenbankrelevanten Informationen hinterlegt sind (Verbindungsparameter, ...). Der Zugriff auf die angebundenen Datenbanken erfolgt über diesen Alias. Ein Wechsel der darunterliegenden Datenbank wird auf diese Weise erheblich erleichtert.
Alias anlegen (Konfigurationsdatei)
Service
Die Verfügbarkeit eines Services hängt von der erworbenen Lizenz ab und davon, ob der Service innerhalb der Konfigurationsdatei ./etc/factory.xml der Service-Factory eingetragen wurde. Änderungen erfordern Integration-Server-Neustart!
Dort finden Sie auch die zuständige Konfigurationsdatei für einen Service.
JDBC-Treiber
Den Treiber (.jar-Datei) für Ihre Datenbank erhalten Sie von Ihrem Datenbankhersteller. Legen Sie diesen im Ordner ./extlib ab. Änderungen erfordern Service-Neustart!
Hinzufügen eines neuen Datenbank-Aliases
Mit folgendem XML-Fragment kann ein neuer Datenbank-Alias hinzugefügt werden (./etc/database.xml). In der Datei sind Muster für diverse Datenbank-Typen vorhanden. Änderungen erfordern Service-Neustart!
<?
xml
version
=
"1.0"
encoding
=
"ISO-8859-1"
?>
<!DOCTYPE Configure PUBLIC "-//Lobster//DTD Configure 1.0//EN" "
http://www.lobster.de/dtd/configure_1_1.dtd
">
<
Configure
class
=
"com.ebd.hub.services.database.ConnectionService"
>
<
Set
name
=
"idleTime"
>200000</
Set
>
<
Set
name
=
"verbose"
>false</
Set
>
<!-- Your alias -->
<
Call
name
=
"initPool"
>
<
Arg
>
<
New
class
=
"com.ebd.hub.services.database.DatabaseSettings"
>
<
Set
name
=
"alias"
>db</
Set
>
<
Set
name
=
"catalogName"
>wbv</
Set
>
<
Set
name
=
"database"
>jdbc:
postgresql://server:5432/db
</
Set
>
<
Set
name
=
"driver"
>org.postgresql.Driver</
Set
>
<
Set
name
=
"user"
>dummy</
Set
>
<
Set
name
=
"password"
>dummy</
Set
>
<
Set
name
=
"lowerCase"
>lower</
Set
>
<
Set
name
=
"minSize"
>2</
Set
>
<
Set
name
=
"maxSize"
>2</
Set
>
<
Set
name
=
"allowGrowing"
>true</
Set
>
<
Set
name
=
"idleTime"
>300000</
Set
>
<
Set
name
=
"sqlCommand"
>select obj_id from xml_unitrealm</
Set
>
<
Set
name
=
"rollback"
>false</
Set
>
<
Set
name
=
"caching"
>true</
Set
>
<
Set
name
=
"checkConnection"
>false</
Set
>
<
Set
name
=
"supportsStream"
>false</
Set
>
<
Set
name
=
"maxStatementLength"
>32000</
Set
>
<
Call
name
=
"addNamedProperty"
>
<
Arg
>propertyname</
Arg
>
<
Arg
>propertyvalue</
Arg
>
</
Call
>
</
New
>
</
Arg
>
</
Call
>
</
Configure
>
Die einzelnen Parameter haben dabei folgende Bedeutung.
addNamedProperty |
Erlaubt das direkte Setzen sogenannter ConnectionProperties. Bei vielen JDBC-Treibern kann die Art und Weise, wie eine Verbindung zur Datenbank aufgebaut werden soll, über das Setzen von Key-Value-Paaren gesteuert werden. Das erste Argument stellt bei diesem Aufruf den Schlüssel dar, das zweite den Wert, der gesetzt werden soll. Beispiel: transaction level und none. |
||||||||||||||
alias |
Der zu verwendende Alias. |
||||||||||||||
allowGrowing |
Bei true darf der Pool wachsen, wenn alle initial erstellten Verbindungen an Applikationen ausgegeben wurden und eine weitere benötigt wird. Bei false werden nicht erfüllbare Verbindungsanfragen abgelehnt. |
||||||||||||||
autogenKeysPrepareSupport |
true setzt die Information, dass der Treiber in der Lage ist, die Spalten für automatisch generierte IDs per Namen konfiguriert zu bekommen. |
||||||||||||||
blobEncoding |
Zu verwendender Zeichensatz (charset name) bei der Umwandlung von Text zu Binärdaten beim Setzen von BLOB-Parametern. |
||||||||||||||
caching |
Bei true werden ausgeführte SQL-Statements gecached. Alle Statements müssen vom DatabaseService überprüft und bei Bedarf angepasst werden. Bei Systemen mit ausreichenden Ressourcen macht es daher Sinn, das Ergebnis dieser Überprüfung/Veränderung für zukünftige Verwendungen zu speichern. Werden jedoch primär dynamische Statements verwendet, kann ein explizites Deaktivieren Sinn machen, um unnötiges Speichern nie wieder verwendeter SQL-Statements zu vermeiden. |
||||||||||||||
catalogName |
Legt den Namen des Katalogs fest, der als Default-Katalog verwendet werden soll, wenn Statements keine spezifische Angabe dazu enthalten. Wird dieser nicht angegeben, wird der Aliasname verwendet. |
||||||||||||||
checkConnection |
Bei true wird die Gültigkeit einer Verbindung vor jedem Herausgeben aus dem Pool an eine Applikation überprüft. Dies reduziert die Performance des Systems, stellt jedoch zu 100 Prozent sicher, dass die Applikation eine Verbindung erhält, die funktioniert und nicht seit der letzten Überprüfung ungültig geworden ist. |
||||||||||||||
database |
Die JDBC-URL, die die Verbindung zur Datenbank repräsentiert. Diese URL ist datenbankabhängig, z. B. jdbc:mysql://myserver:3306/db |
||||||||||||||
driver |
Die Klasse, die den Treiber des JDBC-Treibers darstellt. Diese Angabe ist datenbankabhängig, z. B. org.gjt.mm.mysql.Driver |
||||||||||||||
idleTime |
Gibt die Zeit in Millisekunden an, die eine Verbindung unbenutzt im Pool sein muss, bevor ihre weitere Gültigkeit vom DatabaseService überprüft wird. Wichtiger Hinweis: Beachten Sie bitte, dass es eine globale idleTime für den Service selbst gibt und eine lokale für den jeweiligen Alias. Ein Alias wird erst überprüft, wenn seine lokale Zeit abgelaufen ist und die globale. |
||||||||||||||
isolationLevel |
Zu verwendender Isolation Level (0-3). Details finden Sie in Ihrer JDBC-Dokumentation.
|
||||||||||||||
lowerCase |
Der Name der Methode für das Umwandeln von Text in Kleinbuchstaben. Normalerweise wird diese Information vom JDBC-Treiber selbst geliefert, allerdings gibt es auch Ausnahmen, sodass eine explizite Angabe erforderlich wird. |
||||||||||||||
maxSize |
Anzahl (nicht negativ) der maximal im Pool vorgehaltenen Verbindungen. -1 stellt die maxSize auf das Doppelte der minSize, mindestens aber auf 1. Alle über diese Zahl hinausgehenden Verbindungen werden getrennt, sobald sie nicht mehr verwendet werden. 0 führt damit zur effektiven Deaktivierung der Pool-Funktion des Services. |
||||||||||||||
maxStatementLength |
Maximale Länge eines Statements inklusive Parametern. wird vom JDOService für die Entscheidung genutzt, ob beim Speichern von Daten "Stripping" genutzt werden soll. 0 deaktiviert diese Prüfung. |
||||||||||||||
minSize |
Anzahl (nicht negativ) der initial herzustellenden Verbindungen beim Start. Ist die aktuell eingestellte maxSize kleiner als der neu gesetzte Minimalwert, wird der Maximalwert automatisch angepasst. Daher sollte man maxSize erst nach dem Setzen von minSize ausführen, um unerwünschte Nebeneffekte zu vermeiden. |
||||||||||||||
nullKeyword |
Text (nicht leer), der in Parameterwerten als Repräsentanz von NULL verwendet werden soll. |
||||||||||||||
password |
Das für die Authentifizierung bei der Datenbank zu verwendende Passwort. Obfuskation ist erlaubt, z. B. OBF:1wtm1xtz1w8v1xtj1wus |
||||||||||||||
readOnly |
Mit true wird dem Treiber mitgeteilt, dass der Zugriff auf die Datenbank im Read-Only-Modus erfolgen soll und erlaubt im Clusterbetrieb die Nutzung von Schattendatenbanken statt den Hauptsystems. |
||||||||||||||
rollback |
true besagt, dass die zu verbindende Datenbank transaktionsbasiertes Arbeiten unterstützt. Eine Angabe von false hat dabei zur Folge, dass nicht versucht wird, eine Transaktion zu beginnen, was bei manchen Datenbanken zu einer Fehlermeldung führen würde. Achtung: Wird bei einer transaktionsfähigen Datenbank der Wert false angegeben, wird auch hier der Versuch ignoriert, eine Transaktion zu starten. Commit und Rollback haben auch keinerlei Effekt, obwohl die Datenbank eigentlich dazu in der Lage wäre. |
||||||||||||||
selectNullKeyWord |
Text (nicht leer), der in Ergebnissen als Repräsentanz von NULL verwendet werden soll. |
||||||||||||||
simulateAccess |
true unterbindet die Ausführung von datenverändernden Statements wie UPDATE oder DELETE. |
||||||||||||||
skipTrimResultValues |
Bei MSSQL- und Informix-Datenbanken werden die Ergebniswerte von SQL-Aufrufen um voranstehende und nachfolgende Leerzeichen bereinigt (trimmed). Will man das nicht, kann man diesen Parameter hier einfügen und auf true setzen. Wichtiger Hinweis: Man sollte diese Einstellungen aber nicht beim Alias für die Repository-Datenbank ("hub") vornehmen, da dies zu funktionalen Problem führen würde (Partnerverwaltung findet dann Kanäle nicht, etc.). Dann lieber einen zweiten Alias auf die gleiche Datenbank mit dieser Einstellung erzeugen. |
||||||||||||||
slowLogMilliSeconds |
Ausführzeit in Millisekunden ab der Statements geloggt werden sollen. |
||||||||||||||
sqlCommand |
Der für die Überprüfung der Gültigkeit einer Datenbankverbindung zu verwendende SQL-Befehl. Wird kein Befehl angegeben, wird die Liste der verfügbaren Tabellen abgerufen. Allerdings wird diese Information von manchen JDBC-Treibern gecached, sodass eine Verbindung als gültig angesehen werden kann, obwohl sie das nicht mehr ist. |
||||||||||||||
strictSchema |
Bei true werden Metadaten der Datenbank auf Einträge gefiltert, die zum eingestellten Katalog gehören. |
||||||||||||||
supportsStream |
Legt fest, ob die verbundene Datenbank sogenannte Character-Streams als Parameter für das Schreiben in und das Lesen aus einer Datenbank unterstützt. Diese Information wird z. B. beim JDO-Service genutzt, der entscheiden muss, ob ein zu schreibendes Objekt "gestripped" werden soll oder nicht. |
||||||||||||||
synchronousStartupInit |
Bei false erfolgt die Initialisierung des Pools zeitverzögert und nicht im Rahmen des Startvorgangs. |
||||||||||||||
user |
Der für die Authentifizierung bei der Datenbank zu verwendende Benutzername. |
Optionale Properties werden eingefügt über den folgenden Block. Obfuskation ist erlaubt, z. B. OBF:1wtm1xtz1w8v1xtj1wus
<
Call
name
=
"addNamedProperty"
>
<
Arg
>propertyname</
Arg
>
<
Arg
>propertyvalue</
Arg
>
</
Call
>
Rollover Handler
Ein Rollover Handler wird über die Methode addRolloverHandler hinzugefügt.
HSQLCheckPointDefragHandler |
Eine spezielle Ausführung des DBReorgHandlers, der gegen die Datenbank hinter dem jeweiligen Alias das Statement checkpoint defrag ausführt. |
DBReorgHandler |
Erlaubt das Setzen von SQL-Statements, die beim Rollover ausgeführt werden sollen. |
<
Call
name
=
"initPool"
>
<
Arg
>
<
New
class
=
"com.ebd.hub.services.database.DatabaseSettings"
>
<
Set
name
=
"alias"
>hsql</
Set
>
[...]
<
Call
name
=
"addRolloverHandler"
>
<
Arg
>
<
New
class
=
"com.ebd.hub.services.database.rohandlers.HSQLCheckPointDefragHandler"
/>
</
Arg
>
</
Call
>
</
New
>
</
Arg
>
</
Call
>
<
Call
name
=
"initPool"
>
<
Arg
>
<
New
class
=
"com.ebd.hub.services.database.DatabaseSettings"
>
<
Set
name
=
"alias"
>hub</
Set
>
[...]
<
Call
name
=
"addRolloverHandler"
>
<
Arg
>
<
New
class
=
"com.ebd.hub.services.database.rohandlers.DBReorgHandler"
>
<
Call
name
=
"addStatement"
>
<
Arg
>optimize table sampletable</
Arg
>
</
Call
>
</
New
>
</
Arg
>
</
Call
>
</
New
>
</
Arg
>
</
Call
>
Loglevel-Abhängigkeiten
Änderungen des Loglevels beim LogService haben keinen Einfluss auf das Logverhalten des DatabaseServices.
Wird der Service in den Verbose-Mode gesetzt, werden folgende zusätzliche Loggingschritte vorgenommen.
Das Java-eigene Datenbankverbindungssystem (DriverManager des JDBC-Frameworks) wird angewiesen, ein eigenes Log zu führen. Dieses befindet sich im Verzeichnis ./logs unter dem Namen db.log. Achtung: Die erzeugte Logdatei ist nicht Bestandteil des sonstigen Logging-Systems des Integration Servers (LogService), wird also nicht am Ende des Tages umbenannt, sondern wächst kontinuierlich. Bei einem Neustart des Servers wird die Datei überschrieben, wenn der DatabaseService weiterhin im Verbose-Mode läuft.
Wird eine Verbindung auf Gültigkeit überprüft (z. B. bei der Herausgabe einer Verbindung mit aktiviertem checkConnection oder bei der regelmäßigen Überprüfung), wird dies entsprechend gemeldet.
Hinweis: Sollen die vom Server ausgeführten SQL-Statements und deren verwendeten Parameter ausgegeben werden, muss dies über den Verbose-Mode des SqlServices geschehen.
GUI
Achtung: Änderungen in der GUI gehen nach einem Neustart des DatabaseServices oder des Integration Servers verloren! Dauerhafte Änderungen müssen in der Konfigurationsdatei durchgeführt werden!
(1) Hier kann die Zeit zwischen zwei Verbindungsüberprüfungen festgelegt werden (siehe Parameter idleTime).
(2) Liste der verfügbaren Datenbank-Aliase. Angezeigt werden die derzeit im Pool befindlichen, also nicht genutzten Verbindungen und insgesamt offenen Verbindungen, die vom DatabaseService für den betreffenden Alias geöffnet wurden.
Kontextmenü eines Aliases
(1) Alias anzeigen/bearbeiten.
Die Felder stellen die gleichen Parameter dar, die in der XML-Konfigurationsdatei verwendet/beschrieben werden.
Werden Änderungen angewendet, dann findet ein Rebuild (2) statt.
(2) Damit werden alle offenen Verbindungen zum Zielsystem geschlossen und der Pool neu aufgebaut, d. h. so viele wie durch minSize definierte Verbindungen erstellt und in den Pool gelegt.
(3) Datenbank-Informationen anzeigen.
(3.1) Die Vendor-ID gibt an, mit welcher datenbankspezifischen Konfiguration der DatabaseService für diesen Alias arbeitet.
(3.2) Die Felder, die für den JDBC-Treiber gesetzt werden können.
(3.3) Die bereitgestellten Methoden des JDBC-Treibers.
(3.4) Die Einstellungen innerhalb der generierten Verbindungen.
(4) Alias hinzufügen.
Die Felder stellen die gleichen Parameter dar, die in der XML-Konfigurationsdatei verwendet/beschrieben werden.