GEDOPLAN
Quarkus

Eigene Quarkus Extensions

Quarkus
r a m 4393381 1280

Quarkus basiert in seinem Kern lediglich auf einem einfachen Komponentensystem. Jede weitere Funktionalität ist in einer eigenen Erweiterung gekapselt, die bei Bedarf hinzugefügt werden kann. Dies ermöglicht es Entwicklern, nur die benötigten Komponenten in ihre Anwendungen zu integrieren, was zu schlankeren und effizienteren Anwendungen führt.

Um eine eigene Quarkus Extension zu erstellen, können Sie das Maven-Archetype für Quarkus Extensions verwenden. Dieses Archetype stellt die grundlegende Struktur für die Erweiterung bereit.

$ mvn io.quarkus.platform:quarkus-maven-plugin:3.29.4:create-extension \
  -N \
  -DgroupId=de.gedoplan.showcase \
  -DextensionId=central-registry-extension \
  -DwithoutTests

Das Projekt besteht aus einem Deployment- und einem Runtime-Modul.

quarkus extensions 1 png

Das Runtime-Modul (central-registry-extension) ist eine ganz normale Quarkus Erweiterung und kann entsprechend weitere Erweiterungen beinhalten. Das Deployment-Modul (central-registry-extension-deployment) hat eine Abhängigkeit zum Runtime-Modul und kann ebenfalls weitere Erweiterungen enthalten.

<dependency>
  <groupId>de.gedoplan.showcase</groupId>
  <artifactId>central-registry-extension</artifactId>
  <version>${project.version}</version>
</dependency>

<dependency>
  <groupId>io.quarkus</groupId>
  <artifactId>quarkus-arc-deployment</artifactId>
</dependency>
<dependency>
  <groupId>io.quarkus</groupId>
  <artifactId>quarkus-undertow-deployment</artifactId>
</dependency>

Quarkus wurde mit der Idee geschaffen die Speicher- und Ressourcennutzung der Anwendung zu verringern und damit auch einen möglichst schnellen Start der Anwendung zu ermöglichen. Daher wird in einer Quarkus Anwendung möglichst viel bereits zur Build-Zeit erledigt. In dieser Weise funktionieren auch die Quarkus Extensions. Im Deployment-Modul gibt es sogenannte Build-Schritte, in denen man sich in den Build-Prozess einklinken kann. In ihnen werden sogenannte Build-Items erzeugt, die in einen hocheffizienten Bytecode umgewandelt werden.

Möchte man beispielsweise eigene CDI-Beans integrieren, so kann man das über das AdditionalBeanBuildItem erreichen.

@BuildStep
AdditionalBeanBuildItem registerStartupListener() {
  return AdditionalBeanBuildItem.builder()
      .addBeanClass(CentralRegistryClient.class)
      .addBeanClass(StartupListener.class)
      .setUnremovable()
      .build();
}

Diese zusätzlichen Beans sind wiederum im Runtime-Modul implementiert. Warum macht man sich dann die Mühe diese Beans über eine Extension einzubinden? Das Ganze würde ja auch funktionieren, wenn man statt einer Extension einfach ein Jar mit diesen Beans in seine Anwendung einbindet. Die Antwort lautet ja, aber dadurch erreicht man nicht die zuvor beschriebene Optimierung während der Build-Zeit. Quarkus kann durch die Implementierung einer Extension entsprechenden Bytecode bereitstellen, der eine optimale Integration meiner Implementierung ermöglicht.

Da eine tiefer gehende Erklärung der Mechanismen innerhalb von Quarkus den Rahmen dieses Beitrags sprechen würden, habe ich ein ausführliches Beispiel einer Quarkus Extension auf Github bereitgestellt: https://github.com/GEDOPLAN/quarkus-custom-extensions

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Bitte füllen Sie dieses Feld aus.
Bitte füllen Sie dieses Feld aus.
Bitte gib eine gültige E-Mail-Adresse ein.
Sie müssen den Bedingungen zustimmen, um fortzufahren.

Autor

Diesen Artikel teilen

LinkedIn
Xing

Gibt es noch Fragen?

Fragen beantworten wir sehr gerne! Schreibe uns einfach per Kontaktformular.

Kurse

weitere Blogbeiträge

IT-Training - GEDOPLAN
Jakarta EE (Java EE)

JPA mit dynamischer DB-Verbindung

In Java-EE-Anwendungen, die JPA zum DB-Zugriff nutzen, wird im Normalfall eine Datasource zur Spezifikation der Datenbankverbindung genutzt: &lt;persistence ...&gt; &lt;persistence-unit…

Work Life Balance. Jobs bei Gedoplan

We are looking for you!

Lust bei GEDOPLAN mitzuarbeiten? Wir suchen immer Verstärkung – egal ob Entwickler, Dozent, Trainerberater oder für unser IT-Marketing! Schau doch einfach mal auf unsere Jobseiten! Wir freuen uns auf Dich!

Work Life Balance. Jobs bei Gedoplan

We are looking for you!

Lust bei GEDOPLAN mitzuarbeiten? Wir suchen immer Verstärkung – egal ob Entwickler, Dozent, Trainerberater oder für unser IT-Marketing! Schau doch einfach mal auf unsere Jobseiten! Wir freuen uns auf Dich!