Top Banner
Anatole Tresch & Werner Keil Trivadis AG @atsticks @wernerkeil
38

Anatole Tresch & Werner Keil · 2017-12-14 · Anatole Tresch Principal Consultant, Trivadis AG (Switzerland) Star Spec Lead JSR 354 Technical Architect, Lead Engineer PPMC Member

May 28, 2020

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Anatole Tresch & Werner Keil · 2017-12-14 · Anatole Tresch Principal Consultant, Trivadis AG (Switzerland) Star Spec Lead JSR 354 Technical Architect, Lead Engineer PPMC Member

Anatole Tresch & Werner KeilTrivadis AG@atsticks @wernerkeil

Page 2: Anatole Tresch & Werner Keil · 2017-12-14 · Anatole Tresch Principal Consultant, Trivadis AG (Switzerland) Star Spec Lead JSR 354 Technical Architect, Lead Engineer PPMC Member

Apache TamayaConfiguration Management

Page 3: Anatole Tresch & Werner Keil · 2017-12-14 · Anatole Tresch Principal Consultant, Trivadis AG (Switzerland) Star Spec Lead JSR 354 Technical Architect, Lead Engineer PPMC Member

Anatole Tresch

● Principal Consultant, Trivadis AG (Switzerland)● Star Spec Lead JSR 354● Technical Architect, Lead Engineer● PPMC Member Apache Tamaya

● Twitter/Google+: @atsticks● [email protected][email protected]● JUG Switzerland, Zurich Java Community

3

Bio

Page 4: Anatole Tresch & Werner Keil · 2017-12-14 · Anatole Tresch Principal Consultant, Trivadis AG (Switzerland) Star Spec Lead JSR 354 Technical Architect, Lead Engineer PPMC Member

Werner Keil

● Consultant – Coach● Creative Cosmopolitan● Open Source Evangelist● Software Architect● JCP EC Member● Tamaya Committer● Java EE | DevOps Guy …

● Twitter/Google+: @wernerkeil● [email protected]

4

Bio

Page 5: Anatole Tresch & Werner Keil · 2017-12-14 · Anatole Tresch Principal Consultant, Trivadis AG (Switzerland) Star Spec Lead JSR 354 Technical Architect, Lead Engineer PPMC Member

Agenda

5

● General Infos

● What is Configuration?

● Use Cases

● Apache Tamaya

● Core Concepts

● Extensions

● Outlook

Page 6: Anatole Tresch & Werner Keil · 2017-12-14 · Anatole Tresch Principal Consultant, Trivadis AG (Switzerland) Star Spec Lead JSR 354 Technical Architect, Lead Engineer PPMC Member

6

General Infos

Page 7: Anatole Tresch & Werner Keil · 2017-12-14 · Anatole Tresch Principal Consultant, Trivadis AG (Switzerland) Star Spec Lead JSR 354 Technical Architect, Lead Engineer PPMC Member

7

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

● 2013: ● Setup of Java EE Configuration JSR failed● Standardization on SE Level did not have enough momentum

● BUT:● Configuration is a crucial cross cutting concern● There is no (really NO!) defacto standard● Reinventing the wheel is daily business

History of Apache Tamaya

Page 8: Anatole Tresch & Werner Keil · 2017-12-14 · Anatole Tresch Principal Consultant, Trivadis AG (Switzerland) Star Spec Lead JSR 354 Technical Architect, Lead Engineer PPMC Member

The People behind Tamaya

8

• John D. Ament (Mentor)

• David Blevins (Champion)

• Werner Keil

• Gerhard Petracek (Mentor)

• Mark Struberg (Mentor)

• Anatole Tresch

• Oliver B. Fischer

• ...

••

Page 9: Anatole Tresch & Werner Keil · 2017-12-14 · Anatole Tresch Principal Consultant, Trivadis AG (Switzerland) Star Spec Lead JSR 354 Technical Architect, Lead Engineer PPMC Member

The Objectives of Apache Tamaya

9

● Define a common API for accessing configuration● Minimalistic, also fits into ME● Flexible, pluggable and extendible design● support functional programming style

● Be compatible with Java 7 and beyond

● Provide a reference implementation

● Provide Extension Modules for Additional Features

● If possible, create a Standard!

••

Page 10: Anatole Tresch & Werner Keil · 2017-12-14 · Anatole Tresch Principal Consultant, Trivadis AG (Switzerland) Star Spec Lead JSR 354 Technical Architect, Lead Engineer PPMC Member

What is Configuration?

Page 11: Anatole Tresch & Werner Keil · 2017-12-14 · Anatole Tresch Principal Consultant, Trivadis AG (Switzerland) Star Spec Lead JSR 354 Technical Architect, Lead Engineer PPMC Member

What people think is configuration?

11

● Many different interested stakeholders

● Many things to configure

● Divergent views● Setup for a server environment● Parameters of a runtime (staging, localization etc.)● Deployment descriptors● Technology-specific components (beans, wirings etc.)● Resource-specific settings (data sources, message queues etc.)● Dynamic scripting facility, Different scopes (global, ear, app, …)

● Different granularities, varying levels of applicability, Different formats …

Page 12: Anatole Tresch & Werner Keil · 2017-12-14 · Anatole Tresch Principal Consultant, Trivadis AG (Switzerland) Star Spec Lead JSR 354 Technical Architect, Lead Engineer PPMC Member

What we think is configuration

12

Component X

Component Y

<dependency>

Configuration

<dependency> Components: Behaviour and state Transitive Deps Scopes Code Dynamic Not serializalbe

Configuration: Data, Value Types Transitive Deps Scopes Key, value pairs Static Serializable

Page 13: Anatole Tresch & Werner Keil · 2017-12-14 · Anatole Tresch Principal Consultant, Trivadis AG (Switzerland) Star Spec Lead JSR 354 Technical Architect, Lead Engineer PPMC Member

Use Cases

Page 14: Anatole Tresch & Werner Keil · 2017-12-14 · Anatole Tresch Principal Consultant, Trivadis AG (Switzerland) Star Spec Lead JSR 354 Technical Architect, Lead Engineer PPMC Member

UC: Access Configuration Similarly

14

Configuration

APIAPI

MicroService

Container

IaaS

PaaS

Cache SaaS

Build-Tool

● Any Location● Any Format● Any Policy

SPI

Page 15: Anatole Tresch & Werner Keil · 2017-12-14 · Anatole Tresch Principal Consultant, Trivadis AG (Switzerland) Star Spec Lead JSR 354 Technical Architect, Lead Engineer PPMC Member

UC: Reduce Redundancy

15

Service Foo

Cache

Foo Configuration:Service.host.ip=192.168.1.10Service.stage=testService.param=paramValue

Redundant!

File 1

File 2

TamayaConfiguration

Foo Configuration:Service.host.ip=${env:HOST_IP}Service.stage=${env:STAGE}Service.param=paramValue

Cache Configuration:Cache.host.ip=192.168.1.10Cache.stage=testCache.param=cacheValue

TamayaConfiguration

Cache Configuration:Cache.host.ip=${env:HOST_IP}Cache.stage=${env:STAGE}Cache.param=cacheValue

TamayaConfiguration

TamayaConfiguration

Page 16: Anatole Tresch & Werner Keil · 2017-12-14 · Anatole Tresch Principal Consultant, Trivadis AG (Switzerland) Star Spec Lead JSR 354 Technical Architect, Lead Engineer PPMC Member

UC: Convention over Configuration

16

Foo Configuration:Service.host.ip=${cfg:env.host.ip}Service.stage=${cfg:env.stage}Service.param=paramValue

Cache Configuration:Cache.host.ip=${cfg:env.host.ip}Cache.stage=${cfg:env.stage}Cache.param=cacheValue

Defaults:env.host.ip=${env:HOST_IP}env.stage=${env:STAGE}

Service Foo

Cache

TamayaConfiguration

TamayaConfiguration

Page 17: Anatole Tresch & Werner Keil · 2017-12-14 · Anatole Tresch Principal Consultant, Trivadis AG (Switzerland) Star Spec Lead JSR 354 Technical Architect, Lead Engineer PPMC Member

UC: Pluggable Config Backends

Classic:

Tamaya Configuration

17

Distributed: ZooKeeper Etcd ...

Classic Policy(PropertySources)

Myproject/bin/...Myproject/conf/server.xmlMyproject/conf/cluster.xmlMyproject/conf/security.xmlMyproject/lib/......

Unified Config API

Remote Policy(PropertySources)

???

Unified API for configuration access

Policies can be provided as jar-artifacts separately

Additional benefits: config documentation

Your Project

Page 18: Anatole Tresch & Werner Keil · 2017-12-14 · Anatole Tresch Principal Consultant, Trivadis AG (Switzerland) Star Spec Lead JSR 354 Technical Architect, Lead Engineer PPMC Member

UC: Enterprise Integration

18

Company X:Config SOAP

Myproject/bin/...Myproject/conf/server.xmlMyproject/conf/cluster.xmlMyproject/conf/security.xmlMyproject/lib/......

Company Z:Config Rest

Company Y:etcd

Company A:Legacy Config

Tamaya Configuration Classic Policy

(PropertySources)

Unified Config API

Config Integration(PropertySources)

Your Project

Page 19: Anatole Tresch & Werner Keil · 2017-12-14 · Anatole Tresch Principal Consultant, Trivadis AG (Switzerland) Star Spec Lead JSR 354 Technical Architect, Lead Engineer PPMC Member

19

Service Foo

Cache

TamayaConfiguration

TamayaConfiguration

Locations: file:${filedir} classpath:META-INF/defaults/ configuration.*

classpath:META-INF/${STAGE}/ configuration.*

url:http://myserver.int/cfg System properties Env. Properties

Formats: properties xml json yaml

Config Policy

<implements>

Define, implement and distribute CompanyWide Configuration Policy

Policy

Policy<implements>

UC: Enforceable Policies

Page 20: Anatole Tresch & Werner Keil · 2017-12-14 · Anatole Tresch Principal Consultant, Trivadis AG (Switzerland) Star Spec Lead JSR 354 Technical Architect, Lead Engineer PPMC Member

20

● Reinventing the wheel is daily business, leading to

● Higher Efforts in Enterprise Integration

● Configuration Redundancies and Inconsistencies

● Unclear or Complex Handling when remote Configuration should be

supported as well

● Make Projects Integration Raedy with Company Infrastructure

● Make your Configuration Backends Pluggable

Summary: Why we need Tamaya?

Page 21: Anatole Tresch & Werner Keil · 2017-12-14 · Anatole Tresch Principal Consultant, Trivadis AG (Switzerland) Star Spec Lead JSR 354 Technical Architect, Lead Engineer PPMC Member

The API

21

Page 22: Anatole Tresch & Werner Keil · 2017-12-14 · Anatole Tresch Principal Consultant, Trivadis AG (Switzerland) Star Spec Lead JSR 354 Technical Architect, Lead Engineer PPMC Member

Let's start simple!

22

● Add dependency org.apache.tamaya:core:1.0-incubating

● Add Config to META-INF/javaconfiguration.properties

● Use it!

Configuration config = ConfigurationProvider.getConfiguration();

String name = config.getOrDefault("name", "John");int ChildNum = config.get("childNum", int.class);

Page 23: Anatole Tresch & Werner Keil · 2017-12-14 · Anatole Tresch Principal Consultant, Trivadis AG (Switzerland) Star Spec Lead JSR 354 Technical Architect, Lead Engineer PPMC Member

ConfigurationProvider

23

public class ConfigurationProvider{

public static Configuration getConfiguration(); public static ConfigurationContext getConfigurationContext();

public static ConfigurationContextBuilder getConfigurationContextBuilder() public static void setConfigurationContext( ConfigurationContext context);}

Page 24: Anatole Tresch & Werner Keil · 2017-12-14 · Anatole Tresch Principal Consultant, Trivadis AG (Switzerland) Star Spec Lead JSR 354 Technical Architect, Lead Engineer PPMC Member

24

public interface Configuration{

String get(String key); String getOrDefault(String key, String defaultValue);

<T> T get(String key, Class<T> type); <T> T get(String key, TypeLiteral<T> type); <T> T getOrDefault(String key, Class<T> type, T defaultValue); <T> T getOrDefault(String key, TypeLiteral<T> type, T defaultValue);

Map<String,String> getProperties();

// Functional Extension Points Configuration with(ConfigOperator operator): <T> T query(ConfigQuery<T> query);}

Configuration

Page 25: Anatole Tresch & Werner Keil · 2017-12-14 · Anatole Tresch Principal Consultant, Trivadis AG (Switzerland) Star Spec Lead JSR 354 Technical Architect, Lead Engineer PPMC Member

Core Concepts

25

● Configuration provides properties ● built up by an ordered list of PropertySources

● SPI● PropertyConverter● CombinationPolicy● PropertyFilter

● Extensions (discussed later)

ConfigurationContext

PropertyFilters

PropertySource

PropertySource

PropertySource

PropertySource

Configuration

Com

bina

tionP

olic

yPropertyProviders<provides>

PropertyConverter

Page 26: Anatole Tresch & Werner Keil · 2017-12-14 · Anatole Tresch Principal Consultant, Trivadis AG (Switzerland) Star Spec Lead JSR 354 Technical Architect, Lead Engineer PPMC Member

Overriding Basics

26

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

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

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

Page 27: Anatole Tresch & Werner Keil · 2017-12-14 · Anatole Tresch Principal Consultant, Trivadis AG (Switzerland) Star Spec Lead JSR 354 Technical Architect, Lead Engineer PPMC Member

CombinationPolicy

27

list=a,b,c list{collection-type}=List

tamaya.ordinal=10 list=aa,bb

tamaya.ordinal=10 list=aa,bb,a,b,c list{collection-type}=List

Page 28: Anatole Tresch & Werner Keil · 2017-12-14 · Anatole Tresch Principal Consultant, Trivadis AG (Switzerland) Star Spec Lead JSR 354 Technical Architect, Lead Engineer PPMC Member

SPI: PropertySource PropertySourceProviderpublic interface PropertySource { static final String TAMAYA_ORDINAL = "tamaya.ordinal";

String getName(); int getOrdinal(); String get(String key); Map<String, String> getProperties();}

public interface PropertySourceProvider { Collection<PropertySource> getPropertySources();}

Page 29: Anatole Tresch & Werner Keil · 2017-12-14 · Anatole Tresch Principal Consultant, Trivadis AG (Switzerland) Star Spec Lead JSR 354 Technical Architect, Lead Engineer PPMC Member

Extension Modules

29

Page 30: Anatole Tresch & Werner Keil · 2017-12-14 · Anatole Tresch Principal Consultant, Trivadis AG (Switzerland) Star Spec Lead JSR 354 Technical Architect, Lead Engineer PPMC Member

Available Plugins

30

•Tamaya-inject: Configuration Injection and Templates

•Tamaya-resolver: Expression resolution, placeholders, dynamic values

•Tamaya-resources: Ant styled resource resolution

•Tamaya-format: Abstraction of a format, separating parsing from semantic mapping to

configuration

•Format Extensions: yaml*, json, ini, ...

•Tamaya-spring: Integration with Spring

•Tamaya-classloader-support: Managing Tamaya Services within Classloading Hierarchies

•Tamaya-cdi: Integration with CDI

•Tamaya-server: REST/JSON Configuration Server

•Tamaya-remote: Client PropertySource matching server component

•Tamaya-docs*: Configuration Documentation

•Tamaya-collections*: Collection Support

•...

* work in progress

Page 31: Anatole Tresch & Werner Keil · 2017-12-14 · Anatole Tresch Principal Consultant, Trivadis AG (Switzerland) Star Spec Lead JSR 354 Technical Architect, Lead Engineer PPMC Member

Planned Features

31

● Java EE: Configuring EE, where possible

● Karaf Integration

● Source Integrations:

● Commons-config

● Etcd

● Zookeeper

● ...

● Runtime Integrations:

● ???

Page 32: Anatole Tresch & Werner Keil · 2017-12-14 · Anatole Tresch Principal Consultant, Trivadis AG (Switzerland) Star Spec Lead JSR 354 Technical Architect, Lead Engineer PPMC Member

Configuration Injection

32

@ConfiguredType(defaultSections=”com.mycomp.tenantAdress”)public final class MyTenant{

private String name;

@ConfiguredProperty @DefaultValue(”2000”) private long customerId;

@ConfiguredProperty(keys={ ”privateAddress”,”businessAdress”,”[my.qualified.adress]” }) private String address; ...}

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

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

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

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

Page 33: Anatole Tresch & Werner Keil · 2017-12-14 · Anatole Tresch Principal Consultant, Trivadis AG (Switzerland) Star Spec Lead JSR 354 Technical Architect, Lead Engineer PPMC Member

Configuration Template

33

@ConfiguredType(defaultSections=”com.mycomp.tenantAdress”)public interface MyTenant{

public String getName();

@ConfiguredProperty @DefaultValue(”2000”) public long getCustomerId();

@ConfiguredProperty(keys={ ”privateAddress”,”businessAdress”,”[my.qualified.adress]” }) public String getAddress();

}

MyTenant t =ConfigurationInjection .getConfigurationInjector() .createTemplate(MyTenant.class);

MyTenant t =ConfigurationInjection .getConfigurationInjector() .createTemplate(MyTenant.class);

Page 34: Anatole Tresch & Werner Keil · 2017-12-14 · Anatole Tresch Principal Consultant, Trivadis AG (Switzerland) Star Spec Lead JSR 354 Technical Architect, Lead Engineer PPMC Member

Demo

DEMO

34

Page 35: Anatole Tresch & Werner Keil · 2017-12-14 · Anatole Tresch Principal Consultant, Trivadis AG (Switzerland) Star Spec Lead JSR 354 Technical Architect, Lead Engineer PPMC Member

Summary

35

Apache Tamaya Provides

• A Complete API based on Java SE 7, compatible with SE 6

• String key/value based thread-safe Configuration Model

• Support for Type-Safe Configuration Value Conversion

• Functional extension points

• Simple Filtering and Overrides

• Small footprint

• Extendible with plugins

Page 36: Anatole Tresch & Werner Keil · 2017-12-14 · Anatole Tresch Principal Consultant, Trivadis AG (Switzerland) Star Spec Lead JSR 354 Technical Architect, Lead Engineer PPMC Member

We need help

36

Apache Tamaya is great, but we need you...

• … using it!

• … asking for features!

• … envangelizing it!

• … loving it!

• … extending it!

• ...

Page 37: Anatole Tresch & Werner Keil · 2017-12-14 · Anatole Tresch Principal Consultant, Trivadis AG (Switzerland) Star Spec Lead JSR 354 Technical Architect, Lead Engineer PPMC Member

Links● Twitter: @tamayaconfig● Blog: http://javaeeconfig.blogspot.com ● Presentation by Mike Keith on JavaOne 2013: https://oracleus.activeevents.com/2013/connect/sessionDetail.ww?SESSION_ID=7755 ● Apache Deltaspike: http://deltaspike.apache.org ● Java Config Builder: https://github.com/TNG/config-builder ● Apache Commons Configuration: http://commons.apache.org/proper/commons-configuration/ ● Jfig: http://jfig.sourceforge.net/ ● Carbon Configuration: http://carbon.sourceforge.net/modules/core/docs/config/Usage.html ● Comparison on Carbon and Others: http://www.mail-archive.com/[email protected]/msg37597.html ● Spring Framework: http://projects.spring.io/spring-framework/● Owner: http://owner.aeonbits.org/

37

Page 38: Anatole Tresch & Werner Keil · 2017-12-14 · Anatole Tresch Principal Consultant, Trivadis AG (Switzerland) Star Spec Lead JSR 354 Technical Architect, Lead Engineer PPMC Member

Q&A

38

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