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.
Welche Wertepaare gesetzt werden können, ist abhängig vom verwendeten JDBC-Treiber. Daher sei an dieser Stelle auf die Dokumentation des jeweiligen Treibers verwiesen.

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.

-1

Treiber-Default.

0

TRANSACTION_NONE

1

TRANSACTION_READ_UNCOMMITTED

2

TRANSACTION_READ_COMMITTED

4

TRANSACTION_REPEATABLE_READ

8

TRANSACTION_SERIALIZABLE

Jede andere Zahl.

Sonstiges.

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!


images/download/attachments/137299084/Services_13-version-1-modificationdate-1690442695383-api-v2.png images/download/attachments/137299084/Services_30-version-2-modificationdate-1690443353800-api-v2.png


(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


images/download/thumbnails/137299084/Services_31c_DE-version-2-modificationdate-1690444419649-api-v2.png


(1) Alias anzeigen/bearbeiten.

images/download/attachments/137299084/Services_56_1-version-1-modificationdate-1690444715645-api-v2.png


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.

images/download/attachments/137299084/Services_57-version-1-modificationdate-1690445210567-api-v2.png


(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.


images/download/attachments/137299084/Services_58-version-1-modificationdate-1690445210589-api-v2.png


(3.3) Die bereitgestellten Methoden des JDBC-Treibers.


images/download/attachments/137299084/Services_59-version-1-modificationdate-1690445210609-api-v2.png


(3.4) Die Einstellungen innerhalb der generierten Verbindungen.

(4) Alias hinzufügen.

images/download/attachments/137299084/Services_56-version-2-modificationdate-1690445483264-api-v2.png


Die Felder stellen die gleichen Parameter dar, die in der XML-Konfigurationsdatei verwendet/beschrieben werden.

Siehe auch


Abschnitt Datenbanken/Connectoren (Verwaltung).