MongoDB-Einrichtung
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 inneren Konfigurationen zur Anbindung funktionierender Fremdsysteme.
Diese Anleitung beschreibt die Anbindung einer MongoDB-Datenbank (zusätzliche Lizenz nötig). Diese deckt nicht die Einrichtung der MongoDB selbst ab. Bitte verwenden Sie dazu die MongoDB-Handbücher.
Grundlegende Voraussetzungen
Um MongoDB als Protokollierungsserver zu verwenden, muss Ihre Installation über eine gültige Lizenz für die Thread-Optimierung verfügen (Thread Optimization).
Sie sollten den MongoDB-Treiber "mongo-java-driver.jar" bereits in Ihrem "./lib"-Verzeichnis haben. Ansonsten wenden Sie sich bitte an unsere Mitarbeiter im Support.
Konfigurationsdatei ./etc/mongodb.xml
Der Datenbank-Alias für das Logging muss den Namen _data haben. Ist das nicht der Fall, wird das Logging nicht auf die MongoDB umgestellt!
Pooling und Caching erfolgt durch den Treiber selbst. Die Option catalogName verweist auf die Datenbank mit den sogenannten Collections. Da MongoDB Cluster-Server unterstützt, können Sie mehrere Server unter einem Alias definieren. Folgend ein Beispiel.
Wichtiger Hinweis: Die folgende Konfigurations-Variante ist erst ab der Lobster-Integration-Version 4.6.5 gültig (davor gilt die alte Variante).
<
Configure
class
=
"com.ebd.hub.services.nosql.mongo.MongoDBConnectionService"
>
<
Set
name
=
"verbose"
>False</
Set
>
<
Call
name
=
"initPool"
>
<
Arg
>
<
New
class
=
"com.ebd.hub.services.nosql.mongo.MongoDBSettings"
>
<
Set
name
=
"alias"
>_data</
Set
>
<
Call
name
=
"addDatabaseEntry"
>
<
Arg
>
mongodb://
[username:password@]host1[:port1][,...hostN[:portN]][/[defaultAuthDB][?options]]</
Arg
>
</
Call
>
<
Set
name
=
"catalogName"
>dw</
Set
>
</
New
>
</
Arg
>
</
Call
>
</
Configure
>
Also zum Beispiel:
...
<
Call
name
=
"initPool"
>
<
Arg
>
<
New
class
=
"com.ebd.hub.services.nosql.mongo.MongoDBSettings"
>
<
Set
name
=
"alias"
>_data</
Set
>
<
Call
name
=
"addDatabaseEntry"
>
<
Arg
>
mongodb://mongouser:mongopassword@localhost/admin
</
Arg
>
</
Call
>
<
Set
name
=
"catalogName"
>dw</
Set
>
</
New
>
</
Arg
>
</
Call
>
...
Das Passwort kann auch obfuskiert angegeben werden mit dem Platzhalter <password> (in escapter Form, exakt so, wie folgend gezeigt, wobei mongouser und myObfuscatedPassword natürlich noch ersetzt werden müssen) und einer zusätzlichen Zeile.
... <Arg>mongodb://mongouser:<password>@localhost/admin</Arg> |
Konfigurationsdatei ./etc/factory.xml
Aktivieren Sie den folgenden Abschnitt in der Konfigurationsdatei ./etc/factory.xml oder fügen Sie ihn hinzu (gleich nachdem Sie den MongoDBConnectionService hinzugefügt haben).
<
Call
name
=
"addService"
>
<
Arg
>com.ebd.hub.services.nosql.mongo.MongoDBConnectionService</
Arg
>
<
Arg
>etc/mongodb.xml</
Arg
>
</
Call
>
Stored Procedure für nächste Jobnummer und Archivoption in ./etc/startup.xml
Die nächste verfügbare Jobnummer kann mit zwei Methoden verwaltet werden. Verwenden des internen Speicherdienstes oder Ausführen einer Stored Procedure. Wenn Sie eine MongoDB verwenden, müssen Sie die Stored Procedure aktivieren. Wichtiger Hinweis: Wenn der Aufruf der Stored Procedure keine Jobnummer zurück liefert (z. B. weil die Datenbank "hub" nicht erreichbar ist), dann wird Lobster Integration beendet. Hinweis: Beispiele finden Sie in Datei ./conf/samples/db_sequence.sql .
Beispiel für MySQL
Für eine MySQL-Datenbank sollten Sie statt einer Stored Procedure folgende Sequenz verwenden (in der Datenbank (Schema), die für das (normale) Logging verwendet), da Stored Procedures in MySQL nicht thread-sicher sind.
create
sequence
getNextJobNr
as
BIGINT
start
with
<start_value> increment
by
1;
Verwenden Sie für den Startwert start_value die aktuell höchste Jobnummer (evtl. auch etwas höher).
Fügen Sie dann die folgende Option in der Konfigurationsdatei ./etc/startup.xml hinzu.
<
Set
name
=
"sequenceProcedureCall"
>SELECT NEXT VALUE FOR getNextJobNr</
Set
>
Beispiel für MSSQL
Hinweis: Eine Sequenz funktioniert in einer MSSQL nicht, da diese nicht über JDBC mit einem SELECT abgefragt werden kann und auch nicht über eine Prozedur. In einer Funktion ist der Aufruf einer Sequenz ebenfalls nicht möglich. Stattdessen muss man sich mit folgendem Vorgehen behelfen.
Als Erstes muss eine Tabelle angelegt werden. Diese Tabelle enthält eine Spalte IDENTITY, die bei jedem Eintrag automatisch hochgezählt wird.
CREATE TABLE [dbo].[jobnr](
[SeqID] [
int
] IDENTITY(
1
,
1
) NOT NULL,
[SeqVal] [varchar](
1
) NULL,
PRIMARY KEY CLUSTERED
(
[SeqID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
Dann wird eine Prozedur benötigt, um die hochgezählte Nummer IDENTITY abzufragen. Diese Prozedur macht dazu einen Eintrag in die oben angelegte Tabelle, damit der Wert der Spalte IDENTITY hochgezählt wird. Mit scope_identity() wird dieser Wert dann geholt und von der Prozedur als Return-Wert zurückgegeben.
create procedure [dbo].[GetNewJobnr]
@jobnr
int
Output as
begin
set NOCOUNT ON
insert into jobnr (SeqVal) values (
'a'
)
set
@jobnr
= scope_identity()
delete from jobnr WITH (READPAST)
return
end
GO
Folgend der Eintrag in der Konfigurationsdatei ./etc/startup.xml, um die Prozedur aufzurufen.
<Set name=
"sequenceProcedureCall"
>declare
@jobnr
int
exec GetNewJobnr
@jobnr
output select
@jobnr
</Set>
Beispiel für Oracle
Hier muss nur die Sequenz in der Datenbank angelegt werden.
CREATE SEQUENCE jobnr_dw_seq
START WITH
1
INCREMENT BY
1
NOCACHE
NOCYCLE;
Folgend der Eintrag in der Konfigurationsdatei ./etc/startup.xml, um die Sequenz aufzurufen.
<Set name=
"sequenceProcedureCall"
>Select jobnr_dw_seq.nextval from dual</Set>
Mit einer MongoDB können Sie veraltete Log-Einträge von Jobs in eine andere Collection verschieben. Fügen Sie dazu den folgenden Eintrag ein.
<
Call
name
=
"setLongTimeArchive"
><
Arg
type
=
"int"
>30</
Arg
><
Arg
type
=
"int"
>900</
Arg
></
Call
>
In diesem Beispiel werden alle Logeinträge, die älter als 30 Tage sind, in die Archiv-Collection verschoben und dort nach 900 Tagen gelöscht. Bei der Anforderung von Logeinträgen, die älter als 30 Tage sind, wird in der Archiv-Collection statt in der normalen Collection gesucht.
Log-Migration
Wenn Ihr System erfolgreich gestartet wurde, können Sie Ihre alten Log-Meldungen der SQL-Datenbank in der MongoDB zusammenführen. Die Migration wird im Hintergrund durchgeführt. Stoppen Sie den Server also nicht, bis der Job beendet ist!
Öffnen Sie die Admin-Konsole und navigieren Sie zu Ausführung von Klassen. Geben Sie com.ebd.hub.datawizard.log.mongodb.TransferLogEntries als Klassennamen ein und den Datenbank-Alias des normalen Loggings (normalerweise ist das hub). Optional können Sie (falls konfiguriert) den DataCockpit-Alias eingeben. Führen Sie die Klasse aus und überprüfen Sie Datei ./logs/wrapper.log unter Windows oder ./hub.txt unter Unix-/Linux-Systemen. Sie werden eine Nachricht wie Finished, overall time is XXXs am Ende vorfinden. Nur die Tabelle dw_log_sum wird zur MongoDB migriert. Wenn Sie alte Details-Logs benötigen, müssen Sie diese aus der alten dw_log-Tabelle abfragen.
MongoDB und DataCockpit
Wenn Sie eine MongoDB und DataCockpit benutzen (siehe Abschnitt Installation), fügen Sie bitte eine Eintrag wie den folgenden in Konfigurationsdatei ./etc/startup.xml ein
<
Call
name
=
"addApplication"
><
Arg
>
<
New
class
=
"de.lobster.webmon.apps.WebMonitor"
>
<
Set
name
=
"alias"
>hub</
Set
>
<
Set
name
=
"remoteHost"
></
Set
>
<
Set
name
=
"remotePort"
>8020</
Set
>
<
Set
name
=
"mailSender"
>first.last@lobster.de</
Set
>
<
Set
name
=
"retainHeaderLogs"
>999</
Set
>
<
Set
name
=
"cleanUpTime"
>2</
Set
>
<
Set
name
=
"serverName"
>Main Server</
Set
>
</
New
>
</
Arg
></
Call
>
und zudem in Konfigurationsdatei ./etc/mongodb.xml.
<
Call
name
=
"initPool"
>
<
Arg
>
<
New
class
=
"com.ebd.hub.services.nosql.mongo.MongoDBSettings"
>
<
Set
name
=
"alias"
>_data</
Set
>
<
Call
name
=
"addDatabaseEntry"
>
<
Arg
type
=
"String"
>
mongodb://localhost:27017
</
Arg
>
</
Call
>
<
Set
name
=
"catalogName"
>dw</
Set
>
</
New
>
</
Arg
>
</
Call
>
<
Call
name
=
"initPool"
>
<
Arg
>
<
New
class
=
"com.ebd.hub.services.nosql.mongo.MongoDBSettings"
>
<
Set
name
=
"alias"
>hub</
Set
>
<
Call
name
=
"addDatabaseEntry"
>
<
Arg
type
=
"String"
>
mongodb://localhost:27017
</
Arg
>
</
Call
>
<
Set
name
=
"catalogName"
>dw</
Set
>
</
New
>
</
Arg
>
</
Call
>