SlideShare a Scribd company logo
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

More Related Content

What's hot

PHP Oracle
PHP OraclePHP Oracle
PHP Oracle
Nur Hidayat
 
RESTful Web services using JAX-RS
RESTful Web services using JAX-RSRESTful Web services using JAX-RS
RESTful Web services using JAX-RS
Arun 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 Plugin
MartinHanssonOracle
 
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
Mark 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 Mensah
PHP Barcelona Conference
 
MySQL Quick Dive
MySQL Quick DiveMySQL Quick Dive
MySQL Quick Dive
Sudipta Kumar Sahoo
 
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
Doug Gault
 
Oracle Essentials Oracle Database 11g
Oracle Essentials   Oracle Database 11gOracle Essentials   Oracle Database 11g
Oracle Essentials Oracle Database 11g
Paola Andrea Gonzalez Montoya
 
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
OracleMySQL
 
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
Bruno 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 Database
Christopher Jones
 
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
Guatemala User Group
 
Best Features of Multitenant 12c
Best Features of Multitenant 12cBest Features of Multitenant 12c
Best Features of Multitenant 12c
Guatemala User Group
 
JSON and the Oracle Database
JSON and the Oracle DatabaseJSON and the Oracle Database
JSON and the Oracle Database
Maria 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 Madrid
Vinay 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.7
Zhaoyang Wang
 
Instrumenting plugins for Performance Schema
Instrumenting plugins for Performance SchemaInstrumenting plugins for Performance Schema
Instrumenting plugins for Performance Schema
Mark Leith
 
Extending MySQL Enterprise Monitor
Extending MySQL Enterprise MonitorExtending MySQL Enterprise Monitor
Extending MySQL Enterprise Monitor
Mark Leith
 
MySQL Monitoring Mechanisms
MySQL Monitoring MechanismsMySQL Monitoring Mechanisms
MySQL Monitoring Mechanisms
Mark Leith
 

What's hot (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
 

Viewers also liked

Laserové tonery dell
Laserové tonery dellLaserové tonery dell
Laserové tonery dell
naplne-do-tlaciarni.sk
 
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
Thierry Debels
 
Project Panama - Beyond the (JVM) Wall
Project Panama - Beyond the (JVM) WallProject Panama - Beyond the (JVM) Wall
Project Panama - Beyond the (JVM) Wall
Christoph 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 & HubSpot
HubSpot
 
HubSpot Diversity Data 2016
HubSpot Diversity Data 2016HubSpot Diversity Data 2016
HubSpot Diversity Data 2016
HubSpot
 
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
HubSpot
 
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
 
Irish whiskey
Irish whiskeyIrish whiskey
Irish whiskey
Mayank Seth
 
Addiction & Future Discounting
Addiction & Future DiscountingAddiction & Future Discounting
Addiction & Future Discounting
Russell James
 
Intro to React
Intro to ReactIntro to React
Intro to React
Eric Westfall
 
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
Apptentive
 
Rolom s4 tarea
Rolom s4 tareaRolom 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
ecalmont
 
Конституційні обов'язки та права громадян України
Конституційні обов'язки та права громадян УкраїниКонституційні обов'язки та права громадян України
Конституційні обов'язки та права громадян України
Микола Тіяра
 
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
Dr. Noman F. Qadir
 
права ребёнка
права ребёнкаправа ребёнка
права ребёнка
GBDOU23
 

Viewers also liked (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
 
права ребёнка
права ребёнкаправа ребёнка
права ребёнка
 

Similar to 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 Tamaya
Anatole 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 Zsoldos
mfrancis
 
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
Toru 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 style
Felix Meschberger
 
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
Antonio Goncalves
 
Spring 4 final xtr_presentation
Spring 4 final xtr_presentationSpring 4 final xtr_presentation
Spring 4 final xtr_presentation
sourabh aggarwal
 
Annotation processing
Annotation processingAnnotation processing
Annotation processing
Florent Champigny
 
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
Małgorzata Borzęcka
 
Spring design-juergen-qcon
Spring design-juergen-qconSpring design-juergen-qcon
Spring design-juergen-qcon
Yiwei Ma
 
Slice: OpenJPA for Distributed Persistence
Slice: OpenJPA for Distributed PersistenceSlice: OpenJPA for Distributed Persistence
Slice: OpenJPA for Distributed Persistence
Pinaki Poddar
 
Porting legacy apps to Griffon
Porting legacy apps to GriffonPorting legacy apps to Griffon
Porting legacy apps to Griffon
James Williams
 
Web Deployment With Visual Studio 2010
Web Deployment With Visual Studio 2010Web Deployment With Visual Studio 2010
Web Deployment With Visual Studio 2010
Rishu 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).pdf
Appster1
 
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
Appster1
 
struts
strutsstruts
struts
Arjun Shanka
 
Jakarta Concurrency: Present and Future
Jakarta Concurrency: Present and FutureJakarta Concurrency: Present and Future
Jakarta Concurrency: Present and Future
Payara
 
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) Technology
Sivakumar Thyagarajan
 

Similar to 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
 

More from Anatole Tresch

Jsr382: Konfiguration in Java
Jsr382: Konfiguration in JavaJsr382: Konfiguration in Java
Jsr382: Konfiguration in Java
Anatole 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 Architecture
Anatole Tresch
 
The Big Five - IT Architektur Heute
The Big Five - IT Architektur HeuteThe Big Five - IT Architektur Heute
The Big Five - IT Architektur Heute
Anatole Tresch
 
Microservices in Java
Microservices in JavaMicroservices in Java
Microservices in Java
Anatole Tresch
 
Disruption is Change is Future
Disruption is Change is FutureDisruption is Change is Future
Disruption is Change is Future
Anatole Tresch
 
Alles Docker oder Was ?
Alles Docker oder Was ?Alles Docker oder Was ?
Alles Docker oder Was ?
Anatole Tresch
 
Going Resilient...
Going Resilient...Going Resilient...
Going Resilient...
Anatole Tresch
 
Configure once, run everywhere 2016
Configure once, run everywhere 2016Configure once, run everywhere 2016
Configure once, run everywhere 2016
Anatole 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 trimmen
Anatole 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 Enterprise
Anatole 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
 
JSR 354 LJC-Hackday
JSR 354 LJC-HackdayJSR 354 LJC-Hackday
JSR 354 LJC-Hackday
Anatole Tresch
 
Adopt JSR 354
Adopt JSR 354Adopt JSR 354
Adopt JSR 354
Anatole Tresch
 
Go for the Money - JSR 354
Go for the Money - JSR 354Go for the Money - JSR 354
Go for the Money - JSR 354
Anatole Tresch
 

More from 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
 

Recently uploaded

Programming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup SlidesProgramming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup Slides
Zilliz
 
HCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAUHCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAU
panagenda
 
leewayhertz.com-AI in predictive maintenance Use cases technologies benefits ...
leewayhertz.com-AI in predictive maintenance Use cases technologies benefits ...leewayhertz.com-AI in predictive maintenance Use cases technologies benefits ...
leewayhertz.com-AI in predictive maintenance Use cases technologies benefits ...
alexjohnson7307
 
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with SlackLet's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
shyamraj55
 
Ocean lotus Threat actors project by John Sitima 2024 (1).pptx
Ocean lotus Threat actors project by John Sitima 2024 (1).pptxOcean lotus Threat actors project by John Sitima 2024 (1).pptx
Ocean lotus Threat actors project by John Sitima 2024 (1).pptx
SitimaJohn
 
Nordic Marketo Engage User Group_June 13_ 2024.pptx
Nordic Marketo Engage User Group_June 13_ 2024.pptxNordic Marketo Engage User Group_June 13_ 2024.pptx
Nordic Marketo Engage User Group_June 13_ 2024.pptx
MichaelKnudsen27
 
GraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracyGraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracy
Tomaz Bratanic
 
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdfHow to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
Chart Kalyan
 
Energy Efficient Video Encoding for Cloud and Edge Computing Instances
Energy Efficient Video Encoding for Cloud and Edge Computing InstancesEnergy Efficient Video Encoding for Cloud and Edge Computing Instances
Energy Efficient Video Encoding for Cloud and Edge Computing Instances
Alpen-Adria-Universität
 
Nunit vs XUnit vs MSTest Differences Between These Unit Testing Frameworks.pdf
Nunit vs XUnit vs MSTest Differences Between These Unit Testing Frameworks.pdfNunit vs XUnit vs MSTest Differences Between These Unit Testing Frameworks.pdf
Nunit vs XUnit vs MSTest Differences Between These Unit Testing Frameworks.pdf
flufftailshop
 
Salesforce Integration for Bonterra Impact Management (fka Social Solutions A...
Salesforce Integration for Bonterra Impact Management (fka Social Solutions A...Salesforce Integration for Bonterra Impact Management (fka Social Solutions A...
Salesforce Integration for Bonterra Impact Management (fka Social Solutions A...
Jeffrey Haguewood
 
Digital Marketing Trends in 2024 | Guide for Staying Ahead
Digital Marketing Trends in 2024 | Guide for Staying AheadDigital Marketing Trends in 2024 | Guide for Staying Ahead
Digital Marketing Trends in 2024 | Guide for Staying Ahead
Wask
 
Taking AI to the Next Level in Manufacturing.pdf
Taking AI to the Next Level in Manufacturing.pdfTaking AI to the Next Level in Manufacturing.pdf
Taking AI to the Next Level in Manufacturing.pdf
ssuserfac0301
 
Deep Dive: Getting Funded with Jason Jason Lemkin Founder & CEO @ SaaStr
Deep Dive: Getting Funded with Jason Jason Lemkin Founder & CEO @ SaaStrDeep Dive: Getting Funded with Jason Jason Lemkin Founder & CEO @ SaaStr
Deep Dive: Getting Funded with Jason Jason Lemkin Founder & CEO @ SaaStr
saastr
 
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy SurveyTrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc
 
Artificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopmentArtificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopment
Octavian Nadolu
 
Monitoring and Managing Anomaly Detection on OpenShift.pdf
Monitoring and Managing Anomaly Detection on OpenShift.pdfMonitoring and Managing Anomaly Detection on OpenShift.pdf
Monitoring and Managing Anomaly Detection on OpenShift.pdf
Tosin Akinosho
 
Driving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success StoryDriving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success Story
Safe Software
 
Introduction of Cybersecurity with OSS at Code Europe 2024
Introduction of Cybersecurity with OSS  at Code Europe 2024Introduction of Cybersecurity with OSS  at Code Europe 2024
Introduction of Cybersecurity with OSS at Code Europe 2024
Hiroshi SHIBATA
 
Azure API Management to expose backend services securely
Azure API Management to expose backend services securelyAzure API Management to expose backend services securely
Azure API Management to expose backend services securely
Dinusha Kumarasiri
 

Recently uploaded (20)

Programming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup SlidesProgramming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup Slides
 
HCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAUHCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAU
 
leewayhertz.com-AI in predictive maintenance Use cases technologies benefits ...
leewayhertz.com-AI in predictive maintenance Use cases technologies benefits ...leewayhertz.com-AI in predictive maintenance Use cases technologies benefits ...
leewayhertz.com-AI in predictive maintenance Use cases technologies benefits ...
 
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with SlackLet's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
 
Ocean lotus Threat actors project by John Sitima 2024 (1).pptx
Ocean lotus Threat actors project by John Sitima 2024 (1).pptxOcean lotus Threat actors project by John Sitima 2024 (1).pptx
Ocean lotus Threat actors project by John Sitima 2024 (1).pptx
 
Nordic Marketo Engage User Group_June 13_ 2024.pptx
Nordic Marketo Engage User Group_June 13_ 2024.pptxNordic Marketo Engage User Group_June 13_ 2024.pptx
Nordic Marketo Engage User Group_June 13_ 2024.pptx
 
GraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracyGraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracy
 
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdfHow to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
 
Energy Efficient Video Encoding for Cloud and Edge Computing Instances
Energy Efficient Video Encoding for Cloud and Edge Computing InstancesEnergy Efficient Video Encoding for Cloud and Edge Computing Instances
Energy Efficient Video Encoding for Cloud and Edge Computing Instances
 
Nunit vs XUnit vs MSTest Differences Between These Unit Testing Frameworks.pdf
Nunit vs XUnit vs MSTest Differences Between These Unit Testing Frameworks.pdfNunit vs XUnit vs MSTest Differences Between These Unit Testing Frameworks.pdf
Nunit vs XUnit vs MSTest Differences Between These Unit Testing Frameworks.pdf
 
Salesforce Integration for Bonterra Impact Management (fka Social Solutions A...
Salesforce Integration for Bonterra Impact Management (fka Social Solutions A...Salesforce Integration for Bonterra Impact Management (fka Social Solutions A...
Salesforce Integration for Bonterra Impact Management (fka Social Solutions A...
 
Digital Marketing Trends in 2024 | Guide for Staying Ahead
Digital Marketing Trends in 2024 | Guide for Staying AheadDigital Marketing Trends in 2024 | Guide for Staying Ahead
Digital Marketing Trends in 2024 | Guide for Staying Ahead
 
Taking AI to the Next Level in Manufacturing.pdf
Taking AI to the Next Level in Manufacturing.pdfTaking AI to the Next Level in Manufacturing.pdf
Taking AI to the Next Level in Manufacturing.pdf
 
Deep Dive: Getting Funded with Jason Jason Lemkin Founder & CEO @ SaaStr
Deep Dive: Getting Funded with Jason Jason Lemkin Founder & CEO @ SaaStrDeep Dive: Getting Funded with Jason Jason Lemkin Founder & CEO @ SaaStr
Deep Dive: Getting Funded with Jason Jason Lemkin Founder & CEO @ SaaStr
 
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy SurveyTrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy Survey
 
Artificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopmentArtificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopment
 
Monitoring and Managing Anomaly Detection on OpenShift.pdf
Monitoring and Managing Anomaly Detection on OpenShift.pdfMonitoring and Managing Anomaly Detection on OpenShift.pdf
Monitoring and Managing Anomaly Detection on OpenShift.pdf
 
Driving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success StoryDriving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success Story
 
Introduction of Cybersecurity with OSS at Code Europe 2024
Introduction of Cybersecurity with OSS  at Code Europe 2024Introduction of Cybersecurity with OSS  at Code Europe 2024
Introduction of Cybersecurity with OSS at Code Europe 2024
 
Azure API Management to expose backend services securely
Azure API Management to expose backend services securelyAzure API Management to expose backend services securely
Azure API Management to expose backend services securely
 

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