Configure Your Projects with Apache Tamaya

871 Aufrufe

Veröffentlicht am

Overview Presentation on Apache Tamaya and sme of its most important use cases and objectives.

Veröffentlicht in: Technologie
0 Kommentare
1 Gefällt mir
Statistik
Notizen
  • Als Erste(r) kommentieren

Keine Downloads
Aufrufe
Aufrufe insgesamt
871
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
11
Aktionen
Geteilt
0
Downloads
10
Kommentare
0
Gefällt mir
1
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie

Configure Your Projects with Apache Tamaya

  1. 1. Anatole Tresch & Werner Keil Trivadis AG @atsticks @wernerkeil
  2. 2. Apache Tamaya Configuration Management
  3. 3. Anatole Tresch ● Principal Consultant, Trivadis AG (Switzerland) ● Star Spec Lead JSR 354 ● Technical Architect, Lead Engineer ● PPMC Member Apache Tamaya ● Twitter/Google+: @atsticks ● anatole@apache.org ● anatole.tresch@trivadis.com ● JUG Switzerland, Zurich Java Community 3 Bio
  4. 4. Werner Keil ● Consultant – Coach ● Creative Cosmopolitan ● Open Source Evangelist ● Software Architect ● JCP EC Member ● Tamaya Committer ● Java EE | DevOps Guy … ● Twitter/Google+: @wernerkeil ● wkeil@apache.org 4 Bio
  5. 5. Agenda 5 ● General Infos ● What is Configuration? ● Use Cases ● Apache Tamaya ● Core Concepts ● Extensions ● Outlook
  6. 6. 6 General Infos
  7. 7. 7 ● 2012: Configuration was voted an important aspect for Java EE 8 ● 2013: ● Setup of Java EE Configuration JSR failed ● Standardization on SE Level did not have enough momentum ● BUT: ● Configuration is a crucial cross cutting concern ● There is no (really NO!) defacto standard ● Reinventing the wheel is daily business History of Apache Tamaya
  8. 8. The People behind Tamaya 8 • John D. Ament (Mentor) • David Blevins (Champion) • Werner Keil • Gerhard Petracek (Mentor) • Mark Struberg (Mentor) • Anatole Tresch • Oliver B. Fischer • ... •
  9. 9. The Objectives of Apache Tamaya 9 ● Define a common API for accessing configuration ● Minimalistic, also fits into ME ● Flexible, pluggable and extendible design ● support functional programming style ● Be compatible with Java 7 and beyond ● Provide a reference implementation ● Provide Extension Modules for Additional Features ● If possible, create a Standard! • •
  10. 10. What is Configuration?
  11. 11. What people think is configuration? 11 ● Many different interested stakeholders ● Many things to configure ● Divergent views ● Setup for a server environment ● Parameters of a runtime (staging, localization etc.) ● Deployment descriptors ● Technology-specific components (beans, wirings etc.) ● Resource-specific settings (data sources, message queues etc.) ● Dynamic scripting facility, Different scopes (global, ear, app, …) ● Different granularities, varying levels of applicability, Different formats …
  12. 12. What we think is configuration 12 Component X Component Y <dependency> Configuration <dependency> Components:  Behaviour and state  Transitive Deps  Scopes  Code  Dynamic  Not serializalbe Configuration:  Data, Value Types  Transitive Deps  Scopes  Key, value pairs  Static  Serializable
  13. 13. Use Cases
  14. 14. UC: Access Configuration Similarly 14 Configuration API API MicroService Container IaaS PaaS Cache SaaS Build-Tool ● Any Location ● Any Format ● Any Policy SPI
  15. 15. UC: Reduce Redundancy 15 Service Foo Cache Foo Configuration: Service.host.ip=192.168.1.10 Service.stage=test Service.param=paramValue Redundant! File 1 File 2 Tamaya Configuration Foo Configuration: Service.host.ip=${env:HOST_IP} Service.stage=${env:STAGE} Service.param=paramValue Cache Configuration: Cache.host.ip=192.168.1.10 Cache.stage=test Cache.param=cacheValue Tamaya Configuration Cache Configuration: Cache.host.ip=${env:HOST_IP} Cache.stage=${env:STAGE} Cache.param=cacheValue Tamaya Configuration Tamaya Configuration
  16. 16. UC: Convention over Configuration 16 Foo Configuration: Service.host.ip=${cfg:env.host.ip} Service.stage=${cfg:env.stage} Service.param=paramValue Cache Configuration: Cache.host.ip=${cfg:env.host.ip} Cache.stage=${cfg:env.stage} Cache.param=cacheValue Defaults: env.host.ip=${env:HOST_IP} env.stage=${env:STAGE} Service Foo Cache Tamaya Configuration Tamaya Configuration
  17. 17. UC: Pluggable Config Backends Classic: Tamaya Configuration 17 Distributed: ZooKeeper Etcd ... Classic Policy (PropertySources) Myproject/bin/... Myproject/conf/server.xml Myproject/conf/cluster.xml Myproject/conf/security.xml Myproject/lib/... ... Unified Config API Remote Policy (PropertySources) ??? Unified API for configuration access Policies can be provided as jar- artifacts separately Additional benefits: config documentation Your Project
  18. 18. UC: Enterprise Integration 18 Company X: Config SOAP Myproject/bin/... Myproject/conf/server.xml Myproject/conf/cluster.xml Myproject/conf/security.xml Myproject/lib/... ... Company Z: Config Rest Company Y: etcd Company A: Legacy Config Tamaya Configuration Classic Policy (PropertySources) Unified Config API Config Integration (PropertySources) Your Project
  19. 19. 19 Service Foo Cache Tamaya Configuration Tamaya Configuration Locations:  file:${filedir}  classpath:META-INF/defaults/ configuration.*  classpath:META-INF/${STAGE}/ configuration.*  url:http://myserver.int/cfg  System properties  Env. Properties Formats:  properties  xml  json  yaml Config Policy <implements> Define, implement and distribute Company Wide Configuration Policy Policy Policy <implements> UC: Enforceable Policies
  20. 20. 20 ● Reinventing the wheel is daily business, leading to ● Higher Efforts in Enterprise Integration ● Configuration Redundancies and Inconsistencies ● Unclear or Complex Handling when remote Configuration should be supported as well ● Make Projects Integration Raedy with Company Infrastructure ● Make your Configuration Backends Pluggable Summary: Why we need Tamaya?
  21. 21. The API 21
  22. 22. Let's start simple! 22 ● Add dependency org.apache.tamaya:core:1.0-incubating ● Add Config to META-INF/javaconfiguration.properties ● Use it! Configuration config = ConfigurationProvider.getConfiguration(); String name = config.getOrDefault("name", "John"); int ChildNum = config.get("childNum", int.class);
  23. 23. ConfigurationProvider 23 public class ConfigurationProvider{ public static Configuration getConfiguration(); public static ConfigurationContext getConfigurationContext(); public static ConfigurationContextBuilder getConfigurationContextBuilder() public static void setConfigurationContext( ConfigurationContext context); }
  24. 24. 24 public interface Configuration{ String get(String key); String getOrDefault(String key, String defaultValue); <T> T get(String key, Class<T> type); <T> T get(String key, TypeLiteral<T> type); <T> T getOrDefault(String key, Class<T> type, T defaultValue); <T> T getOrDefault(String key, TypeLiteral<T> type, T defaultValue); Map<String,String> getProperties(); // Functional Extension Points Configuration with(ConfigOperator operator): <T> T query(ConfigQuery<T> query); } Configuration
  25. 25. Core Concepts 25 ● Configuration provides properties ● built up by an ordered list of PropertySources ● SPI ● PropertyConverter ● CombinationPolicy ● PropertyFilter ● Extensions (discussed later) ConfigurationContext PropertyFilters PropertySource PropertySource PropertySource PropertySource Configuration CombinationPolicy PropertyProviders <provides> PropertyConverter
  26. 26. Overriding Basics 26 #default ordinal = 0 name=Benjamin childNum=0 family=Tresch #override ordinal tamaya.ordinal=10 name=Anatole childNum=3 tamaya.ordinal=10 name=Anatole childNum=3 family=Tresch
  27. 27. CombinationPolicy 27 list=a,b,c list{collection-type}=List tamaya.ordinal=10 list=aa,bb tamaya.ordinal=10 list=aa,bb,a,b,c list{collection-type}=List
  28. 28. SPI: PropertySource PropertySourceProvider public interface PropertySource { static final String TAMAYA_ORDINAL = "tamaya.ordinal"; String getName(); int getOrdinal(); String get(String key); Map<String, String> getProperties(); } public interface PropertySourceProvider { Collection<PropertySource> getPropertySources(); }
  29. 29. Extension Modules 29
  30. 30. Available Plugins 30 •Tamaya-inject: Configuration Injection and Templates •Tamaya-resolver: Expression resolution, placeholders, dynamic values •Tamaya-resources: Ant styled resource resolution •Tamaya-format: Abstraction of a format, separating parsing from semantic mapping to configuration •Format Extensions: yaml*, json, ini, ... •Tamaya-spring: Integration with Spring •Tamaya-classloader-support: Managing Tamaya Services within Classloading Hierarchies •Tamaya-cdi: Integration with CDI •Tamaya-server: REST/JSON Configuration Server •Tamaya-remote: Client PropertySource matching server component •Tamaya-docs*: Configuration Documentation * work in progress
  31. 31. Planned Features 31 ● Java EE: Configuring EE, where possible ● Karaf Integration ● Source Integrations: ● Commons-config ● Etcd ● Zookeeper ● ... ● Runtime Integrations: ● ???
  32. 32. Configuration Injection 32 @ConfiguredType(defaultSections=”com.mycomp.tenantAdress”) public final class MyTenant{ private String name; @ConfiguredProperty @DefaultValue(”2000”) private long customerId; @ConfiguredProperty(keys={ ”privateAddress”,”businessAdress”,”[my.qualified.adress]” }) private String address; ... } MyTenant t = new MyTenant(); ConfigurationInjection .getConfigurationInjector() .configure(t); MyTenant t = new MyTenant(); ConfigurationInjection .getConfigurationInjector() .configure(t); @RequestScoped public class MyClass{ @Inject private MyTenant t; … } @RequestScoped public class MyClass{ @Inject private MyTenant t; … }
  33. 33. Configuration Template 33 @ConfiguredType(defaultSections=”com.mycomp.tenantAdress”) public interface MyTenant{ public String getName(); @ConfiguredProperty @DefaultValue(”2000”) public long getCustomerId(); @ConfiguredProperty(keys={ ”privateAddress”,”businessAdress”,”[my.qualified.adress]” }) public String getAddress(); } MyTenant t = ConfigurationInjection .getConfigurationInjector() .createTemplate(MyTenant.class); MyTenant t = ConfigurationInjection .getConfigurationInjector() .createTemplate(MyTenant.class);
  34. 34. Demo DEMO 34
  35. 35. Summary 35 Apache Tamaya Provides • A Complete API based on Java SE 7, compatible with SE 6 • String key/value based thread-safe Configuration Model • Support for Type-Safe Configuration Value Conversion • Functional extension points • Simple Filtering and Overrides • Small footprint • Extendible with plugins
  36. 36. We need help 36 Apache Tamaya is great, but we need you... • … using it! • … asking for features! • … envangelizing it! • … loving it! • … extending it! • ...
  37. 37. Links ● Twitter: @tamayaconfig ● Blog: http://javaeeconfig.blogspot.com ● Presentation by Mike Keith on JavaOne 2013: https://oracleus.activeevents.com/2013/connect/sessionDetail.ww?SESSION_ID=7755 ● Apache Deltaspike: http://deltaspike.apache.org ● Java Config Builder: https://github.com/TNG/config-builder ● Apache Commons Configuration: http://commons.apache.org/proper/commons-configuration/ ● Jfig: http://jfig.sourceforge.net/ ● Carbon Configuration: http://carbon.sourceforge.net/modules/core/docs/config/Usage.html ● Comparison on Carbon and Others: http://www.mail-archive.com/commons-dev@jakarta.apache.org/msg37597.html ● Spring Framework: http://projects.spring.io/spring-framework/ ● Owner: http://owner.aeonbits.org/ 37
  38. 38. Q&A 38 Thank you! Anatole Tresch Trivadis AG Principal Consultant Twitter/Google+: @atsticks anatole@apache.org anatole.tresch@trivadis.com

×