apache tamaya - bed-con.org · 6.09.16 configuring containers with tamaya 18 configuration on...

44
BASEL BERN BRUGG DÜSSELDORF FRANKFURT A.M. FREIBURG I.BR. GENF HAMBURG KOPENHAGEN LAUSANNE MÜNCHEN STUTTGART WIEN ZÜRICH Apache Tamaya Configuring your Containers. ..

Upload: others

Post on 20-May-2020

12 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Apache Tamaya - bed-con.org · 6.09.16 Configuring Containers with Tamaya 18 Configuration on deployment by environment properties: docker run e stage prod d n MyApp user/image Configuration

BASEL BERN BRUGG DÜSSELDORF FRANKFURT A.M. FREIBURG I.BR. GENF HAMBURG KOPENHAGEN LAUSANNE MÜNCHEN STUTTGART WIEN ZÜRICH

Apache TamayaConfiguring your Containers...

Page 2: Apache Tamaya - bed-con.org · 6.09.16 Configuring Containers with Tamaya 18 Configuration on deployment by environment properties: docker run e stage prod d n MyApp user/image Configuration

Configuring Containers with Tamaya6.09.16

Anatole TreschPrincipal Consultant, Trivadis AG (Switzerland) Star Spec LeadTechnical Architect, Lead EngineerPPMC Member Apache Tamaya

@[email protected]@trivadis.com

2

About Me

Page 3: Apache Tamaya - bed-con.org · 6.09.16 Configuring Containers with Tamaya 18 Configuration on deployment by environment properties: docker run e stage prod d n MyApp user/image Configuration

Configuring Containers with Tamaya6.09.16

Agenda

3

● Motivation

● Containers, Config and Java

● Apache Tamaya

● The API

● Demo & Outlook

Page 4: Apache Tamaya - bed-con.org · 6.09.16 Configuring Containers with Tamaya 18 Configuration on deployment by environment properties: docker run e stage prod d n MyApp user/image Configuration

Configuring Containers with Tamaya6.09.164

Motivation

Page 5: Apache Tamaya - bed-con.org · 6.09.16 Configuring Containers with Tamaya 18 Configuration on deployment by environment properties: docker run e stage prod d n MyApp user/image Configuration

Configuring Containers with Tamaya6.09.16 5

What is Configuration ?

Key/value pairs?

Typed values?

Page 6: Apache Tamaya - bed-con.org · 6.09.16 Configuring Containers with Tamaya 18 Configuration on deployment by environment properties: docker run e stage prod d n MyApp user/image Configuration

Configuring Containers with Tamaya6.09.16 6

When is Configuration useful?

Page 7: Apache Tamaya - bed-con.org · 6.09.16 Configuring Containers with Tamaya 18 Configuration on deployment by environment properties: docker run e stage prod d n MyApp user/image Configuration

Configuring Containers with Tamaya6.09.16 7

How is it stored?Remote or locally?Classpath or file?

Format?Multiple Sources?

Page 8: Apache Tamaya - bed-con.org · 6.09.16 Configuring Containers with Tamaya 18 Configuration on deployment by environment properties: docker run e stage prod d n MyApp user/image Configuration

Configuring Containers with Tamaya6.09.16 8

When to configure?Build time?

Deployment time?Dynamic?

Page 9: Apache Tamaya - bed-con.org · 6.09.16 Configuring Containers with Tamaya 18 Configuration on deployment by environment properties: docker run e stage prod d n MyApp user/image Configuration

Configuring Containers with Tamaya6.09.16 9

Configuration Lifecycle?Static?

Dynamic?Refreshing?

Changes triggered?

Page 10: Apache Tamaya - bed-con.org · 6.09.16 Configuring Containers with Tamaya 18 Configuration on deployment by environment properties: docker run e stage prod d n MyApp user/image Configuration

Configuring Containers with Tamaya6.09.16 10

Do I need a runtime ?Java SE?Java EE?

OSGI?

Page 11: Apache Tamaya - bed-con.org · 6.09.16 Configuring Containers with Tamaya 18 Configuration on deployment by environment properties: docker run e stage prod d n MyApp user/image Configuration

Configuring Containers with Tamaya6.09.16 11

● Hardcode everything

● Configure everything

● Use a monolithic configuration system

● Let each project/team decide (and implement !)

Common approaches ?

Page 12: Apache Tamaya - bed-con.org · 6.09.16 Configuring Containers with Tamaya 18 Configuration on deployment by environment properties: docker run e stage prod d n MyApp user/image Configuration

Configuring Containers with Tamaya6.09.16

Microservices and Configuration

Page 13: Apache Tamaya - bed-con.org · 6.09.16 Configuring Containers with Tamaya 18 Configuration on deployment by environment properties: docker run e stage prod d n MyApp user/image Configuration

Configuring Containers with Tamaya6.09.16 13

● Environment Properties

● System Properties

● CLI arguments

● Properties, xml-Properties

● Proprietary solutions (Spring, Archaia etc)

Using Java SE

Page 14: Apache Tamaya - bed-con.org · 6.09.16 Configuring Containers with Tamaya 18 Configuration on deployment by environment properties: docker run e stage prod d n MyApp user/image Configuration

Configuring Containers with Tamaya6.09.16 14

● Well known and established

● Deployment Config only

● CDI for „Application Configuration“ !

● New Config JSR for EE 8 in preparation !

● Mostly everything is XML

Using Java EE

Page 15: Apache Tamaya - bed-con.org · 6.09.16 Configuring Containers with Tamaya 18 Configuration on deployment by environment properties: docker run e stage prod d n MyApp user/image Configuration

Configuring Containers with Tamaya6.09.16 15

● Files

● REST APIs

Using Something else...

Page 16: Apache Tamaya - bed-con.org · 6.09.16 Configuring Containers with Tamaya 18 Configuration on deployment by environment properties: docker run e stage prod d n MyApp user/image Configuration

Configuring Containers with Tamaya6.09.16 16

● BYO (build your own)

● Spring Configuration

● Netflix Archaia

● Apache Tamaya

● Many more…

Java Based Solutions

Page 17: Apache Tamaya - bed-con.org · 6.09.16 Configuring Containers with Tamaya 18 Configuration on deployment by environment properties: docker run e stage prod d n MyApp user/image Configuration

Configuring Containers with Tamaya6.09.16 17

?

Page 18: Apache Tamaya - bed-con.org · 6.09.16 Configuring Containers with Tamaya 18 Configuration on deployment by environment properties: docker run e stage prod d n MyApp user/image Configuration

Configuring Containers with Tamaya6.09.16 18

● Configuration on deployment by environment properties:

docker run ­e stage prod  ­d ­n MyApp user/image

● Configuration with Dockerfile/Docker Image:FROM java:8­jreADD /hello­drop­1.0.jar //ADD /hello­config.yml //EXPOSE 8090 8091ENV stage prodENTRYPOINT ["java", "­jar", "/hello­drop­1.0­.jar",\ 

       "server", "/hello­config.yml"]

Microservices run in Docker

Page 19: Apache Tamaya - bed-con.org · 6.09.16 Configuring Containers with Tamaya 18 Configuration on deployment by environment properties: docker run e stage prod d n MyApp user/image Configuration

Configuring Containers with Tamaya6.09.16 19

● Multiple sources

● Multiple formats

● Multiple lifecycles

● Multiple priorities

● …

● Configuration Context, e.g. application name, stage

Problem Scope

Environment Properties

Page 20: Apache Tamaya - bed-con.org · 6.09.16 Configuring Containers with Tamaya 18 Configuration on deployment by environment properties: docker run e stage prod d n MyApp user/image Configuration

Configuring Containers with Tamaya6.09.16 20

What do we need ?

Page 21: Apache Tamaya - bed-con.org · 6.09.16 Configuring Containers with Tamaya 18 Configuration on deployment by environment properties: docker run e stage prod d n MyApp user/image Configuration

Configuring Containers with Tamaya6.09.16 21

An Abstraction.

Page 22: Apache Tamaya - bed-con.org · 6.09.16 Configuring Containers with Tamaya 18 Configuration on deployment by environment properties: docker run e stage prod d n MyApp user/image Configuration

Configuring Containers with Tamaya6.09.16 22

An API.

Page 23: Apache Tamaya - bed-con.org · 6.09.16 Configuring Containers with Tamaya 18 Configuration on deployment by environment properties: docker run e stage prod d n MyApp user/image Configuration

Configuring Containers with Tamaya6.09.16

Apache Tamaya

23

Page 24: Apache Tamaya - bed-con.org · 6.09.16 Configuring Containers with Tamaya 18 Configuration on deployment by environment properties: docker run e stage prod d n MyApp user/image Configuration

Configuring Containers with Tamaya6.09.16 24

● 2012: Configuration was voted an important aspect for Java EE 8

● 2013:

● Setup of Java EE Configuration JSR failed

● Standardization on SE Level did not have enough momentum

● 2016

● Concepts and API are clear

● Release 0.2-incubating, 0.3-incubating until end of September ca.

● New Config EE JSR in preparation by Oracle

History of Apache Tamaya

Page 25: Apache Tamaya - bed-con.org · 6.09.16 Configuring Containers with Tamaya 18 Configuration on deployment by environment properties: docker run e stage prod d n MyApp user/image Configuration

Configuring Containers with Tamaya6.09.16

The Objectives of Apache Tamaya

25

● Common API for configuration● Minimalistic● Flexible, pluggable and extendible

● Compatible with Java 7 and beyond

● Provide a reference implementation

● Provide Extension Modules for additional features

● Build up a community

● Create a Standard!

Page 26: Apache Tamaya - bed-con.org · 6.09.16 Configuring Containers with Tamaya 18 Configuration on deployment by environment properties: docker run e stage prod d n MyApp user/image Configuration

Configuring Containers with Tamaya6.09.16

Decouple your code from...

26

● Format

● Storage

● Lifecycle and versioning

● Security

● Distribution

● Consistency

Page 27: Apache Tamaya - bed-con.org · 6.09.16 Configuring Containers with Tamaya 18 Configuration on deployment by environment properties: docker run e stage prod d n MyApp user/image Configuration

Configuring Containers with Tamaya6.09.16

Injection API

27

@ConfigDefaultSections(”com.mycomp.tenantAdress”)public final class MyTenant{

private String name;

@Config(defaultValue=”2000”) private long customerId;

@Config({ ”private”,”business”,”[company.adress]” }) private String address; ...}

MyTenant t = new MyTenant();ConfigurationInjection .getConfigurationInjector() .configure(t);

MyTenant t = new MyTenant();ConfigurationInjection .getConfigurationInjector() .configure(t);

@RequestScopedpublic class MyClass{ @Inject private MyTenant t; …}

@RequestScopedpublic class MyClass{ @Inject private MyTenant t; …}

Page 28: Apache Tamaya - bed-con.org · 6.09.16 Configuring Containers with Tamaya 18 Configuration on deployment by environment properties: docker run e stage prod d n MyApp user/image Configuration

Configuring Containers with Tamaya6.09.16

Programmatic API

28

● Add dependency org.apache.tamaya:core: 0.2-incubating● Add Config to META-INF/javaconfiguration.properties● GO!

Configuration config = ConfigurationProvider.getConfiguration();

String name = config.getOrDefault("name", "John");

int ChildNum = config.get("childNum", int.class);

Map<String,String> properties = config.getProperties();

Page 29: Apache Tamaya - bed-con.org · 6.09.16 Configuring Containers with Tamaya 18 Configuration on deployment by environment properties: docker run e stage prod d n MyApp user/image Configuration

Configuring Containers with Tamaya6.09.16

Programmatic API

29

● Add dependency org.apache.tamaya:core: 0.2-incubating● Add Config to META-INF/javaconfiguration.properties● GO!

Configuration config = ConfigurationProvider.getConfiguration();

String name = config.getOrDefault("name", "John");

int ChildNum = config.get("childNum", int.class);

Map<String,String> properties = config.getProperties();

Page 30: Apache Tamaya - bed-con.org · 6.09.16 Configuring Containers with Tamaya 18 Configuration on deployment by environment properties: docker run e stage prod d n MyApp user/image Configuration

Configuring Containers with Tamaya6.09.16 30

What else do we need ?

Page 31: Apache Tamaya - bed-con.org · 6.09.16 Configuring Containers with Tamaya 18 Configuration on deployment by environment properties: docker run e stage prod d n MyApp user/image Configuration

Configuring Containers with Tamaya6.09.16 31

An abstraction for configuration sources and

their ordening

=

PropertySource + Ordinals

Page 32: Apache Tamaya - bed-con.org · 6.09.16 Configuring Containers with Tamaya 18 Configuration on deployment by environment properties: docker run e stage prod d n MyApp user/image Configuration

Configuring Containers with Tamaya6.09.16

PropertySource

32

● Add dependency org.apache.tamaya:core: 0.2-incubating● Add Config to META-INF/java Map<String,String> getProperties();configuration.properties● GO!

public interface PropertySource {

PropertyValue get(String key); Map<String,String> getProperties(); boolean isScannable(); String getName(); int getOrdinal();}public final class PropertyValue{ public String getKey(); public String getValue(); public String get(String key); public Map<String,String> getConfigEntries(); ...}

Page 33: Apache Tamaya - bed-con.org · 6.09.16 Configuring Containers with Tamaya 18 Configuration on deployment by environment properties: docker run e stage prod d n MyApp user/image Configuration

Configuring Containers with Tamaya6.09.16 33

An abstraction for configuration sources…

=

PropertySource

Page 34: Apache Tamaya - bed-con.org · 6.09.16 Configuring Containers with Tamaya 18 Configuration on deployment by environment properties: docker run e stage prod d n MyApp user/image Configuration

Configuring Containers with Tamaya6.09.16

Tamaya Design in 120 Seconds...

34

1.Configuration = ordered list of PropertySources

2.Properties found are combined using a CombinationPolicy

3.Raw properties are filtered by PropertyFilter4.For typed access PropertyConverters 

have to do work5.Extensions add more features

(discussed later)6.Component Lifecycle is controlled by the ServiceContextManager

ConfigurationContext

PropertyFilters

PropertySource

PropertySource

PropertySource

PropertySource

Configuration

Com

bina

tionP

olic

yPropertyProviders<provides>

PropertyConverter

Page 35: Apache Tamaya - bed-con.org · 6.09.16 Configuring Containers with Tamaya 18 Configuration on deployment by environment properties: docker run e stage prod d n MyApp user/image Configuration

Configuring Containers with Tamaya6.09.16

Configuration Overriding

35

#default ordinal = 0 name=Benjamin childNum=0 family=Tresch

#override ordinal tamaya.ordinal=10 name=Anatole childNum=3

tamaya.ordinal=10 name=Anatole childNum=3 family=Tresch

Page 36: Apache Tamaya - bed-con.org · 6.09.16 Configuring Containers with Tamaya 18 Configuration on deployment by environment properties: docker run e stage prod d n MyApp user/image Configuration

Configuring Containers with Tamaya6.09.16

Upcoming Features ?

DEMO

36

● Configuration Description and Validation

● Meta-Configuration: META-INF/configuration-sources.xml

● Integrations

Page 37: Apache Tamaya - bed-con.org · 6.09.16 Configuring Containers with Tamaya 18 Configuration on deployment by environment properties: docker run e stage prod d n MyApp user/image Configuration

Configuring Containers with Tamaya6.09.16

Demo

DEMO

37

● 1 Microservice

● Running on Java EE 7 (Wildfly)

● Multiple Configuration Sources:● Environment Properties● System Properties● Classpath● Files● Etcd Server

Page 38: Apache Tamaya - bed-con.org · 6.09.16 Configuring Containers with Tamaya 18 Configuration on deployment by environment properties: docker run e stage prod d n MyApp user/image Configuration

Configuring Containers with Tamaya6.09.16

There is more! - Tamaya Extension Modules

38

Page 39: Apache Tamaya - bed-con.org · 6.09.16 Configuring Containers with Tamaya 18 Configuration on deployment by environment properties: docker run e stage prod d n MyApp user/image Configuration

Configuring Containers with Tamaya6.09.16

Extensions: a topic on its own!

39

● 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-inject-api: Tamaya Configuration Injection Annotations● Tamaya-inject: Configuration Injection and Templates SE Implementation (lean, no CDI)● Tamaya-resolver: Expression resolution, placeholders, dynamic values● Tamaya-resources: Ant styled resource resolution● Format Extensions: yaml, json, ini, … including formats-SPI● Integrations with CDI, Spring, OSGI*, Camel, etcd● Tamaya-mutable-config*: Writable ConfigChangeRequests● Tamaya-model*: Configuration Model and Auto Documentation● Tamaya-collections*: Collection Support•... * experimental

Page 40: Apache Tamaya - bed-con.org · 6.09.16 Configuring Containers with Tamaya 18 Configuration on deployment by environment properties: docker run e stage prod d n MyApp user/image Configuration

Configuring Containers with Tamaya6.09.16

Summarizing...

40

A Complete thread- and type-safe Configuration API

● Compatible with all major runtimes

● Simple, but extendible design

● Extensible

● Small footprint

● Base for current Java EE 8 spec ?

Page 41: Apache Tamaya - bed-con.org · 6.09.16 Configuring Containers with Tamaya 18 Configuration on deployment by environment properties: docker run e stage prod d n MyApp user/image Configuration

Configuring Containers with Tamaya6.09.1641

You like it ?

Page 42: Apache Tamaya - bed-con.org · 6.09.16 Configuring Containers with Tamaya 18 Configuration on deployment by environment properties: docker run e stage prod d n MyApp user/image Configuration

Configuring Containers with Tamaya6.09.1642

„It is your turn !“

● Use it● Evangelize● Join the force

Page 43: Apache Tamaya - bed-con.org · 6.09.16 Configuring Containers with Tamaya 18 Configuration on deployment by environment properties: docker run e stage prod d n MyApp user/image Configuration

Configuring Containers with Tamaya6.09.16

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/ ● Jfig: http://jfig.sourceforge.net/ ● Carbon Configuration: http://carbon.sourceforge.net/modules/core/docs/config/Usage.html ● Comparison on Carbon and Others: http://www.mail-archive.com/[email protected]/msg37597.html ● Spring Framework: http://projects.spring.io/spring-framework/● Owner: http://owner.aeonbits.org/

43

Page 44: Apache Tamaya - bed-con.org · 6.09.16 Configuring Containers with Tamaya 18 Configuration on deployment by environment properties: docker run e stage prod d n MyApp user/image Configuration

Configuring Containers with Tamaya6.09.16

Q&A

44

Thank you!Anatole TreschTrivadis AGPrincipal ConsultantTwitter/Google+: @atsticks [email protected] [email protected]