Admin's Corner ist der Dokumentationsbereich für Entwickler und Administratoren.

Systemvoraussetzungen für den Serverbetrieb

Domäne
Für einen Produktivserver wird eine registrierte Domäne benötigt, während im Intranet ein auflösbarer Rechnername ausreicht. Auf einem Entwicklerrechner genügt localhost.
Jakarta EE Platform 10
Der JavaComm Server läuft auf jeder Jakarta EE Platform 10.
Jakarta EE Web Profile 10
Der JavaComm-Server läuft auf jeder Jakarta EE Web Profile 10-Plattform, sofern die benötigten EE-10-Erweiterungen vorhanden sind. Wir verwenden Tomcat 10.1.44 als Referenzserver.
MariaDB
Die SQL-Datenbank übernimmt die Verwaltung globaler Daten und speichert den Systemzustand ab. Wir verwenden als Referenzdatenbank MariaDB 10.5.29.

Domäne

Die Domäne wird vom Domain-Provider verwaltet oder vom Webhosting-Anbieter. Über die Verwaltungsoberfläche kann der Domäne eine IP-Adresse zugewiesen werden.

Alternativ kann eine Domäne über einen Drittanbieter in das Internet eingebunden werden. Bei FreeDNS lässt sich einer Domäne eine IP-Adresse zuweisen. Dazu werden beim Domain-Provider die Nameserver von FreeDNS eingetragen. Anschließend erfolgt ein DNS-Abgleich. Nach einigen Stunden ist die Domäne weltweit erreichbar.

Tomcat

Tomcat ist ein Servlet-Container und nutzt nur die Jakarta EE 10 APIs, die für die Anwendung erforderlich sind. Der Server bleibt schlank und effizient. Die Erweiterungen werden in das Tomcat-Verzeichnis entpackt.

${CATALINA_HOME}/lib

In diesem Verzeichnis muss ebenfalls der Datenbanktreiber liegen. Nach einem Neustart von Tomcat sind alle Erweiterungen aktiv.

Für die Verschlüsselung der Daten wird ein Zertifikat für die Domänenvalidierung benötigt. Zahlreiche Zertifizierungsstellen stellen DV-Zertifikate aus. Wir empfehlen Let's Encrypt. Sie können ein Zertifikat direkt bei Let's Encrypt beziehen oder über ihren Webhoster. Die Programme openssl und keytool werden anschließend ausgeführt, um das Zertifikat in den Zertifikatspeicher von Tomcat einzuspielen.

openssl pkcs12 -export -in merge.crt -inkey private.key -out letsencrypt_2025_11_03.p12
keytool -changealias -alias 1 -destalias asterix -keystore letsencrypt_2025_11_03.p12 -storepass obelix

  • merge.crt ist eine von Ihnen erstellte Textdatei, die Ihren Public Key sowie die Zertifikatkette von Let’s Encrypt oder einer anderen Certificate Authority (CA) enthält. Die Zertifikatkette liegt in der Regel in einer Textdatei namens bundle. In merge.crt erfolgt die Reihenfolge: zuerst der Public Key, dann die Zertifikatkette.

  • private.key ist eine Textdatei, die den Private Key Ihres Zertifikats enthält.

  • letsencrypt_2025_11_03.p12 ist ein Zertifikatspeicher, der neu mit genau einem Zertifikat angelegt wird. Läuft das Zertifikat ab, wird der Speicher verworfen und mit einem aktuellen Zertifikat neu erstellt.

Nach dem Import mit openssl erhielt das Zertifikat einen numerischen Alias. keytool änderte diesen in einen sprechenden Aliasnamen. Der Alias wurde von 1 auf asterix geändert, und letsencrypt_2025_11_03.p12 erhielt das Passwort obelix. Anschließend wird letsencrypt_2025_11_03.p12 an den folgenden Ort kopiert:

${CATALINA_HOME}/conf/letsencrypt_2025_11_03.p12

Im letzten Schritt muss letsencrypt_2025_11_03.p12 in der Datei

/conf/server.xml

eingetragen und der Port 443 für https konfiguriert werden. Danach kann Tomcat die Server-Anwendung starten, und die Verschlüsselung ist aktiv.

<!-- Ein Auszug aus der Tomcat server.xml --> <Connector port="443" defaultSSLHostConfigName="mydomain.net" protocol="org.apache.coyote.http11.Http11Nio2Protocol" sslImplementationName="org.apache.tomcat.util.net.jsse.JSSEImplementation" maxThreads="150" SSLEnabled="true" scheme="https" secure="true" compression="on"> <SSLHostConfig hostName="mydomain.net" sslProtocol="TLSv1.3" certificateVerification="none"> <Certificate certificateKeyAlias="asterix" certificateKeystoreFile="${CATALINA_HOME}/conf/letsencrypt_2025_11_03.p12" certificateKeystorePassword="obelix"> </Certificate> </SSLHostConfig> </Connector>

Logging

Loggen kann zu einem echten Problem werden, wenn zu viele Informationen erfasst werden. Webservices basieren auf HTTP, und alle Anfragen an einen Server werden automatisch protokolliert. Tomcat bildet hierbei keine Ausnahme.

Übermäßiges Logging oder Anfragen, die eine User-ID enthalten, können durch einen Logfilter unterbunden werden. Hierfür wurde die Klasse net.javacomm.server.LogFilter entwickelt. In dieser Klasse wird ein URL-Pattern definiert, das das Logging für bestimmte Ressourcen unterdrückt. Das Pattern sollte nach den individuellen Anforderungen angepasst werden. Standardmäßig werden alle URLs für das Screen Sharing unterdrückt, um übergroße Logdateien zu vermeiden.

Tomcat registriert die Klasse net.javacomm.server.LogFilter über die web.xml der Datei javacommserver.war. Erkennt LogFilter ein Muster aus <filter-mapping>, informiert es die Konfiguration der AccessLogValve in der server.xml, sodass das Logging entsprechend unterdrückt wird.

<!-- A snippet of web.xml in javacommserver.war --> <filter> <filter-name>LogFilter</filter-name> <filter-class>net.javacomm.server.LogFilter</filter-class> </filter> <filter-mapping> <filter-name>LogFilter</filter-name> <url-pattern>/screenshot/*</url-pattern> <url-pattern>/videokonferenz/*</url-pattern> </filter-mapping>

AccessLogValve muss in der server.xml mit dem Attribut conditionUnless erweitert werden. Der Wert block entspringt der Klasse net.javacomm.server.LogFilter.

<!-- A snippet of ${CATALINA_HOME}/conf/server.xml --> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t &quot;%r&quot; %s %b" conditionUnless="block" />

MariaDB

Die Server-Tabellen für Administrationsfunktionen werden über SQL-Skripte und die Admin-GUI verwaltet. Die Admin-GUI ist Bestandteil des JavaComm-Clients und wird nur für Benutzer freigeschaltet, die in der Tabelle TB_USER als Programmadministrator markiert sind. Programmadministratoren können nicht über die GUI angelegt werden; das Anlegen und Entfernen erfolgt ausschließlich durch einen Datenbankadministrator per SQL oder einem Datenbankverwaltungstool. Für diese Zwecke ist DBeaver ausgezeichnet geeignet. DBeaver gibt es als Desktop-Anwendung oder als Eclipse-Plugin.

Für das Einrichten der Datenbank und der Tabellen gibt es ein generelles Skript, welches über den MariaDB-Client im Batchmodus ausgeführt wird.

Bevor das Masterskript runolymp.cmd aufgerufen wird, sollten die Einträge in den Einzelskripten kontrolliert und für die eigenen Bedürfnisse angepasst werden. Das Masterskript ist idempotent. Wer MariaDB nicht einsetzen möchte, muss drei Dinge beachten:

  1. Ein geeigneter JDBC-Datenbanktreiber muss nachträglich in das Tomcat-Verzeichnis kopiert werden:

    /lib

  2. Einige Datentypen aus der olymp_tables_10_11_4.sql müssen durch äquivalente Datentypen der verwendeten Datenbank ersetzt werden.
  3. Einige SQL-Kommandos müssen möglicherweise angepasst werden. Die SQL-Kommandos sind mit einem eindeutigen Schlüssel in der Datei sqlmapper.xml hinterlegt. Die Datei liegt im Source-Code-Archiv unter:

    javacomm/javacommserver/src/main/resources/net/javacomm/database/sqlmapper

Tipp:
Alle Datenbankbefehle werden mit ihrem Schlüssel vor der Ausführung in der Datei

${CATALINA_HOME}/logs/javacommserver/database.log

aufgezeichnet. Falls ein Befehl nicht ausgeführt werden konnte, ist die Stelle in der Logdatei mit der Fehlerursache vermerkt.

Datenbank- und E-Mail-Konfiguration in Tomcat

Die Konfiguration von Datenbank- und E-Mail-Zugangsdaten erfolgt über die Datei context.xml. Diese Datei wird nicht ausgeliefert und ist nur lokal auf dem Server zugänglich. Tomcat benötigt die Zugangsdaten im Klartext, um Verbindungen zu Datenbank und Mailserver herzustellen. Eine Verschlüsselung innerhalb der Datei würde keinen zusätzlichen Schutz bieten, da der Entschlüsselungsschlüssel ebenfalls lokal verfügbar sein müsste.

Datenbanken sind für Administratoren vollständig einsehbar und werden häufig repliziert und gesichert. Deshalb ist die Ablage der Zugangsdaten in context.xml technisch sinnvoll und entspricht dem branchenüblichen Standard für Tomcat-Anwendungen.

Die Datei liegt im Quellcode-Archiv unter:

javacomm/javacommserver/src/main/webapp/META-INF/context.xml

<!-- context.xml --> <?xml version="1.0" encoding="UTF-8"?> <Context path="/javacommserver" reloadable="true" > <Resource name="jdbc/olymp" auth="Container" type="javax.sql.DataSource" factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" testWhileIdle="true" testOnBorrow="true" testOnReturn="false" validationQuery="SELECT 1" validationInterval="30000" timeBetweenEvictionRunsMillis="30000" maxActive="100" minIdle="10" maxWait="10000" initialSize="10" removeAbandonedTimeout="60" removeAbandoned="true" logAbandoned="true" minEvictableIdleTimeMillis="30000" jmxEnabled="false" jdbcInterceptors="org.apache.tomcat.jdbc.pool.interceptor.ConnectionState; org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer" username="hades" password="persephone" driverClassName="org.mariadb.jdbc.Driver" url="jdbc:mariadb://localhost:3306/olymp"/> <Resource name="mail/portal" auth="Container" type="jakarta.mail.Session" mail.smtp.starttls.enable="true" mail.smtp.starttls.required="true" mail.smtp.auth="true" mail.smtp.ssl.enable="false" mail.smtp.ssl.checkserveridentity="false" mail.smtp.connectiontimeout="5000" /> <Environment name="adminmail" value="admin@domain.net" type="java.lang.String" /> <Environment name="mail.smtp.password" value="super_secret" type="java.lang.String" /> <Environment name="mail.smtp.user" value="mailuser@domain.net" type="java.lang.String" /> <Environment name="mail.smtp.host" value="mail.domain.net" type="java.lang.String" /> <Environment name="mail.smtp.port" value="587" type="java.lang.Integer" /> </Context>

Die wichtigsten Parameter kurz erklärt.

Datenbankparameter:

  • username: Tomcat ist aus der Sicht von MariaDB ein normaler Benutzer mit dem Namen hades.
  • password: Das Passwort für den MariaDB-Benutzer ist persephone.
  • driverClassName: Diese Klasse stellt die Verbindung zwischen Tomcat und MariaDB her.
  • url: Diese URL sagt Tomcat, auf welchem Rechner und Port MariaDB Verbindungen entgegennimmt.

E-Mail-Parameter:

  • adminmail: An dieses Adminpostfach werden Benutzeranträge geschickt.
  • mail.smtp.password: Tomcat verwendet dieses Passwort, um sich bei einem Mailserver anzumelden.
  • mail.smtp.user: Tomcat meldet sich mit diesem Benutzernamen an.
  • mail.smtp.host: Der Mailserver ist unter dieser Adresse erreichbar.
  • mail.smtp.port: Der Mailserver nimmt Anfragen über diesen Port entgegen.

Administrationsoberfläche (AdminUI)

Benutzer mit Administratorrechten sehen im Client oben rechts das Menü Administrator. Um einem Benutzer diese Rechte zu gewähren, muss ein Datenbankadministrator in der Tabelle TB_USER die Spalte ISADMIN für den entsprechenden Benutzer auf 1 setzen.

Der Programmadministrator legt den Anmeldevorgang fest und definiert Filter für Nicknames und Räume. Weiterhin bestimmt er die Karenzzeit für Pausenräume, bevor sie in ein Forum umgewandelt werden. Den Updatevorgang aller Clients kann er durch die Angabe von veralteten Programmversionsnummern einleiten.

Menü Administrator verwalten

mvn
mvn -Pwinrunner
mvn -Plinrunner
mvn -Pwinportable
mvn -Plinportable
mvn -Prelease
mvn

Impressum