SlideShare une entreprise Scribd logo
1  sur  49
Télécharger pour lire hors ligne
BASEL BERN BRUGG DÜSSELDORF FRANKFURT A.M. FREIBURG I.BR. GENF
HAMBURG KOPENHAGEN LAUSANNE MÜNCHEN STUTTGART WIEN ZÜRICH
Configuration
beyond
Java EE
Configuration
with Apache
Tamaya and Microprofile.io
Configuration beyond Java EE 828.03.2017
Anatole Tresch
Principal Consultant, Trivadis AG (Switzerland)
Star Spec Lead
Technical Architect, Lead Engineer
PPMC Member Apache Tamaya
@atsticks
anatole@apache.org
anatole.tresch@trivadis.com
2
About Me
Configuration beyond Java EE 828.03.2017
Agenda
3
●
What‘s all about ?
●
Framework Architecture
●
Accessing Configuration
●
Configuration Backends
●
Configuration Runtime
●
Services
●
Demo / Adoption Area
Configuration beyond Java EE 828.03.2017 4
What‘s all about ?
Configuration beyond Java EE 828.03.2017 5
What is Configuration ?
Simple Key/value pairs?
Typed values?
Configuration beyond Java EE 828.03.2017 6
When is Configuration useful?
Use Cases?
Configuration beyond Java EE 828.03.2017
7
How is it stored?
Remotely or locally?
Classpath, file or ...?
Which format?
All of the above (=multiple sources) ?
Configuration beyond Java EE 828.03.2017 8
When to configure?
Development time ?
Build/deployment time?
Startup?
Dynamic, anytime?
Configuration beyond Java EE 828.03.2017 9
Configuration Lifecycle ?
Static ?
Refreshing ?
Changes triggered ?
Configuration beyond Java EE 828.03.2017
10
Do I need a runtime ?
Java SE?
Java EE?
OSGI?
Kubernetes?
Configuration beyond Java EE 828.03.2017
Framework Architecture
Configuration beyond Java EE 828.03.2017
12
What Configuration Solutions are out there?
Apache Commons Config
Apache Tamaya
Apache Deltaspike
Netflix Archaius Config
Typesafe Config
Microprofile.io
...
Configuration beyond Java EE 828.03.2017 13
Common Framework Design
Accessor API
Runtime
Configuration Backends
Extended Services
API
Runtime
Backends
Services
Configuration beyond Java EE 828.03.2017
Accessing Configuration
Configuration beyond Java EE 828.03.2017
15
Accessing configuration: Patterns
Service Locator Pattern
Configuration Injection
Templates
Configuration beyond Java EE 828.03.2017
16
Configuration cfg = ConfigurationProvider.getConfiguration();
String name = cfg.get("example.name"));
String nameWithDefault = cfg.getOrDefault("example.name", "N/A");
BigDecimal bd = cfg.get("example.number", BigDecimal.class);
Map<String,String> properties = config.getProperties();
Accessing Config: Service Location Pattern
Configuration beyond Java EE 828.03.2017 17
Config config = ConfigProvider.getConfig();
Config config = ConfigProvider.getConfig(
Thread.currentThread().getContextClassLoader());
String value = config.getValue("fooBar", String.class);
Integer intValue = config.getValue("fooBar", Integer.class);
Optional<Integer> getOptionalValue("fooBar", Integer.class);
        
Accessing Config: Service Location Pattern
Configuration beyond Java EE 828.03.2017
18
Accessing Config: Templates
MyConfigClass cfg = ConfigurationInjection.getConfigurationInjector()
.getCon(MyCofignfigClass.class);
String name = cfg.getName();
BigDecimal bd = cfg.getNumber();
Configuration beyond Java EE 828.03.2017
19
Accessing Config: Injection
public class NonAnnotatedConfigBean {
public String simple_value = "Should be overridden!";
public String fieldKey;
public String classFieldKey = "Foo";
public String fullKey;
public String test2 = "This is not set.";
}
public class AnnotatedBean{
@Config(value = {"foo.bar.myprop", "mp"}, defaultValue = "ET")
private String simpleValue;
@Config
String anotherValue;
}
Configuration beyond Java EE 828.03.2017
20
Accessing Config: CDI
public class AnnotatedBean{
@Inject
@Config(value = {"foo.bar.myprop", "mp"}, defaultValue = "ET")
private String simpleValue;
@Inject @Config
String anotherValue;
}
Configuration beyond Java EE 828.03.2017
21
Accessing Config: CDI
public class AnnotatedBean{
@Inject
@ConfigProperty(name = "foo.bar.myprop", defaultValue = "ET")
private String simpleValue;
@Inject @ConfigProperty(name = "foo.bar.myprop")
String anotherValue;
}
Configuration beyond Java EE 828.03.2017
Configuration Backends
Configuration beyond Java EE 828.03.2017 23
●
System-, Environment Properties, CLI Args
●
Files, Classpath Resources
●
Git, Subversion
●
Databases
●
Remote Services (etcd, consul)
●
Distributed Caches/Grids (Redis, Hazelcast, Infinispan etc)
●
...
Configuration Backends
Configuration beyond Java EE 828.03.2017
Backend Model: ConfigSource
24
●
Add dependency
org.apache.tamaya:core: 0.2-incubating
●
Add Config to META-INF/javaconfiguration.properties
●
GO!
public interface ConfigSource {
    String getValue(String propertyName);    
    Map<String, String> getProperties();
    default int getOrdinal() { return 100; }
    String getName();
}
Configuration beyond Java EE 828.03.2017
Backend Model: PropertySource
25
●
Add dependency
org.apache.tamaya:core: 0.2-incubating
●
Add Config to META-INF/javaconfiguration.properties
●
GO!
public interface PropertySource {
    PropertyValue get(String key);    
    Map<String, PropertyValue> getProperties();
    
    int getOrdinal();
    String getName();
    boolean isScannable();
}
Configuration beyond Java EE 828.03.2017
Backend Model: PropertyValue
26
●
Add dependency
org.apache.tamaya:core: 0.2-incubating
●
Add Config to META-INF/javaconfiguration.properties
●
GO!
public final class PropertyValue{
public String getKey();
public String getValue();
public String get(String key);
public Map<String,String> getMetaEntries();
...
}
Configuration beyond Java EE 828.03.2017 27
Programmatic Configuration Creation
Configuration beyond Java EE 828.03.2017
ConfigurationContextBuilder
28
●
Add dependencyConfigurationContext context = 
                   ConfigurationProvider.getConfigurationContextBuilder()
                .addPropertySources(testPropertySource, testPS2)
                .loadDefaultPropertyFilters()
                .addPropertyFilter(myFilter)
                .build();
Configuration config = builder.createConfig(context);
// Optionally
ConfigurationProvider.setConfiguration(config);
Configuration beyond Java EE 828.03.2017
ConfigurationBuilder
29
●
Add dependencyConfigBuilder builder;
Configuration config = 
                   builder
                .withSources(testPropertySource, testPS2)
                .build();
Configuration beyond Java EE 828.03.2017
Configuration Runtime:
Apache Tamaya
Configuration beyond Java EE 828.03.2017 31
●
Just Java 7 or higher !
What I need to run Tamaya ?
Configuration Cluster
Java EE
Tamaya
Java SE
Tamaya
Tamaya
Vertx.io
Tamaya
TomEE
Tamaya
Spring
Tamaya
OSGI
Configuration beyond Java EE 828.03.2017 32
And how does it work ?
Configuration beyond Java EE 828.03.2017
Apache Tamaya in 120 seconds...
33
1.Configuration = ordered list of
PropertySources
2.Properties found are combined using a
CombinationPolicy
3.Raw properties are filtered by PropertyFilter
4.For typed access PropertyConverters 
have to do work
5.Extensions add more features
(discussed later)
6.Component Lifecycle is controlled by the
ServiceContextManager
ConfigurationContext
PropertyFilters
PropertySource
PropertySource
PropertySource
PropertySource
Configuration
CombinationPolicy
PropertyProviders
<provides>
PropertyConverter
Configuration beyond Java EE 828.03.2017
Configuration Services
Configuration beyond Java EE 828.03.2017 35
Remote configuration !
Configuration beyond Java EE 828.03.2017 36
●
Configuration is read from remote source, e.g.
●
Etcd cluster
●
Consul cluster
●
Any Web URL
●
...
Remote PropertySources
Service Location Layer
Configuration Cluster
<dependency>
    <groupId>org.apache.tamaya.ext</groupId>
    <artifactId>tamaya­etcd</artifactId>
    <version>...</version>
</dependency>
Configuration beyond Java EE 828.03.2017 37
Easy Configuration:
„Meta“-Configuration !
Configuration beyond Java EE 828.03.2017 38
●
Configuration that configures configuration
●
E.g. at META­INF/tamaya­config.xml
●
Allows easy and quick setup of your configuration environment
●
Allows dynamic enablement of property sources
●
...
Meta-Configuration DRAFT !
Configuration beyond Java EE 828.03.2017 39
<configuration>
<context>
<context-param name="stage">DEV</context-param>
</context>
<sources>
<source type="env-properties" enabled="${stage=TEST || stage=PTA || stage=PROD}" ordinal="200"/>
<source type="sys-properties" />
<source type="file">
<observe period="20000">true</observe>
<location>./config.json</location>
</source>
<source type="resources" multiple="true">
<multiple>true</multiple>
<location>/META-INF/application-config.yml</location>
</source>
<source type="ch.mypack.MyClassSource">
<locale>de</locale>
</source>
<source type="includes" enabled="${context.cstage==TEST}">
<include>TEST.properties</include>
</source>
</sources>
</configuration>
DRAFT !
Configuration beyond Java EE 828.03.2017 40
Property resolution...
java.home=/usr/lib/java
compiler=${ref:java.home}/bin/javac
<dependency>
    <groupId>org.apache.tamaya.ext</groupId>
    <artifactId>tamaya­resolver</artifactId>
    <version>...</version>
</dependency>
Configuration beyond Java EE 828.03.2017 41
Resource expressions…
public class MyProvider extends AbstractPathPropertySourceProvider{
  public MyProvider(){
    super(“classpath:/META­INF/config/**/*.properties“);
  }
  @Override
  protected Collection<PropertySource> getPropertySources(URL url) {
      // TODO map resource to property sources
      return Collections.emptySet();
  }
}
<dependency>
    <groupId>org.apache.tamaya.ext</groupId>
    <artifactId>tamaya­resources</artifactId>
    <version>...</version>
</dependency>
Configuration beyond Java EE 828.03.2017
And more: a topic on its own!
42
●
Tamaya-spi-support: Some handy base classes to implement SPIs
●
Tamaya-functions: Functional extension points (e.g. remapping, scoping)
●
Tamaya-events: Detect and publish ConfigChangeEvents
●
Tamaya-optional: Minimal access layer with optional Tamaya support
●
Tamaya-filter: Thread local filtering
●
Tamaya-usagetracker: Tracking use and stats for configuration consumption
●
Tamaya-validation*: Configuration Documentation and Validation
●
Format Extensions: yaml, json, ini, … including formats-SPI
●
Integrations with Vertx, CDI, Spring, OSGI*, Camel, etcd, Consul
●
Tamaya-mutable-config: Writable ConfigChangeRequests
●
Tamaya-metamodel*: Configuration Meta-Model
●
Tamaya-collections*: Collection Support
●
Tamaya-resolver: Expression resolution, placeholders, dynamic values
●
Tamaya-resources: Ant styled resource resolution
•...
* experimental
Configuration beyond Java EE 828.03.2017
Demo
Adoption Area: We 13:00h
(Community Hall)
Configuration beyond Java EE 828.03.2017
Summary
Configuration beyond Java EE 828.03.2017
Summary
45
●
Work on config JSR for a EE 8 has been stopped by Oracle
●
Community work is done in Microprofile.io and ASF
●
Microprofile API is very minimal, but will evolve.
●
Apache Tamaya provides most features you will ever need and supports
all major runtimes.
Configuration beyond Java EE 828.03.2017 46
You like it ?
Configuration beyond Java EE 828.03.2017 47
„It is your turn !“
● Use it
● Evangelize it
● Join the force!
Configuration beyond Java EE 828.03.2017
Links
●
Project Page: http://tamaya.incubator.apache.org
●
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/
●
http://microprofile.io
●
Microprofile Config API source: https://github.com/eclipse/microprofile-config
48
Configuration beyond Java EE 828.03.2017
Q&A
49
Thank you!
@atsticks
anatole@apache.org
Anatole Tresch
Trivadis AG
Principal Consultant
Twitter/Google+: @atsticks
anatole@apache.org
anatole.tresch@trivadis.com

Contenu connexe

Tendances

RESTful Web services using JAX-RS
RESTful Web services using JAX-RSRESTful Web services using JAX-RS
RESTful Web services using JAX-RSArun Gupta
 
The Query Rewrite Plugin Interface: Writing Your Own Plugin
The Query Rewrite Plugin Interface: Writing Your Own PluginThe Query Rewrite Plugin Interface: Writing Your Own Plugin
The Query Rewrite Plugin Interface: Writing Your Own PluginMartinHanssonOracle
 
Mysql tech day_paris_ps_and_sys
Mysql tech day_paris_ps_and_sysMysql tech day_paris_ps_and_sys
Mysql tech day_paris_ps_and_sysMark Leith
 
Php Applications with Oracle by Kuassi Mensah
Php Applications with Oracle by Kuassi MensahPhp Applications with Oracle by Kuassi Mensah
Php Applications with Oracle by Kuassi MensahPHP Barcelona Conference
 
Oracle Office Hours - Exposing REST services with APEX and ORDS
Oracle Office Hours - Exposing REST services with APEX and ORDSOracle Office Hours - Exposing REST services with APEX and ORDS
Oracle Office Hours - Exposing REST services with APEX and ORDSDoug Gault
 
Solving Performance Problems Using MySQL Enterprise Monitor
Solving Performance Problems Using MySQL Enterprise MonitorSolving Performance Problems Using MySQL Enterprise Monitor
Solving Performance Problems Using MySQL Enterprise MonitorOracleMySQL
 
Java EE 7 for WebLogic 12c Developers
Java EE 7 for WebLogic 12c DevelopersJava EE 7 for WebLogic 12c Developers
Java EE 7 for WebLogic 12c DevelopersBruno Borges
 
Best Practices - PHP and the Oracle Database
Best Practices - PHP and the Oracle DatabaseBest Practices - PHP and the Oracle Database
Best Practices - PHP and the Oracle DatabaseChristopher Jones
 
JSON and the Oracle Database
JSON and the Oracle DatabaseJSON and the Oracle Database
JSON and the Oracle DatabaseMaria Colgan
 
MySQL partitioning
MySQL partitioning MySQL partitioning
MySQL partitioning OracleMySQL
 
Expose your data as an api is with oracle rest data services -spoug Madrid
Expose your data as an api is with oracle rest data services -spoug MadridExpose your data as an api is with oracle rest data services -spoug Madrid
Expose your data as an api is with oracle rest data services -spoug MadridVinay Kumar
 
New awesome features in MySQL 5.7
New awesome features in MySQL 5.7New awesome features in MySQL 5.7
New awesome features in MySQL 5.7Zhaoyang Wang
 
Instrumenting plugins for Performance Schema
Instrumenting plugins for Performance SchemaInstrumenting plugins for Performance Schema
Instrumenting plugins for Performance SchemaMark Leith
 
Extending MySQL Enterprise Monitor
Extending MySQL Enterprise MonitorExtending MySQL Enterprise Monitor
Extending MySQL Enterprise MonitorMark Leith
 
MySQL Monitoring Mechanisms
MySQL Monitoring MechanismsMySQL Monitoring Mechanisms
MySQL Monitoring MechanismsMark Leith
 

Tendances (20)

PHP Oracle
PHP OraclePHP Oracle
PHP Oracle
 
RESTful Web services using JAX-RS
RESTful Web services using JAX-RSRESTful Web services using JAX-RS
RESTful Web services using JAX-RS
 
The Query Rewrite Plugin Interface: Writing Your Own Plugin
The Query Rewrite Plugin Interface: Writing Your Own PluginThe Query Rewrite Plugin Interface: Writing Your Own Plugin
The Query Rewrite Plugin Interface: Writing Your Own Plugin
 
Mysql tech day_paris_ps_and_sys
Mysql tech day_paris_ps_and_sysMysql tech day_paris_ps_and_sys
Mysql tech day_paris_ps_and_sys
 
Php Applications with Oracle by Kuassi Mensah
Php Applications with Oracle by Kuassi MensahPhp Applications with Oracle by Kuassi Mensah
Php Applications with Oracle by Kuassi Mensah
 
MySQL Quick Dive
MySQL Quick DiveMySQL Quick Dive
MySQL Quick Dive
 
Oracle Office Hours - Exposing REST services with APEX and ORDS
Oracle Office Hours - Exposing REST services with APEX and ORDSOracle Office Hours - Exposing REST services with APEX and ORDS
Oracle Office Hours - Exposing REST services with APEX and ORDS
 
Oracle Essentials Oracle Database 11g
Oracle Essentials   Oracle Database 11gOracle Essentials   Oracle Database 11g
Oracle Essentials Oracle Database 11g
 
Solving Performance Problems Using MySQL Enterprise Monitor
Solving Performance Problems Using MySQL Enterprise MonitorSolving Performance Problems Using MySQL Enterprise Monitor
Solving Performance Problems Using MySQL Enterprise Monitor
 
Java EE 7 for WebLogic 12c Developers
Java EE 7 for WebLogic 12c DevelopersJava EE 7 for WebLogic 12c Developers
Java EE 7 for WebLogic 12c Developers
 
Best Practices - PHP and the Oracle Database
Best Practices - PHP and the Oracle DatabaseBest Practices - PHP and the Oracle Database
Best Practices - PHP and the Oracle Database
 
What's next after Upgrade to 12c
What's next after Upgrade to 12cWhat's next after Upgrade to 12c
What's next after Upgrade to 12c
 
Best Features of Multitenant 12c
Best Features of Multitenant 12cBest Features of Multitenant 12c
Best Features of Multitenant 12c
 
JSON and the Oracle Database
JSON and the Oracle DatabaseJSON and the Oracle Database
JSON and the Oracle Database
 
MySQL partitioning
MySQL partitioning MySQL partitioning
MySQL partitioning
 
Expose your data as an api is with oracle rest data services -spoug Madrid
Expose your data as an api is with oracle rest data services -spoug MadridExpose your data as an api is with oracle rest data services -spoug Madrid
Expose your data as an api is with oracle rest data services -spoug Madrid
 
New awesome features in MySQL 5.7
New awesome features in MySQL 5.7New awesome features in MySQL 5.7
New awesome features in MySQL 5.7
 
Instrumenting plugins for Performance Schema
Instrumenting plugins for Performance SchemaInstrumenting plugins for Performance Schema
Instrumenting plugins for Performance Schema
 
Extending MySQL Enterprise Monitor
Extending MySQL Enterprise MonitorExtending MySQL Enterprise Monitor
Extending MySQL Enterprise Monitor
 
MySQL Monitoring Mechanisms
MySQL Monitoring MechanismsMySQL Monitoring Mechanisms
MySQL Monitoring Mechanisms
 

En vedette

Firma Delphine Boël blijft in gevarenzone
Firma Delphine Boël blijft in gevarenzoneFirma Delphine Boël blijft in gevarenzone
Firma Delphine Boël blijft in gevarenzoneThierry Debels
 
Project Panama - Beyond the (JVM) Wall
Project Panama - Beyond the (JVM) WallProject Panama - Beyond the (JVM) Wall
Project Panama - Beyond the (JVM) WallChristoph Engelbert
 
10 Things You Didn’t Know About Mobile Email from Litmus & HubSpot
 10 Things You Didn’t Know About Mobile Email from Litmus & HubSpot 10 Things You Didn’t Know About Mobile Email from Litmus & HubSpot
10 Things You Didn’t Know About Mobile Email from Litmus & HubSpotHubSpot
 
HubSpot Diversity Data 2016
HubSpot Diversity Data 2016HubSpot Diversity Data 2016
HubSpot Diversity Data 2016HubSpot
 
Add the Women Back: Wikipedia Edit-a-Thon
Add the Women Back: Wikipedia Edit-a-ThonAdd the Women Back: Wikipedia Edit-a-Thon
Add the Women Back: Wikipedia Edit-a-ThonHubSpot
 
Le PIM, levier d'une transformation digitale réussie et efficace (Akeneo + Eram)
Le PIM, levier d'une transformation digitale réussie et efficace (Akeneo + Eram)Le PIM, levier d'une transformation digitale réussie et efficace (Akeneo + Eram)
Le PIM, levier d'une transformation digitale réussie et efficace (Akeneo + Eram)Fred de GOMBERT
 
Addiction & Future Discounting
Addiction & Future DiscountingAddiction & Future Discounting
Addiction & Future DiscountingRussell James
 
How to Use Mobile to Build a Brand Customers Love - Digital Summit Seattle
How to Use Mobile to Build a Brand Customers Love - Digital Summit SeattleHow to Use Mobile to Build a Brand Customers Love - Digital Summit Seattle
How to Use Mobile to Build a Brand Customers Love - Digital Summit SeattleApptentive
 
Resumo de direito previdenciário 2016 concurso inss
Resumo de direito previdenciário 2016 concurso inssResumo de direito previdenciário 2016 concurso inss
Resumo de direito previdenciário 2016 concurso inssecalmont
 
Конституційні обов'язки та права громадян України
Конституційні обов'язки та права громадян УкраїниКонституційні обов'язки та права громадян України
Конституційні обов'язки та права громадян УкраїниМикола Тіяра
 
27 images that prove that we are in danger
27 images that prove that we are in danger27 images that prove that we are in danger
27 images that prove that we are in dangerDr. Noman F. Qadir
 
права ребёнка
права ребёнкаправа ребёнка
права ребёнкаGBDOU23
 

En vedette (16)

Laserové tonery dell
Laserové tonery dellLaserové tonery dell
Laserové tonery dell
 
Firma Delphine Boël blijft in gevarenzone
Firma Delphine Boël blijft in gevarenzoneFirma Delphine Boël blijft in gevarenzone
Firma Delphine Boël blijft in gevarenzone
 
Project Panama - Beyond the (JVM) Wall
Project Panama - Beyond the (JVM) WallProject Panama - Beyond the (JVM) Wall
Project Panama - Beyond the (JVM) Wall
 
10 Things You Didn’t Know About Mobile Email from Litmus & HubSpot
 10 Things You Didn’t Know About Mobile Email from Litmus & HubSpot 10 Things You Didn’t Know About Mobile Email from Litmus & HubSpot
10 Things You Didn’t Know About Mobile Email from Litmus & HubSpot
 
HubSpot Diversity Data 2016
HubSpot Diversity Data 2016HubSpot Diversity Data 2016
HubSpot Diversity Data 2016
 
Add the Women Back: Wikipedia Edit-a-Thon
Add the Women Back: Wikipedia Edit-a-ThonAdd the Women Back: Wikipedia Edit-a-Thon
Add the Women Back: Wikipedia Edit-a-Thon
 
Le PIM, levier d'une transformation digitale réussie et efficace (Akeneo + Eram)
Le PIM, levier d'une transformation digitale réussie et efficace (Akeneo + Eram)Le PIM, levier d'une transformation digitale réussie et efficace (Akeneo + Eram)
Le PIM, levier d'une transformation digitale réussie et efficace (Akeneo + Eram)
 
Irish whiskey
Irish whiskeyIrish whiskey
Irish whiskey
 
Addiction & Future Discounting
Addiction & Future DiscountingAddiction & Future Discounting
Addiction & Future Discounting
 
Intro to React
Intro to ReactIntro to React
Intro to React
 
How to Use Mobile to Build a Brand Customers Love - Digital Summit Seattle
How to Use Mobile to Build a Brand Customers Love - Digital Summit SeattleHow to Use Mobile to Build a Brand Customers Love - Digital Summit Seattle
How to Use Mobile to Build a Brand Customers Love - Digital Summit Seattle
 
Rolom s4 tarea
Rolom s4 tareaRolom s4 tarea
Rolom s4 tarea
 
Resumo de direito previdenciário 2016 concurso inss
Resumo de direito previdenciário 2016 concurso inssResumo de direito previdenciário 2016 concurso inss
Resumo de direito previdenciário 2016 concurso inss
 
Конституційні обов'язки та права громадян України
Конституційні обов'язки та права громадян УкраїниКонституційні обов'язки та права громадян України
Конституційні обов'язки та права громадян України
 
27 images that prove that we are in danger
27 images that prove that we are in danger27 images that prove that we are in danger
27 images that prove that we are in danger
 
права ребёнка
права ребёнкаправа ребёнка
права ребёнка
 

Similaire à Configuration beyond Java EE 8

Configuration with Microprofile and Apache Tamaya
Configuration with Microprofile and Apache TamayaConfiguration with Microprofile and Apache Tamaya
Configuration with Microprofile and Apache TamayaAnatole Tresch
 
What's cool in the new and updated OSGi Specs (EclipseCon 2014)
What's cool in the new and updated OSGi Specs (EclipseCon 2014)What's cool in the new and updated OSGi Specs (EclipseCon 2014)
What's cool in the new and updated OSGi Specs (EclipseCon 2014)David Bosschaert
 
Introduction to Everit Component Registry - B Zsoldos
Introduction to Everit Component Registry - B ZsoldosIntroduction to Everit Component Registry - B Zsoldos
Introduction to Everit Component Registry - B Zsoldosmfrancis
 
Jetpack, with new features in 2021 GDG Georgetown IO Extended
Jetpack, with new features in 2021 GDG Georgetown IO ExtendedJetpack, with new features in 2021 GDG Georgetown IO Extended
Jetpack, with new features in 2021 GDG Georgetown IO ExtendedToru Wonyoung Choi
 
What’s New in Spring Batch?
What’s New in Spring Batch?What’s New in Spring Batch?
What’s New in Spring Batch?VMware Tanzu
 
Declarative Services Dependency Injection OSGi style
Declarative Services Dependency Injection OSGi styleDeclarative Services Dependency Injection OSGi style
Declarative Services Dependency Injection OSGi styleFelix Meschberger
 
Spring 4 final xtr_presentation
Spring 4 final xtr_presentationSpring 4 final xtr_presentation
Spring 4 final xtr_presentationsourabh aggarwal
 
ASP.NET MVC Workshop for Women in Technology
ASP.NET MVC Workshop for Women in TechnologyASP.NET MVC Workshop for Women in Technology
ASP.NET MVC Workshop for Women in TechnologyMałgorzata Borzęcka
 
Spring design-juergen-qcon
Spring design-juergen-qconSpring design-juergen-qcon
Spring design-juergen-qconYiwei Ma
 
Slice: OpenJPA for Distributed Persistence
Slice: OpenJPA for Distributed PersistenceSlice: OpenJPA for Distributed Persistence
Slice: OpenJPA for Distributed PersistencePinaki Poddar
 
Porting legacy apps to Griffon
Porting legacy apps to GriffonPorting legacy apps to Griffon
Porting legacy apps to GriffonJames Williams
 
Web Deployment With Visual Studio 2010
Web Deployment With Visual Studio 2010Web Deployment With Visual Studio 2010
Web Deployment With Visual Studio 2010Rishu Mehra
 
dokumen.tips_rediscovering-spring-with-spring-boot1 (1).pdf
dokumen.tips_rediscovering-spring-with-spring-boot1 (1).pdfdokumen.tips_rediscovering-spring-with-spring-boot1 (1).pdf
dokumen.tips_rediscovering-spring-with-spring-boot1 (1).pdfAppster1
 
dokumen.tips_rediscovering-spring-with-spring-boot1.pdf
dokumen.tips_rediscovering-spring-with-spring-boot1.pdfdokumen.tips_rediscovering-spring-with-spring-boot1.pdf
dokumen.tips_rediscovering-spring-with-spring-boot1.pdfAppster1
 
Jakarta Concurrency: Present and Future
Jakarta Concurrency: Present and FutureJakarta Concurrency: Present and Future
Jakarta Concurrency: Present and FuturePayara
 
Rediscovering Spring with Spring Boot(1)
Rediscovering Spring with Spring Boot(1)Rediscovering Spring with Spring Boot(1)
Rediscovering Spring with Spring Boot(1)Gunith Devasurendra
 
Java EE Connector Architecture 1.6 (JSR 322) Technology
Java EE Connector Architecture 1.6 (JSR 322) TechnologyJava EE Connector Architecture 1.6 (JSR 322) Technology
Java EE Connector Architecture 1.6 (JSR 322) TechnologySivakumar Thyagarajan
 

Similaire à Configuration beyond Java EE 8 (20)

Configuration with Microprofile and Apache Tamaya
Configuration with Microprofile and Apache TamayaConfiguration with Microprofile and Apache Tamaya
Configuration with Microprofile and Apache Tamaya
 
What's cool in the new and updated OSGi Specs (EclipseCon 2014)
What's cool in the new and updated OSGi Specs (EclipseCon 2014)What's cool in the new and updated OSGi Specs (EclipseCon 2014)
What's cool in the new and updated OSGi Specs (EclipseCon 2014)
 
Introduction to Everit Component Registry - B Zsoldos
Introduction to Everit Component Registry - B ZsoldosIntroduction to Everit Component Registry - B Zsoldos
Introduction to Everit Component Registry - B Zsoldos
 
Jetpack, with new features in 2021 GDG Georgetown IO Extended
Jetpack, with new features in 2021 GDG Georgetown IO ExtendedJetpack, with new features in 2021 GDG Georgetown IO Extended
Jetpack, with new features in 2021 GDG Georgetown IO Extended
 
What’s New in Spring Batch?
What’s New in Spring Batch?What’s New in Spring Batch?
What’s New in Spring Batch?
 
Declarative Services Dependency Injection OSGi style
Declarative Services Dependency Injection OSGi styleDeclarative Services Dependency Injection OSGi style
Declarative Services Dependency Injection OSGi style
 
What's new in Java EE 6
What's new in Java EE 6What's new in Java EE 6
What's new in Java EE 6
 
Spring 4 final xtr_presentation
Spring 4 final xtr_presentationSpring 4 final xtr_presentation
Spring 4 final xtr_presentation
 
Annotation processing
Annotation processingAnnotation processing
Annotation processing
 
ASP.NET MVC Workshop for Women in Technology
ASP.NET MVC Workshop for Women in TechnologyASP.NET MVC Workshop for Women in Technology
ASP.NET MVC Workshop for Women in Technology
 
Spring design-juergen-qcon
Spring design-juergen-qconSpring design-juergen-qcon
Spring design-juergen-qcon
 
Slice: OpenJPA for Distributed Persistence
Slice: OpenJPA for Distributed PersistenceSlice: OpenJPA for Distributed Persistence
Slice: OpenJPA for Distributed Persistence
 
Porting legacy apps to Griffon
Porting legacy apps to GriffonPorting legacy apps to Griffon
Porting legacy apps to Griffon
 
Web Deployment With Visual Studio 2010
Web Deployment With Visual Studio 2010Web Deployment With Visual Studio 2010
Web Deployment With Visual Studio 2010
 
dokumen.tips_rediscovering-spring-with-spring-boot1 (1).pdf
dokumen.tips_rediscovering-spring-with-spring-boot1 (1).pdfdokumen.tips_rediscovering-spring-with-spring-boot1 (1).pdf
dokumen.tips_rediscovering-spring-with-spring-boot1 (1).pdf
 
dokumen.tips_rediscovering-spring-with-spring-boot1.pdf
dokumen.tips_rediscovering-spring-with-spring-boot1.pdfdokumen.tips_rediscovering-spring-with-spring-boot1.pdf
dokumen.tips_rediscovering-spring-with-spring-boot1.pdf
 
struts
strutsstruts
struts
 
Jakarta Concurrency: Present and Future
Jakarta Concurrency: Present and FutureJakarta Concurrency: Present and Future
Jakarta Concurrency: Present and Future
 
Rediscovering Spring with Spring Boot(1)
Rediscovering Spring with Spring Boot(1)Rediscovering Spring with Spring Boot(1)
Rediscovering Spring with Spring Boot(1)
 
Java EE Connector Architecture 1.6 (JSR 322) Technology
Java EE Connector Architecture 1.6 (JSR 322) TechnologyJava EE Connector Architecture 1.6 (JSR 322) Technology
Java EE Connector Architecture 1.6 (JSR 322) Technology
 

Plus de Anatole Tresch

Jsr382: Konfiguration in Java
Jsr382: Konfiguration in JavaJsr382: Konfiguration in Java
Jsr382: Konfiguration in JavaAnatole Tresch
 
Wie man Applikationen nicht bauen sollte...
Wie man Applikationen nicht bauen sollte...Wie man Applikationen nicht bauen sollte...
Wie man Applikationen nicht bauen sollte...Anatole Tresch
 
The Gib Five - Modern IT Architecture
The Gib Five - Modern IT ArchitectureThe Gib Five - Modern IT Architecture
The Gib Five - Modern IT ArchitectureAnatole Tresch
 
The Big Five - IT Architektur Heute
The Big Five - IT Architektur HeuteThe Big Five - IT Architektur Heute
The Big Five - IT Architektur HeuteAnatole Tresch
 
Disruption is Change is Future
Disruption is Change is FutureDisruption is Change is Future
Disruption is Change is FutureAnatole Tresch
 
Alles Docker oder Was ?
Alles Docker oder Was ?Alles Docker oder Was ?
Alles Docker oder Was ?Anatole Tresch
 
Configure once, run everywhere 2016
Configure once, run everywhere 2016Configure once, run everywhere 2016
Configure once, run everywhere 2016Anatole Tresch
 
Wie Monolithen für die Zukuft trimmen
Wie Monolithen für die Zukuft trimmenWie Monolithen für die Zukuft trimmen
Wie Monolithen für die Zukuft trimmenAnatole Tresch
 
JSR 354 Hackday - What you can do...
JSR 354 Hackday - What you can do...JSR 354 Hackday - What you can do...
JSR 354 Hackday - What you can do...Anatole Tresch
 
Legacy Renewal of Central Framework in the Enterprise
Legacy Renewal of Central Framework in the EnterpriseLegacy Renewal of Central Framework in the Enterprise
Legacy Renewal of Central Framework in the EnterpriseAnatole Tresch
 
Go for the Money: eine Einführung in JSR 354 - Java aktuell 2014 - Anatole Tr...
Go for the Money: eine Einführung in JSR 354 - Java aktuell 2014 - Anatole Tr...Go for the Money: eine Einführung in JSR 354 - Java aktuell 2014 - Anatole Tr...
Go for the Money: eine Einführung in JSR 354 - Java aktuell 2014 - Anatole Tr...Anatole Tresch
 
Go for the Money - JSR 354
Go for the Money - JSR 354Go for the Money - JSR 354
Go for the Money - JSR 354Anatole Tresch
 

Plus de Anatole Tresch (16)

Jsr382: Konfiguration in Java
Jsr382: Konfiguration in JavaJsr382: Konfiguration in Java
Jsr382: Konfiguration in Java
 
Wie man Applikationen nicht bauen sollte...
Wie man Applikationen nicht bauen sollte...Wie man Applikationen nicht bauen sollte...
Wie man Applikationen nicht bauen sollte...
 
The Gib Five - Modern IT Architecture
The Gib Five - Modern IT ArchitectureThe Gib Five - Modern IT Architecture
The Gib Five - Modern IT Architecture
 
The Big Five - IT Architektur Heute
The Big Five - IT Architektur HeuteThe Big Five - IT Architektur Heute
The Big Five - IT Architektur Heute
 
Microservices in Java
Microservices in JavaMicroservices in Java
Microservices in Java
 
Disruption is Change is Future
Disruption is Change is FutureDisruption is Change is Future
Disruption is Change is Future
 
Alles Docker oder Was ?
Alles Docker oder Was ?Alles Docker oder Was ?
Alles Docker oder Was ?
 
Going Resilient...
Going Resilient...Going Resilient...
Going Resilient...
 
Configure once, run everywhere 2016
Configure once, run everywhere 2016Configure once, run everywhere 2016
Configure once, run everywhere 2016
 
Wie Monolithen für die Zukuft trimmen
Wie Monolithen für die Zukuft trimmenWie Monolithen für die Zukuft trimmen
Wie Monolithen für die Zukuft trimmen
 
JSR 354 Hackday - What you can do...
JSR 354 Hackday - What you can do...JSR 354 Hackday - What you can do...
JSR 354 Hackday - What you can do...
 
Legacy Renewal of Central Framework in the Enterprise
Legacy Renewal of Central Framework in the EnterpriseLegacy Renewal of Central Framework in the Enterprise
Legacy Renewal of Central Framework in the Enterprise
 
Go for the Money: eine Einführung in JSR 354 - Java aktuell 2014 - Anatole Tr...
Go for the Money: eine Einführung in JSR 354 - Java aktuell 2014 - Anatole Tr...Go for the Money: eine Einführung in JSR 354 - Java aktuell 2014 - Anatole Tr...
Go for the Money: eine Einführung in JSR 354 - Java aktuell 2014 - Anatole Tr...
 
JSR 354 LJC-Hackday
JSR 354 LJC-HackdayJSR 354 LJC-Hackday
JSR 354 LJC-Hackday
 
Adopt JSR 354
Adopt JSR 354Adopt JSR 354
Adopt JSR 354
 
Go for the Money - JSR 354
Go for the Money - JSR 354Go for the Money - JSR 354
Go for the Money - JSR 354
 

Dernier

Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)Kaya Weers
 
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfpanagenda
 
Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024TopCSSGallery
 
Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfNeo4j
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesThousandEyes
 
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotesMuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotesManik S Magar
 
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Farhan Tariq
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersNicole Novielli
 
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...Wes McKinney
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Mark Goldstein
 
Generative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfGenerative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfIngrid Airi González
 
Bridging Between CAD & GIS: 6 Ways to Automate Your Data Integration
Bridging Between CAD & GIS:  6 Ways to Automate Your Data IntegrationBridging Between CAD & GIS:  6 Ways to Automate Your Data Integration
Bridging Between CAD & GIS: 6 Ways to Automate Your Data Integrationmarketing932765
 
A Framework for Development in the AI Age
A Framework for Development in the AI AgeA Framework for Development in the AI Age
A Framework for Development in the AI AgeCprime
 
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...Nikki Chapple
 
Microservices, Docker deploy and Microservices source code in C#
Microservices, Docker deploy and Microservices source code in C#Microservices, Docker deploy and Microservices source code in C#
Microservices, Docker deploy and Microservices source code in C#Karmanjay Verma
 
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxGenerative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxfnnc6jmgwh
 
Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...
Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...
Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...BookNet Canada
 
All These Sophisticated Attacks, Can We Really Detect Them - PDF
All These Sophisticated Attacks, Can We Really Detect Them - PDFAll These Sophisticated Attacks, Can We Really Detect Them - PDF
All These Sophisticated Attacks, Can We Really Detect Them - PDFMichael Gough
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxLoriGlavin3
 

Dernier (20)

Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)
 
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
 
Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024
 
Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdf
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
 
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotesMuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
 
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software Developers
 
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
 
Generative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfGenerative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdf
 
Bridging Between CAD & GIS: 6 Ways to Automate Your Data Integration
Bridging Between CAD & GIS:  6 Ways to Automate Your Data IntegrationBridging Between CAD & GIS:  6 Ways to Automate Your Data Integration
Bridging Between CAD & GIS: 6 Ways to Automate Your Data Integration
 
A Framework for Development in the AI Age
A Framework for Development in the AI AgeA Framework for Development in the AI Age
A Framework for Development in the AI Age
 
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
 
Microservices, Docker deploy and Microservices source code in C#
Microservices, Docker deploy and Microservices source code in C#Microservices, Docker deploy and Microservices source code in C#
Microservices, Docker deploy and Microservices source code in C#
 
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxGenerative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
 
Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...
Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...
Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...
 
All These Sophisticated Attacks, Can We Really Detect Them - PDF
All These Sophisticated Attacks, Can We Really Detect Them - PDFAll These Sophisticated Attacks, Can We Really Detect Them - PDF
All These Sophisticated Attacks, Can We Really Detect Them - PDF
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
 

Configuration beyond Java EE 8

  • 1. BASEL BERN BRUGG DÜSSELDORF FRANKFURT A.M. FREIBURG I.BR. GENF HAMBURG KOPENHAGEN LAUSANNE MÜNCHEN STUTTGART WIEN ZÜRICH Configuration beyond Java EE Configuration with Apache Tamaya and Microprofile.io
  • 2. Configuration beyond Java EE 828.03.2017 Anatole Tresch Principal Consultant, Trivadis AG (Switzerland) Star Spec Lead Technical Architect, Lead Engineer PPMC Member Apache Tamaya @atsticks anatole@apache.org anatole.tresch@trivadis.com 2 About Me
  • 3. Configuration beyond Java EE 828.03.2017 Agenda 3 ● What‘s all about ? ● Framework Architecture ● Accessing Configuration ● Configuration Backends ● Configuration Runtime ● Services ● Demo / Adoption Area
  • 4. Configuration beyond Java EE 828.03.2017 4 What‘s all about ?
  • 5. Configuration beyond Java EE 828.03.2017 5 What is Configuration ? Simple Key/value pairs? Typed values?
  • 6. Configuration beyond Java EE 828.03.2017 6 When is Configuration useful? Use Cases?
  • 7. Configuration beyond Java EE 828.03.2017 7 How is it stored? Remotely or locally? Classpath, file or ...? Which format? All of the above (=multiple sources) ?
  • 8. Configuration beyond Java EE 828.03.2017 8 When to configure? Development time ? Build/deployment time? Startup? Dynamic, anytime?
  • 9. Configuration beyond Java EE 828.03.2017 9 Configuration Lifecycle ? Static ? Refreshing ? Changes triggered ?
  • 10. Configuration beyond Java EE 828.03.2017 10 Do I need a runtime ? Java SE? Java EE? OSGI? Kubernetes?
  • 11. Configuration beyond Java EE 828.03.2017 Framework Architecture
  • 12. Configuration beyond Java EE 828.03.2017 12 What Configuration Solutions are out there? Apache Commons Config Apache Tamaya Apache Deltaspike Netflix Archaius Config Typesafe Config Microprofile.io ...
  • 13. Configuration beyond Java EE 828.03.2017 13 Common Framework Design Accessor API Runtime Configuration Backends Extended Services API Runtime Backends Services
  • 14. Configuration beyond Java EE 828.03.2017 Accessing Configuration
  • 15. Configuration beyond Java EE 828.03.2017 15 Accessing configuration: Patterns Service Locator Pattern Configuration Injection Templates
  • 16. Configuration beyond Java EE 828.03.2017 16 Configuration cfg = ConfigurationProvider.getConfiguration(); String name = cfg.get("example.name")); String nameWithDefault = cfg.getOrDefault("example.name", "N/A"); BigDecimal bd = cfg.get("example.number", BigDecimal.class); Map<String,String> properties = config.getProperties(); Accessing Config: Service Location Pattern
  • 17. Configuration beyond Java EE 828.03.2017 17 Config config = ConfigProvider.getConfig(); Config config = ConfigProvider.getConfig( Thread.currentThread().getContextClassLoader()); String value = config.getValue("fooBar", String.class); Integer intValue = config.getValue("fooBar", Integer.class); Optional<Integer> getOptionalValue("fooBar", Integer.class);          Accessing Config: Service Location Pattern
  • 18. Configuration beyond Java EE 828.03.2017 18 Accessing Config: Templates MyConfigClass cfg = ConfigurationInjection.getConfigurationInjector() .getCon(MyCofignfigClass.class); String name = cfg.getName(); BigDecimal bd = cfg.getNumber();
  • 19. Configuration beyond Java EE 828.03.2017 19 Accessing Config: Injection public class NonAnnotatedConfigBean { public String simple_value = "Should be overridden!"; public String fieldKey; public String classFieldKey = "Foo"; public String fullKey; public String test2 = "This is not set."; } public class AnnotatedBean{ @Config(value = {"foo.bar.myprop", "mp"}, defaultValue = "ET") private String simpleValue; @Config String anotherValue; }
  • 20. Configuration beyond Java EE 828.03.2017 20 Accessing Config: CDI public class AnnotatedBean{ @Inject @Config(value = {"foo.bar.myprop", "mp"}, defaultValue = "ET") private String simpleValue; @Inject @Config String anotherValue; }
  • 21. Configuration beyond Java EE 828.03.2017 21 Accessing Config: CDI public class AnnotatedBean{ @Inject @ConfigProperty(name = "foo.bar.myprop", defaultValue = "ET") private String simpleValue; @Inject @ConfigProperty(name = "foo.bar.myprop") String anotherValue; }
  • 22. Configuration beyond Java EE 828.03.2017 Configuration Backends
  • 23. Configuration beyond Java EE 828.03.2017 23 ● System-, Environment Properties, CLI Args ● Files, Classpath Resources ● Git, Subversion ● Databases ● Remote Services (etcd, consul) ● Distributed Caches/Grids (Redis, Hazelcast, Infinispan etc) ● ... Configuration Backends
  • 24. Configuration beyond Java EE 828.03.2017 Backend Model: ConfigSource 24 ● Add dependency org.apache.tamaya:core: 0.2-incubating ● Add Config to META-INF/javaconfiguration.properties ● GO! public interface ConfigSource {     String getValue(String propertyName);         Map<String, String> getProperties();     default int getOrdinal() { return 100; }     String getName(); }
  • 25. Configuration beyond Java EE 828.03.2017 Backend Model: PropertySource 25 ● Add dependency org.apache.tamaya:core: 0.2-incubating ● Add Config to META-INF/javaconfiguration.properties ● GO! public interface PropertySource {     PropertyValue get(String key);         Map<String, PropertyValue> getProperties();          int getOrdinal();     String getName();     boolean isScannable(); }
  • 26. Configuration beyond Java EE 828.03.2017 Backend Model: PropertyValue 26 ● Add dependency org.apache.tamaya:core: 0.2-incubating ● Add Config to META-INF/javaconfiguration.properties ● GO! public final class PropertyValue{ public String getKey(); public String getValue(); public String get(String key); public Map<String,String> getMetaEntries(); ... }
  • 27. Configuration beyond Java EE 828.03.2017 27 Programmatic Configuration Creation
  • 28. Configuration beyond Java EE 828.03.2017 ConfigurationContextBuilder 28 ● Add dependencyConfigurationContext context =                     ConfigurationProvider.getConfigurationContextBuilder()                 .addPropertySources(testPropertySource, testPS2)                 .loadDefaultPropertyFilters()                 .addPropertyFilter(myFilter)                 .build(); Configuration config = builder.createConfig(context); // Optionally ConfigurationProvider.setConfiguration(config);
  • 29. Configuration beyond Java EE 828.03.2017 ConfigurationBuilder 29 ● Add dependencyConfigBuilder builder; Configuration config =                     builder                 .withSources(testPropertySource, testPS2)                 .build();
  • 30. Configuration beyond Java EE 828.03.2017 Configuration Runtime: Apache Tamaya
  • 31. Configuration beyond Java EE 828.03.2017 31 ● Just Java 7 or higher ! What I need to run Tamaya ? Configuration Cluster Java EE Tamaya Java SE Tamaya Tamaya Vertx.io Tamaya TomEE Tamaya Spring Tamaya OSGI
  • 32. Configuration beyond Java EE 828.03.2017 32 And how does it work ?
  • 33. Configuration beyond Java EE 828.03.2017 Apache Tamaya in 120 seconds... 33 1.Configuration = ordered list of PropertySources 2.Properties found are combined using a CombinationPolicy 3.Raw properties are filtered by PropertyFilter 4.For typed access PropertyConverters  have to do work 5.Extensions add more features (discussed later) 6.Component Lifecycle is controlled by the ServiceContextManager ConfigurationContext PropertyFilters PropertySource PropertySource PropertySource PropertySource Configuration CombinationPolicy PropertyProviders <provides> PropertyConverter
  • 34. Configuration beyond Java EE 828.03.2017 Configuration Services
  • 35. Configuration beyond Java EE 828.03.2017 35 Remote configuration !
  • 36. Configuration beyond Java EE 828.03.2017 36 ● Configuration is read from remote source, e.g. ● Etcd cluster ● Consul cluster ● Any Web URL ● ... Remote PropertySources Service Location Layer Configuration Cluster <dependency>     <groupId>org.apache.tamaya.ext</groupId>     <artifactId>tamaya­etcd</artifactId>     <version>...</version> </dependency>
  • 37. Configuration beyond Java EE 828.03.2017 37 Easy Configuration: „Meta“-Configuration !
  • 38. Configuration beyond Java EE 828.03.2017 38 ● Configuration that configures configuration ● E.g. at META­INF/tamaya­config.xml ● Allows easy and quick setup of your configuration environment ● Allows dynamic enablement of property sources ● ... Meta-Configuration DRAFT !
  • 39. Configuration beyond Java EE 828.03.2017 39 <configuration> <context> <context-param name="stage">DEV</context-param> </context> <sources> <source type="env-properties" enabled="${stage=TEST || stage=PTA || stage=PROD}" ordinal="200"/> <source type="sys-properties" /> <source type="file"> <observe period="20000">true</observe> <location>./config.json</location> </source> <source type="resources" multiple="true"> <multiple>true</multiple> <location>/META-INF/application-config.yml</location> </source> <source type="ch.mypack.MyClassSource"> <locale>de</locale> </source> <source type="includes" enabled="${context.cstage==TEST}"> <include>TEST.properties</include> </source> </sources> </configuration> DRAFT !
  • 40. Configuration beyond Java EE 828.03.2017 40 Property resolution... java.home=/usr/lib/java compiler=${ref:java.home}/bin/javac <dependency>     <groupId>org.apache.tamaya.ext</groupId>     <artifactId>tamaya­resolver</artifactId>     <version>...</version> </dependency>
  • 41. Configuration beyond Java EE 828.03.2017 41 Resource expressions… public class MyProvider extends AbstractPathPropertySourceProvider{   public MyProvider(){     super(“classpath:/META­INF/config/**/*.properties“);   }   @Override   protected Collection<PropertySource> getPropertySources(URL url) {       // TODO map resource to property sources       return Collections.emptySet();   } } <dependency>     <groupId>org.apache.tamaya.ext</groupId>     <artifactId>tamaya­resources</artifactId>     <version>...</version> </dependency>
  • 42. Configuration beyond Java EE 828.03.2017 And more: a topic on its own! 42 ● Tamaya-spi-support: Some handy base classes to implement SPIs ● Tamaya-functions: Functional extension points (e.g. remapping, scoping) ● Tamaya-events: Detect and publish ConfigChangeEvents ● Tamaya-optional: Minimal access layer with optional Tamaya support ● Tamaya-filter: Thread local filtering ● Tamaya-usagetracker: Tracking use and stats for configuration consumption ● Tamaya-validation*: Configuration Documentation and Validation ● Format Extensions: yaml, json, ini, … including formats-SPI ● Integrations with Vertx, CDI, Spring, OSGI*, Camel, etcd, Consul ● Tamaya-mutable-config: Writable ConfigChangeRequests ● Tamaya-metamodel*: Configuration Meta-Model ● Tamaya-collections*: Collection Support ● Tamaya-resolver: Expression resolution, placeholders, dynamic values ● Tamaya-resources: Ant styled resource resolution •... * experimental
  • 43. Configuration beyond Java EE 828.03.2017 Demo Adoption Area: We 13:00h (Community Hall)
  • 44. Configuration beyond Java EE 828.03.2017 Summary
  • 45. Configuration beyond Java EE 828.03.2017 Summary 45 ● Work on config JSR for a EE 8 has been stopped by Oracle ● Community work is done in Microprofile.io and ASF ● Microprofile API is very minimal, but will evolve. ● Apache Tamaya provides most features you will ever need and supports all major runtimes.
  • 46. Configuration beyond Java EE 828.03.2017 46 You like it ?
  • 47. Configuration beyond Java EE 828.03.2017 47 „It is your turn !“ ● Use it ● Evangelize it ● Join the force!
  • 48. Configuration beyond Java EE 828.03.2017 Links ● Project Page: http://tamaya.incubator.apache.org ● 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/ ● http://microprofile.io ● Microprofile Config API source: https://github.com/eclipse/microprofile-config 48
  • 49. Configuration beyond Java EE 828.03.2017 Q&A 49 Thank you! @atsticks anatole@apache.org Anatole Tresch Trivadis AG Principal Consultant Twitter/Google+: @atsticks anatole@apache.org anatole.tresch@trivadis.com