SlideShare ist ein Scribd-Unternehmen logo
1 von 62
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
Configuration for Java EE
Dmitry Kornilov
@m0mus
Werner Keil
@wernerkeil
November 16, 2016
Config JSR and Tamaya
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
Safe Harbor Statement
The following is intended to outline our general product direction. It is intended for
information purposes only, and may not be incorporated into any contract. It is not a
commitment to deliver any material, code, or functionality, and should not be relied upon
in making purchasing decisions. The development, release, and timing of any features or
functionality described for Oracle’s products remains at the sole discretion of Oracle.
2
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. 3
Dmitry Kornilov
• Software Developer @ Oracle
• JSON-B (JSR-367) spec lead
• JSON-P (JSR-374) spec lead
• Outstanding Spec Lead 2016
• EclipseLink project committer
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. 4
Werner Keil
• Consultant – Coach
• Creative Cosmopolitan
• Open Source Evangelist
• Software Architect
• Spec Lead – JSR363
• Individual JCP Executive Committee
Member
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
Program Agenda
Introduction
Problem Definition
JSR Proposal & Features
Tamaya
Q & A
1
2
3
4
5
5
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
Introduction
6
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
Oracle Java EE 8 Survey 2014
Confidential – Oracle
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. 8
DZone and Java EE Guardians Survey Results
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. 9
Java EE 7
Connector JAXBJSP Debugging
Managed BeansJSPConcurrency EE Interceptors JAX-WS WebSocket
Bean Validation JASPIC ServletJMS JTADeployment
Batch JACCDependency
Injection JAXR JSTL Management
CDI EJB JAX-RPC Web ServicesJSF Java Persistence
JSON-PCommon
Annotations EL JAX-RS Web Services
MetadataJavaMail
CDI
JSON-P
Security
Bean Validation
JSF
JAX-RS
JSP
Servlet
Health CheckConfiguration
Java EE 8 (Revised Proposal, 2016)
JSON-B
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
Problem Definition
10
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
What is Configuration?
11
Application server setup?
Runtime parameters?
Deployment descriptors?
Parameters of used frameworks?
Deployment scripts? Used resources?
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
Problems
• Lack of standard configuration API
• Configuring multiple instances
• Deploying on different environments
• Change configuration without
redeployment
• Configuration of decoupled
microservices
12
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
Problems
• Lack of standard configuration API
• Configuring multiple instances
• Deploying on different environments
• Change configuration without
redeployment
• Configuration of decoupled
microservices
13
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
Problems
• Lack of standard configuration API
• Configuring multiple instances
• Deploying on different environments
• Change configuration without
redeployment
• Configuration of decoupled
microservices
14
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
Problems
• Lack of standard configuration API
• Configuring multiple instances
• Deploying on different environments
• Change configuration without
redeployment
• Configuration of decoupled
microservices
15
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
Problems
• Lack of standard configuration API
• Configuring multiple instances
• Deploying on different environments
• Change configuration without
redeployment
• Configuration of decoupled
microservices
16
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
JSR Proposal
17
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
Configuration Definition
• Application centric
• Not modifiable by application
• Consists of key/value pairs
• Keys and values are strings
• Flat structure
18
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
Java EE Configuration
• Unified API
• Externalized configuration
• Support of multiple configuration sources
– Properties, xml and json formats support out of the box
• Layering and overrides
• Optional configuration descriptor
• Dynamic configuration
• Integration with other Java EE frameworks
19
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
Java EE Configuration
• Unified API
• Externalized configuration
• Support of multiple configuration sources
– Properties, xml and json formats support out of the box
• Layering and overrides
20
Java EE 8
• Optional configuration descriptor
• Dynamic configuration
• Integration with other Java EE frameworks
Java EE 9
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
JSR Features (Java EE 8)
21
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
API
22
a=JavaOne
b=9
c=2016
Config config = ConfigProvider.getConfig();
// Returns "JavaOne"
String a = config.getProperty("a");
// Returns string "9"
String b = config.getProperty("b");
// Returns string "default"
String defaultValue = config.getProperty("not.exist", "default");
// Returns number 2016
Long c = config.getProperty("c", Long.class);
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
Converters
23
• Type safe access to values
• Built-in converters for:
– Primitive Wrappers
– BigDecimal, BigInteger, URL, URI
– Date, Calendar
– java.time.*
public interface Converter<Target> {
Target convert(String value, Config c);
}
public class FooConverter
implements Converter<Foo> {
public Foo convert(String value, Config c) {
...
}
}
Config cfg = ConfigProvider.builder()
.withConverters(new FooConverter())
.build();
Foo foo = cfg.getProperty("foo", Foo.class);
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
Configuration Sources
24
• Multiple configuration sources
• Supported configuration sources:
– System properties
– Runtime parameters
– File (Properties, xml, json)
– Resource on a web server
• Pluggable architecture
– Custom sources (like DB)
• Configuration sources are ordered
Java EE
Config
XML JSONprop
DBweb
Application
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
Default Configuration Sources
25
Java EE Config
• System properties (ordinal=400)
• Environment properties (ordinal=300)
• /META-INF/config.properties (ordinal=100)
• /META-INF/config.xml (ordinal=100)
• /META-INF/config.json (ordinal=100)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
Defining Configuration Sources
26
• Using config.sources runtime parameter
• Using API
• Using config-sources.xml file
java –jar my.jar –Dconfig.source=http://shared/global.xml,/conf/my.json
Config config = ConfigProvider.builder()
.addSource(new WebSource("http://shared:8080/global.xml"), 200)
.addSource(new FileSource("/conf/my.json"), 100)
.addSource(new MyCustomSource())
.build();
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
config-sources.xml
27
• File with defined schema using to define configuration sources and their
metadata
• Default location /META-INF/config-sources.xml
• Can be placed outside of the application package
• Define using runtime parameter
• Define using API
java –jar my.jar –Dconfig.sources=http://sharedhost/config-sources.xml
Config c = ConfigProvider.builder()
.withSources("/cfg/config-sources.xml")
.build();
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
Sample config-sources.xml
28
Simple
With ordinals
<config-sources>
<source>http://shared:8080/config.xml</source>
<source>/cfg/myconf.json</source>
</config-sources>
<config-sources>
<source ordinal="500">http://shared:8080/config.xml</source>
<source ordinal="450">/cfg/myconf.json</source>
</config-sources>
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
Sample config-sources.xml
29
Custom
<config-sources>
<source>http://shared:8080/config.xml</source>
<source type="com.oracle.config.CloudConfig">
<user>user</user>
<password>secret</password>
</source>
</config-sources>
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
JSR Features (Java EE 9)
30
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
Integration With Other Java EE Frameworks
• Read configuration from
Java EE Config
• Store configuration as part of
whole application configuration
• Use standard API
31
Java EE
Config
Application
Configuration
Application
JPA
Configuration
JAX-RS
Configuration
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
Configuration Descriptor
32
• File with defined format
• Defines all configurable properties
and metadata
• Optional
• It’s not XML-Schema!
<config-descriptor>
<property name="a"/>
<property name="b" default=”valueB"/>
<property name="c" mutable="false"/>
<property name="d"/>
</config-descriptor>
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
Dynamic Configuration
33
• Polling framework
• Expressions
• Property Resolvers
• Configuration Context
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
Polling
34
// Defining polling using API
Config cfg = ConfigProvider.builder()
.withSource(new FileSource("/cfg/config.xml"), 200, Duration.ofSeconds(30))
.withSource(new WebSource("http://shared/config.xml"), 100, Duration.ofMinutes(1))
.build();
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
Polling
35
// Defining polling using API
Config cfg = ConfigProvider.builder()
.withSource(new FileSource("/cfg/config.xml"), 200, Duration.ofSeconds(30))
.withSource(new WebSource("http://shared/config.xml"), 100, Duration.ofMinutes(1))
.build();
Ordinal Refresh IntervalLocation
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
Polling
36
<config-sources refresh-rate="300000">
<source ordinal="200" refresh-rate="30000">/cfg/config.xml</source>
<source ordinal="100" refresh-rate="60000">http://shared/config.xml</source>
</config-sources>
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
Polling
37
<config-sources refresh-rate="300000">
<source ordinal="200" refresh-rate="30000">/cfg/config.xml</source>
<source ordinal="100" refresh-rate="60000">http://shared/config.xml</source>
</config-sources>
Sources list
refresh interval
(5 min)
Source 1 refresh
interval (30 sec) Source 2 refresh
interval (1 min)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
Expressions
38
• EL like expressions evaluated at runtime to a property value
• Property substitution
• Conditional configuration sources
foo=${some.other.value}
bar=${foo + 10}
baz=${foo * bar}
<config-sources>
<source>//cfg/config.properties</source>
<source enabled=”${app==‘ios’}”>
//cfg/cust_ios.properties
</source>
</config-sources>
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
Property Resolvers
39
• Flexible mechanism allowing
executing user code in configuration
expressions
• Can be used to inject cloud
resources
rating.service.url=${eureka:rating.url}
cust.db=${cloud:cust.db}
<config-sources>
<resolvers>
<resolver name=”cloud”>
<class>com.example.CloudResolver</class>
<username>user</username>
<password>secret</password>
</resolver>
</resolvers>
<!-- ... -->
</config-sources>
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
Configuration Context
40
• Allows setting application variables which can be used in configuration
expressions
• Example: geographical zone, application type, etc.
<config-sources>
<source>/cfg/config.properties</source>
<source enabled=”${app==‘ios’}”>cust_ios.properties</source>
</config-sources>
Config config = ConfigProvider.getConfig();
ConfigContext context = ConfigContext.builder().addProperty("app", "ios").build();
Long prop = config.getPropertyWithContext("prop", context);
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
Tamaya
41
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
• Configuration = ordered list of PropertySources
• Properties found are combined using a
CombinationPolicy
• Raw properties are filtered by PropertyFilter
• For typed access PropertyConverters
have to do work
• Extensions add more features
• Component Lifecycle is controlled by the
ServiceContextManager
ConfigurationContext
PropertyFilters
PropertySource
PropertySource
PropertySource
PropertySource
Configuration
CombinationPolicy
PropertyProviders
<provides>
PropertyConverter
42
Apache Tamaya in 120 seconds...
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. 43
Requirements
• Developer‘s Perspective
• Architectural/Design Requirements
• Operational Aspects
• Other Aspects
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. 44
Developer‘s Requirements
• 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
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. 45
Architectural/Design Requirements
• Decouple code that consumes configuration from
– Backends Used
– Storage Format
– Distribution
– Lifecycle and versioning
– Security Aspects
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. 46
Operational's Requirements
• 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
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. 47
Other Aspects
• Support Access Constraints and Views
• No accidental logging of secrets
• Dynamic changes
• Configuration Validation
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. 48
API Requirements
• 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)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. 49
Existing Mechanisms
• Environment Properties
• System Properties
• CLI arguments
• Properties, xml-Properties
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. 50
Dependencies - API & Core
<dependency>
<groupId>org.apache.tamaya</groupId>
<artifactId>tamaya-api</artifactId>
<version>0.3-incubating-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.apache.tamaya</groupId>
<artifactId>tamaya-core</artifactId>
<version>0.3-incubating-SNAPSHOT</version>
</dependency>
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. 51
Programmatic API
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);
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. 52
Dependencies – Injection SE
<dependency>
<groupId>org.apache.tamaya.ext</groupId>
<artifactId>tamaya-injection-api</artifactId>
<version>0.3-incubating-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.apache.tamaya.ext</groupId>
<artifactId>tamaya-injection</artifactId>
<version>0.3-incubating-SNAPSHOT</version>
</dependency>
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. 53
Dependencies – Injection SE
@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);
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. 54
Configuration Backends
• 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
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. 55
PropertySource
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();
...
}
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. 56
Predefined Property Sources
• System & Environment Properties
• (CLI Arguments)
• Files
– ${configDir}/*.properties
• Classpath Resources
– /META-INF/javaconfiguration.properties
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. 57
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
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. 58
PropertySource - Example
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; }
}
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. 59
PropertySource - Registration
• By default, register it using the java.util.ServiceLoader
– → /META-INF/services/org.apache.tamaya.spi.PropertySource
– MyPropertySource
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. 60
PropertySource 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.
public interface PropertySourceProvider{
public Collection<PropertySource> getPropertySources();
}
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. 61
More SPI artifacts
• 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)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved.
Q & A
62

Weitere ähnliche Inhalte

Was ist angesagt?

Configure Your Projects with Apache Tamaya
Configure Your Projects with Apache TamayaConfigure Your Projects with Apache Tamaya
Configure Your Projects with Apache TamayaAnatole Tresch
 
Expose your data as an api is with oracle rest data services -spoug Madrid
Expose your data as an api is with oracle rest data services -spoug MadridExpose your data as an api is with oracle rest data services -spoug Madrid
Expose your data as an api is with oracle rest data services -spoug MadridVinay Kumar
 
What’s New in Oracle Database 12c for PHP
What’s New in Oracle Database 12c for PHPWhat’s New in Oracle Database 12c for PHP
What’s New in Oracle Database 12c for PHPChristopher Jones
 
Oracle Office Hours - Exposing REST services with APEX and ORDS
Oracle Office Hours - Exposing REST services with APEX and ORDSOracle Office Hours - Exposing REST services with APEX and ORDS
Oracle Office Hours - Exposing REST services with APEX and ORDSDoug Gault
 
A first Draft to Java Configuration
A first Draft to Java ConfigurationA first Draft to Java Configuration
A first Draft to Java ConfigurationAnatole Tresch
 
Native REST Web Services with Oracle 11g
Native REST Web Services with Oracle 11gNative REST Web Services with Oracle 11g
Native REST Web Services with Oracle 11gMarcelo Ochoa
 
REST Enabling Your Oracle Database
REST Enabling Your Oracle DatabaseREST Enabling Your Oracle Database
REST Enabling Your Oracle DatabaseJeff Smith
 
Node.js und die Oracle-Datenbank
Node.js und die Oracle-DatenbankNode.js und die Oracle-Datenbank
Node.js und die Oracle-DatenbankCarsten Czarski
 
Introduction to MySQL Document Store
Introduction to MySQL Document StoreIntroduction to MySQL Document Store
Introduction to MySQL Document StoreFrederic Descamps
 
JAX-RS 2.0: New and Noteworthy in RESTful Web services API at JAX London
JAX-RS 2.0: New and Noteworthy in RESTful Web services API at JAX LondonJAX-RS 2.0: New and Noteworthy in RESTful Web services API at JAX London
JAX-RS 2.0: New and Noteworthy in RESTful Web services API at JAX LondonArun Gupta
 
Inexpensive Datamasking for MySQL with ProxySQL - data anonymization for deve...
Inexpensive Datamasking for MySQL with ProxySQL - data anonymization for deve...Inexpensive Datamasking for MySQL with ProxySQL - data anonymization for deve...
Inexpensive Datamasking for MySQL with ProxySQL - data anonymization for deve...Frederic Descamps
 
eProseed Oracle Open World 2016 debrief - Oracle Management Cloud
eProseed Oracle Open World 2016 debrief - Oracle Management CloudeProseed Oracle Open World 2016 debrief - Oracle Management Cloud
eProseed Oracle Open World 2016 debrief - Oracle Management CloudMarco Gralike
 
APEX Office Hours Interactive Grid Deep Dive
APEX Office Hours Interactive Grid Deep DiveAPEX Office Hours Interactive Grid Deep Dive
APEX Office Hours Interactive Grid Deep DiveJohnSnyders
 
MySQL EXPLAIN Explained-Norvald H. Ryeng
MySQL EXPLAIN Explained-Norvald H. RyengMySQL EXPLAIN Explained-Norvald H. Ryeng
MySQL EXPLAIN Explained-Norvald H. Ryeng郁萍 王
 
JAX-RS 2.0: What’s New in JSR 339 ?
JAX-RS 2.0: What’s New in JSR 339 ?JAX-RS 2.0: What’s New in JSR 339 ?
JAX-RS 2.0: What’s New in JSR 339 ?Arun Gupta
 
Oracle REST Data Services Best Practices/ Overview
Oracle REST Data Services Best Practices/ OverviewOracle REST Data Services Best Practices/ Overview
Oracle REST Data Services Best Practices/ OverviewKris Rice
 
Swedish MySQL User Group - MySQL InnoDB Cluster
Swedish MySQL User Group - MySQL InnoDB ClusterSwedish MySQL User Group - MySQL InnoDB Cluster
Swedish MySQL User Group - MySQL InnoDB ClusterFrederic Descamps
 

Was ist angesagt? (20)

Configure Your Projects with Apache Tamaya
Configure Your Projects with Apache TamayaConfigure Your Projects with Apache Tamaya
Configure Your Projects with Apache Tamaya
 
Aneez Hasan_Resume
Aneez Hasan_ResumeAneez Hasan_Resume
Aneez Hasan_Resume
 
Expose your data as an api is with oracle rest data services -spoug Madrid
Expose your data as an api is with oracle rest data services -spoug MadridExpose your data as an api is with oracle rest data services -spoug Madrid
Expose your data as an api is with oracle rest data services -spoug Madrid
 
What’s New in Oracle Database 12c for PHP
What’s New in Oracle Database 12c for PHPWhat’s New in Oracle Database 12c for PHP
What’s New in Oracle Database 12c for PHP
 
Oracle Office Hours - Exposing REST services with APEX and ORDS
Oracle Office Hours - Exposing REST services with APEX and ORDSOracle Office Hours - Exposing REST services with APEX and ORDS
Oracle Office Hours - Exposing REST services with APEX and ORDS
 
A first Draft to Java Configuration
A first Draft to Java ConfigurationA first Draft to Java Configuration
A first Draft to Java Configuration
 
Native REST Web Services with Oracle 11g
Native REST Web Services with Oracle 11gNative REST Web Services with Oracle 11g
Native REST Web Services with Oracle 11g
 
REST Enabling Your Oracle Database
REST Enabling Your Oracle DatabaseREST Enabling Your Oracle Database
REST Enabling Your Oracle Database
 
Node.js und die Oracle-Datenbank
Node.js und die Oracle-DatenbankNode.js und die Oracle-Datenbank
Node.js und die Oracle-Datenbank
 
Introduction to MySQL Document Store
Introduction to MySQL Document StoreIntroduction to MySQL Document Store
Introduction to MySQL Document Store
 
PHP Oracle
PHP OraclePHP Oracle
PHP Oracle
 
JAX-RS 2.0: New and Noteworthy in RESTful Web services API at JAX London
JAX-RS 2.0: New and Noteworthy in RESTful Web services API at JAX LondonJAX-RS 2.0: New and Noteworthy in RESTful Web services API at JAX London
JAX-RS 2.0: New and Noteworthy in RESTful Web services API at JAX London
 
Inexpensive Datamasking for MySQL with ProxySQL - data anonymization for deve...
Inexpensive Datamasking for MySQL with ProxySQL - data anonymization for deve...Inexpensive Datamasking for MySQL with ProxySQL - data anonymization for deve...
Inexpensive Datamasking for MySQL with ProxySQL - data anonymization for deve...
 
eProseed Oracle Open World 2016 debrief - Oracle Management Cloud
eProseed Oracle Open World 2016 debrief - Oracle Management CloudeProseed Oracle Open World 2016 debrief - Oracle Management Cloud
eProseed Oracle Open World 2016 debrief - Oracle Management Cloud
 
APEX Office Hours Interactive Grid Deep Dive
APEX Office Hours Interactive Grid Deep DiveAPEX Office Hours Interactive Grid Deep Dive
APEX Office Hours Interactive Grid Deep Dive
 
MySQL EXPLAIN Explained-Norvald H. Ryeng
MySQL EXPLAIN Explained-Norvald H. RyengMySQL EXPLAIN Explained-Norvald H. Ryeng
MySQL EXPLAIN Explained-Norvald H. Ryeng
 
JAX-RS 2.0: What’s New in JSR 339 ?
JAX-RS 2.0: What’s New in JSR 339 ?JAX-RS 2.0: What’s New in JSR 339 ?
JAX-RS 2.0: What’s New in JSR 339 ?
 
Oracle REST Data Services Best Practices/ Overview
Oracle REST Data Services Best Practices/ OverviewOracle REST Data Services Best Practices/ Overview
Oracle REST Data Services Best Practices/ Overview
 
Websocket 1.0
Websocket 1.0Websocket 1.0
Websocket 1.0
 
Swedish MySQL User Group - MySQL InnoDB Cluster
Swedish MySQL User Group - MySQL InnoDB ClusterSwedish MySQL User Group - MySQL InnoDB Cluster
Swedish MySQL User Group - MySQL InnoDB Cluster
 

Ähnlich wie Config JSR and Tamaya

Preparing your code for Java 9
Preparing your code for Java 9Preparing your code for Java 9
Preparing your code for Java 9Deepu Xavier
 
Java API for JSON Binding - Introduction and update
Java API for JSON Binding - Introduction and updateJava API for JSON Binding - Introduction and update
Java API for JSON Binding - Introduction and updateMartin Grebac
 
JDK 8 and JDK 8 Updates in OpenJDK
JDK 8 and JDK 8 Updates in OpenJDKJDK 8 and JDK 8 Updates in OpenJDK
JDK 8 and JDK 8 Updates in OpenJDKWolfgang Weigend
 
RMOUG MySQL 5.7 New Features
RMOUG MySQL 5.7 New FeaturesRMOUG MySQL 5.7 New Features
RMOUG MySQL 5.7 New FeaturesDave Stokes
 
Interactive Java Support to your tool -- The JShell API and Architecture
Interactive Java Support to your tool -- The JShell API and ArchitectureInteractive Java Support to your tool -- The JShell API and Architecture
Interactive Java Support to your tool -- The JShell API and ArchitectureJavaDayUA
 
Leveraging Open Source for Database Development: Database Version Control wit...
Leveraging Open Source for Database Development: Database Version Control wit...Leveraging Open Source for Database Development: Database Version Control wit...
Leveraging Open Source for Database Development: Database Version Control wit...All Things Open
 
Java EE Arquillian Testing with Docker & The Cloud
Java EE Arquillian Testing with Docker & The CloudJava EE Arquillian Testing with Docker & The Cloud
Java EE Arquillian Testing with Docker & The CloudBruno Borges
 
Java EE 7 for WebLogic 12c Developers
Java EE 7 for WebLogic 12c DevelopersJava EE 7 for WebLogic 12c Developers
Java EE 7 for WebLogic 12c DevelopersBruno Borges
 
JavaOne 2014 Java EE 8 Booth Slides
JavaOne 2014 Java EE 8 Booth SlidesJavaOne 2014 Java EE 8 Booth Slides
JavaOne 2014 Java EE 8 Booth SlidesEdward Burns
 
JVMs in Containers - Best Practices
JVMs in Containers - Best PracticesJVMs in Containers - Best Practices
JVMs in Containers - Best PracticesDavid Delabassee
 
Java EE 8 Overview (Japanese)
Java EE 8 Overview (Japanese)Java EE 8 Overview (Japanese)
Java EE 8 Overview (Japanese)Logico
 
Java: Create The Future Keynote
Java: Create The Future KeynoteJava: Create The Future Keynote
Java: Create The Future KeynoteSimon Ritter
 
Jsr382: Konfiguration in Java
Jsr382: Konfiguration in JavaJsr382: Konfiguration in Java
Jsr382: Konfiguration in JavaAnatole Tresch
 
Java EE 6 & GlassFish = Less Code + More Power at CEJUG
Java EE 6 & GlassFish = Less Code + More Power at CEJUGJava EE 6 & GlassFish = Less Code + More Power at CEJUG
Java EE 6 & GlassFish = Less Code + More Power at CEJUGArun Gupta
 
Java EE 6 & GlassFish = Less Code + More Power @ DevIgnition
Java EE 6 & GlassFish = Less Code + More Power @ DevIgnitionJava EE 6 & GlassFish = Less Code + More Power @ DevIgnition
Java EE 6 & GlassFish = Less Code + More Power @ DevIgnitionArun Gupta
 
Java EE 6 = Less Code + More Power
Java EE 6 = Less Code + More PowerJava EE 6 = Less Code + More Power
Java EE 6 = Less Code + More PowerArun Gupta
 
TWJUG August, MySQL JDBC Driver "Connector/J"
TWJUG August, MySQL JDBC Driver "Connector/J"TWJUG August, MySQL JDBC Driver "Connector/J"
TWJUG August, MySQL JDBC Driver "Connector/J"Ryusuke Kajiyama
 

Ähnlich wie Config JSR and Tamaya (20)

Preparing your code for Java 9
Preparing your code for Java 9Preparing your code for Java 9
Preparing your code for Java 9
 
Java API for JSON Binding - Introduction and update
Java API for JSON Binding - Introduction and updateJava API for JSON Binding - Introduction and update
Java API for JSON Binding - Introduction and update
 
JDK 8 and JDK 8 Updates in OpenJDK
JDK 8 and JDK 8 Updates in OpenJDKJDK 8 and JDK 8 Updates in OpenJDK
JDK 8 and JDK 8 Updates in OpenJDK
 
JDK 10 Java Module System
JDK 10 Java Module SystemJDK 10 Java Module System
JDK 10 Java Module System
 
RMOUG MySQL 5.7 New Features
RMOUG MySQL 5.7 New FeaturesRMOUG MySQL 5.7 New Features
RMOUG MySQL 5.7 New Features
 
Interactive Java Support to your tool -- The JShell API and Architecture
Interactive Java Support to your tool -- The JShell API and ArchitectureInteractive Java Support to your tool -- The JShell API and Architecture
Interactive Java Support to your tool -- The JShell API and Architecture
 
Leveraging Open Source for Database Development: Database Version Control wit...
Leveraging Open Source for Database Development: Database Version Control wit...Leveraging Open Source for Database Development: Database Version Control wit...
Leveraging Open Source for Database Development: Database Version Control wit...
 
Java EE Arquillian Testing with Docker & The Cloud
Java EE Arquillian Testing with Docker & The CloudJava EE Arquillian Testing with Docker & The Cloud
Java EE Arquillian Testing with Docker & The Cloud
 
Java EE 7 for WebLogic 12c Developers
Java EE 7 for WebLogic 12c DevelopersJava EE 7 for WebLogic 12c Developers
Java EE 7 for WebLogic 12c Developers
 
JavaOne 2014 Java EE 8 Booth Slides
JavaOne 2014 Java EE 8 Booth SlidesJavaOne 2014 Java EE 8 Booth Slides
JavaOne 2014 Java EE 8 Booth Slides
 
JVMs in Containers - Best Practices
JVMs in Containers - Best PracticesJVMs in Containers - Best Practices
JVMs in Containers - Best Practices
 
Java EE 8 Overview (Japanese)
Java EE 8 Overview (Japanese)Java EE 8 Overview (Japanese)
Java EE 8 Overview (Japanese)
 
Java Cloud and Container Ready
Java Cloud and Container ReadyJava Cloud and Container Ready
Java Cloud and Container Ready
 
Java: Create The Future Keynote
Java: Create The Future KeynoteJava: Create The Future Keynote
Java: Create The Future Keynote
 
Jsr382: Konfiguration in Java
Jsr382: Konfiguration in JavaJsr382: Konfiguration in Java
Jsr382: Konfiguration in Java
 
JVMs in Containers
JVMs in ContainersJVMs in Containers
JVMs in Containers
 
Java EE 6 & GlassFish = Less Code + More Power at CEJUG
Java EE 6 & GlassFish = Less Code + More Power at CEJUGJava EE 6 & GlassFish = Less Code + More Power at CEJUG
Java EE 6 & GlassFish = Less Code + More Power at CEJUG
 
Java EE 6 & GlassFish = Less Code + More Power @ DevIgnition
Java EE 6 & GlassFish = Less Code + More Power @ DevIgnitionJava EE 6 & GlassFish = Less Code + More Power @ DevIgnition
Java EE 6 & GlassFish = Less Code + More Power @ DevIgnition
 
Java EE 6 = Less Code + More Power
Java EE 6 = Less Code + More PowerJava EE 6 = Less Code + More Power
Java EE 6 = Less Code + More Power
 
TWJUG August, MySQL JDBC Driver "Connector/J"
TWJUG August, MySQL JDBC Driver "Connector/J"TWJUG August, MySQL JDBC Driver "Connector/J"
TWJUG August, MySQL JDBC Driver "Connector/J"
 

Mehr von Dmitry Kornilov

Helidon Nima - Loom based microserfice framework.pptx
Helidon Nima - Loom based microserfice framework.pptxHelidon Nima - Loom based microserfice framework.pptx
Helidon Nima - Loom based microserfice framework.pptxDmitry Kornilov
 
Jakarta EE: Today and Tomorrow
Jakarta EE: Today and TomorrowJakarta EE: Today and Tomorrow
Jakarta EE: Today and TomorrowDmitry Kornilov
 
Building Cloud-Native Applications with Helidon
Building Cloud-Native Applications with HelidonBuilding Cloud-Native Applications with Helidon
Building Cloud-Native Applications with HelidonDmitry Kornilov
 
Nonblocking Database Access in Helidon SE
Nonblocking Database Access in Helidon SENonblocking Database Access in Helidon SE
Nonblocking Database Access in Helidon SEDmitry Kornilov
 
JSON Support in Jakarta EE: Present and Future
JSON Support in Jakarta EE: Present and FutureJSON Support in Jakarta EE: Present and Future
JSON Support in Jakarta EE: Present and FutureDmitry Kornilov
 
Building cloud native microservices with project Helidon
Building cloud native microservices with project HelidonBuilding cloud native microservices with project Helidon
Building cloud native microservices with project HelidonDmitry Kornilov
 
Developing cloud-native microservices using project Helidon
Developing cloud-native microservices using project HelidonDeveloping cloud-native microservices using project Helidon
Developing cloud-native microservices using project HelidonDmitry Kornilov
 
From Java EE to Jakarta EE
From Java EE to Jakarta EEFrom Java EE to Jakarta EE
From Java EE to Jakarta EEDmitry Kornilov
 
Helidon: Java Libraries for Writing Microservices
Helidon: Java Libraries for Writing MicroservicesHelidon: Java Libraries for Writing Microservices
Helidon: Java Libraries for Writing MicroservicesDmitry Kornilov
 
JSON Support in Java EE 8
JSON Support in Java EE 8JSON Support in Java EE 8
JSON Support in Java EE 8Dmitry Kornilov
 
JSON Support in Java EE 8
JSON Support in Java EE 8JSON Support in Java EE 8
JSON Support in Java EE 8Dmitry Kornilov
 
JSONB introduction and comparison with other frameworks
JSONB introduction and comparison with other frameworksJSONB introduction and comparison with other frameworks
JSONB introduction and comparison with other frameworksDmitry Kornilov
 
What’s new in JSR 367 Java API for JSON Binding
What’s new in JSR 367 Java API for JSON BindingWhat’s new in JSR 367 Java API for JSON Binding
What’s new in JSR 367 Java API for JSON BindingDmitry Kornilov
 

Mehr von Dmitry Kornilov (14)

Helidon Nima - Loom based microserfice framework.pptx
Helidon Nima - Loom based microserfice framework.pptxHelidon Nima - Loom based microserfice framework.pptx
Helidon Nima - Loom based microserfice framework.pptx
 
Jakarta EE: Today and Tomorrow
Jakarta EE: Today and TomorrowJakarta EE: Today and Tomorrow
Jakarta EE: Today and Tomorrow
 
Building Cloud-Native Applications with Helidon
Building Cloud-Native Applications with HelidonBuilding Cloud-Native Applications with Helidon
Building Cloud-Native Applications with Helidon
 
Nonblocking Database Access in Helidon SE
Nonblocking Database Access in Helidon SENonblocking Database Access in Helidon SE
Nonblocking Database Access in Helidon SE
 
JSON Support in Jakarta EE: Present and Future
JSON Support in Jakarta EE: Present and FutureJSON Support in Jakarta EE: Present and Future
JSON Support in Jakarta EE: Present and Future
 
Building cloud native microservices with project Helidon
Building cloud native microservices with project HelidonBuilding cloud native microservices with project Helidon
Building cloud native microservices with project Helidon
 
Developing cloud-native microservices using project Helidon
Developing cloud-native microservices using project HelidonDeveloping cloud-native microservices using project Helidon
Developing cloud-native microservices using project Helidon
 
From Java EE to Jakarta EE
From Java EE to Jakarta EEFrom Java EE to Jakarta EE
From Java EE to Jakarta EE
 
Helidon: Java Libraries for Writing Microservices
Helidon: Java Libraries for Writing MicroservicesHelidon: Java Libraries for Writing Microservices
Helidon: Java Libraries for Writing Microservices
 
Introduction to Yasson
Introduction to YassonIntroduction to Yasson
Introduction to Yasson
 
JSON Support in Java EE 8
JSON Support in Java EE 8JSON Support in Java EE 8
JSON Support in Java EE 8
 
JSON Support in Java EE 8
JSON Support in Java EE 8JSON Support in Java EE 8
JSON Support in Java EE 8
 
JSONB introduction and comparison with other frameworks
JSONB introduction and comparison with other frameworksJSONB introduction and comparison with other frameworks
JSONB introduction and comparison with other frameworks
 
What’s new in JSR 367 Java API for JSON Binding
What’s new in JSR 367 Java API for JSON BindingWhat’s new in JSR 367 Java API for JSON Binding
What’s new in JSR 367 Java API for JSON Binding
 

Kürzlich hochgeladen

Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsJoaquim Jorge
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUK Journal
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)wesley chun
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 

Kürzlich hochgeladen (20)

Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 

Config JSR and Tamaya

  • 1. Copyright © 2016, Oracle and/or its affiliates. All rights reserved. Configuration for Java EE Dmitry Kornilov @m0mus Werner Keil @wernerkeil November 16, 2016 Config JSR and Tamaya
  • 2. Copyright © 2016, Oracle and/or its affiliates. All rights reserved. Safe Harbor Statement The following is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. The development, release, and timing of any features or functionality described for Oracle’s products remains at the sole discretion of Oracle. 2
  • 3. Copyright © 2016, Oracle and/or its affiliates. All rights reserved. 3 Dmitry Kornilov • Software Developer @ Oracle • JSON-B (JSR-367) spec lead • JSON-P (JSR-374) spec lead • Outstanding Spec Lead 2016 • EclipseLink project committer
  • 4. Copyright © 2016, Oracle and/or its affiliates. All rights reserved. 4 Werner Keil • Consultant – Coach • Creative Cosmopolitan • Open Source Evangelist • Software Architect • Spec Lead – JSR363 • Individual JCP Executive Committee Member
  • 5. Copyright © 2016, Oracle and/or its affiliates. All rights reserved. Program Agenda Introduction Problem Definition JSR Proposal & Features Tamaya Q & A 1 2 3 4 5 5
  • 6. Copyright © 2016, Oracle and/or its affiliates. All rights reserved. Introduction 6
  • 7. Copyright © 2016, Oracle and/or its affiliates. All rights reserved. Oracle Java EE 8 Survey 2014 Confidential – Oracle
  • 8. Copyright © 2016, Oracle and/or its affiliates. All rights reserved. 8 DZone and Java EE Guardians Survey Results
  • 9. Copyright © 2016, Oracle and/or its affiliates. All rights reserved. 9 Java EE 7 Connector JAXBJSP Debugging Managed BeansJSPConcurrency EE Interceptors JAX-WS WebSocket Bean Validation JASPIC ServletJMS JTADeployment Batch JACCDependency Injection JAXR JSTL Management CDI EJB JAX-RPC Web ServicesJSF Java Persistence JSON-PCommon Annotations EL JAX-RS Web Services MetadataJavaMail CDI JSON-P Security Bean Validation JSF JAX-RS JSP Servlet Health CheckConfiguration Java EE 8 (Revised Proposal, 2016) JSON-B
  • 10. Copyright © 2016, Oracle and/or its affiliates. All rights reserved. Problem Definition 10
  • 11. Copyright © 2016, Oracle and/or its affiliates. All rights reserved. What is Configuration? 11 Application server setup? Runtime parameters? Deployment descriptors? Parameters of used frameworks? Deployment scripts? Used resources?
  • 12. Copyright © 2016, Oracle and/or its affiliates. All rights reserved. Problems • Lack of standard configuration API • Configuring multiple instances • Deploying on different environments • Change configuration without redeployment • Configuration of decoupled microservices 12
  • 13. Copyright © 2016, Oracle and/or its affiliates. All rights reserved. Problems • Lack of standard configuration API • Configuring multiple instances • Deploying on different environments • Change configuration without redeployment • Configuration of decoupled microservices 13
  • 14. Copyright © 2016, Oracle and/or its affiliates. All rights reserved. Problems • Lack of standard configuration API • Configuring multiple instances • Deploying on different environments • Change configuration without redeployment • Configuration of decoupled microservices 14
  • 15. Copyright © 2016, Oracle and/or its affiliates. All rights reserved. Problems • Lack of standard configuration API • Configuring multiple instances • Deploying on different environments • Change configuration without redeployment • Configuration of decoupled microservices 15
  • 16. Copyright © 2016, Oracle and/or its affiliates. All rights reserved. Problems • Lack of standard configuration API • Configuring multiple instances • Deploying on different environments • Change configuration without redeployment • Configuration of decoupled microservices 16
  • 17. Copyright © 2016, Oracle and/or its affiliates. All rights reserved. JSR Proposal 17
  • 18. Copyright © 2016, Oracle and/or its affiliates. All rights reserved. Configuration Definition • Application centric • Not modifiable by application • Consists of key/value pairs • Keys and values are strings • Flat structure 18
  • 19. Copyright © 2016, Oracle and/or its affiliates. All rights reserved. Java EE Configuration • Unified API • Externalized configuration • Support of multiple configuration sources – Properties, xml and json formats support out of the box • Layering and overrides • Optional configuration descriptor • Dynamic configuration • Integration with other Java EE frameworks 19
  • 20. Copyright © 2016, Oracle and/or its affiliates. All rights reserved. Java EE Configuration • Unified API • Externalized configuration • Support of multiple configuration sources – Properties, xml and json formats support out of the box • Layering and overrides 20 Java EE 8 • Optional configuration descriptor • Dynamic configuration • Integration with other Java EE frameworks Java EE 9
  • 21. Copyright © 2016, Oracle and/or its affiliates. All rights reserved. JSR Features (Java EE 8) 21
  • 22. Copyright © 2016, Oracle and/or its affiliates. All rights reserved. API 22 a=JavaOne b=9 c=2016 Config config = ConfigProvider.getConfig(); // Returns "JavaOne" String a = config.getProperty("a"); // Returns string "9" String b = config.getProperty("b"); // Returns string "default" String defaultValue = config.getProperty("not.exist", "default"); // Returns number 2016 Long c = config.getProperty("c", Long.class);
  • 23. Copyright © 2016, Oracle and/or its affiliates. All rights reserved. Converters 23 • Type safe access to values • Built-in converters for: – Primitive Wrappers – BigDecimal, BigInteger, URL, URI – Date, Calendar – java.time.* public interface Converter<Target> { Target convert(String value, Config c); } public class FooConverter implements Converter<Foo> { public Foo convert(String value, Config c) { ... } } Config cfg = ConfigProvider.builder() .withConverters(new FooConverter()) .build(); Foo foo = cfg.getProperty("foo", Foo.class);
  • 24. Copyright © 2016, Oracle and/or its affiliates. All rights reserved. Configuration Sources 24 • Multiple configuration sources • Supported configuration sources: – System properties – Runtime parameters – File (Properties, xml, json) – Resource on a web server • Pluggable architecture – Custom sources (like DB) • Configuration sources are ordered Java EE Config XML JSONprop DBweb Application
  • 25. Copyright © 2016, Oracle and/or its affiliates. All rights reserved. Default Configuration Sources 25 Java EE Config • System properties (ordinal=400) • Environment properties (ordinal=300) • /META-INF/config.properties (ordinal=100) • /META-INF/config.xml (ordinal=100) • /META-INF/config.json (ordinal=100)
  • 26. Copyright © 2016, Oracle and/or its affiliates. All rights reserved. Defining Configuration Sources 26 • Using config.sources runtime parameter • Using API • Using config-sources.xml file java –jar my.jar –Dconfig.source=http://shared/global.xml,/conf/my.json Config config = ConfigProvider.builder() .addSource(new WebSource("http://shared:8080/global.xml"), 200) .addSource(new FileSource("/conf/my.json"), 100) .addSource(new MyCustomSource()) .build();
  • 27. Copyright © 2016, Oracle and/or its affiliates. All rights reserved. config-sources.xml 27 • File with defined schema using to define configuration sources and their metadata • Default location /META-INF/config-sources.xml • Can be placed outside of the application package • Define using runtime parameter • Define using API java –jar my.jar –Dconfig.sources=http://sharedhost/config-sources.xml Config c = ConfigProvider.builder() .withSources("/cfg/config-sources.xml") .build();
  • 28. Copyright © 2016, Oracle and/or its affiliates. All rights reserved. Sample config-sources.xml 28 Simple With ordinals <config-sources> <source>http://shared:8080/config.xml</source> <source>/cfg/myconf.json</source> </config-sources> <config-sources> <source ordinal="500">http://shared:8080/config.xml</source> <source ordinal="450">/cfg/myconf.json</source> </config-sources>
  • 29. Copyright © 2016, Oracle and/or its affiliates. All rights reserved. Sample config-sources.xml 29 Custom <config-sources> <source>http://shared:8080/config.xml</source> <source type="com.oracle.config.CloudConfig"> <user>user</user> <password>secret</password> </source> </config-sources>
  • 30. Copyright © 2016, Oracle and/or its affiliates. All rights reserved. JSR Features (Java EE 9) 30
  • 31. Copyright © 2016, Oracle and/or its affiliates. All rights reserved. Integration With Other Java EE Frameworks • Read configuration from Java EE Config • Store configuration as part of whole application configuration • Use standard API 31 Java EE Config Application Configuration Application JPA Configuration JAX-RS Configuration
  • 32. Copyright © 2016, Oracle and/or its affiliates. All rights reserved. Configuration Descriptor 32 • File with defined format • Defines all configurable properties and metadata • Optional • It’s not XML-Schema! <config-descriptor> <property name="a"/> <property name="b" default=”valueB"/> <property name="c" mutable="false"/> <property name="d"/> </config-descriptor>
  • 33. Copyright © 2016, Oracle and/or its affiliates. All rights reserved. Dynamic Configuration 33 • Polling framework • Expressions • Property Resolvers • Configuration Context
  • 34. Copyright © 2016, Oracle and/or its affiliates. All rights reserved. Polling 34 // Defining polling using API Config cfg = ConfigProvider.builder() .withSource(new FileSource("/cfg/config.xml"), 200, Duration.ofSeconds(30)) .withSource(new WebSource("http://shared/config.xml"), 100, Duration.ofMinutes(1)) .build();
  • 35. Copyright © 2016, Oracle and/or its affiliates. All rights reserved. Polling 35 // Defining polling using API Config cfg = ConfigProvider.builder() .withSource(new FileSource("/cfg/config.xml"), 200, Duration.ofSeconds(30)) .withSource(new WebSource("http://shared/config.xml"), 100, Duration.ofMinutes(1)) .build(); Ordinal Refresh IntervalLocation
  • 36. Copyright © 2016, Oracle and/or its affiliates. All rights reserved. Polling 36 <config-sources refresh-rate="300000"> <source ordinal="200" refresh-rate="30000">/cfg/config.xml</source> <source ordinal="100" refresh-rate="60000">http://shared/config.xml</source> </config-sources>
  • 37. Copyright © 2016, Oracle and/or its affiliates. All rights reserved. Polling 37 <config-sources refresh-rate="300000"> <source ordinal="200" refresh-rate="30000">/cfg/config.xml</source> <source ordinal="100" refresh-rate="60000">http://shared/config.xml</source> </config-sources> Sources list refresh interval (5 min) Source 1 refresh interval (30 sec) Source 2 refresh interval (1 min)
  • 38. Copyright © 2016, Oracle and/or its affiliates. All rights reserved. Expressions 38 • EL like expressions evaluated at runtime to a property value • Property substitution • Conditional configuration sources foo=${some.other.value} bar=${foo + 10} baz=${foo * bar} <config-sources> <source>//cfg/config.properties</source> <source enabled=”${app==‘ios’}”> //cfg/cust_ios.properties </source> </config-sources>
  • 39. Copyright © 2016, Oracle and/or its affiliates. All rights reserved. Property Resolvers 39 • Flexible mechanism allowing executing user code in configuration expressions • Can be used to inject cloud resources rating.service.url=${eureka:rating.url} cust.db=${cloud:cust.db} <config-sources> <resolvers> <resolver name=”cloud”> <class>com.example.CloudResolver</class> <username>user</username> <password>secret</password> </resolver> </resolvers> <!-- ... --> </config-sources>
  • 40. Copyright © 2016, Oracle and/or its affiliates. All rights reserved. Configuration Context 40 • Allows setting application variables which can be used in configuration expressions • Example: geographical zone, application type, etc. <config-sources> <source>/cfg/config.properties</source> <source enabled=”${app==‘ios’}”>cust_ios.properties</source> </config-sources> Config config = ConfigProvider.getConfig(); ConfigContext context = ConfigContext.builder().addProperty("app", "ios").build(); Long prop = config.getPropertyWithContext("prop", context);
  • 41. Copyright © 2016, Oracle and/or its affiliates. All rights reserved. Tamaya 41
  • 42. Copyright © 2016, Oracle and/or its affiliates. All rights reserved. • Configuration = ordered list of PropertySources • Properties found are combined using a CombinationPolicy • Raw properties are filtered by PropertyFilter • For typed access PropertyConverters have to do work • Extensions add more features • Component Lifecycle is controlled by the ServiceContextManager ConfigurationContext PropertyFilters PropertySource PropertySource PropertySource PropertySource Configuration CombinationPolicy PropertyProviders <provides> PropertyConverter 42 Apache Tamaya in 120 seconds...
  • 43. Copyright © 2016, Oracle and/or its affiliates. All rights reserved. 43 Requirements • Developer‘s Perspective • Architectural/Design Requirements • Operational Aspects • Other Aspects
  • 44. Copyright © 2016, Oracle and/or its affiliates. All rights reserved. 44 Developer‘s Requirements • 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
  • 45. Copyright © 2016, Oracle and/or its affiliates. All rights reserved. 45 Architectural/Design Requirements • Decouple code that consumes configuration from – Backends Used – Storage Format – Distribution – Lifecycle and versioning – Security Aspects
  • 46. Copyright © 2016, Oracle and/or its affiliates. All rights reserved. 46 Operational's Requirements • 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
  • 47. Copyright © 2016, Oracle and/or its affiliates. All rights reserved. 47 Other Aspects • Support Access Constraints and Views • No accidental logging of secrets • Dynamic changes • Configuration Validation
  • 48. Copyright © 2016, Oracle and/or its affiliates. All rights reserved. 48 API Requirements • 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)
  • 49. Copyright © 2016, Oracle and/or its affiliates. All rights reserved. 49 Existing Mechanisms • Environment Properties • System Properties • CLI arguments • Properties, xml-Properties
  • 50. Copyright © 2016, Oracle and/or its affiliates. All rights reserved. 50 Dependencies - API & Core <dependency> <groupId>org.apache.tamaya</groupId> <artifactId>tamaya-api</artifactId> <version>0.3-incubating-SNAPSHOT</version> </dependency> <dependency> <groupId>org.apache.tamaya</groupId> <artifactId>tamaya-core</artifactId> <version>0.3-incubating-SNAPSHOT</version> </dependency>
  • 51. Copyright © 2016, Oracle and/or its affiliates. All rights reserved. 51 Programmatic API 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);
  • 52. Copyright © 2016, Oracle and/or its affiliates. All rights reserved. 52 Dependencies – Injection SE <dependency> <groupId>org.apache.tamaya.ext</groupId> <artifactId>tamaya-injection-api</artifactId> <version>0.3-incubating-SNAPSHOT</version> </dependency> <dependency> <groupId>org.apache.tamaya.ext</groupId> <artifactId>tamaya-injection</artifactId> <version>0.3-incubating-SNAPSHOT</version> </dependency>
  • 53. Copyright © 2016, Oracle and/or its affiliates. All rights reserved. 53 Dependencies – Injection SE @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);
  • 54. Copyright © 2016, Oracle and/or its affiliates. All rights reserved. 54 Configuration Backends • 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
  • 55. Copyright © 2016, Oracle and/or its affiliates. All rights reserved. 55 PropertySource 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(); ... }
  • 56. Copyright © 2016, Oracle and/or its affiliates. All rights reserved. 56 Predefined Property Sources • System & Environment Properties • (CLI Arguments) • Files – ${configDir}/*.properties • Classpath Resources – /META-INF/javaconfiguration.properties
  • 57. Copyright © 2016, Oracle and/or its affiliates. All rights reserved. 57 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
  • 58. Copyright © 2016, Oracle and/or its affiliates. All rights reserved. 58 PropertySource - Example 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; } }
  • 59. Copyright © 2016, Oracle and/or its affiliates. All rights reserved. 59 PropertySource - Registration • By default, register it using the java.util.ServiceLoader – → /META-INF/services/org.apache.tamaya.spi.PropertySource – MyPropertySource
  • 60. Copyright © 2016, Oracle and/or its affiliates. All rights reserved. 60 PropertySource 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. public interface PropertySourceProvider{ public Collection<PropertySource> getPropertySources(); }
  • 61. Copyright © 2016, Oracle and/or its affiliates. All rights reserved. 61 More SPI artifacts • 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)
  • 62. Copyright © 2016, Oracle and/or its affiliates. All rights reserved. Q & A 62