Java installieren
Da wir ja sicherlich keine Lust haben für Java etwas zu bezahlen, installieren wir jetzt die OpenJDK Verion 11 die LTS (Long Time Support) hat. Dafür schauen wir auf jdk.java.net und downloaden das gewünschte *.tar.gz.
wget https://download.java.net/java/GA/jdk11/13/GPL/openjdk-11.0.1_linux-x64_bin.tar.gz -O /tmp/openjdk-11.0.1_linux-x64_bin.tar.gz tar xfvz /tmp/openjdk-11.0.1_linux-x64_bin.tar.gz --directory /usr/lib/jvm rm -f /tmp/openjdk-11.0.1_linux-x64_bin.tar.gz
Bei mir ist es die 64-Bit-Verion 11.0.1 geworden. Jetzt muss die Version noch als Default für das Linux System gesetzt werden:
update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk-11.0.1/bin/java 100 update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk-11.0.1/bin/javac 100 update-alternatives --config java update-alternatives --config javac
Nach der Auswahl könnt ihr noch die Umgebungsvariablen setzen.
export JAVA_HOME="/usr/lib/jvm/jdk-11.0.1" export PATH=$JAVA_HOME/bin:$PATH
wenn Ihr jetzt auf der Console java -verion
eingebt, muss folgendes zu sehen sein.
openjdk version "11.0.1" 2018-10-16 OpenJDK Runtime Environment 18.9 (build 11.0.1+13) OpenJDK 64-Bit Server VM 18.9 (build 11.0.1+13, mixed mode)
Nun dürfte dem ersten Start vom Wildfly nichts mehr im Wege stehen und das geht mit folgendem Befehl:
sh /opt/wildfly/bin/standalone.sh
Mit [Strg + c]
könnt ihr ihn wieder beenden.
Der Wildfly besitzt ein Deployment-Ordner auf den er lauscht und alle *.ear oder *.war Dateien dort drinnen werden deployed (sogar zur Laufzeit). Der Ordner befindet sich hier: /opt/wildfly/standalone/deployments/
Wildfly als Service über Autostart automatisch hochfahren
Wir wollen den Wildfly in Zukunft nicht mehr per Hand starten und möchten einen automatisierten Ablauf haben in dem alles korrekt hochfährt und wir uns keine Gedanken mehr machen müssen, sollte der Server mal neu gestartet werden. Zunächst benötigen wir einen neuen User, der alleiniges Recht besitzt den Wildfly starten zu dürfen. Ich empfehle ihn direkt auch wildfly zu nennen, zum einen ist es für euch übersichtlich und klar welche Aufgabe der User hat und zum Anderen, ist der Default der JBOSS_USER-Umgebungsvariable zufälliger Weise wildfly. Ebenso ist der Pfad /opt/widlfly/, den ich eh schon für die Beispiele benutzt habe, ebenfalls der Default der Umgebungsvariable: JBOSS_HOME.
Wildfly-User erstellen und einrichten
Wie ich schon einmal erwähnt habe, sollte jede Anwendung die wir selbst installieren einen eigenen User bekommen, der alleiniges Recht hat sie zu benutzen.
adduser wildfly
Nun müssen wir sicher stellen, das dieser User volle Rechte auf den Wildfly-Ordner hat:
chown -cR wildfly:wildfly /opt/wildfly/
Der Wildfy hat für die Erstellung als Service bereits Konfigurationsdateien vorbereitet, die wir jetzt nur noch an die richtigen Stellen kopieren müssen:
cp /opt/wildfly/docs/contrib/scripts/init.d/wildfly.conf /etc/default/wildfly cp /opt/wildfly/docs/contrib/scripts/init.d/wildfly-init-debian.sh /etc/init.d/wildfly
Bevor wir den Service das Erste Mal starten können, müssen wir noch die Logausgabe definieren: Auch hier gibt es wieder einen Default für die JBOSS_CONSOLE_LOG-Umgebungsvariable und zwar unter dem Pfad: /var/log/wildfly/console.log den wir zunächst erst einmal anlegen müssen! Alle Defaults zu den Umgebungsvariablen vom JBoss/Wildfly könnt ihr jetzt in der /etc/init.d/wildfly Datei nachlesen! Jetzt müssen wir wiederum dem wildfly-User volle Rechte auf diesen Ordner geben:
mkdir -p /var/log/wildfly/ chown -cR wildfly:wildfly /var/log/wildfly/
Um den Service jetzt zu starten, müssen wir ihn vorher noch aktivieren:
update-rc.d wildfly defaults update-rc.d wildfly enable
Nun könnt ihr endlich den Wildfly über folgenden Befehl starten:
service wildfly start
Auch nach einem Neustart des Servers, sollte der Service aktiv sein. Testet das ganz einfach mit reboot
und prüft danach mit service wildfly status
ob unter Active: active (running) steht.
Verbindung zur Datenbank herstellen
Wir wollen jetzt die Verbindung vom Applikationsserver zur Datenbank schaffen, damit unsere Java-EE Anwendung über einen eindeutigen JNDI-Namen den Zugriff erhält. Da wir uns für die PostgreSQL-Datenbank entschieden haben müssen wir dem Wildfly die Treiberinformationen von PostgreSQL liefern, da diese nicht standardmäßig dabei sind.
PostgreSQL-Driver-Jar dauerhaft im Wildfly einrichten
Hierfür können wir das CLI (Command Line Interface) von Wildfly nutzen! Eine Dokumentation zur Benutzung findet hier hier.
Doch zuerst laden wir den JDBC-Treiber für Postgres herunter. Dafür schauen wir auf der PostgreSQL-Seite nach welche jar wir benötigen (Da ich in diesem Beispiel Java 8 nutze, benötige ich die JDBC42-Version) und kopieren uns die Downloadadresse die wir für folgenden Befehl brauchen:
cd /tmp/ wget https://jdbc.postgresql.org/download/postgresql-42.2.5.jar
Dann kann mit dem CLI ein Modul mit dem Postgres-Treiber erzeugt und der Treiber unter einem einfachen Namen verwendbar gemacht machen.
/opt/wildfly/bin/jboss-cli.sh --connect controller=127.0.0.1 module add --name=org.postgresql --resources=/tmp/postgresql-42.2.5.jar --dependencies=javax.api,javax.transaction.api /subsystem=datasources/jdbc-driver=postgres:add(driver-name="postgres",driver-module-name="org.postgresql",driver-class-name=org.postgresql.Driver) quit
Mit [Strg + d]
kann das CLI ebenfalls verlassen werden.
Konfiguration der Datasource
Dafür kann wiederum das CLI verwendet werden.
/opt/wildfly/bin/jboss-cli.sh --connect controller=127.0.0.1 data-source add --jndi-name=java:jboss/datasources/mydatabase --name=mydatabase_DS --connection-url=jdbc:postgresql://localhost:5432/mydatabase --driver-name=postgres --user-name=psqluser --password=GEHEIM quit
Dann könnt ihr beim erneuten starten des Wildflys
sh /opt/wildfly/bin/standalone.sh
überprüfen ob es geklappt hat und die Datasource geladen ist, indem ihr auf die Zeile Bound data source [java:jboss/datasources/mydatabase] achtet.
Wenn ja, dann könnt ihr durch kopieren eurer Java-EE Anwendung (*.ear/*.war) in das Verzeichnis /opt/wildfly/standalone/deployments/ ausprobieren, ob eure Anwendung korrekt hochfährt! Wichtig ist an dieser Stelle nur, das euer (EAR/WAR) mit derselben Java Version, die auch der Wildfly nutzt, gebaut wurde und dass in eurer persistence.xml der JNDI-Name steht, der in eurer Datasource auf dem Wildfly eingetragen wurde, damit die Verbindung steht!