Contract DB

ContractDB

Abstract

Hinter der Contract DB verbirgt sich ein unabhängiger Microservice, der eine REST Schnittstelle für die Systemweiche der B2B zur Verfügung stellt.

Systemvorraussetzungen

Die Applikation benötigt Java 8 und genügend Arbeitsspeicher um die Stammdaten plus der zugehörigen Indices im Speicher zu halten.

Installation

Die Applikation wird als einzelne JAR Datei ausgeMANDANTBert. Sie wird über 2 Files konfiguriert.

application.yaml

Diese Datei muß im gleichen Verzeichnis wie die JAR Datei abgelegt werden und konfiguriert das grundlegende Verhalten des Servers.

# === Server Config
server.port: 8080

Frei wählbarer Port unter dem der Server erreichbar sein soll

# === Enable H2 Console
spring.h2.console.enabled: true

Das aktivieren dieser Option schaltet auf dem Server eine SQL-Console unter dem Pfad /h2-console frei

# === DB Config
spring.datasource.url: jdbc:h2:mem:contractdb
spring.datasource.driverClassName: org.h2.Driver
spring.datasource.username: indexr
spring.datasource.password: changeme
spring.datasource.platform: h2

Der letzte Teil der datasource url ist frei wählbar. username und password sind ebenfalls frei wählbar. In der in-memory Datenbank wird ein User mit diesen Werten angelegt, der sowohl vom Server selber genutzt wird als auch zum Login über die SQL-Console zur Verfügung steht. Da dieses Konfigurationsfile in einem übergeordneten Verzeichnis zu den Input-Daten des Servers liegt entsteht durch diese Konfigurationsoption kein zusätzliches Sicherheitsrisiko.

# === Hibernate
spring.jpa.show-sql: false
spring.jpa.hibernate.ddl-auto: none
spring.jpa.properties.hibernate.dialect: org.hibernate.dialect.H2Dialect

Dieser Teil sollte nur in Ausnahmefällen angepasst werden.

# === Config
rescan.delay.milliseconds: 10000
csv:
  files:
  - system: SYSTEM1
    mandant: MANDANTA
    path: VERZEICHNIS1/filename.csv
  - system: SYSTEM1
    mandant: MANDANTB
    path: VERZEICHNIS2/filename.csv
  - system: SYSTEM2
    mandant: MANDANTA
    path: VERZEICHNIS3/filename.csv
  - system: SYSTEM2
    mandant: MANDANTB
    path: VERZEICHNIS4/filename.csv

rescan.delay.milliseconds definiert die Pause zwischen dem Ende der letzten Überprüfung der InputFiles und der nächsten Überprüfung.

Unter csv.files werden die Datenfiles definiert. Es muß pro Kombination aus System und Mandant ein File zur Verfügung gestellt werden, die entsprechend der Konfiguration benannt und in den passenden Verzeichnissen abgelegt werden müssen. Es wird empfohlen, die Files unter einem anderen Namen auf das System zu kopieren und im Anschluß umzubenennen um den Import unvollständiger Files zu verhindern. Während dem Import antwortet der Server weiterhin mit den Daten aus dem letzten Import. Es findet kein incrmentieller Import statt. Die Daten werden pro Kombination aus System und Mandant vollständig durch den neuen Import ersetzt.

management:
  endpoint:
    httptrace:
      enabled: true
  endpoints:
    web:
      exposure:
        include: ["health", "httptrace"]

Dieses Setting schaltet einen zusätzlichen Endpoint unter /actuator/httptrace frei, der die letzten 100 Requests auflistet.

log4j2.xml

Konfigurationsfile nach Log4j-2 Standard. Interessante Logger:

  • org.springframework.web.filter.CommonsRequestLoggingFilter - loggt auf debug level alle Requests
  • com.nextlevel.b2b.contractindex.service.finder.ContractDataCheckService - loggt auf debug level den Suchvorgang
  • com.nextlevel.b2b.contractindex.service.reader - loggt auf debug level den Updateprozeß

Fileformat

Der Service erwartet pro Kombination aus System und Mandant eine CSV-Datei am konfigurierten Ort. Über das lezte Änderungsdatum dieser Files wird ermittelt, ob ein neuer Import erfolgen muß. Um Locks auf der Datenbank zu vermeiden findet kein paraleller Import statt. Während des Imports arbeitet der Service mit den bisherigen Daten weiter.

Die CSVs müssen ;als Trennzeichen verwenden und über eine Headerzeile mit den Spaltennamen verfügen. Die Reihenfolge der Spalten ist beliebig, allerdings müssen die Spaltennamen eingehalten werden. Die berücksichtigten Spaltennamen sind:

  • system
  • mandant
  • malo
  • melo
  • meternr
  • firstname
  • lastname
  • street
  • housenr
  • plz
  • city
  • cityadditional
  • contractnr

Ablauf der Suche

Die Suche erfolgt in mehren Schritten und wird nach dem erste Schritt, der mindestens ein Ergebnis liefert beendet. Die Ergebnisse der Suche werden als Liste uniquer Kombinationen aus System und Mandant in undefinierter Reihenfolge zurück gegeben.

  1. Suche nach Marktlokation
  2. Suche nach Meßlokation
  3. Suche nach Vertragsnummer
  4. Suche nach Gerätenummer
  5. Suche nach Adressdaten
    • Vorname (optional, falls vorhanden)
    • Nachname (optional, falls vorhanden)
    • Straße
    • Hausnummer
    • Postleitzahl
    • Stadt

Optionale Adressfelder müssen vom aufrufenden System (der B2B) nicht übermittelt werden.

View Me   Edit Me