Apache Tamaya: Einstieg in die Konfiguration in Java
By Anatole Tresch and Thorben Janssen
()
About this ebook
Related to Apache Tamaya
Titles in the series (100)
IT Wissensmanagement: Theorie und Praxis Rating: 0 out of 5 stars0 ratingsTFS 2012 Überblick und Installation: Der Weg zum TFS Rating: 0 out of 5 stars0 ratingsServiceorientierte Architektur: Anforderungen, Konzeption und Praxiserfahrungen Rating: 0 out of 5 stars0 ratingsHTML5 für Mobile Web Rating: 0 out of 5 stars0 ratingsADF - Mobile Apps entwickeln und Swing ablösen: Mobile Apps entwickeln und Swing ablösen Rating: 0 out of 5 stars0 ratingsBig Data: Technologiegrundlagen Rating: 0 out of 5 stars0 ratingsNFC: Near Field Communication für Android-Entwickler Rating: 5 out of 5 stars5/5JavaScript für Eclipse-Entwickler: Orion, RAP und GWT Rating: 0 out of 5 stars0 ratingsErfolgreiche Spieleentwicklung: OpenGL, OpenAL und KI Rating: 0 out of 5 stars0 ratingsTFS 2012 Anforderungsmanagement: Work Items und Prozessvorlagen Rating: 0 out of 5 stars0 ratingsSkalierbare Softwaresysteme: Design, Betrieb und Optimierungspotenziale Rating: 0 out of 5 stars0 ratingsSoftwareentwicklungsprozess: Von der ersten Idee bis zur Installation Rating: 0 out of 5 stars0 ratingsHTML5 Security Rating: 0 out of 5 stars0 ratingsEinstieg in Google Go Rating: 0 out of 5 stars0 ratingsErfolgreiche Spieleentwicklung: OpenCL Rating: 0 out of 5 stars0 ratingsJava EE Security Rating: 0 out of 5 stars0 ratingsBPM: Strategien und Anwendungsfälle Rating: 0 out of 5 stars0 ratingsAmazon Web Services für .NET Entwickler Rating: 0 out of 5 stars0 ratingsBig Data: Executive Briefing Rating: 0 out of 5 stars0 ratingsMobile Business: Was Entscheider morgen wissen müssen Rating: 0 out of 5 stars0 ratingsUX Design für Tablet-Websites: Ein Überblick Rating: 0 out of 5 stars0 ratingsAlgorithmen: Grundlagen und Implementierung Rating: 0 out of 5 stars0 ratingsJava 7: Fork-Join-Framework und Phaser Rating: 0 out of 5 stars0 ratingsÜberzeugende Präsentationen: Konzeption, Technik und Design Rating: 0 out of 5 stars0 ratingsJavaScript auf dem Server Rating: 0 out of 5 stars0 ratingsF#: Ein praktischer Einstieg Rating: 0 out of 5 stars0 ratingsGeolocation mit PHP: Foursquare-API, Google Places & Qype Rating: 0 out of 5 stars0 ratingsJava EE 7: Ein Ausblick Rating: 0 out of 5 stars0 ratingsQualitätssicherung mit JavaScript und PHP Rating: 0 out of 5 stars0 ratingsC++: Kurzportträt einer zeitlosen Sprache Rating: 0 out of 5 stars0 ratings
Related ebooks
CDI - Dependency Injection in Java EE 7: Dependency Injection in Java EE 7 Rating: 0 out of 5 stars0 ratingsJava EE 6: Enterprise-Anwendungsentwicklung leicht gemacht Rating: 0 out of 5 stars0 ratingsSoftwarestabilität in der Industrie Rating: 0 out of 5 stars0 ratingsJava EE 7: Ein Ausblick Rating: 0 out of 5 stars0 ratingsJava EE Testing mit Arquillian Rating: 0 out of 5 stars0 ratingsSpring Boot und Spring Cloud Rating: 5 out of 5 stars5/5TFS 2012 Versionskontrolle: Grundlagen, Check-In Policies und Branch-Modelle Rating: 0 out of 5 stars0 ratingsDependency Injection in Java: Testing mit CDI-Unit und DI-Frameworks Rating: 0 out of 5 stars0 ratingsPaaS - Die wichtigsten Java Clouds auf einen Blick: Die wichtigsten Java Clouds auf einen Blick Rating: 0 out of 5 stars0 ratingsWebentwicklung mit dem Play Framework Rating: 0 out of 5 stars0 ratingsMicroservices: Der Hype im Realitätscheck Rating: 0 out of 5 stars0 ratingsBig Data: Datenverarbeitung basierend auf MOM und SQL Rating: 0 out of 5 stars0 ratingsApache Tapestry: Einstieg in die komponentenorientierte Webentwicklung Rating: 0 out of 5 stars0 ratingsjQuery Mobile: Unit Testing Rating: 0 out of 5 stars0 ratingsWorkshop Java EE 7: Ein praktischer Einstieg in die Java Enterprise Edition mit dem Web Profile Rating: 0 out of 5 stars0 ratingsProgressive Web-Apps: Offlinefähige Web-Anwendungen mit nativen Qualitäten Rating: 0 out of 5 stars0 ratingsJava FX - Status Quo: Status Quo Rating: 0 out of 5 stars0 ratingsDSL mit Xtext/Xtend. Luecken(x)text Rating: 0 out of 5 stars0 ratingsStructr: Quelloffenes Daten-CMS auf Neo4j-Basis Rating: 0 out of 5 stars0 ratingsJavaScript auf dem Server Rating: 0 out of 5 stars0 ratingsAutomatisiertes Testen: Testautomatisierung mit Geb und ScalaTest Rating: 0 out of 5 stars0 ratingsApache OFBiz: Schnellstarterbuch Rating: 0 out of 5 stars0 ratingsClusterbau: Hochverfügbarkeit mit Linux Rating: 0 out of 5 stars0 ratingsiOS Essentials: Frameworks, Tools und Twitter API Rating: 0 out of 5 stars0 ratingsAngularJS: Testing und Best Practices Rating: 5 out of 5 stars5/5Microsoft Azure: Cloud Entwicklung für lokale Applikationen Rating: 0 out of 5 stars0 ratingsJava EE Security Rating: 0 out of 5 stars0 ratingsTroubleshooting und Monitoring von Exchange und Office 365 Rating: 0 out of 5 stars0 ratingsSkalierbare Softwaresysteme: Design, Betrieb und Optimierungspotenziale Rating: 0 out of 5 stars0 ratingsJava 7: Fork-Join-Framework und Phaser Rating: 0 out of 5 stars0 ratings
Programming For You
Programmieren lernen mit Python 3: Schnelleinstieg für Beginner Rating: 0 out of 5 stars0 ratingsEigene Spiele programmieren – Python lernen: Der spielerische Weg zur Programmiersprache Rating: 0 out of 5 stars0 ratingsRaspberry Pi: Mach's einfach: Die kompakteste Gebrauchsanweisung mit 222 Anleitungen. Geeignet für Raspberry Pi 3 Modell B / B+ Rating: 0 out of 5 stars0 ratingsMicrosoft Word 2016 (Microsoft Press): Einfache Anleitungen für wichtige Aufgaben Rating: 0 out of 5 stars0 ratingsSoft Skills in der IT Rating: 0 out of 5 stars0 ratingsDas große Python3 Workbook: Mit vielen Beispielen und Übungen - Programmieren leicht gemacht! Rating: 4 out of 5 stars4/5Python kurz & gut: Für Python 3.x und 2.7 Rating: 3 out of 5 stars3/5Python | Schritt für Schritt Programmieren lernen: Der ultimative Anfänger Guide für einen einfachen & schnellen Einstieg Rating: 0 out of 5 stars0 ratingsHTML5-Programmierung von Kopf bis Fuß: Webanwendungen mit HTML5 und JavaScript Rating: 0 out of 5 stars0 ratingsRaspberry Pi: Einstieg • Optimierung • Projekte Rating: 5 out of 5 stars5/5Hacken mit Python und Kali-Linux: Entwicklung eigener Hackingtools mit Python unter Kali-Linux Rating: 0 out of 5 stars0 ratingsSoftwareentwicklungsprozess: Von der ersten Idee bis zur Installation Rating: 0 out of 5 stars0 ratingsPowerShell: Anwendung und effektive Nutzung Rating: 5 out of 5 stars5/5Python programmieren lernen: Der spielerische Einstieg mit Minecraft Rating: 0 out of 5 stars0 ratingsNew Game Plus: Perspektiven der Game Studies. Genres - Künste - Diskurse (Bild und Bit. Studien zur digitalen Medienkultur) Rating: 0 out of 5 stars0 ratingsAndroid-Entwicklung für Einsteiger - 20.000 Zeilen unter dem Meer: 2. erweiterte Auflage Rating: 0 out of 5 stars0 ratingsC von Kopf bis Fuß Rating: 3 out of 5 stars3/5.NET-Praxis: Tipps und Tricks zu .NET und Visual Studio Rating: 0 out of 5 stars0 ratingsC++: Eine kompakte Einführung Rating: 0 out of 5 stars0 ratingsJavaScript kurz & gut Rating: 3 out of 5 stars3/5User Experience Testing 3.0: Status Quo, Entwicklung und Trends Rating: 0 out of 5 stars0 ratingsVue.js kurz & gut Rating: 0 out of 5 stars0 ratingsPython lernen – kurz & gut Rating: 0 out of 5 stars0 ratingsMicrocontroller für das IoT Rating: 0 out of 5 stars0 ratingsJavaScript kinderleicht!: Einfach programmieren lernen mit der Sprache des Web Rating: 0 out of 5 stars0 ratingsGit kurz & gut Rating: 0 out of 5 stars0 ratingsPowerprojekte mit Arduino und C: Schluss mit dem frustrierenden Ausprobieren von Code-Schnipseln! Rating: 0 out of 5 stars0 ratingsDas Franzis Starterpaket Arduino Uno: Das Handbuch für den Schnelleinstieg Rating: 0 out of 5 stars0 ratingsAndroid-Programmierung kurz & gut Rating: 0 out of 5 stars0 ratingsEinstieg in TypeScript: Grundlagen für Entwickler Rating: 0 out of 5 stars0 ratings
Reviews for Apache Tamaya
0 ratings0 reviews
Book preview
Apache Tamaya - Anatole Tresch
GmbH
1 Konfiguration in Java
Konfiguration erlaubt es, das Verhalten eines Softwaresystems in kontrollierter Art und Weise zu verändern, ohne dass eine Neuimplementierung notwendig ist. Dazu sind Designentscheidungen darüber zu treffen, welche Aspekte konfigurierbar sind und welche eben nicht. Alles konfigurierbar zu machen, ist genauso sinnlos, wie alle Aspekte fest zu kodieren. Dennoch scheiden sich die Geister daran, was Konfiguration nun ist und wie sie gemanagt werden soll. Wir möchten mit diesem shortcut Licht ins Dunkel bringen.
Konfiguration ist ein häufiges und sehr facettenreiches Thema in der Softwarewelt. Auch wenn es bisher keine einheitliche Lösung für Konfiguration in Java gibt, wurden im letzten Jahr einige Anstrengungen unternommen, dies zu ändern. Daraus ist das neu gegründete Projekt Apache Tamaya [1] entstanden, mit dem eine Lösung für die vielfältigen Aufgaben der Konfiguration entwickelt werden soll.
Wir werden die Themen Konfiguration und Apache Tamaya genauer betrachten. Schnell wird sich zeigen, dass jeder eine Vorstellung davon hat, was Konfiguration ist und leisten soll. Unglücklicherweise werden sich kaum zwei Ansichten als deckungsgleich zeigen, was auch mit der Vielzahl der Anwendungsfälle zusammenhängt. Im ersten Kapitel werden wir uns zuerst sehr einfachen Einsatzszenarien im Java-SE-Umfeld widmen und dann im weiteren Verlauf immer neue Anforderungen aus anderen Einsatzbereichen, wie Java EE, Microservices und Cloud-basierten Anwendungen, hinzufügen. Ziel ist es, die Komplexität verständlich zu veranschaulichen, aber auch Gemeinsamkeiten aufzuzeigen. Diese erlauben es, Konfigurationsaspekte in einem Framework zu modellieren, so wie es aktuell mit Apache Tamaya gemacht wird.
Konfiguration mit Java SE
Lassen Sie uns zunächst die Konfigurationsmechanismen näher betrachten, die bereits mit Java geliefert werden. Das prominenteste Beispiel sind sicherlich .properties-Dateien, die sowohl in Textform als auch in xml-Form unterstützt werden. Dazu bietet die Klasse java.util.Properties Methoden, um einen entsprechenden InputStream zu lesen. Anschließend können die konfigurierten Werte mit getProperty(key) ausgelesen werden:
InputStream is = ...;
Properties properties = new Properties();
properties.read(is); // properties.readXml(is);
Derselbe Mechanismus wird nun auch an anderen Stellen im JDK wiederverwendet, z. B. im Zusammenhang mit ResourceBundle oder dem java.util.ServiceLoader. Letzterer erlaubt es, Services zentral zu registrieren. Diese werden dabei in Dateien, die dem qualifizierten Typ des Zugriffs entsprechen, unter META-INF/services im Klassenpfad abgelegt. Der ServiceLoader berücksichtigt hierbei alle Dateien, die aktuell im Klassenpfad sichtbar sind. Der Zugriff auf die Services erfolgt sodann typsicher mit
ServiceLoader
Weitere Mechanismen sind Environment- und System-Properties. Während Erstere aus den Umgebungsvariablen der Laufzeitumgebung konstruiert werden, können Letztere als Parameter der Java-Runtime übergeben werden, z. B. mit -DmyProperty=foorBar. Mit System.getenv() und System.getProperties() stehen entsprechende Zugriffs-APIs zur Verfügung, mit denen die Werte direkt ausgelesen werden können.
Es würde den Rahmen dieses Kapitels sprengen, jeden Konfigurationsmechanismus zu beschreiben, der im JDK bereits mitgeliefert wird. Dennoch liefern die Beispiele erste Anhaltspunkte, wie Konfiguration modelliert werden könnte:
Konfigurationsdateien sind textbasiert.
Konfiguration kann in sehr unterschiedlichen Formaten verfügbar sein (properties, xml, json etc.).
Konfiguration kann aus unterschiedlichen Quellen stammen (Dateisystem, Klassenpfad, URLs etc.).
Konfiguration kann auf mehrere Ressourcen aufgeteilt sein, wobei zur Laufzeit die effektive Auswahl getroffen wird.
Konfiguration kann dazu verwendet werden, höherwertige Dienste zur Verfügung zu stellen (z. B. ServiceLoader, ResourceBundle).
Mit Konfiguration können einfache Werte in Abhängigkeit ganz unterschiedlicher Laufzeiteigenschaften dynamisch gesetzt werden, oder es werden ganze Systemteile und Komponenten für die Zielumgebung aktiviert oder deaktiviert.
Bereits mit