© Excellent backgrounds/Shutterstock.com
Konfiguration für Enterprise-Umgebungen

Viele Plattformen - ein Anwendungscode


In den vorherigen Teilen dieser Serie haben wir uns mit den Anforderungen an Konfiguration befasst, bereits vorhandene Lösungsansätze bewertet, die Grundkonzepte hinter Apache Tamaya [1], [2] näher betrachtet sowie die wichtigsten Erweiterungsmodule [3] vorgestellt. In diesem abschließenden Artikel der Serie diskutieren wir nun den Einsatz von Apache Tamaya in Enterprise-Umgebungen.

Bevor wir uns genauer mit der Verwendung von Apache Tamaya in Enterprise-Umgebungen beschäftigen, stellt sich zuallererst die Frage, wie diese sich von den bereits im vorherigen Artikel betrachteten Java-SE-Umgebungen unterscheiden. Die Unterschiede entstehen durch die verschiedenen Runtime-Plattformen, wie Java EE, Spring oder OSGi, mit ihren nicht standardisierten Klassenladern und sich unterscheidenden Sichtbarkeiten von Klassen. Dadurch entstehen nicht nur große Unterschiede zur Java-SE-Umgebung sondern auch zwischen diesen Plattformen. Diese Unterschiede überbrückt Apache Tamaya durch spezifische Integrationskomponenten, wodurch derselbe Anwendungscode auf unterschiedlichen Plattformen verwendet werden kann. Wie dies genau aussieht, werden wir uns nachfolgend genauer ansehen.

Integrationskonzept von Apache Tamaya

Tamaya geht die Integration von zwei Seiten an: Einerseits geht es darum, die bestehenden Mechanismen der Plattformen auf Basis von Tamaya zu implementieren, andererseits die Laufzeitsysteme mit neuer Funktionalität zu erweitern, speziell dem bequemen Injecten von Konfiguration. Aktuell stehen dafür die folgenden Module zur Verfügung:

  • tamaya-clsupport bietet eine generische Implementierung des ServiceContext SPI, das mit Klassenladerhierarchien umgehen kann. Die Komponente stellt sicher, dass Services mit dem Klassenlader assoziiert werden, wo diese auch erstmalig sichtbar sind. Des Weiteren lässt sich durch Traversierung der Klassenladerhierarchien sicherstellen, dass keine Services innerhalb einer Hierarchie mehrfach geladen werden.

  • tamaya-cdi stellt die Funktionen von Tamaya für Lösungen zur Verfügung, die das Java EE Context and Dependency Injection Framework (CDI) verwenden. Somit kann man Tamaya im Java-EE-Stack ab Version 6 einsetzen.

  • tamaya-spring implementiert analog zu Spring-Config [4] die Integration mit dem Spring Environment und kann als Quelle für die dort verwendeten PropertyPlaceHolder-Mechanismen dienen. Ebenfalls wird ein BeanPostProcessor implementiert, der mithilfe des tamaya-injection-Basismoduls Konfigurationsinjektion ermöglicht.

  • tamaya-osgi stellt ein Fragment zur Verfügung, das den OSGi-ConfigAdmin-Service [5] mit einer Implementierung von Tamaya übersteuert. Dies ermöglicht es, Tamaya als Backend für praktisch alle modernen OSGi-Container wie Karaf, Felix, JBoss und Equinox zu verwenden. Natürlich werden entsprechend ab dem nächsten Release nun auch alle Tamaya-Artefakte als OSGi Bundles verfügbar sein.

Injection von Konfiguration

Die Konfigurationswerte werden mithilfe von Apache Tamaya nebst den bereits in früheren Artikeln gezeigten programmatischen APIs in den verschiedenen Runtime-Plattformen mittels Injection zur Verfügung gestellt. Dabei wird ein einheitliches API verwendet, das sowohl von der Java-SE-Implementierung als auch von den verschiedenen Integrationsmodulen der Enterprise-Umgebungen unterstützt wird. Listing 1 zeigt beispielhaft die Verwendung verschiedener Annotationen dieses API.

Listing 1

public class ConfiguredClass{ // Konfigurationswert wird basierend auf Propertyname, Klasse  // Packagename aufgelöst @Config private String backendName; // Verwendet Standardkonverter zur String -> URL-Konvertierung @Config({"backend.url","legacy.backend.v1.url"}) @ConfigDefault("http://127.0.0.1:8080/res/api/v1/info.json") private URL backendUrl; // Verwendet einen eigenen Konverter @Config("backend.asccessCounter") @WithPropertyConverter(MyCustomBigDecimalConverter.class) private BigDecimal backendAccessCounter; ... }

Die Annotation @Config ist ein Qualifier, der die Injection eines Konfigurationsparameters ermöglicht. Der Wert des Konfigurationsparameters wird auf Basis eines oder mehrerer Annotation-Parameter aufgelöst oder, wenn kein Annotation-Parameter explizit angegeben wurde, basierend auf Propertyname, Klasse und Pack­agename.

Das Injection-API stellt aber noch weitere nützliche Features zur Verfügung: Ist auch das tamaya-resolver-Modul gleichzeitig installiert, können auch Referenzen verwendet werden, die beim Auslesen der Konfiguration ausgewertet werden. Interessant...

Neugierig geworden? Wir haben diese Angebote für dich:

Angebote für Gewinner-Teams

Wir bieten Lizenz-Lösungen für Teams jeder Größe: Finden Sie heraus, welche Lösung am besten zu Ihnen passt.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang