Das Repository verwaltet den Quellcode der Datensuche. Die Datensuche ist das Web-GUI zum Beziehen von Geodaten.
Die Datensuche besteht aus einer einzelnen Komponente (einer Webanwendung). Sie wiederum ist Bestandteil der funktionalen Einheit "Datenbezug" (https://github.com/sogis/dok/blob/dok/dok_funktionale_einheiten/Documents/Datenbezug/Datenbezug.md).
Die Anwendung kann am einfachsten mittels Env-Variablen gesteuert werden. Es stehen aber auch die normalen Spring Boot Konfigurationsmöglichkeiten zur Verfügung (siehe "Externalized Configuration").
Name | Beschreibung | Standard |
---|---|---|
CONFIG_FILE |
Vollständiger, absoluter Pfad der Themenbereitstellungs-Konfigurations-XML-Datei. | /config/datasearch.xml |
ITEMS_GEOJSON_DIR |
Verzeichnis, in das die GeoJSON-Dateien der Regionen gespeichert werden. Sämtliche JSON-Dateien in diesem Verzeichnis werden öffentlich exponiert. | #{systemProperties['java.io.tmpdir']} (= Temp-Verzeichnis des OS) |
Falls die datasearch.xml-Datei im Verzeichnis /config/ vorliegt, reicht:
java -jar sodata-server/target/sodata.jar
Ansonsten kann die Datei explizit angegeben werden:
java -jar sodata-server/target/sodata.jar --app.configFile=/path/to/datasearch.xml
Analog Java:
./sodata-server/target/sodata-server [...]
Die datasearch.xml-Datei kann direkt in das Image gebrannt werden. In diesem Fall sollte sie in den Ordner /config/ gebrannt werden, was zu folgendem Start-Befehl führt:
docker run -p8080:8080 sogis/sodata:latest
Wird die Datei nicht in das Image gebrannt, ergibt sich folgender Befehl:
docker run -p8080:8080 -v /path/to/datasearch.xml:/config/datasearch.xml sogis/sodata:latest
Keine.
@Michael: todo
Die Anwendung ist mit GWT und Spring Boot in Java geschrieben. Typischerweise ist eine solche Anwendung in drei Maven-Module unterteilt:
- sodata-server: Serverseitige Businesslogik. Erstellen des Suchindexes und Bereitstellen einer Such-API.
- sodata-client: GWT-Code aus dem die clientseitige Javascript-Anwendung transpiliert wird.
- sodata-shared: Gemeinsamer Code (Server und Client), insbesonderen DTO.
Die datasearch.xml-Datei wird zum Hochfahren benötigt, d.h. ohne Datei fährt die Anwendung nicht hoch. Dies ist ein bewusster Entscheid, kann aber auch wieder geändert werden. Es soll vor allem verhindert werden, dass die Anwendung vermeintlich korrekt funktioniert aber gar keine Liste anzeigt. Die datasearch.xml-Datei wird mit den Modell-Java-Klassen des meta2file-Projektes geparsed. Es wird eine Lucene-Index erzeugt. Der Index ist nur im Container persistiert und wird nach jedem Neustart des Containers neu erstellt, d.h. falls zwei Container/Pods laufen, verwenden sie nicht den identischen Index.
Für das Native Image sind entweder genügend Tests notwendig, damit die benötigte Information zusammengesammelt werden kann, oder die Anwendung muss mit dem Agent gestartet werden und manuell rumgeklickt werden.
Zum Entwicklen und Testen wird mit Profil-spezifischen application.yml-Dateien gearbeitet.
Die Daten auf einem anderen Server können mit einem Klick auf einen Button oder auf eine Einteilung in der Karte heruntergeladen werden. Es entsprich also eigentlich einem "Window.open()". Aus diesem Grund öffnet sich kurz ein neuer Tab, der sich aber sofort wieder schliesst. Eine elegantere Variante wäre, wenn man dies mit "fetch" in der Anwendung macht. Aber das geht nicht, weil Cors ein Problem ist (-> ProxyController) und bei sehr grossen Dateien wirkt es m.E. unlogischer und intransparenter. Es entstünde auch mehr Code. Aus diesem Grund auf der "hemdsärmlichen" Variante belassen.
First Terminal:
./mvnw spring-boot:run -Penv-dev -pl *-server -am -Dspring-boot.run.profiles=dev
Second Terminal:
./mvnw gwt:codeserver -pl *-client -am
Or without downloading all the snapshots again:
./mvnw gwt:codeserver -pl *-client -am -nsu
Test single class in subproject:
./mvnw test -Dtest=GeoJsonWriterTest -pl sodata-server
Falls der Client (der Codeserver) nicht startet und es eine Fehlermeldung bezüglich eine bereits verwendeten Ports wirft, kann man den Codeserver auch abschiessen:
netstat -vanp tcp | grep 9876
Und anschliessendes kill -9 <PID>
.
./mvnw -Penv-prod clean package -DexcludedGroups="docker"
./mvnw -Penv-prod,native clean package -DexcludedGroups="docker"
Die datasearch.xml-Datei wird durch Testcontainers in den Container kopiert.
docker build -t sogis/sodata:latest -f sodata-server/src/main/docker/Dockerfile.native .
In diesem Fall muss das Native Image auf Linux gebuildet werden.