Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

Configure Your Projects with Apache Tamaya

1.047 Aufrufe

Veröffentlicht am

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

Veröffentlicht in: Technologie
  • Als Erste(r) kommentieren

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

×