SlideShare ist ein Scribd-Unternehmen logo
1 von 65
Downloaden Sie, um offline zu lesen
BASEL BERN BRUGG DÜSSELDORF FRANKFURT A.M. FREIBURG I.BR. GENF
HAMBURG KOPENHAGEN LAUSANNE MÜNCHEN STUTTGART WIEN ZÜRICH
Configure Once,
run everyhere!
Configuration
with Apache
Tamaya
Configure once, run everywhere6.09.16
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
Configure once, run everywhere6.09.16
Agenda
3
●
Motivation
●
Requirements
●
The API
●
Configuration Backends
●
Demo
●
Extensions
Configure once, run everywhere6.09.16 4
Motivation
Configure once, run everywhere6.09.16 5
What is Configuration ?
Simple Key/value pairs?
Typed values?
Configure once, run everywhere6.09.16 6
When is Configuration useful?
Use Cases?
Configure once, run everywhere6.09.16 7
How is it stored?
Remotely or locally?
Classpath, file or ...?
Which format?
All of the above (=multiple sources) ?
Configure once, run everywhere6.09.16 8
When to configure?
Develpment time ?
Build/deployment time?
Startup?
Dynamic, anytime?
Configure once, run everywhere6.09.16 9
Configuration Lifecycle ?
Static ?
Refreshing ?
Changes triggered ?
Configure once, run everywhere6.09.16 10
Do I need a runtime ?
Java SE?
Java EE?
OSGI?
Bezeichnung Präsentation6.09.16
Requirements
Configure once, run everywhere6.09.16 12
●
Developer‘s Perspective
●
Architectural/Design Requirements
●
Operational Aspects
●
Other Aspects
Requirements
Configure once, run everywhere6.09.16 13
●
Easy to use.
●
Developers want defaults.
●
Developers don‘t care about the runtime (for configuration only).
●
Developers are the ultimate source of truth
●
Type Safety
Developer‘s Requirements
Configure once, run everywhere6.09.16
Architectural/Design Requirements
14
Decouple code that consumes configuration from
●
Backends Used
●
Storage Format
●
Distribution
●
Lifecycle and versioning
●
Security Aspects
Configure once, run everywhere6.09.16 15
●
Enable Transparency:
●
What configuration is available ?
●
What are the current values and which sources provided the value ?
●
Documentation
●
Manageable:
●
Configuration changes without redeployment or restart.
●
Solution must integrate with existing environment
Operational‘s Requirements
Configure once, run everywhere6.09.16 16
●
Support Access Constraints and Views
●
No accidential logging of secrets
●
Dynamic changes
●
Configuration Validation
Other Aspects
Bezeichnung Präsentation6.09.16
Accessing Configuration
The API
Configure once, run everywhere6.09.16 18
●
Leverage existing functionality where
useful
●
Only one uniform API for access on all platforms!
●
Defaults provided by developer during development
(no interaction with operations or external dependencies)
API Requirements
Configure once, run everywhere6.09.16 19
●
Environment Properties
●
System Properties
●
CLI arguments
●
Properties, xml-Properties
Existing Mechanisms
Configure once, run everywhere6.09.16 20
Dependencies - API & Core
<dependency>
    <groupId>org.apache.tamaya</groupId>
    <artifactId>tamaya­api</artifactId>
    <version>0.2­SNAPSHOT</version>
</dependency>
<dependency>
    <groupId>org.apache.tamaya</groupId>
    <artifactId>tamaya­core</artifactId>
    <version>0.2­SNAPSHOT</version>
</dependency> 
Configure once, run everywhere6.09.16
Programmatic API
21
●
Add dependency
org.apache.tamaya:core: 0.2-incubating
●
Add Config to META-INF/javaconfiguration.properties
●
GO!
Configuration config = 
                ConfigurationProvider.getConfiguration();
// single property access
String name = config.getOrDefault("name", "John");
int ChildNum = config.get("childNum", int.class);
// Multi property access
Map<String,String> properties = config.getProperties();
// Templates (provided by extension)
MyConfig config = ConfigurationInjection.getConfigurationInjector()
                    .getConfig(MyConfig.class);
Configure once, run everywhere6.09.16 22
Dependencies – Injection SE
<dependency>
    <groupId>org.apache.tamaya.ext</groupId>
    <artifactId>tamaya­injection­api</artifactId>
    <version>0.2­SNAPSHOT</version>
</dependency>
<dependency>
    <groupId>org.apache.tamaya.ext</groupId>
    <artifactId>tamaya­injection</artifactId>
    <version>0.2­SNAPSHOT</version>
</dependency> 
Configure once, run everywhere6.09.16 23
@Config(value=„admin.server“, defaultValue=“127.0.0.1“)
private String server;
@Config(value=“admin.port“, 
               defaultValue=“8080“)
private int port;
@Config(value=“admin.connections“)
private int connections = 5;
@Config(„address“)
private Address address;
MyTenant t = new MyTenant();
ConfigurationInjection
    .getConfigurationInjector()
    .configure(t);
MyTenant t = new MyTenant();
ConfigurationInjection
    .getConfigurationInjector()
    .configure(t);
Bezeichnung Präsentation6.09.16
Configuration Backends
Configure once, run everywhere6.09.16 25
●
Support existing mechanisms OOTB
●
Provide a simple SPI for (multiple) property sources
●
Define a mechanism to prioritize different property sources
●
Allow different strategies to combine values
●
Support Filtering
●
Support Type Conversion
Configuration Backends
Configure once, run everywhere6.09.16 26
So what is a property source ?
Configure once, run everywhere6.09.16
PropertySource
27
●
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();
...
}
Configure once, run everywhere6.09.16 28
Are there predefined property sources ?
Configure once, run everywhere6.09.16 29
Of course.
Configure once, run everywhere6.09.16 30
●
System & Environment Properties
●
(CLI Arguments)
●
Files:
${configDir}/*.properties
●
Classpath Resources:
/META­INF/javaconfiguration.properties
Configure once, run everywhere6.09.16 31
And how about remote configuration…?
Especially with Containers?
Configure once, run everywhere6.09.16 32
●
Configuration is read from remote source, e.g.
●
Etcd cluster
●
Consul cluster
●
Any Web URL
●
...
Remote configuration
Service Location Layer
Configuration Cluster
<dependency>
    <groupId>org.apache.tamaya.ext</groupId>
    <artifactId>tamaya­etcd</artifactId>
    <version>...</version>
</dependency>
Configure once, run everywhere6.09.16 33
●
In fact, it doesn‘t matter ! Configure once, run everywhere !
What kind of runtime I need ?
Configuration Cluster
Java EE
Tamaya
Java SE
Tamaya
Tamaya
Vertx.io
Tamaya
TomEE
Tamaya
Spring
Tamaya
OSGI
Configure once, run everywhere6.09.16 34
●
Configuration on deployment by environment properties:
docker run ­e stage prod  ­d ­n MyApp user/image
●
or Dockerfile/Docker Image:
FROM java:8­jre
...
ENV stage prod
Excourse: Configuring Containers
Configure once, run everywhere6.09.16 35
How to add custom configuration ?
Configure once, run everywhere6.09.16 36
Other files...
Configure once, run everywhere6.09.16 37
Or resources...
Configure once, run everywhere6.09.16 38
My self-written super fancy config database ?
Configure once, run everywhere6.09.16 39
Whatever I like ?
Configure once, run everywhere6.09.16 40
Use the SPI !
Configure once, run everywhere6.09.16 41
Property sources
●
Mostly map to exact one file, resource or backend
●
Have a unique name
●
Must be thread safe
●
Can be dynamic
●
Provide an ordinal
●
Can be scannable
PropertySource
Configure once, run everywhere6.09.16
PropertySource – Example
42
●
Add dependency
public class MyPropertySource extends BasePropertySource{
    private Map<String,String> props = new HashMap<>();
    public SimplePropertySource() throws IOException {
        URL url = getClass().getClassLoader().getResource(
                   “/META­INF/myFancyConfig.xml“);
        // read config properties into props
        ...
    }
    @Override
    public String getName() { return “/META­INF/myFancyConfig.xml“; };
    @Override
    public Map<String, String> getProperties() { return props; }
}
Configure once, run everywhere6.09.16
PropertySource - Registration
43
●
Add dependency●
By default, register it using the java.util.ServiceLoader
     → /META­INF/services/org.apache.tamaya.spi.PropertySource
   MyPropertySource
Configure once, run everywhere6.09.16 44
Property source provider
●
Allow dynamic registration of multiple property sources
●
E.g. all files found in a config directory
●
Are evaluated once and then discarded
●
Are also registered using the ServiceLoader.
PropertySource Provider
Configure once, run everywhere6.09.16
PropertySourceProvider
45
●
Add dependencypublic interface PropertySourceProvider{
    
    public Collection<PropertySource> getPropertySources();
}
Configure once, run everywhere6.09.16 46
Furthermore Tamaya uses
●
Filters for filtering values evaluated (remove, map, change)
●
Converters for converting String values to non-String types
●
A ValueCombinationPolicy
●
determines how values evaluated are combined to a final value
(defaults to overriding)
More SPI artifacts
Configure once, run everywhere6.09.16 47
And how these pieces all fit together ?
Configure once, run everywhere6.09.16
Apache Tamaya in 120 seconds...
48
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
Configure once, run everywhere6.09.16 49
So we have:
files, resources, sys- and env-properties
& an SPI to implement and register them ?
Configure once, run everywhere6.09.16 50
What else do we need ?
Configure once, run everywhere6.09.16 51
Easy Configuration:
„Meta“-Configuration !
Configure once, run everywhere6.09.16 52
●
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 !
Configure once, run everywhere6.09.16 53
<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 !
Bezeichnung Präsentation6.09.16
Demo
Configure once, run everywhere6.09.16
Demo
DEMO
55
●
1 Microservice
●
Running on Java EE 7 (Wildfly)
●
Multiple Configuration Sources:
●
Environment Properties
●
System Properties
●
Classpath
●
Files
●
Etcd Server
Bezeichnung Präsentation6.09.16
There is more!
Tamaya Extensions
Configure once, run everywhere6.09.16 57
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>
Configure once, run everywhere6.09.16 58
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>
Configure once, run everywhere6.09.16
And more: a topic on its own!
59
●
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)
●
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
●
Tamaya-resolver: Expression resolution, placeholders, dynamic values
●
Tamaya-resources: Ant styled resource resolution
•...
* experimental
Bezeichnung Präsentation6.09.16
Summary
Configure once, run everywhere6.09.16
Summarizing...
61
●
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 ?
Configure once, run everywhere6.09.16 62
You like it ?
Configure once, run everywhere6.09.16 63
„It is your turn !“
● Use it
● Evangelize it
● Join the force!
Configure once, run everywhere6.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/commons-dev@jakarta.apache.org/msg37597.html
●
Spring Framework: http://projects.spring.io/spring-framework/
●
Owner: http://owner.aeonbits.org/
64
Configure once, run everywhere6.09.16
Q&A
65
Thank you!
@atsticks
anatole@apache.org
Anatole Tresch
Trivadis AG
Principal Consultant
Twitter/Google+: @atsticks
anatole@apache.org
anatole.tresch@trivadis.com

Weitere ähnliche Inhalte

Was ist angesagt?

Ansible module development 101
Ansible module development 101Ansible module development 101
Ansible module development 101yfauser
 
openQA hands on with openSUSE Leap 42.1 - openSUSE.Asia Summit ID 2016
openQA hands on with openSUSE Leap 42.1 - openSUSE.Asia Summit ID 2016openQA hands on with openSUSE Leap 42.1 - openSUSE.Asia Summit ID 2016
openQA hands on with openSUSE Leap 42.1 - openSUSE.Asia Summit ID 2016Ben Chou
 
Puppet Continuous Integration with PE and GitLab
Puppet Continuous Integration with PE and GitLabPuppet Continuous Integration with PE and GitLab
Puppet Continuous Integration with PE and GitLabAlessandro Franceschi
 
Continuous Integration and DevOps with Open Build Service(OBS)
Continuous Integration and DevOps with Open Build Service(OBS)Continuous Integration and DevOps with Open Build Service(OBS)
Continuous Integration and DevOps with Open Build Service(OBS)Ralf Dannert
 
Test-Driven Infrastructure with Ansible, Test Kitchen, Serverspec and RSpec
Test-Driven Infrastructure with Ansible, Test Kitchen, Serverspec and RSpecTest-Driven Infrastructure with Ansible, Test Kitchen, Serverspec and RSpec
Test-Driven Infrastructure with Ansible, Test Kitchen, Serverspec and RSpecMartin Etmajer
 
Puppet for SysAdmins
Puppet for SysAdminsPuppet for SysAdmins
Puppet for SysAdminsPuppet
 
Ansible is the simplest way to automate. SymfonyCafe, 2015
Ansible is the simplest way to automate. SymfonyCafe, 2015Ansible is the simplest way to automate. SymfonyCafe, 2015
Ansible is the simplest way to automate. SymfonyCafe, 2015Alex S
 
Ansible automation tool with modules
Ansible automation tool with modulesAnsible automation tool with modules
Ansible automation tool with modulesmohamedmoharam
 
Developing IT infrastructures with Puppet
Developing IT infrastructures with PuppetDeveloping IT infrastructures with Puppet
Developing IT infrastructures with PuppetAlessandro Franceschi
 
Puppet for dummies - ZendCon 2011 Edition
Puppet for dummies - ZendCon 2011 EditionPuppet for dummies - ZendCon 2011 Edition
Puppet for dummies - ZendCon 2011 EditionJoshua Thijssen
 
Oscar: Rapid Iteration with Vagrant and Puppet Enterprise - PuppetConf 2013
Oscar: Rapid Iteration with Vagrant and Puppet Enterprise - PuppetConf 2013Oscar: Rapid Iteration with Vagrant and Puppet Enterprise - PuppetConf 2013
Oscar: Rapid Iteration with Vagrant and Puppet Enterprise - PuppetConf 2013Puppet
 
Running Ruby on Solaris (RubyKaigi 2015, 12/Dec/2015)
Running Ruby on Solaris (RubyKaigi 2015, 12/Dec/2015)Running Ruby on Solaris (RubyKaigi 2015, 12/Dec/2015)
Running Ruby on Solaris (RubyKaigi 2015, 12/Dec/2015)ngotogenome
 
London Hashicorp Meetup #8 - Testing Programmable Infrastructure By Matt Long
London Hashicorp Meetup #8 -  Testing Programmable Infrastructure By Matt LongLondon Hashicorp Meetup #8 -  Testing Programmable Infrastructure By Matt Long
London Hashicorp Meetup #8 - Testing Programmable Infrastructure By Matt LongOpenCredo
 
[Community Open Camp] 給 PHP 開發者的 VS Code 指南
[Community Open Camp] 給 PHP 開發者的 VS Code 指南[Community Open Camp] 給 PHP 開發者的 VS Code 指南
[Community Open Camp] 給 PHP 開發者的 VS Code 指南Shengyou Fan
 
From SaltStack to Puppet and beyond...
From SaltStack to Puppet and beyond...From SaltStack to Puppet and beyond...
From SaltStack to Puppet and beyond...Yury Bushmelev
 
Automating with ansible (Part B)
Automating with ansible (Part B)Automating with ansible (Part B)
Automating with ansible (Part B)iman darabi
 
Vagrant move over, here is Docker
Vagrant move over, here is DockerVagrant move over, here is Docker
Vagrant move over, here is DockerNick Belhomme
 

Was ist angesagt? (20)

Ansible module development 101
Ansible module development 101Ansible module development 101
Ansible module development 101
 
openQA hands on with openSUSE Leap 42.1 - openSUSE.Asia Summit ID 2016
openQA hands on with openSUSE Leap 42.1 - openSUSE.Asia Summit ID 2016openQA hands on with openSUSE Leap 42.1 - openSUSE.Asia Summit ID 2016
openQA hands on with openSUSE Leap 42.1 - openSUSE.Asia Summit ID 2016
 
Puppet evolutions
Puppet evolutionsPuppet evolutions
Puppet evolutions
 
Puppet Continuous Integration with PE and GitLab
Puppet Continuous Integration with PE and GitLabPuppet Continuous Integration with PE and GitLab
Puppet Continuous Integration with PE and GitLab
 
Continuous Integration and DevOps with Open Build Service(OBS)
Continuous Integration and DevOps with Open Build Service(OBS)Continuous Integration and DevOps with Open Build Service(OBS)
Continuous Integration and DevOps with Open Build Service(OBS)
 
Test-Driven Infrastructure with Ansible, Test Kitchen, Serverspec and RSpec
Test-Driven Infrastructure with Ansible, Test Kitchen, Serverspec and RSpecTest-Driven Infrastructure with Ansible, Test Kitchen, Serverspec and RSpec
Test-Driven Infrastructure with Ansible, Test Kitchen, Serverspec and RSpec
 
Puppet for SysAdmins
Puppet for SysAdminsPuppet for SysAdmins
Puppet for SysAdmins
 
Ansible testing
Ansible   testingAnsible   testing
Ansible testing
 
Ansible is the simplest way to automate. SymfonyCafe, 2015
Ansible is the simplest way to automate. SymfonyCafe, 2015Ansible is the simplest way to automate. SymfonyCafe, 2015
Ansible is the simplest way to automate. SymfonyCafe, 2015
 
Ansible automation tool with modules
Ansible automation tool with modulesAnsible automation tool with modules
Ansible automation tool with modules
 
Developing IT infrastructures with Puppet
Developing IT infrastructures with PuppetDeveloping IT infrastructures with Puppet
Developing IT infrastructures with Puppet
 
Puppet for dummies - ZendCon 2011 Edition
Puppet for dummies - ZendCon 2011 EditionPuppet for dummies - ZendCon 2011 Edition
Puppet for dummies - ZendCon 2011 Edition
 
Puppet meetup testing
Puppet meetup testingPuppet meetup testing
Puppet meetup testing
 
Oscar: Rapid Iteration with Vagrant and Puppet Enterprise - PuppetConf 2013
Oscar: Rapid Iteration with Vagrant and Puppet Enterprise - PuppetConf 2013Oscar: Rapid Iteration with Vagrant and Puppet Enterprise - PuppetConf 2013
Oscar: Rapid Iteration with Vagrant and Puppet Enterprise - PuppetConf 2013
 
Running Ruby on Solaris (RubyKaigi 2015, 12/Dec/2015)
Running Ruby on Solaris (RubyKaigi 2015, 12/Dec/2015)Running Ruby on Solaris (RubyKaigi 2015, 12/Dec/2015)
Running Ruby on Solaris (RubyKaigi 2015, 12/Dec/2015)
 
London Hashicorp Meetup #8 - Testing Programmable Infrastructure By Matt Long
London Hashicorp Meetup #8 -  Testing Programmable Infrastructure By Matt LongLondon Hashicorp Meetup #8 -  Testing Programmable Infrastructure By Matt Long
London Hashicorp Meetup #8 - Testing Programmable Infrastructure By Matt Long
 
[Community Open Camp] 給 PHP 開發者的 VS Code 指南
[Community Open Camp] 給 PHP 開發者的 VS Code 指南[Community Open Camp] 給 PHP 開發者的 VS Code 指南
[Community Open Camp] 給 PHP 開發者的 VS Code 指南
 
From SaltStack to Puppet and beyond...
From SaltStack to Puppet and beyond...From SaltStack to Puppet and beyond...
From SaltStack to Puppet and beyond...
 
Automating with ansible (Part B)
Automating with ansible (Part B)Automating with ansible (Part B)
Automating with ansible (Part B)
 
Vagrant move over, here is Docker
Vagrant move over, here is DockerVagrant move over, here is Docker
Vagrant move over, here is Docker
 

Andere mochten auch

Andere mochten auch (8)

Alles Docker oder Was ?
Alles Docker oder Was ?Alles Docker oder Was ?
Alles Docker oder Was ?
 
Going Resilient...
Going Resilient...Going Resilient...
Going Resilient...
 
Escalando API's com NodeJS, Docker e RabbitMQ
Escalando API's com NodeJS, Docker e RabbitMQEscalando API's com NodeJS, Docker e RabbitMQ
Escalando API's com NodeJS, Docker e RabbitMQ
 
Docker Para Maiores - GDG Cabreúva
Docker Para Maiores - GDG CabreúvaDocker Para Maiores - GDG Cabreúva
Docker Para Maiores - GDG Cabreúva
 
VSphere Integrated Containers v3.0
VSphere Integrated Containers v3.0VSphere Integrated Containers v3.0
VSphere Integrated Containers v3.0
 
Making Linux do Hard Real-time
Making Linux do Hard Real-timeMaking Linux do Hard Real-time
Making Linux do Hard Real-time
 
Linux command ppt
Linux command pptLinux command ppt
Linux command ppt
 
Making Linux do Hard Real-time
Making Linux do Hard Real-timeMaking Linux do Hard Real-time
Making Linux do Hard Real-time
 

Ähnlich wie Configure Once, Run Everywhere with Apache Tamaya

MobileConf 2021 Slides: Let's build macOS CLI Utilities using Swift
MobileConf 2021 Slides:  Let's build macOS CLI Utilities using SwiftMobileConf 2021 Slides:  Let's build macOS CLI Utilities using Swift
MobileConf 2021 Slides: Let's build macOS CLI Utilities using SwiftDiego Freniche Brito
 
Dependencies Managers in C/C++. Using stdcpp 2014
Dependencies Managers in C/C++. Using stdcpp 2014Dependencies Managers in C/C++. Using stdcpp 2014
Dependencies Managers in C/C++. Using stdcpp 2014biicode
 
OpenSouthCode 2016 - Accenture DevOps Platform 2016-05-07
OpenSouthCode 2016  - Accenture DevOps Platform 2016-05-07OpenSouthCode 2016  - Accenture DevOps Platform 2016-05-07
OpenSouthCode 2016 - Accenture DevOps Platform 2016-05-07Jorge Hidalgo
 
Django deployment with PaaS
Django deployment with PaaSDjango deployment with PaaS
Django deployment with PaaSAppsembler
 
Docker 0.11 at MaxCDN meetup in Los Angeles
Docker 0.11 at MaxCDN meetup in Los AngelesDocker 0.11 at MaxCDN meetup in Los Angeles
Docker 0.11 at MaxCDN meetup in Los AngelesJérôme Petazzoni
 
Extending OpenShift Origin: Build Your Own Cartridge with Bill DeCoste of Red...
Extending OpenShift Origin: Build Your Own Cartridge with Bill DeCoste of Red...Extending OpenShift Origin: Build Your Own Cartridge with Bill DeCoste of Red...
Extending OpenShift Origin: Build Your Own Cartridge with Bill DeCoste of Red...OpenShift Origin
 
Dynamic tracing of MariaDB on Linux - problems and solutions (MariaDB Server ...
Dynamic tracing of MariaDB on Linux - problems and solutions (MariaDB Server ...Dynamic tracing of MariaDB on Linux - problems and solutions (MariaDB Server ...
Dynamic tracing of MariaDB on Linux - problems and solutions (MariaDB Server ...Valeriy Kravchuk
 
Kubernetes for the PHP developer
Kubernetes for the PHP developerKubernetes for the PHP developer
Kubernetes for the PHP developerPaul Czarkowski
 
What’s new in cas 4.2
What’s new in cas 4.2 What’s new in cas 4.2
What’s new in cas 4.2 Misagh Moayyed
 
Workflow story: Theory versus practice in Large Enterprises
Workflow story: Theory versus practice in Large EnterprisesWorkflow story: Theory versus practice in Large Enterprises
Workflow story: Theory versus practice in Large EnterprisesPuppet
 
Workflow story: Theory versus Practice in large enterprises by Marcin Piebiak
Workflow story: Theory versus Practice in large enterprises by Marcin PiebiakWorkflow story: Theory versus Practice in large enterprises by Marcin Piebiak
Workflow story: Theory versus Practice in large enterprises by Marcin PiebiakNETWAYS
 
SPACK: A Package Manager for Supercomputers, Linux, and MacOS
SPACK: A Package Manager for Supercomputers, Linux, and MacOSSPACK: A Package Manager for Supercomputers, Linux, and MacOS
SPACK: A Package Manager for Supercomputers, Linux, and MacOSinside-BigData.com
 
Splunk n-box-splunk conf-2017
Splunk n-box-splunk conf-2017Splunk n-box-splunk conf-2017
Splunk n-box-splunk conf-2017Mohamad Hassan
 
OpenNebula, the foreman and CentOS play nice, too
OpenNebula, the foreman and CentOS play nice, tooOpenNebula, the foreman and CentOS play nice, too
OpenNebula, the foreman and CentOS play nice, tooinovex GmbH
 
Riga Dev Day - Automated Android Continuous Integration
Riga Dev Day - Automated Android Continuous IntegrationRiga Dev Day - Automated Android Continuous Integration
Riga Dev Day - Automated Android Continuous IntegrationNicolas Fränkel
 
Using R on High Performance Computers
Using R on High Performance ComputersUsing R on High Performance Computers
Using R on High Performance ComputersDave Hiltbrand
 
Meetup 2022 - APIs with Quarkus.pdf
Meetup 2022 - APIs with Quarkus.pdfMeetup 2022 - APIs with Quarkus.pdf
Meetup 2022 - APIs with Quarkus.pdfLuca Mattia Ferrari
 
Orchestrated Functional Testing with Puppet-spec and Mspectator - PuppetConf ...
Orchestrated Functional Testing with Puppet-spec and Mspectator - PuppetConf ...Orchestrated Functional Testing with Puppet-spec and Mspectator - PuppetConf ...
Orchestrated Functional Testing with Puppet-spec and Mspectator - PuppetConf ...Puppet
 

Ähnlich wie Configure Once, Run Everywhere with Apache Tamaya (20)

MobileConf 2021 Slides: Let's build macOS CLI Utilities using Swift
MobileConf 2021 Slides:  Let's build macOS CLI Utilities using SwiftMobileConf 2021 Slides:  Let's build macOS CLI Utilities using Swift
MobileConf 2021 Slides: Let's build macOS CLI Utilities using Swift
 
Dependencies Managers in C/C++. Using stdcpp 2014
Dependencies Managers in C/C++. Using stdcpp 2014Dependencies Managers in C/C++. Using stdcpp 2014
Dependencies Managers in C/C++. Using stdcpp 2014
 
OpenSouthCode 2016 - Accenture DevOps Platform 2016-05-07
OpenSouthCode 2016  - Accenture DevOps Platform 2016-05-07OpenSouthCode 2016  - Accenture DevOps Platform 2016-05-07
OpenSouthCode 2016 - Accenture DevOps Platform 2016-05-07
 
Django deployment with PaaS
Django deployment with PaaSDjango deployment with PaaS
Django deployment with PaaS
 
Docker 0.11 at MaxCDN meetup in Los Angeles
Docker 0.11 at MaxCDN meetup in Los AngelesDocker 0.11 at MaxCDN meetup in Los Angeles
Docker 0.11 at MaxCDN meetup in Los Angeles
 
Extending OpenShift Origin: Build Your Own Cartridge with Bill DeCoste of Red...
Extending OpenShift Origin: Build Your Own Cartridge with Bill DeCoste of Red...Extending OpenShift Origin: Build Your Own Cartridge with Bill DeCoste of Red...
Extending OpenShift Origin: Build Your Own Cartridge with Bill DeCoste of Red...
 
Dynamic tracing of MariaDB on Linux - problems and solutions (MariaDB Server ...
Dynamic tracing of MariaDB on Linux - problems and solutions (MariaDB Server ...Dynamic tracing of MariaDB on Linux - problems and solutions (MariaDB Server ...
Dynamic tracing of MariaDB on Linux - problems and solutions (MariaDB Server ...
 
Kubernetes for the PHP developer
Kubernetes for the PHP developerKubernetes for the PHP developer
Kubernetes for the PHP developer
 
What’s new in cas 4.2
What’s new in cas 4.2 What’s new in cas 4.2
What’s new in cas 4.2
 
Workflow story: Theory versus practice in Large Enterprises
Workflow story: Theory versus practice in Large EnterprisesWorkflow story: Theory versus practice in Large Enterprises
Workflow story: Theory versus practice in Large Enterprises
 
Workflow story: Theory versus Practice in large enterprises by Marcin Piebiak
Workflow story: Theory versus Practice in large enterprises by Marcin PiebiakWorkflow story: Theory versus Practice in large enterprises by Marcin Piebiak
Workflow story: Theory versus Practice in large enterprises by Marcin Piebiak
 
SPACK: A Package Manager for Supercomputers, Linux, and MacOS
SPACK: A Package Manager for Supercomputers, Linux, and MacOSSPACK: A Package Manager for Supercomputers, Linux, and MacOS
SPACK: A Package Manager for Supercomputers, Linux, and MacOS
 
Splunk n-box-splunk conf-2017
Splunk n-box-splunk conf-2017Splunk n-box-splunk conf-2017
Splunk n-box-splunk conf-2017
 
OpenNebula, the foreman and CentOS play nice, too
OpenNebula, the foreman and CentOS play nice, tooOpenNebula, the foreman and CentOS play nice, too
OpenNebula, the foreman and CentOS play nice, too
 
Riga Dev Day - Automated Android Continuous Integration
Riga Dev Day - Automated Android Continuous IntegrationRiga Dev Day - Automated Android Continuous Integration
Riga Dev Day - Automated Android Continuous Integration
 
Using R on High Performance Computers
Using R on High Performance ComputersUsing R on High Performance Computers
Using R on High Performance Computers
 
Meetup 2022 - APIs with Quarkus.pdf
Meetup 2022 - APIs with Quarkus.pdfMeetup 2022 - APIs with Quarkus.pdf
Meetup 2022 - APIs with Quarkus.pdf
 
Ansible intro
Ansible introAnsible intro
Ansible intro
 
Orchestrated Functional Testing with Puppet-spec and Mspectator - PuppetConf ...
Orchestrated Functional Testing with Puppet-spec and Mspectator - PuppetConf ...Orchestrated Functional Testing with Puppet-spec and Mspectator - PuppetConf ...
Orchestrated Functional Testing with Puppet-spec and Mspectator - PuppetConf ...
 
Introducing Ansible
Introducing AnsibleIntroducing Ansible
Introducing Ansible
 

Mehr von Anatole Tresch

Jsr382: Konfiguration in Java
Jsr382: Konfiguration in JavaJsr382: Konfiguration in Java
Jsr382: Konfiguration in JavaAnatole Tresch
 
Wie man Applikationen nicht bauen sollte...
Wie man Applikationen nicht bauen sollte...Wie man Applikationen nicht bauen sollte...
Wie man Applikationen nicht bauen sollte...Anatole Tresch
 
The Gib Five - Modern IT Architecture
The Gib Five - Modern IT ArchitectureThe Gib Five - Modern IT Architecture
The Gib Five - Modern IT ArchitectureAnatole Tresch
 
The Big Five - IT Architektur Heute
The Big Five - IT Architektur HeuteThe Big Five - IT Architektur Heute
The Big Five - IT Architektur HeuteAnatole Tresch
 
Disruption is Change is Future
Disruption is Change is FutureDisruption is Change is Future
Disruption is Change is FutureAnatole Tresch
 
Configuration with Microprofile and Apache Tamaya
Configuration with Microprofile and Apache TamayaConfiguration with Microprofile and Apache Tamaya
Configuration with Microprofile and Apache TamayaAnatole Tresch
 
Configuration beyond Java EE 8
Configuration beyond Java EE 8Configuration beyond Java EE 8
Configuration beyond Java EE 8Anatole Tresch
 
Configuration with Apache Tamaya
Configuration with Apache TamayaConfiguration with Apache Tamaya
Configuration with Apache TamayaAnatole Tresch
 
Wie Monolithen für die Zukuft trimmen
Wie Monolithen für die Zukuft trimmenWie Monolithen für die Zukuft trimmen
Wie Monolithen für die Zukuft trimmenAnatole Tresch
 
Configure Your Projects with Apache Tamaya
Configure Your Projects with Apache TamayaConfigure Your Projects with Apache Tamaya
Configure Your Projects with Apache TamayaAnatole Tresch
 
JSR 354 Hackday - What you can do...
JSR 354 Hackday - What you can do...JSR 354 Hackday - What you can do...
JSR 354 Hackday - What you can do...Anatole Tresch
 
Legacy Renewal of Central Framework in the Enterprise
Legacy Renewal of Central Framework in the EnterpriseLegacy Renewal of Central Framework in the Enterprise
Legacy Renewal of Central Framework in the EnterpriseAnatole Tresch
 
Go for the Money: eine Einführung in JSR 354 - Java aktuell 2014 - Anatole Tr...
Go for the Money: eine Einführung in JSR 354 - Java aktuell 2014 - Anatole Tr...Go for the Money: eine Einführung in JSR 354 - Java aktuell 2014 - Anatole Tr...
Go for the Money: eine Einführung in JSR 354 - Java aktuell 2014 - Anatole Tr...Anatole Tresch
 
A first Draft to Java Configuration
A first Draft to Java ConfigurationA first Draft to Java Configuration
A first Draft to Java ConfigurationAnatole Tresch
 
Go for the Money - JSR 354
Go for the Money - JSR 354Go for the Money - JSR 354
Go for the Money - JSR 354Anatole Tresch
 

Mehr von Anatole Tresch (18)

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
 
Configuration with Microprofile and Apache Tamaya
Configuration with Microprofile and Apache TamayaConfiguration with Microprofile and Apache Tamaya
Configuration with Microprofile and Apache Tamaya
 
Configuration beyond Java EE 8
Configuration beyond Java EE 8Configuration beyond Java EE 8
Configuration beyond Java EE 8
 
Configuration with Apache Tamaya
Configuration with Apache TamayaConfiguration with Apache Tamaya
Configuration with Apache Tamaya
 
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
 
Configure Your Projects with Apache Tamaya
Configure Your Projects with Apache TamayaConfigure Your Projects with Apache Tamaya
Configure Your Projects with Apache Tamaya
 
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...
 
A first Draft to Java Configuration
A first Draft to Java ConfigurationA first Draft to Java Configuration
A first Draft to Java Configuration
 
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
 

Kürzlich hochgeladen

5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdfWave PLM
 
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AISyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AIABDERRAOUF MEHENNI
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfkalichargn70th171
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Modelsaagamshah0812
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsJhone kinadey
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...Health
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providermohitmore19
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...harshavardhanraghave
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Steffen Staab
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...panagenda
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...OnePlan Solutions
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionSolGuruz
 
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️anilsa9823
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsAlberto González Trastoy
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerThousandEyes
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsArshad QA
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...MyIntelliSource, Inc.
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...kellynguyen01
 

Kürzlich hochgeladen (20)

5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf
 
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AISyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS LiveVip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with Precision
 
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
 

Configure Once, Run Everywhere with Apache Tamaya

  • 1. BASEL BERN BRUGG DÜSSELDORF FRANKFURT A.M. FREIBURG I.BR. GENF HAMBURG KOPENHAGEN LAUSANNE MÜNCHEN STUTTGART WIEN ZÜRICH Configure Once, run everyhere! Configuration with Apache Tamaya
  • 2. Configure once, run everywhere6.09.16 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. Configure once, run everywhere6.09.16 Agenda 3 ● Motivation ● Requirements ● The API ● Configuration Backends ● Demo ● Extensions
  • 4. Configure once, run everywhere6.09.16 4 Motivation
  • 5. Configure once, run everywhere6.09.16 5 What is Configuration ? Simple Key/value pairs? Typed values?
  • 6. Configure once, run everywhere6.09.16 6 When is Configuration useful? Use Cases?
  • 7. Configure once, run everywhere6.09.16 7 How is it stored? Remotely or locally? Classpath, file or ...? Which format? All of the above (=multiple sources) ?
  • 8. Configure once, run everywhere6.09.16 8 When to configure? Develpment time ? Build/deployment time? Startup? Dynamic, anytime?
  • 9. Configure once, run everywhere6.09.16 9 Configuration Lifecycle ? Static ? Refreshing ? Changes triggered ?
  • 10. Configure once, run everywhere6.09.16 10 Do I need a runtime ? Java SE? Java EE? OSGI?
  • 12. Configure once, run everywhere6.09.16 12 ● Developer‘s Perspective ● Architectural/Design Requirements ● Operational Aspects ● Other Aspects Requirements
  • 13. Configure once, run everywhere6.09.16 13 ● Easy to use. ● Developers want defaults. ● Developers don‘t care about the runtime (for configuration only). ● Developers are the ultimate source of truth ● Type Safety Developer‘s Requirements
  • 14. Configure once, run everywhere6.09.16 Architectural/Design Requirements 14 Decouple code that consumes configuration from ● Backends Used ● Storage Format ● Distribution ● Lifecycle and versioning ● Security Aspects
  • 15. Configure once, run everywhere6.09.16 15 ● Enable Transparency: ● What configuration is available ? ● What are the current values and which sources provided the value ? ● Documentation ● Manageable: ● Configuration changes without redeployment or restart. ● Solution must integrate with existing environment Operational‘s Requirements
  • 16. Configure once, run everywhere6.09.16 16 ● Support Access Constraints and Views ● No accidential logging of secrets ● Dynamic changes ● Configuration Validation Other Aspects
  • 18. Configure once, run everywhere6.09.16 18 ● Leverage existing functionality where useful ● Only one uniform API for access on all platforms! ● Defaults provided by developer during development (no interaction with operations or external dependencies) API Requirements
  • 19. Configure once, run everywhere6.09.16 19 ● Environment Properties ● System Properties ● CLI arguments ● Properties, xml-Properties Existing Mechanisms
  • 20. Configure once, run everywhere6.09.16 20 Dependencies - API & Core <dependency>     <groupId>org.apache.tamaya</groupId>     <artifactId>tamaya­api</artifactId>     <version>0.2­SNAPSHOT</version> </dependency> <dependency>     <groupId>org.apache.tamaya</groupId>     <artifactId>tamaya­core</artifactId>     <version>0.2­SNAPSHOT</version> </dependency> 
  • 21. Configure once, run everywhere6.09.16 Programmatic API 21 ● Add dependency org.apache.tamaya:core: 0.2-incubating ● Add Config to META-INF/javaconfiguration.properties ● GO! Configuration config =                  ConfigurationProvider.getConfiguration(); // single property access String name = config.getOrDefault("name", "John"); int ChildNum = config.get("childNum", int.class); // Multi property access Map<String,String> properties = config.getProperties(); // Templates (provided by extension) MyConfig config = ConfigurationInjection.getConfigurationInjector()                     .getConfig(MyConfig.class);
  • 22. Configure once, run everywhere6.09.16 22 Dependencies – Injection SE <dependency>     <groupId>org.apache.tamaya.ext</groupId>     <artifactId>tamaya­injection­api</artifactId>     <version>0.2­SNAPSHOT</version> </dependency> <dependency>     <groupId>org.apache.tamaya.ext</groupId>     <artifactId>tamaya­injection</artifactId>     <version>0.2­SNAPSHOT</version> </dependency> 
  • 23. Configure once, run everywhere6.09.16 23 @Config(value=„admin.server“, defaultValue=“127.0.0.1“) private String server; @Config(value=“admin.port“,                 defaultValue=“8080“) private int port; @Config(value=“admin.connections“) private int connections = 5; @Config(„address“) private Address address; MyTenant t = new MyTenant(); ConfigurationInjection     .getConfigurationInjector()     .configure(t); MyTenant t = new MyTenant(); ConfigurationInjection     .getConfigurationInjector()     .configure(t);
  • 25. Configure once, run everywhere6.09.16 25 ● Support existing mechanisms OOTB ● Provide a simple SPI for (multiple) property sources ● Define a mechanism to prioritize different property sources ● Allow different strategies to combine values ● Support Filtering ● Support Type Conversion Configuration Backends
  • 26. Configure once, run everywhere6.09.16 26 So what is a property source ?
  • 27. Configure once, run everywhere6.09.16 PropertySource 27 ● 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(); ... }
  • 28. Configure once, run everywhere6.09.16 28 Are there predefined property sources ?
  • 29. Configure once, run everywhere6.09.16 29 Of course.
  • 30. Configure once, run everywhere6.09.16 30 ● System & Environment Properties ● (CLI Arguments) ● Files: ${configDir}/*.properties ● Classpath Resources: /META­INF/javaconfiguration.properties
  • 31. Configure once, run everywhere6.09.16 31 And how about remote configuration…? Especially with Containers?
  • 32. Configure once, run everywhere6.09.16 32 ● Configuration is read from remote source, e.g. ● Etcd cluster ● Consul cluster ● Any Web URL ● ... Remote configuration Service Location Layer Configuration Cluster <dependency>     <groupId>org.apache.tamaya.ext</groupId>     <artifactId>tamaya­etcd</artifactId>     <version>...</version> </dependency>
  • 33. Configure once, run everywhere6.09.16 33 ● In fact, it doesn‘t matter ! Configure once, run everywhere ! What kind of runtime I need ? Configuration Cluster Java EE Tamaya Java SE Tamaya Tamaya Vertx.io Tamaya TomEE Tamaya Spring Tamaya OSGI
  • 34. Configure once, run everywhere6.09.16 34 ● Configuration on deployment by environment properties: docker run ­e stage prod  ­d ­n MyApp user/image ● or Dockerfile/Docker Image: FROM java:8­jre ... ENV stage prod Excourse: Configuring Containers
  • 35. Configure once, run everywhere6.09.16 35 How to add custom configuration ?
  • 36. Configure once, run everywhere6.09.16 36 Other files...
  • 37. Configure once, run everywhere6.09.16 37 Or resources...
  • 38. Configure once, run everywhere6.09.16 38 My self-written super fancy config database ?
  • 39. Configure once, run everywhere6.09.16 39 Whatever I like ?
  • 40. Configure once, run everywhere6.09.16 40 Use the SPI !
  • 41. Configure once, run everywhere6.09.16 41 Property sources ● Mostly map to exact one file, resource or backend ● Have a unique name ● Must be thread safe ● Can be dynamic ● Provide an ordinal ● Can be scannable PropertySource
  • 42. Configure once, run everywhere6.09.16 PropertySource – Example 42 ● Add dependency public class MyPropertySource extends BasePropertySource{     private Map<String,String> props = new HashMap<>();     public SimplePropertySource() throws IOException {         URL url = getClass().getClassLoader().getResource(                    “/META­INF/myFancyConfig.xml“);         // read config properties into props         ...     }     @Override     public String getName() { return “/META­INF/myFancyConfig.xml“; };     @Override     public Map<String, String> getProperties() { return props; } }
  • 43. Configure once, run everywhere6.09.16 PropertySource - Registration 43 ● Add dependency● By default, register it using the java.util.ServiceLoader      → /META­INF/services/org.apache.tamaya.spi.PropertySource    MyPropertySource
  • 44. Configure once, run everywhere6.09.16 44 Property source provider ● Allow dynamic registration of multiple property sources ● E.g. all files found in a config directory ● Are evaluated once and then discarded ● Are also registered using the ServiceLoader. PropertySource Provider
  • 45. Configure once, run everywhere6.09.16 PropertySourceProvider 45 ● Add dependencypublic interface PropertySourceProvider{          public Collection<PropertySource> getPropertySources(); }
  • 46. Configure once, run everywhere6.09.16 46 Furthermore Tamaya uses ● Filters for filtering values evaluated (remove, map, change) ● Converters for converting String values to non-String types ● A ValueCombinationPolicy ● determines how values evaluated are combined to a final value (defaults to overriding) More SPI artifacts
  • 47. Configure once, run everywhere6.09.16 47 And how these pieces all fit together ?
  • 48. Configure once, run everywhere6.09.16 Apache Tamaya in 120 seconds... 48 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
  • 49. Configure once, run everywhere6.09.16 49 So we have: files, resources, sys- and env-properties & an SPI to implement and register them ?
  • 50. Configure once, run everywhere6.09.16 50 What else do we need ?
  • 51. Configure once, run everywhere6.09.16 51 Easy Configuration: „Meta“-Configuration !
  • 52. Configure once, run everywhere6.09.16 52 ● 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 !
  • 53. Configure once, run everywhere6.09.16 53 <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 !
  • 55. Configure once, run everywhere6.09.16 Demo DEMO 55 ● 1 Microservice ● Running on Java EE 7 (Wildfly) ● Multiple Configuration Sources: ● Environment Properties ● System Properties ● Classpath ● Files ● Etcd Server
  • 56. Bezeichnung Präsentation6.09.16 There is more! Tamaya Extensions
  • 57. Configure once, run everywhere6.09.16 57 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>
  • 58. Configure once, run everywhere6.09.16 58 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>
  • 59. Configure once, run everywhere6.09.16 And more: a topic on its own! 59 ● 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) ● 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 ● Tamaya-resolver: Expression resolution, placeholders, dynamic values ● Tamaya-resources: Ant styled resource resolution •... * experimental
  • 61. Configure once, run everywhere6.09.16 Summarizing... 61 ● 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 ?
  • 62. Configure once, run everywhere6.09.16 62 You like it ?
  • 63. Configure once, run everywhere6.09.16 63 „It is your turn !“ ● Use it ● Evangelize it ● Join the force!
  • 64. Configure once, run everywhere6.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/commons-dev@jakarta.apache.org/msg37597.html ● Spring Framework: http://projects.spring.io/spring-framework/ ● Owner: http://owner.aeonbits.org/ 64
  • 65. Configure once, run everywhere6.09.16 Q&A 65 Thank you! @atsticks anatole@apache.org Anatole Tresch Trivadis AG Principal Consultant Twitter/Google+: @atsticks anatole@apache.org anatole.tresch@trivadis.com