Apache DeltaSpike: Vereinigung der CDI-Communitys

Im selben Boot

Gerhard Petracek
Die Zukunft

Nachdem die Module für die wichtigsten Querschnittsbelange (Security, Exception Handling, Internationalisierung etc.) Form angenommen haben, kann mit den Java-EE-spezifischen Modulen angefangen werden. Parallel dazu wird es Diskussionen zur einfachen Integration weiterer Frameworks (für Java) geben. Die einzigen Bedingungen für solche Integrationsmodule sind die Zustimmung der Mehrheit in der Community nach einer entsprechenden Diskussion und die rechtliche Kompatibilität mit diesen externen Projekten.

Entscheidungen über neue Funktionalitäten werden bei Bedarf auch sehr flexibel getroffen: Durch Feedback aus der Community wurde kürzlich ein ungeplanter Mechanismus auf Basis einer bereits bestehenden Funktionalität hinzugefügt. Konkret handelt es sich um die Annotation @ConfigProperty. Listing 1 zeigt die direkte Verwendung der neuen Annotation. In Listing 2 ist die Implementierung einer eigenen Konfigurationsannotation auf Basis von @ConfigProperty dargestellt. Durch die Angabe von eager = false können dynamische Konfigurationsquellen eingebunden werden, die erst später zur Laufzeit zur Verfügung stehen. Zusätzlich wird die Kombination mit einem eigenen (optionalen) Converter zur Auswertung der Metadaten der eigenen Annotation veranschaulicht. Die Beispiele basieren auf dem aktuellen Snapshot von DeltaSpike, da diese Funktionalität erst in Version 0.2 verfügbar sein wird.

Listing 1: Direkte Verwendung von @ConfigProperty

//...
public class PoolManager {
  @Inject
  @ConfigProperty(name = "poolSize")
  private Integer poolSize;

  //...
}
Listing 2: Erstellung und Verwendung einer Konfigurationsannotation und eines Converters

//...
public class PoolManager {
  @Inject
  @PoolSize
  private Integer poolSize;

  //...
}

//...
@Qualifier
@ConfigProperty(name = "poolSize", eager = false)
public @interface PoolSize {
  @Nonbinding
  int maxSize() default 14;
}

//...
public class PoolSizeConverter implements MetaDataAwareConverter {
  @Override
  public Integer convert(String source, PoolSize metaData) {
      Integer result = convert(source);

      if (result > metaData.maxSize()) {
          //...
      }

      return result;
  }

  @Override
  public Integer convert(String source) {
      //...
  }
}

Grundsätzlich setzt DeltaSpike genau wie MyFaces CODI auch für die Konfiguration auf CDI-Mechanismen. Während des Starts des CDI-Containers stehen diese Konzepte allerdings nicht zur Verfügung. Dennoch gibt es Anwendungsfälle, für die bereits zu diesem Zeitpunkt konfigurierte Werte eingelesen werden müssen. Daher wurde ähnlich wie in MyFaces CODI auch in DeltaSpike ein erweiterbarer Mechanismus für solche Basiskonfigurationen eingeführt. Dieses Konzept ist zwar wichtig, aber mehr für spezielle Fälle gedacht.

Für typsichere Modulkonfigurationen wurde das Konzept von MyFaces CODI vollständig übernommen. Mit CDI-Mechanismen ist es möglich, DeltaSpike typsicher zu konfigurieren und beliebige Konfigurationsformate einfach zu integrieren. Die Konfiguration von applikationsspezifischen Parametern kann natürlich ebenfalls durch entsprechende CDI Beans erfolgen. Mit @ConfigProperty wurde ein alternativer Ansatz vorgeschlagen und als erster Entwurf integriert. Die Implementierung kann bei Bedarf größtenteils typsicher erfolgen und baut im Hintergrund auf dem bestehenden Konzept für Basiskonfigurationen auf. Dadurch wird die Integrationsmöglichkeit für verschiedene Datenquellen auch hier ermöglicht. Zusätzlich wird per Default bereits beim Start der Applikation die Verfügbarkeit der konfigurierten Werte überprüft, wodurch z. B. Tippfehler früh erkannt werden.

Fazit

Apache DeltaSpike führt Funktionalitäten erfolgreicher portabler CDI-Erweiterungen wie Apache MyFaces CODI und JBoss Seam3 zusammen. Im Zuge dieses noch jungen Projekts soll eine große und aktive Community entstehen. Die wiederum soll praxiserprobte und innovative Konzepte für CDI-Erweiterungen entwickeln, die in Kombination mit möglichst vielen Laufzeitumgebungen für CDI-basierte Applikationen getestet sind. Das Projekt wird derzeit von einem großen Teil der CDI-Community aktiv unterstützt, und die Entwicklung schreitet zügig voran. Parallel zur Diskussion und Integration neuer Funktionalitäten werden Dokumentation und Beispiele laufend erweitert. Zudem wird eine umfangreiche Testsuite entwickelt, die für hohe Stabilität sorgen soll. Das Herzstück dieses Projekts ist – wie in allen Apache-Projekten – die Community. Entsprechend freut sich das Team über Fragen und Anregungen sowie über jede darüber hinaus gehende Beteiligung.

Geschrieben von
Gerhard Petracek
Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.