WildFly Swarm
Überblick
Klassische Application Server wie JBoss/WildFly oder Glassfish/Payara sind etablierte und ausgereifte Ablaufumgebungen für Enterprise-Applikationen. Dass mehrere Anwendungen bis zu einem gewissen Grade voneinander isoliert in einem Server berieben werden können, wird in der Praxis wegen der unvermeidlichen Gemeinsamnutzung von Java VM, CPU, Memory etc. selten ausgenutzt. Man trifft also meist Server an, auf denen genau eine Anwendung deployt ist. Durch den Trend zu Microservices kommt es zu einer deutlichen Vergrößerung der Serveranzahl mit den daraus resultierenden Anforderungen im Bereich Installation, Konfiguration und Betrieb. Populäre Alternativen zu Java EE – z. B. Spring und Dropwizard – nutzen ein anderes Betriebsmodell: Statt Anwendungen in jeweils einen Server zu deployen, wird der Server in die Anwendungen integriert. Für die Java-EE-Welt bietet das Open-Source-Projekt WildFly Swarm (wildfly-swarm.io>) einen solchen Ansatz.
Komposition der Runtime
WildFly Swarm ist vergleichbar mit einem in Stücke zerteilten WildFly Application Server. Diese Stücke – sog. Fractions – werden als Maven Dependencies zur Anwendung hinzugefügt:
<dependencyManagement> <dependencies> <dependency> <groupId>org.wildfly.swarm</groupId> <artifactId>bom-all</artifactId> <version>${version.wildfly.swarm}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>org.wildfly.swarm</groupId> <artifactId>jaxrs-cdi</artifactId> </dependency> <dependency> <groupId>org.wildfly.swarm</groupId> <artifactId>jpa</artifactId> </dependency> ...
Die derzeit (Dez. 2016) aktuelle Version ist 2016.12.0
.
Aus den so gewählten Fractions und dem eigentlichen Anwendungscode wird dann ein Uber Jar gebaut. Dies geschieht mit Hilfe eines Plugins in der Maven-Konfiguration des Projektes:
<build> <plugins> <plugin> <groupId>org.wildfly.swarm</groupId> <artifactId>wildfly-swarm-plugin</artifactId> <version>${version.wildfly.swarm}</version> <configuration> <mainClass>de.gedoplan.micro.bootstrap.SwarmBootstrap</mainClass> </configuration> <executions> <execution> <goals> <goal>package</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
Die o. a. Main Class dient der programmatischen Konfiguration der Anwendung (s. u.). In einfachen Fällen wird sie nicht benötigt. Das entsprechende Element der Plugin-Konfiguration entfällt dann.
Durch den Build-Lauf (z. B. per mvn package
) entsteht dann im target
-Verzeichnis neben dem normalen Zielartefakt xyz.war
eine Datei namens xyz-swarm.jar
, die die Anwendung inkl. Server Runtime enthält.
Konfiguration der Anwendung
Wenn die Default-Konfiguration nicht ausreicht, weil bspw. DB-Verbindungen eingerichtet werden müssen, kann eine individuell prgrammierte Main-Klasse genutzt werden. Darin können die einzelnen Fractions mit Hilfe eines Fluent API parametrisiert werden. Alternativ kann eine externe Konfigurationsdatei referenziert werden:
public class SwarmBootstrap { public static void main(String[] args) throws Exception { Swarm swarm = new Swarm(); System.setProperty("swarm.context.path", "micro-ohne-server"); URL standaloneFullXml = SwarmBootstrap.class.getClassLoader().getResource("configuration/standalone-full.xml"); swarm .withXmlConfig(standaloneFullXml) .start() .deploy(); }
Die im Beispiel genutzte externe Konfigurationsdatei entspricht der vom WildFly Application Server bekannten standalone-full.xml
, muss aber nur die für die zu konfigurierenden Fractions benötigten Einstelldaten enthalten.
Anwendungsstart
Die Anwendung wird durch Ausführung des durch das o. a. Plugin erzeugte Uber Jar gestartet: java -jar target/xyz-swarm.jar
.
Weitere Infos
- Für die ersten Gehversuche kann ein passend konfiguriertes Projekt mit Hilfe des Project Configurators erstellt werden.
- Ein gute und ausführliche Beschreibung der angesprochenen und weiterer Features findet man im WildFly Swarm User’s Guide.
- In github.com/GEDOPLAN/micro-ohne-server steht ein Showcase zum Anschauen und Ausprobieren bereit. Neben WildFly Swarm sind darin aber auch Payara Micro und KumuluzEE eingebaut.