Nahezu jede Anwendung muss irgendwie konfiguriert werden – seien es Namen, die statt im Code fest eingebaut zu werden, aus einem File gelesen werden sollen, seien es Berechnungsparameter oder URLs. Java (EE) bietet dazu bislang keinen Standard an, so dass jeder sich “sein eigenes Süppchen kochen” muss.
Nun zeigt sich ein Silberstreif am Horizont in Form eines API zur Konfiguration von Anwendungen, das auf der diesjährigen Java One als Bestandteil von Java EE 8 angekündigt wurde und das Ideen aus dem entsprechenden Teil von Apache DeltaSpike und von Apache Tamaya übernehmen soll. Letzteres soll im Folgenden kurz beschrieben werden.
Apache Tamaya (tamaya.incubator.apache.org) befindet sich derzeit noch in einem sehr frühen Stadium, bedient sich aber bewährter Ideen aus Apache DeltaSpike Configuration und ist somit durchaus in Grenzen bereits einsetzbar.
Apache Tamaya ist modular aufgebaut. Der Core-Anteil wird immer benötigt. Darüber hinaus gibt es diverse Extensions wie bspw. zur Bereitstellung von Konfigurationswerten per CDI Injection. Für Maven-Projekte sind dies die folgenden Dependencies:
<dependency> <groupId>org.apache.tamaya</groupId> <artifactId>tamaya-core</artifactId> <version>${version.tamaya}</version> </dependency> <dependency> <groupId>org.apache.tamaya.ext</groupId> <artifactId>tamaya-cdi</artifactId> <version>${version.tamaya}</version> </dependency>
Derzeit (Dez. 2016) ist die aktuelle Version 0.2-incubating
.
Konfigurationswerte können mit einem einfachen API abgeholt werden:
String javaVendor = ConfigurationProvider.getConfiguration() .getOrDefault("java.vendor", "unknown");
ConfigurationProvider.getConfiguration()
liefert dabei das Einstiegsobjekt vom Typ Configuration
, das neben der oben genutzten Methode getOrDefault
auch solche anbietet, die den Wert in einen anderen Typ als String
gewandelt liefern.
In CDI Beans kann zudem per Injektion auf die Werte zugegriffen werden:
@Inject @Config(defaultValue = "unknown") String companyName; @Inject @Config int answerToLifeUniverseAndEverything; @Inject @Config("java.version") String javaVersion;
Apache Tamaya holt die Werte per Default aus System Properties, Environment Entries und der Datei META-INF/javaconfiguration.properties
im Classpath. Es können weitere Property Sources registriert werden und auch die Suchreihenfolge manipuliert werden.
Weitergehende Informationen finden sich auf der Homepage des Projektes (tamaya.incubator.apache.org). Aufgrund des aktuellen Projektstands ist aber noch viel im Fluss.
Ein Demo-Projekt zum Anschauen und Ausprobieren gibt es hier: github.com/GEDOPLAN/config-demo.
2 Kommentare. Hinterlasse eine Antwort
Im ersten Listing müsste es org.apache.tamaya.ext heißen (.ext hinzugefügt), damit die @Config Annotationen funktionieren.
Im Demo-Projekt ist es richtig.
Edit: Natürlich nur bei in Zeile 7 im ersten Listing. In Zeile 2 nicht.